Skip to content
Snippets Groups Projects
Babel Test.ipynb 12 KiB
Newer Older
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": [
paulrr2's avatar
paulrr2 committed
    "overlay=Overlay('babel_overlay_test.bit')"
Paul Reckamp's avatar
Paul Reckamp committed
   ]
  },
  {
   "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
}