From 0cc71e48bf75625038be9e66bb87005031c2bb9f Mon Sep 17 00:00:00 2001 From: surangamh Date: Wed, 15 Mar 2023 21:30:34 -0400 Subject: [PATCH] fixed dual port bug --- config_files/connectivity_if3.ini | 8 +- host/host_receiver_if3.cpp | 173 +++++++++++++++-------------- host/host_sender_if3.cpp | 174 +++++++++++++++--------------- 3 files changed, 176 insertions(+), 179 deletions(-) diff --git a/config_files/connectivity_if3.ini b/config_files/connectivity_if3.ini index 97d9d17..605c97a 100755 --- a/config_files/connectivity_if3.ini +++ b/config_files/connectivity_if3.ini @@ -9,10 +9,10 @@ slr=cmac_0:SLR2 slr=cmac_1:SLR2 slr=networklayer_0:SLR2 slr=networklayer_1:SLR2 -slr=txkrnl_0:SLR2 -slr=txkrnl_1:SLR2 -slr=rxkrnl_0:SLR2 -slr=rxkrnl_1:SLR2 +slr=txkrnl_0:SLR1 +slr=txkrnl_1:SLR0 +slr=rxkrnl_0:SLR1 +slr=rxkrnl_1:SLR0 #Connect Network Layer to CMAC DO NOT CHANGE stream_connect=cmac_0.M_AXIS:networklayer_0.S_AXIS_eth2nl diff --git a/host/host_receiver_if3.cpp b/host/host_receiver_if3.cpp index 3aedbc4..8006e8e 100644 --- a/host/host_receiver_if3.cpp +++ b/host/host_receiver_if3.cpp @@ -52,15 +52,18 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define MY_IP_ADDR1 0xC0A80104 #define THEIR_IP_ADDR1 0xC0A80103 #define IP_GATEWAY 0xC0A801FF -#define ARP_DISCOVERY 0x3010 -#define ARP_IP_ADDR_OFFSET 0x3400 -#define ARP_MAC_ADDR_OFFSET 0x3800 -#define ARP_VALID_OFFSET 0x3100 +#define ARP_DISCOVERY 0x1010 +#define ARP_IP_ADDR_OFFSET 0x1400 +#define ARP_MAC_ADDR_OFFSET 0x1800 +#define ARP_VALID_OFFSET 0x1100 #define IP_ADDR_OFFSET 0x0018 #define IP_GATEWAY_OFFSET 0x001C #define MAC_ADDR_OFFSET 0x0010 -#define NUM_SOCKETS_HW 0x2210 -#define UDP_OFFSET 0x2000 +#define NUM_SOCKETS_HW 0x0A10 +#define UDP_TI_OFFSET 0x0810 +#define UDP_TP_OFFSET 0x0890 +#define UDP_MP_OFFSET 0x0910 +#define UDP_V_OFFSET 0x0990 typedef struct { uint32_t theirIP; @@ -87,14 +90,14 @@ int main(int argc, char **argv) { cl_uint num_platforms; cl_uint deviceCount; cl_platform_id *platform_id; - cl_device_id device_id[2]; - cl_program program[2]; - cl_context context[2]; + cl_device_id device_id; + cl_program program; + cl_context context; cl_command_queue q[2]; cl_int binaryStatus; - xclDeviceHandle handle[2]; + xclDeviceHandle handle; xuid_t xclbinId; - cl_kernel nl[2]; + cl_kernel nl; cl_kernel cmac[2]; cl_kernel ul[2]; cl_uint nlidx[2]; @@ -152,36 +155,32 @@ int main(int argc, char **argv) { } // Get characteristics for each platform for (uint i = 0; i < num_platforms; i++){ - err = clGetDeviceIDs(platform_id[i], CL_DEVICE_TYPE_ALL, 1, &device_id[0], &deviceCount); - err = clGetDeviceIDs(platform_id[i], CL_DEVICE_TYPE_ALL, 1, &device_id[1], &deviceCount); + err = clGetDeviceIDs(platform_id[i], CL_DEVICE_TYPE_ALL, 1, &device_id, &deviceCount); if (err != CL_SUCCESS) { printf("Error: clGetDeviceIDs failed!\n"); return EXIT_FAILURE; } - context[0] = clCreateContext(0, 1, &device_id[0], NULL, NULL, &err); - context[1] = clCreateContext(0, 1, &device_id[1], NULL, NULL, &err); - q[0] = clCreateCommandQueue(context[0], device_id[0], CL_QUEUE_PROFILING_ENABLE, &err); - q[1] = clCreateCommandQueue(context[1], device_id[1], CL_QUEUE_PROFILING_ENABLE, &err); + context = clCreateContext(0, 1, &device_id, NULL, NULL, &err); + q[0] = clCreateCommandQueue(context, device_id, CL_QUEUE_PROFILING_ENABLE, &err); + q[1] = clCreateCommandQueue(context, device_id, CL_QUEUE_PROFILING_ENABLE, &err); printf("Device count %d\n",deviceCount); int size=load_file_to_memory(xclbinFilename, (char **) &kernelBinary); printf("xclbin size: %d\n",size); size_t size_var = size; - if (!(program[0] = clCreateProgramWithBinary(context[0], 1, &device_id[0], &size_var, (const unsigned char **) &kernelBinary, &binaryStatus, &err))) return EXIT_FAILURE; - if (!(program[1] = clCreateProgramWithBinary(context[1], 1, &device_id[1], &size_var, (const unsigned char **) &kernelBinary, &binaryStatus, &err))) return EXIT_FAILURE; + if (!(program = clCreateProgramWithBinary(context, 1, &device_id, &size_var, (const unsigned char **) &kernelBinary, &binaryStatus, &err))) return EXIT_FAILURE; } - cmac[0] = clCreateKernel(program[0], "cmac_0", &err); - cmac[1] = clCreateKernel(program[1], "cmac_1", &err); - nl[0] = clCreateKernel(program[0], "networklayer",&err); - nl[1] = clCreateKernel(program[1], "networklayer",&err); + cmac[0] = clCreateKernel(program, "cmac_0", &err); + cmac[1] = clCreateKernel(program, "cmac_1", &err); + nl = clCreateKernel(program, "networklayer",&err); xclGetComputeUnitInfo(cmac[0], 0, XCL_COMPUTE_UNIT_INDEX, sizeof(cmacidx[0]), &cmacidx[0], NULL); xclGetComputeUnitInfo(cmac[1], 0, XCL_COMPUTE_UNIT_INDEX, sizeof(cmacidx[1]), &cmacidx[1], NULL); - xclGetComputeUnitInfo(nl[0], 0, XCL_COMPUTE_UNIT_INDEX, sizeof(nlidx[0]), &nlidx[0], NULL); - xclGetComputeUnitInfo(nl[1], 0, XCL_COMPUTE_UNIT_INDEX, sizeof(nlidx[1]), &nlidx[1], NULL); - clGetDeviceInfo(device_id[0], CL_DEVICE_HANDLE, sizeof(handle[0]), &handle[0], NULL); - clGetDeviceInfo(device_id[1], CL_DEVICE_HANDLE, sizeof(handle[1]), &handle[1], NULL); + xclGetComputeUnitInfo(nl, 0, XCL_COMPUTE_UNIT_INDEX, sizeof(nlidx[0]), &nlidx[0], NULL); + xclGetComputeUnitInfo(nl, 1, XCL_COMPUTE_UNIT_INDEX, sizeof(nlidx[1]), &nlidx[1], NULL); + clGetDeviceInfo(device_id, CL_DEVICE_HANDLE, sizeof(handle), &handle, NULL); + clGetDeviceInfo(device_id, CL_DEVICE_HANDLE, sizeof(handle), &handle, NULL); std::ifstream bin_file(xclbinFilename, std::ifstream::binary); bin_file.seekg (0, bin_file.end); @@ -201,15 +200,15 @@ int main(int argc, char **argv) { * ############################################################ */ - xclOpenContext(handle[0], xclbinId, nlidx[0], false); + xclOpenContext(handle, xclbinId, nlidx[0], false); unsigned int my_ip_address0 = argc>=7 ? (unsigned int)strtol(argv[6], NULL, 16) : (unsigned int)MY_IP_ADDR0; unsigned int their_ip_address0 = argc>=9 ? (unsigned int)strtol(argv[8], NULL, 16) : (unsigned int)THEIR_IP_ADDR0; long mac_address0 = (0xf0f1f2f3f4f5 & 0xFFFFFFFFFF0) + (my_ip_address0 & 0xF); - xclRegWrite(handle[0], nlidx[0], MAC_ADDR_OFFSET, mac_address0); - xclRegWrite(handle[0], nlidx[0], MAC_ADDR_OFFSET + 4, mac_address0 >> 32); - xclRegWrite(handle[0], nlidx[0], IP_ADDR_OFFSET, my_ip_address0); - xclRegWrite(handle[0], nlidx[0], IP_GATEWAY_OFFSET, ip_gateway); + xclRegWrite(handle, nlidx[0], MAC_ADDR_OFFSET, mac_address0); + xclRegWrite(handle, nlidx[0], MAC_ADDR_OFFSET + 4, mac_address0 >> 32); + xclRegWrite(handle, nlidx[0], IP_ADDR_OFFSET, my_ip_address0); + xclRegWrite(handle, nlidx[0], IP_GATEWAY_OFFSET, ip_gateway); sockets[0][0].theirIP = their_ip_address0; sockets[0][0].theirPort = 50000; @@ -221,54 +220,54 @@ int main(int argc, char **argv) { printf("Their IP address 0: %x\n", their_ip_address0); printf("My MAC address 0: %lx\n", mac_address0); - xclRegRead(handle[0], nlidx[0], NUM_SOCKETS_HW, &num_sockets_hw); + xclRegRead(handle, nlidx[0], NUM_SOCKETS_HW, &num_sockets_hw); printf("Number of sockets HW: %d\n", num_sockets_hw); if (num_sockets_hw != num_sockets_sw) { printf("HW Socket list for device [0] should be [%d], is [%d]\n", num_sockets_sw, num_sockets_hw); fflush(stdout); - xclCloseContext(handle[0], xclbinId, nlidx[0]); + xclCloseContext(handle, xclbinId, nlidx[0]); return 1; } for (unsigned int i = 0; i < num_sockets_hw; i++) { - uint32_t TI_OFFSET = 0x10 + i * 8; - uint32_t TP_OFFSET = TI_OFFSET + 16 * 8; - uint32_t MP_OFFSET = TI_OFFSET + 16 * 8 * 2; - uint32_t V_OFFSET = TI_OFFSET + 16 * 8 * 3; - - xclRegWrite(handle[0], nlidx[0], UDP_OFFSET + TI_OFFSET, sockets[i][0].theirIP); - xclRegWrite(handle[0], nlidx[0], UDP_OFFSET + TP_OFFSET, sockets[i][0].theirPort); - xclRegWrite(handle[0], nlidx[0], UDP_OFFSET + MP_OFFSET, sockets[i][0].myPort); - xclRegWrite(handle[0], nlidx[0], UDP_OFFSET + V_OFFSET, sockets[i][0].valid); + uint32_t TI_OFFSET = UDP_TI_OFFSET + i * 8; + uint32_t TP_OFFSET = UDP_TP_OFFSET + i * 8; + uint32_t MP_OFFSET = UDP_MP_OFFSET + i * 8; + uint32_t V_OFFSET = UDP_V_OFFSET + i * 8; + + xclRegWrite(handle, nlidx[0], TI_OFFSET, sockets[i][0].theirIP); + xclRegWrite(handle, nlidx[0], TP_OFFSET, sockets[i][0].theirPort); + xclRegWrite(handle, nlidx[0], MP_OFFSET, sockets[i][0].myPort); + xclRegWrite(handle, nlidx[0], V_OFFSET, sockets[i][0].valid); } for(int i = 0; i < 256; i++) { - xclRegWrite(handle[0], nlidx[0], ARP_VALID_OFFSET + (i / 4) * 4, 0); + xclRegWrite(handle, nlidx[0], ARP_VALID_OFFSET + (i / 4) * 4, 0); } - xclRegWrite(handle[0], nlidx[0], ARP_DISCOVERY, 0); - xclRegWrite(handle[0], nlidx[0], ARP_DISCOVERY, 1); - xclRegWrite(handle[0], nlidx[0], ARP_DISCOVERY, 0); + xclRegWrite(handle, nlidx[0], ARP_DISCOVERY, 0); + xclRegWrite(handle, nlidx[0], ARP_DISCOVERY, 1); + xclRegWrite(handle, nlidx[0], ARP_DISCOVERY, 0); //ARP for (int i = 0; i < 256; i++) { unsigned valid_entry; - xclRegRead(handle[0], nlidx[0], ARP_VALID_OFFSET + (i / 4) * 4, &valid_entry); + xclRegRead(handle, nlidx[0], ARP_VALID_OFFSET + (i / 4) * 4, &valid_entry); valid_entry = (valid_entry >> ((i % 4) * 8)) & 0x1; if (valid_entry){ printf("Device 0: ARP valid entry found at %d\n", i); } } - xclCloseContext(handle[0], xclbinId, nlidx[0]); - xclOpenContext(handle[0], xclbinId, cmacidx[0], false); + xclCloseContext(handle, xclbinId, nlidx[0]); + xclOpenContext(handle, xclbinId, cmacidx[0], false); unsigned tx_status0 = 0; unsigned rx_status0 = 0; - xclRegRead(handle[0], cmacidx[0], 0x0200, &tx_status0); - xclRegRead(handle[0], cmacidx[0], 0x0200, &tx_status0); - xclRegRead(handle[0], cmacidx[0], 0x0204, &rx_status0); - xclRegRead(handle[0], cmacidx[0], 0x0204, &rx_status0); - xclCloseContext(handle[0], xclbinId, cmacidx[0]); + xclRegRead(handle, cmacidx[0], 0x0200, &tx_status0); + xclRegRead(handle, cmacidx[0], 0x0200, &tx_status0); + xclRegRead(handle, cmacidx[0], 0x0204, &rx_status0); + xclRegRead(handle, cmacidx[0], 0x0204, &rx_status0); + xclCloseContext(handle, xclbinId, cmacidx[0]); printf("Device 0: TX status %d\n", tx_status0); printf("Device 0: RX status %d\n", rx_status0); @@ -286,15 +285,15 @@ int main(int argc, char **argv) { * ############################################################ */ - xclOpenContext(handle[1], xclbinId, nlidx[1], false); + xclOpenContext(handle, xclbinId, nlidx[1], false); unsigned int my_ip_address1 = argc>=8 ? (unsigned int)strtol(argv[7], NULL, 16) : (unsigned int)MY_IP_ADDR1; unsigned int their_ip_address1 = argc>=10 ? (unsigned int)strtol(argv[9], NULL, 16) : (unsigned int)THEIR_IP_ADDR1; long mac_address1 = (0xf0f1f2f3f4f5 & 0xFFFFFFFFFF0) + (my_ip_address1 & 0xF); - xclRegWrite(handle[1], nlidx[1], MAC_ADDR_OFFSET, mac_address1); - xclRegWrite(handle[1], nlidx[1], MAC_ADDR_OFFSET + 4, mac_address1 >> 32); - xclRegWrite(handle[1], nlidx[1], IP_ADDR_OFFSET, my_ip_address1); - xclRegWrite(handle[1], nlidx[1], IP_GATEWAY_OFFSET, ip_gateway); + xclRegWrite(handle, nlidx[1], MAC_ADDR_OFFSET, mac_address1); + xclRegWrite(handle, nlidx[1], MAC_ADDR_OFFSET + 4, mac_address1 >> 32); + xclRegWrite(handle, nlidx[1], IP_ADDR_OFFSET, my_ip_address1); + xclRegWrite(handle, nlidx[1], IP_GATEWAY_OFFSET, ip_gateway); sockets[0][1].theirIP = their_ip_address1; sockets[0][1].theirPort = 50000; @@ -306,54 +305,54 @@ int main(int argc, char **argv) { printf("Their IP address 1: %x\n", their_ip_address1); printf("My MAC address 1: %lx\n", mac_address1); - xclRegRead(handle[1], nlidx[1], NUM_SOCKETS_HW, &num_sockets_hw); + xclRegRead(handle, nlidx[1], NUM_SOCKETS_HW, &num_sockets_hw); printf("Number of sockets HW: %d\n", num_sockets_hw); if (num_sockets_hw != num_sockets_sw) { printf("HW Socket list for device [0] should be [%d], is [%d]\n", num_sockets_sw, num_sockets_hw); fflush(stdout); - xclCloseContext(handle[1], xclbinId, nlidx[1]); + xclCloseContext(handle, xclbinId, nlidx[1]); return 1; } for (unsigned int i = 0; i < num_sockets_hw; i++) { - uint32_t TI_OFFSET = 0x10 + i * 8; - uint32_t TP_OFFSET = TI_OFFSET + 16 * 8; - uint32_t MP_OFFSET = TI_OFFSET + 16 * 8 * 2; - uint32_t V_OFFSET = TI_OFFSET + 16 * 8 * 3; - - xclRegWrite(handle[1], nlidx[1], UDP_OFFSET + TI_OFFSET, sockets[i][1].theirIP); - xclRegWrite(handle[1], nlidx[1], UDP_OFFSET + TP_OFFSET, sockets[i][1].theirPort); - xclRegWrite(handle[1], nlidx[1], UDP_OFFSET + MP_OFFSET, sockets[i][1].myPort); - xclRegWrite(handle[1], nlidx[1], UDP_OFFSET + V_OFFSET, sockets[i][1].valid); + uint32_t TI_OFFSET = UDP_TI_OFFSET + i * 8; + uint32_t TP_OFFSET = UDP_TP_OFFSET + i * 8; + uint32_t MP_OFFSET = UDP_MP_OFFSET + i * 8; + uint32_t V_OFFSET = UDP_V_OFFSET + i * 8; + + xclRegWrite(handle, nlidx[1], TI_OFFSET, sockets[i][1].theirIP); + xclRegWrite(handle, nlidx[1], TP_OFFSET, sockets[i][1].theirPort); + xclRegWrite(handle, nlidx[1], MP_OFFSET, sockets[i][1].myPort); + xclRegWrite(handle, nlidx[1], V_OFFSET, sockets[i][1].valid); } for(int i = 0; i < 256; i++) { - xclRegWrite(handle[1], nlidx[1], ARP_VALID_OFFSET + (i / 4) * 4, 0); + xclRegWrite(handle, nlidx[1], ARP_VALID_OFFSET + (i / 4) * 4, 0); } - xclRegWrite(handle[1], nlidx[1], ARP_DISCOVERY, 0); - xclRegWrite(handle[1], nlidx[1], ARP_DISCOVERY, 1); - xclRegWrite(handle[1], nlidx[1], ARP_DISCOVERY, 0); + xclRegWrite(handle, nlidx[1], ARP_DISCOVERY, 0); + xclRegWrite(handle, nlidx[1], ARP_DISCOVERY, 1); + xclRegWrite(handle, nlidx[1], ARP_DISCOVERY, 0); //ARP for (int i = 0; i < 256; i++) { unsigned valid_entry; - xclRegRead(handle[1], nlidx[1], ARP_VALID_OFFSET + (i / 4) * 4, &valid_entry); + xclRegRead(handle, nlidx[1], ARP_VALID_OFFSET + (i / 4) * 4, &valid_entry); valid_entry = (valid_entry >> ((i % 4) * 8)) & 0x1; if (valid_entry){ printf("Device 1: ARP valid entry found at %d\n", i); } } - xclCloseContext(handle[1], xclbinId, nlidx[1]); - xclOpenContext(handle[1], xclbinId, cmacidx[1], false); + xclCloseContext(handle, xclbinId, nlidx[1]); + xclOpenContext(handle, xclbinId, cmacidx[1], false); unsigned tx_status1 = 0; unsigned rx_status1 = 0; - xclRegRead(handle[1], cmacidx[1], 0x0200, &tx_status1); - xclRegRead(handle[1], cmacidx[1], 0x0200, &tx_status1); - xclRegRead(handle[1], cmacidx[1], 0x0204, &rx_status1); - xclRegRead(handle[1], cmacidx[1], 0x0204, &rx_status1); - xclCloseContext(handle[1], xclbinId, cmacidx[1]); + xclRegRead(handle, cmacidx[1], 0x0200, &tx_status1); + xclRegRead(handle, cmacidx[1], 0x0200, &tx_status1); + xclRegRead(handle, cmacidx[1], 0x0204, &rx_status1); + xclRegRead(handle, cmacidx[1], 0x0204, &rx_status1); + xclCloseContext(handle, xclbinId, cmacidx[1]); printf("Device 1: TX status %d\n", tx_status1); printf("Device 1: RX status %d\n", rx_status1); @@ -366,9 +365,9 @@ int main(int argc, char **argv) { } // Device 0: User logic stuff - ul[0] = clCreateKernel(program[0], "rxkrnl", &err); + ul[0] = clCreateKernel(program, "rxkrnl:{rxkrnl_0}", &err); auto packet_size_bytes_0 = sizeof(uint8_t) * packet_size_total_0; - buffer_packetdata0 = clCreateBuffer(context[0], CL_MEM_WRITE_ONLY, packet_size_bytes_0, NULL, &err); + buffer_packetdata0 = clCreateBuffer(context, CL_MEM_WRITE_ONLY, packet_size_bytes_0, NULL, &err); cl_uint pst0 = (cl_uint)packet_size_bytes_0; clSetKernelArg(ul[0], 0, sizeof(cl_mem), &buffer_packetdata0); clSetKernelArg(ul[0], 2, sizeof(cl_uint), &pst0); @@ -386,9 +385,9 @@ int main(int argc, char **argv) { printf("Device 0: Message received.\n"); // Device 1: User logic stuff - ul[1] = clCreateKernel(program[1], "rxkrnl", &err); + ul[1] = clCreateKernel(program, "rxkrnl:{rxkrnl_1}", &err); auto packet_size_bytes_1 = sizeof(uint8_t) * packet_size_total_1; - buffer_packetdata1 = clCreateBuffer(context[1], CL_MEM_WRITE_ONLY, packet_size_bytes_1, NULL, &err); + buffer_packetdata1 = clCreateBuffer(context, CL_MEM_WRITE_ONLY, packet_size_bytes_1, NULL, &err); cl_uint pst1 = (cl_uint)packet_size_bytes_1; clSetKernelArg(ul[1], 0, sizeof(cl_mem), &buffer_packetdata1); clSetKernelArg(ul[1], 2, sizeof(cl_uint), &pst1); diff --git a/host/host_sender_if3.cpp b/host/host_sender_if3.cpp index f7d8b77..28fc605 100644 --- a/host/host_sender_if3.cpp +++ b/host/host_sender_if3.cpp @@ -52,15 +52,18 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define MY_IP_ADDR1 0xC0A80103 #define THEIR_IP_ADDR1 0xC0A80104 #define IP_GATEWAY 0xC0A801FF -#define ARP_DISCOVERY 0x3010 -#define ARP_IP_ADDR_OFFSET 0x3400 -#define ARP_MAC_ADDR_OFFSET 0x3800 -#define ARP_VALID_OFFSET 0x3100 +#define ARP_DISCOVERY 0x1010 +#define ARP_IP_ADDR_OFFSET 0x1400 +#define ARP_MAC_ADDR_OFFSET 0x1800 +#define ARP_VALID_OFFSET 0x1100 #define IP_ADDR_OFFSET 0x0018 -#define GATEWAY_OFFSET 0x001C +#define IP_GATEWAY_OFFSET 0x001C #define MAC_ADDR_OFFSET 0x0010 -#define NUM_SOCKETS_HW 0x2210 -#define UDP_OFFSET 0x2000 +#define NUM_SOCKETS_HW 0x0A10 +#define UDP_TI_OFFSET 0x0810 +#define UDP_TP_OFFSET 0x0890 +#define UDP_MP_OFFSET 0x0910 +#define UDP_V_OFFSET 0x0990 typedef struct { uint32_t theirIP; @@ -87,14 +90,14 @@ int main(int argc, char **argv) { cl_uint num_platforms; cl_uint deviceCount; cl_platform_id *platform_id; - cl_device_id device_id[2]; - cl_program program[2]; - cl_context context[2]; + cl_device_id device_id; + cl_program program; + cl_context context; cl_command_queue q[2]; cl_int binaryStatus; - xclDeviceHandle handle[2]; + xclDeviceHandle handle; xuid_t xclbinId; - cl_kernel nl[2]; + cl_kernel nl; cl_kernel cmac[2]; cl_kernel ul[2]; cl_uint nlidx[2]; @@ -150,34 +153,29 @@ int main(int argc, char **argv) { } // Get characteristics for each platform for (uint i = 0; i < num_platforms; i++){ - err = clGetDeviceIDs(platform_id[i], CL_DEVICE_TYPE_ALL, 1, &device_id[0], &deviceCount); - err = clGetDeviceIDs(platform_id[i], CL_DEVICE_TYPE_ALL, 1, &device_id[1], &deviceCount); + err = clGetDeviceIDs(platform_id[i], CL_DEVICE_TYPE_ALL, 1, &device_id, &deviceCount); if (err != CL_SUCCESS) { printf("Error: clGetDeviceIDs failed!\n"); return EXIT_FAILURE; } - context[0] = clCreateContext(0, 1, &device_id[0], NULL, NULL, &err); - context[1] = clCreateContext(0, 1, &device_id[1], NULL, NULL, &err); - q[0] = clCreateCommandQueue(context[0], device_id[0], CL_QUEUE_PROFILING_ENABLE, &err); - q[1] = clCreateCommandQueue(context[1], device_id[1], CL_QUEUE_PROFILING_ENABLE, &err); + context = clCreateContext(0, 1, &device_id, NULL, NULL, &err); + q[0] = clCreateCommandQueue(context, device_id, CL_QUEUE_PROFILING_ENABLE, &err); + q[1] = clCreateCommandQueue(context, device_id, CL_QUEUE_PROFILING_ENABLE, &err); printf("Device count %d\n",deviceCount); int size=load_file_to_memory(xclbinFilename, (char **) &kernelBinary); printf("xclbin size: %d\n",size); size_t size_var = size; - if (!(program[0] = clCreateProgramWithBinary(context[0], 1, &device_id[0], &size_var, (const unsigned char **) &kernelBinary, &binaryStatus, &err))) return EXIT_FAILURE; - if (!(program[1] = clCreateProgramWithBinary(context[1], 1, &device_id[1], &size_var, (const unsigned char **) &kernelBinary, &binaryStatus, &err))) return EXIT_FAILURE; + if (!(program = clCreateProgramWithBinary(context, 1, &device_id, &size_var, (const unsigned char **) &kernelBinary, &binaryStatus, &err))) return EXIT_FAILURE; } - cmac[0] = clCreateKernel(program[0], "cmac_0", &err); - cmac[1] = clCreateKernel(program[1], "cmac_1", &err); - nl[0] = clCreateKernel(program[0], "networklayer",&err); - nl[1] = clCreateKernel(program[1], "networklayer", &err); + cmac[0] = clCreateKernel(program, "cmac_0", &err); + cmac[1] = clCreateKernel(program, "cmac_1", &err); + nl = clCreateKernel(program, "networklayer",&err); xclGetComputeUnitInfo(cmac[0], 0, XCL_COMPUTE_UNIT_INDEX, sizeof(cmacidx[0]), &cmacidx[0], NULL); xclGetComputeUnitInfo(cmac[1], 0, XCL_COMPUTE_UNIT_INDEX, sizeof(cmacidx[1]), &cmacidx[1], NULL); - xclGetComputeUnitInfo(nl[0], 0, XCL_COMPUTE_UNIT_INDEX, sizeof(nlidx[0]), &nlidx[0], NULL); - xclGetComputeUnitInfo(nl[1], 0, XCL_COMPUTE_UNIT_INDEX, sizeof(nlidx[1]), &nlidx[1], NULL); - clGetDeviceInfo(device_id[0], CL_DEVICE_HANDLE, sizeof(handle[0]), &handle[0], NULL); - clGetDeviceInfo(device_id[1], CL_DEVICE_HANDLE, sizeof(handle[1]), &handle[1], NULL); + xclGetComputeUnitInfo(nl, 0, XCL_COMPUTE_UNIT_INDEX, sizeof(nlidx[0]), &nlidx[0], NULL); + xclGetComputeUnitInfo(nl, 1, XCL_COMPUTE_UNIT_INDEX, sizeof(nlidx[1]), &nlidx[1], NULL); + clGetDeviceInfo(device_id, CL_DEVICE_HANDLE, sizeof(handle), &handle, NULL); std::ifstream bin_file(xclbinFilename, std::ifstream::binary); bin_file.seekg (0, bin_file.end); @@ -198,15 +196,15 @@ int main(int argc, char **argv) { * ############################################################ */ - xclOpenContext(handle[0], xclbinId, nlidx[0], false); + xclOpenContext(handle, xclbinId, nlidx[0], false); unsigned int my_ip_address0 = argc>=7 ? (unsigned int)strtol(argv[6], NULL, 16) : (unsigned int)MY_IP_ADDR0; unsigned int their_ip_address0 = argc>=9 ? (unsigned int)strtol(argv[8], NULL, 16) : (unsigned int)THEIR_IP_ADDR0; long mac_address0 = (0xf0f1f2f3f4f5 & 0xFFFFFFFFFF0) + (my_ip_address0 & 0xF); - xclRegWrite(handle[0], nlidx[0], MAC_ADDR_OFFSET, mac_address0); - xclRegWrite(handle[0], nlidx[0], MAC_ADDR_OFFSET + 4, mac_address0 >> 32); - xclRegWrite(handle[0], nlidx[0], IP_ADDR_OFFSET, my_ip_address0); - xclRegWrite(handle[0], nlidx[0], GATEWAY_OFFSET, ip_gateway); + xclRegWrite(handle, nlidx[0], MAC_ADDR_OFFSET, mac_address0); + xclRegWrite(handle, nlidx[0], MAC_ADDR_OFFSET + 4, mac_address0 >> 32); + xclRegWrite(handle, nlidx[0], IP_ADDR_OFFSET, my_ip_address0); + xclRegWrite(handle, nlidx[0], IP_GATEWAY_OFFSET, ip_gateway); sockets[0][0].theirIP = their_ip_address0; @@ -219,53 +217,53 @@ int main(int argc, char **argv) { printf("Their IP address 0: %x\n", their_ip_address0); printf("My MAC address 0: %lx\n", mac_address0); - xclRegRead(handle[0], nlidx[0], NUM_SOCKETS_HW, &num_sockets_hw); + xclRegRead(handle, nlidx[0], NUM_SOCKETS_HW, &num_sockets_hw); printf("Number of sockets HW 0: %d\n", num_sockets_hw); if (num_sockets_hw != num_sockets_sw) { printf("HW Socket list for device [0] should be [%d], is [%d]\n", num_sockets_sw, num_sockets_hw); fflush(stdout); - xclCloseContext(handle[0], xclbinId, nlidx[0]); + xclCloseContext(handle, xclbinId, nlidx[0]); return 1; } for (unsigned int i = 0; i < num_sockets_hw; i++) { - uint32_t TI_OFFSET = 0x10 + i * 8; - uint32_t TP_OFFSET = TI_OFFSET + 16 * 8; - uint32_t MP_OFFSET = TI_OFFSET + 16 * 8 * 2; - uint32_t V_OFFSET = TI_OFFSET + 16 * 8 * 3; - - xclRegWrite(handle[0], nlidx[0], UDP_OFFSET + TI_OFFSET, sockets[i][0].theirIP); - xclRegWrite(handle[0], nlidx[0], UDP_OFFSET + TP_OFFSET, sockets[i][0].theirPort); - xclRegWrite(handle[0], nlidx[0], UDP_OFFSET + MP_OFFSET, sockets[i][0].myPort); - xclRegWrite(handle[0], nlidx[0], UDP_OFFSET + V_OFFSET, sockets[i][0].valid); + uint32_t TI_OFFSET = UDP_TI_OFFSET + i * 8; + uint32_t TP_OFFSET = UDP_TP_OFFSET + i * 8; + uint32_t MP_OFFSET = UDP_MP_OFFSET + i * 8; + uint32_t V_OFFSET = UDP_V_OFFSET + i * 8; + + xclRegWrite(handle, nlidx[0], TI_OFFSET, sockets[i][0].theirIP); + xclRegWrite(handle, nlidx[0], TP_OFFSET, sockets[i][0].theirPort); + xclRegWrite(handle, nlidx[0], MP_OFFSET, sockets[i][0].myPort); + xclRegWrite(handle, nlidx[0], V_OFFSET, sockets[i][0].valid); } for(int i = 0; i < 256; i++) { - xclRegWrite(handle[0], nlidx[0], ARP_VALID_OFFSET + (i / 4) * 4, 0); + xclRegWrite(handle, nlidx[0], ARP_VALID_OFFSET + (i / 4) * 4, 0); } - xclRegWrite(handle[0], nlidx[0], ARP_DISCOVERY, 0); - xclRegWrite(handle[0], nlidx[0], ARP_DISCOVERY, 1); - xclRegWrite(handle[0], nlidx[0], ARP_DISCOVERY, 0); + xclRegWrite(handle, nlidx[0], ARP_DISCOVERY, 0); + xclRegWrite(handle, nlidx[0], ARP_DISCOVERY, 1); + xclRegWrite(handle, nlidx[0], ARP_DISCOVERY, 0); //ARP for (int i = 0; i < 256; i++) { unsigned valid_entry; - xclRegRead(handle[0], nlidx[0], ARP_VALID_OFFSET + (i / 4) * 4, &valid_entry); + xclRegRead(handle, nlidx[0], ARP_VALID_OFFSET + (i / 4) * 4, &valid_entry); valid_entry = (valid_entry >> ((i % 4) * 8)) & 0x1; if (valid_entry){ printf("Device 0: ARP valid entry found at %d\n", i); } } - xclCloseContext(handle[0], xclbinId, nlidx[0]); - xclOpenContext(handle[0], xclbinId, cmacidx[0], false); + xclCloseContext(handle, xclbinId, nlidx[0]); + xclOpenContext(handle, xclbinId, cmacidx[0], false); unsigned tx_status0 = 0; unsigned rx_status0 = 0; - xclRegRead(handle[0], cmacidx[0], 0x0200, &tx_status0); - xclRegRead(handle[0], cmacidx[0], 0x0200, &tx_status0); - xclRegRead(handle[0], cmacidx[0], 0x0204, &rx_status0); - xclRegRead(handle[0], cmacidx[0], 0x0204, &rx_status0); - xclCloseContext(handle[0], xclbinId, cmacidx[0]); + xclRegRead(handle, cmacidx[0], 0x0200, &tx_status0); + xclRegRead(handle, cmacidx[0], 0x0200, &tx_status0); + xclRegRead(handle, cmacidx[0], 0x0204, &rx_status0); + xclRegRead(handle, cmacidx[0], 0x0204, &rx_status0); + xclCloseContext(handle, xclbinId, cmacidx[0]); printf("Device 0: TX status %d\n", tx_status0); printf("Device 0: RX status %d\n", rx_status0); @@ -284,16 +282,16 @@ int main(int argc, char **argv) { * ############################################################ */ - xclOpenContext(handle[1], xclbinId, nlidx[1], false); + xclOpenContext(handle, xclbinId, nlidx[1], false); unsigned int my_ip_address1 = argc>=8 ? (unsigned int)strtol(argv[7], NULL, 16) : (unsigned int)MY_IP_ADDR1; unsigned int their_ip_address1 = argc>=10 ? (unsigned int)strtol(argv[9], NULL, 16) : (unsigned int)THEIR_IP_ADDR1; //unsigned int ip_gateway = argc>=11 ? (unsigned int)strtol(argv[10], NULL, 16) : (unsigned int)IP_GATEWAY; long mac_address1 = (0xf0f1f2f3f4f5 & 0xFFFFFFFFFF0) + (my_ip_address1 & 0xF); - xclRegWrite(handle[1], nlidx[1], MAC_ADDR_OFFSET, mac_address1); - xclRegWrite(handle[1], nlidx[1], MAC_ADDR_OFFSET + 4, mac_address1 >> 32); - xclRegWrite(handle[1], nlidx[1], IP_ADDR_OFFSET, my_ip_address1); - xclRegWrite(handle[1], nlidx[1], GATEWAY_OFFSET, ip_gateway); + xclRegWrite(handle, nlidx[1], MAC_ADDR_OFFSET, mac_address1); + xclRegWrite(handle, nlidx[1], MAC_ADDR_OFFSET + 4, mac_address1 >> 32); + xclRegWrite(handle, nlidx[1], IP_ADDR_OFFSET, my_ip_address1); + xclRegWrite(handle, nlidx[1], IP_GATEWAY_OFFSET, ip_gateway); sockets[0][1].theirIP = their_ip_address1; sockets[0][1].theirPort = 60000; @@ -305,53 +303,53 @@ int main(int argc, char **argv) { printf("Their IP address 1: %x\n", their_ip_address1); printf("My MAC address 1: %lx\n", mac_address1); - xclRegRead(handle[1], nlidx[1], NUM_SOCKETS_HW, &num_sockets_hw); + xclRegRead(handle, nlidx[1], NUM_SOCKETS_HW, &num_sockets_hw); printf("Number of sockets HW 1: %d\n", num_sockets_hw); if (num_sockets_hw != num_sockets_sw) { printf("HW Socket list for device [0] should be [%d], is [%d]\n", num_sockets_sw, num_sockets_hw); fflush(stdout); - xclCloseContext(handle[1], xclbinId, nlidx[1]); + xclCloseContext(handle, xclbinId, nlidx[1]); return 1; } for (unsigned int i = 0; i < num_sockets_hw; i++) { - uint32_t TI_OFFSET = 0x10 + i * 8; - uint32_t TP_OFFSET = TI_OFFSET + 16 * 8; - uint32_t MP_OFFSET = TI_OFFSET + 16 * 8 * 2; - uint32_t V_OFFSET = TI_OFFSET + 16 * 8 * 3; - - xclRegWrite(handle[1], nlidx[1], UDP_OFFSET + TI_OFFSET, sockets[i][1].theirIP); - xclRegWrite(handle[1], nlidx[1], UDP_OFFSET + TP_OFFSET, sockets[i][1].theirPort); - xclRegWrite(handle[1], nlidx[1], UDP_OFFSET + MP_OFFSET, sockets[i][1].myPort); - xclRegWrite(handle[1], nlidx[1], UDP_OFFSET + V_OFFSET, sockets[i][1].valid); + uint32_t TI_OFFSET = UDP_TI_OFFSET + i * 8; + uint32_t TP_OFFSET = UDP_TP_OFFSET + i * 8; + uint32_t MP_OFFSET = UDP_MP_OFFSET + i * 8; + uint32_t V_OFFSET = UDP_V_OFFSET + i * 8; + + xclRegWrite(handle, nlidx[1], TI_OFFSET, sockets[i][1].theirIP); + xclRegWrite(handle, nlidx[1], TP_OFFSET, sockets[i][1].theirPort); + xclRegWrite(handle, nlidx[1], MP_OFFSET, sockets[i][1].myPort); + xclRegWrite(handle, nlidx[1], V_OFFSET, sockets[i][1].valid); } for(int i = 0; i < 256; i++) { - xclRegWrite(handle[1], nlidx[1], ARP_VALID_OFFSET + (i / 4) * 4, 0); + xclRegWrite(handle, nlidx[1], ARP_VALID_OFFSET + (i / 4) * 4, 0); } - xclRegWrite(handle[1], nlidx[1], ARP_DISCOVERY, 0); - xclRegWrite(handle[1], nlidx[1], ARP_DISCOVERY, 1); - xclRegWrite(handle[1], nlidx[1], ARP_DISCOVERY, 0); + xclRegWrite(handle, nlidx[1], ARP_DISCOVERY, 0); + xclRegWrite(handle, nlidx[1], ARP_DISCOVERY, 1); + xclRegWrite(handle, nlidx[1], ARP_DISCOVERY, 0); //ARP for (int i = 0; i < 256; i++) { unsigned valid_entry; - xclRegRead(handle[1], nlidx[1], ARP_VALID_OFFSET + (i / 4) * 4, &valid_entry); + xclRegRead(handle, nlidx[1], ARP_VALID_OFFSET + (i / 4) * 4, &valid_entry); valid_entry = (valid_entry >> ((i % 4) * 8)) & 0x1; if (valid_entry){ printf("Device 1: ARP valid entry found at %d\n", i); } } - xclCloseContext(handle[1], xclbinId, nlidx[1]); - xclOpenContext(handle[1], xclbinId, cmacidx[1], false); + xclCloseContext(handle, xclbinId, nlidx[1]); + xclOpenContext(handle, xclbinId, cmacidx[1], false); unsigned tx_status1 = 0; unsigned rx_status1 = 0; - xclRegRead(handle[1], cmacidx[1], 0x0200, &tx_status1); - xclRegRead(handle[1], cmacidx[1], 0x0200, &tx_status1); - xclRegRead(handle[1], cmacidx[1], 0x0204, &rx_status1); - xclRegRead(handle[1], cmacidx[1], 0x0204, &rx_status1); - xclCloseContext(handle[1], xclbinId, cmacidx[1]); + xclRegRead(handle, cmacidx[1], 0x0200, &tx_status1); + xclRegRead(handle, cmacidx[1], 0x0200, &tx_status1); + xclRegRead(handle, cmacidx[1], 0x0204, &rx_status1); + xclRegRead(handle, cmacidx[1], 0x0204, &rx_status1); + xclCloseContext(handle, xclbinId, cmacidx[1]); printf("Device 1: TX status %d\n", tx_status1); printf("Device 1: RX status %d\n", rx_status1); @@ -364,9 +362,9 @@ int main(int argc, char **argv) { } // Device 0: User logic stuff - ul[0] = clCreateKernel(program[0], "txkrnl", &err); + ul[0] = clCreateKernel(program, "txkrnl:{txkrnl_0}", &err); auto packet_size_bytes_0 = sizeof(uint8_t) * packet_size_total_0; - buffer_packetdata0 = clCreateBuffer(context[0], CL_MEM_READ_ONLY, packet_size_bytes_0, NULL, &err); + buffer_packetdata0 = clCreateBuffer(context, CL_MEM_READ_ONLY, packet_size_bytes_0, NULL, &err); cl_uint pst0 = (cl_uint)packet_size_bytes_0; cl_uint desti0 = 0; clSetKernelArg(ul[0], 0, sizeof(cl_mem), &buffer_packetdata0); @@ -393,9 +391,9 @@ int main(int argc, char **argv) { printf("\n"); // Device 1: User logic stuff - ul[1] = clCreateKernel(program[1], "txkrnl", &err); + ul[1] = clCreateKernel(program, "txkrnl:{txkrnl_1}", &err); auto packet_size_bytes_1 = sizeof(uint8_t) * packet_size_total_1; - buffer_packetdata1 = clCreateBuffer(context[1], CL_MEM_READ_ONLY, packet_size_bytes_1, NULL, &err); + buffer_packetdata1 = clCreateBuffer(context, CL_MEM_READ_ONLY, packet_size_bytes_1, NULL, &err); cl_uint pst1 = (cl_uint)packet_size_bytes_1; cl_uint desti1 = 0; clSetKernelArg(ul[1], 0, sizeof(cl_mem), &buffer_packetdata1);