Skip to content
Snippets Groups Projects
Babel Test.ipynb 12.1 KiB
Newer Older
  • Learn to ignore specific revisions
  • Paul Reckamp's avatar
    Paul Reckamp committed
    {
     "cells": [
      {
       "cell_type": "code",
       "execution_count": 129,
       "metadata": {},
       "outputs": [],
       "source": [
        "from pynq import Overlay\n",
        "from pynq import DefaultHierarchy\n",
        "import pynq.lib.dma\n",
        "from pynq import allocate\n",
        "import numpy as np\n",
        "from kamene.all import *\n"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": 130,
       "metadata": {},
       "outputs": [],
       "source": [
        "overlay=BabelOverlay('babel_overlay_test.bit')"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": 131,
       "metadata": {
        "scrolled": true
       },
       "outputs": [
        {
         "data": {
          "text/plain": [
           "dict_keys(['UDP/udp_meta', 'UDP/udp_data', 'network_stack/ethernet_dma', 'axi_dma_0', 'UDP/udp_stack/ipv4_0', 'UDP/udp_stack/udp_0', 'network_stack/arp_server_subnet_0', 'network_stack/ip_handler_0', 'network_stack/mac_ip_encode_0', 'processing_system7_0'])"
          ]
         },
         "execution_count": 131,
         "metadata": {},
         "output_type": "execute_result"
        }
       ],
       "source": [
        "overlay.ip_dict.keys()"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": 132,
       "metadata": {},
       "outputs": [],
       "source": [
        "overlay.download()"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": 133,
       "metadata": {},
       "outputs": [],
       "source": []
      },
      {
       "cell_type": "code",
       "execution_count": 90,
       "metadata": {},
       "outputs": [],
       "source": [
        "udp_meta = overlay.UDP.udp_meta\n",
        "udp_data = overlay.UDP.udp_data\n",
        "ethernet = overlay.network_stack.ethernet_dma\n",
        "overlay.UDP.udp_stack.ipv4_0.local_ipv4_address_V = 0xDEADBEEF\n",
        "overlay.UDP.udp_stack.protocol_V = 0x11\n",
        "overlay.UDP.udp_stack.udp_0.reg_ip_address_V_1 = 0xDEADBEEF\n",
        "overlay.UDP.udp_stack.udp_0.reg_ip_address_V_2 = 0xDEADBEEF\n",
        "overlay.UDP.udp_stack.udp_0.reg_ip_address_V_3 = 0xDEADBEEF\n",
        "overlay.UDP.udp_stack.udp_0.reg_ip_address_V_4 = 0xDEADBEEF\n",
        "overlay.UDP.udp_stack.udp_0.reg_listen_port_V = 54001\n",
        "overlay.network_stack.arp_server_subnet_0.myMacAddress_V_1 = 0xEEEEEEEE\n",
        "overlay.network_stack.arp_server_subnet_0.myMacAddress_V_2 = 0xEEEEEEEE\n",
        "overlay.network_stack.arp_server_subnet_0.myIpAddress_V = 0xDEADBEEF\n",
        "overlay.network_stack.ip_handler_0.myIpAddress_V = 0xDEADBEEF\n",
        "overlay.network_stack.mac_ip_encode_0.myMacAddress_V_1 = 0xEEEEEEEE\n",
        "overlay.network_stack.mac_ip_encode_0.myMacAddress_V_2 = 0xEEEEEEEE\n",
        "overlay.network_stack.mac_ip_encode_0.regSubNetMask_V= 0x00FFFFFF\n",
        "overlay.network_stack.mac_ip_encode_0.regDefaultGateway_V= 0xDEADBEEF"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": 91,
       "metadata": {},
       "outputs": [],
       "source": [
        "udp_data_buffer_out = allocate(shape=(1), dtype=np.uint64)\n",
        "udp_metadata_buffer_out = allocate(shape=(32), dtype=np.uint8)\n",
        "udp_data_buffer_in = allocate(shape=(1), dtype=np.uint64)\n",
        "udp_metadata_buffer_in = allocate(shape=(4), dtype=np.uint64)\n",
        "raw_packet_in = allocate(shape=(128), dtype=np.uint8)\n",
        "raw_packet_out = allocate(shape=(128), dtype=np.uint8)"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": 92,
       "metadata": {},
       "outputs": [],
       "source": [
        "udp_data_buffer_out[0] = 0xDEADBEEFDEADBEEF\n",
        "for i in range(32):\n",
        "    udp_metadata_buffer_out[i] = 0xac"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": 134,
       "metadata": {},
       "outputs": [],
       "source": [
        "udp_meta.recvchannel.start()\n",
        "udp_meta.sendchannel.start()\n",
        "udp_data.recvchannel.start()\n",
        "udp_data.sendchannel.start()\n",
        "ethernet.recvchannel.start()\n",
        "ethernet.sendchannel.start()"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": 94,
       "metadata": {},
       "outputs": [],
       "source": [
        "udp_meta.sendchannel.transfer(udp_metadata_buffer_out)\n",
        "udp_data.sendchannel.transfer(udp_data_buffer_out)\n",
        "udp_meta.sendchannel.wait()\n",
        "udp_data.sendchannel.wait()"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": 135,
       "metadata": {},
       "outputs": [],
       "source": [
        "ethernet.recvchannel.transfer(raw_packet_in)\n",
        "ethernet.recvchannel.wait()"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": 136,
       "metadata": {
        "scrolled": true
       },
       "outputs": [
        {
         "name": "stdout",
         "output_type": "stream",
         "text": [
          "ff ff ff ff ff ff 00 00 00 00 00 00 08 06 00 01 08 00 06 04 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 "
         ]
        }
       ],
       "source": [
        "for item in raw_packet_in:\n",
        "    print('{:02x}'.format(item), end=\" \")\n"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": 97,
       "metadata": {},
       "outputs": [
        {
         "name": "stdout",
         "output_type": "stream",
         "text": [
          "ee ee ee ee ee ee 00 05 6b 01 1a cb 08 00 45 00 00 1c 00 01 00 00 40 11 1b c2 c0 a8 00 c9 de ad be ef 00 35 d2 f1 00 08 cd a8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 "
         ]
        },
        {
         "ename": "KeyboardInterrupt",
         "evalue": "",
         "output_type": "error",
         "traceback": [
          "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
          "\u001b[0;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)",
          "\u001b[0;32m<ipython-input-97-2db318aa1f6d>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m     10\u001b[0m \u001b[0mudp_data\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrecvchannel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtransfer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mudp_data_buffer_in\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     11\u001b[0m \u001b[0methernet\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msendchannel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwait\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 12\u001b[0;31m \u001b[0mudp_meta\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrecvchannel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwait\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     13\u001b[0m \u001b[0mudp_data\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrecvchannel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwait\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
          "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/pynq/lib/dma.py\u001b[0m in \u001b[0;36mwait\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m    206\u001b[0m         \u001b[0;32mwhile\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    207\u001b[0m             \u001b[0merror\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_mmio\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_offset\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m4\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 208\u001b[0;31m             \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0merror\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    209\u001b[0m                 \u001b[0;32mif\u001b[0m \u001b[0merror\u001b[0m \u001b[0;34m&\u001b[0m \u001b[0;36m0x10\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    210\u001b[0m                     raise RuntimeError(\n",
          "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/pynq/lib/dma.py\u001b[0m in \u001b[0;36merror\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m    115\u001b[0m         \"\"\"True if DMA engine is in an error state\n\u001b[1;32m    116\u001b[0m         \"\"\"\n\u001b[0;32m--> 117\u001b[0;31m         \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_mmio\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_offset\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m4\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m&\u001b[0m \u001b[0;36m0x70\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0;36m0x0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    118\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    119\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0mstart\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
          "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/pynq/mmio.py\u001b[0m in \u001b[0;36mread\u001b[0;34m(self, offset, length, word_order)\u001b[0m\n\u001b[1;32m    146\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    147\u001b[0m         \u001b[0;31m# Read data out\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 148\u001b[0;31m         \u001b[0mlsb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0midx\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    149\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mlength\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m8\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    150\u001b[0m             \u001b[0;32mif\u001b[0m \u001b[0mword_order\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'little'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
          "\u001b[0;31mKeyboardInterrupt\u001b[0m: "
         ]
        }
       ],
       "source": [
        "packet = Ether(dst='ee:ee:ee:ee:ee:ee')/IP(dst=\"222.173.190.239\")/UDP(dport=54001)\n",
        "i = 0\n",
        "for b in bytes(packet):\n",
        "    raw_packet_out[i] = b\n",
        "    i+=1\n",
        "for item in raw_packet_out:\n",
        "    print('{:02x}'.format(item), end=\" \")\n",
        "ethernet.sendchannel.transfer(raw_packet_out)\n",
        "udp_meta.recvchannel.transfer(udp_metadata_buffer_in)\n",
        "udp_data.recvchannel.transfer(udp_data_buffer_in)\n",
        "ethernet.sendchannel.wait()\n",
        "udp_meta.recvchannel.wait()\n",
        "udp_data.recvchannel.wait()"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": 98,
       "metadata": {},
       "outputs": [
        {
         "name": "stdout",
         "output_type": "stream",
         "text": [
          "0 0 0 0 0 "
         ]
        }
       ],
       "source": [
        "for item in udp_data_buffer_in:\n",
        "    print('{:x}'.format(item), end=\" \")\n",
        "for item in udp_metadata_buffer_in:\n",
        "    print('{:x}'.format(item), end=\" \")"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": null,
       "metadata": {},
       "outputs": [],
       "source": [
        "udp_meta.recvchannel.stop()\n",
        "udp_meta.sendchannel.stop()\n",
        "udp_data.recvchannel.stop()\n",
        "udp_data.sendchannel.stop()\n",
        "ethernet.recvchannel.stop()\n",
        "ethernet.sendchannel.stop()"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": null,
       "metadata": {},
       "outputs": [],
       "source": []
      },
      {
       "cell_type": "code",
       "execution_count": null,
       "metadata": {},
       "outputs": [],
       "source": []
      },
      {
       "cell_type": "code",
       "execution_count": null,
       "metadata": {},
       "outputs": [],
       "source": []
      }
     ],
     "metadata": {
      "kernelspec": {
       "display_name": "Python 3",
       "language": "python",
       "name": "python3"
      },
      "language_info": {
       "codemirror_mode": {
        "name": "ipython",
        "version": 3
       },
       "file_extension": ".py",
       "mimetype": "text/x-python",
       "name": "python",
       "nbconvert_exporter": "python",
       "pygments_lexer": "ipython3",
       "version": "3.6.5"
      }
     },
     "nbformat": 4,
     "nbformat_minor": 2
    }