diff --git a/rtl/udp_arb_mux.py b/rtl/udp_arb_mux.py deleted file mode 100755 index 4024993f..00000000 --- a/rtl/udp_arb_mux.py +++ /dev/null @@ -1,254 +0,0 @@ -#!/usr/bin/env python -""" -Generates an arbitrated UDP mux with the specified number of ports -""" - -from __future__ import print_function - -import argparse -import math -from jinja2 import Template - -def main(): - parser = argparse.ArgumentParser(description=__doc__.strip()) - parser.add_argument('-p', '--ports', type=int, default=4, help="number of ports") - parser.add_argument('-n', '--name', type=str, help="module name") - parser.add_argument('-o', '--output', type=str, help="output file name") - - args = parser.parse_args() - - try: - generate(**args.__dict__) - except IOError as ex: - print(ex) - exit(1) - -def generate(ports=4, name=None, output=None): - if name is None: - name = "udp_arb_mux_{0}".format(ports) - - if output is None: - output = name + ".v" - - print("Opening file '{0}'...".format(output)) - - output_file = open(output, 'w') - - print("Generating {0} port UDP arbitrated mux {1}...".format(ports, name)) - - select_width = int(math.ceil(math.log(ports, 2))) - - t = Template(u"""/* - -Copyright (c) 2014-2018 Alex Forencich - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -// Language: Verilog 2001 - -`timescale 1ns / 1ps - -/* - * UDP {{n}} port arbitrated multiplexer - */ -module {{name}} # -( - // arbitration type: "PRIORITY" or "ROUND_ROBIN" - parameter ARB_TYPE = "PRIORITY", - // LSB priority: "LOW", "HIGH" - parameter LSB_PRIORITY = "HIGH" -) -( - input wire clk, - input wire rst, - - /* - * UDP frame inputs - */ -{%- for p in ports %} - input wire input_{{p}}_udp_hdr_valid, - output wire input_{{p}}_udp_hdr_ready, - input wire [47:0] input_{{p}}_eth_dest_mac, - input wire [47:0] input_{{p}}_eth_src_mac, - input wire [15:0] input_{{p}}_eth_type, - input wire [3:0] input_{{p}}_ip_version, - input wire [3:0] input_{{p}}_ip_ihl, - input wire [5:0] input_{{p}}_ip_dscp, - input wire [1:0] input_{{p}}_ip_ecn, - input wire [15:0] input_{{p}}_ip_length, - input wire [15:0] input_{{p}}_ip_identification, - input wire [2:0] input_{{p}}_ip_flags, - input wire [12:0] input_{{p}}_ip_fragment_offset, - input wire [7:0] input_{{p}}_ip_ttl, - input wire [7:0] input_{{p}}_ip_protocol, - input wire [15:0] input_{{p}}_ip_header_checksum, - input wire [31:0] input_{{p}}_ip_source_ip, - input wire [31:0] input_{{p}}_ip_dest_ip, - input wire [15:0] input_{{p}}_udp_source_port, - input wire [15:0] input_{{p}}_udp_dest_port, - input wire [15:0] input_{{p}}_udp_length, - input wire [15:0] input_{{p}}_udp_checksum, - input wire [7:0] input_{{p}}_udp_payload_tdata, - input wire input_{{p}}_udp_payload_tvalid, - output wire input_{{p}}_udp_payload_tready, - input wire input_{{p}}_udp_payload_tlast, - input wire input_{{p}}_udp_payload_tuser, -{% endfor %} - /* - * UDP frame output - */ - output wire output_udp_hdr_valid, - input wire output_udp_hdr_ready, - output wire [47:0] output_eth_dest_mac, - output wire [47:0] output_eth_src_mac, - output wire [15:0] output_eth_type, - output wire [3:0] output_ip_version, - output wire [3:0] output_ip_ihl, - output wire [5:0] output_ip_dscp, - output wire [1:0] output_ip_ecn, - output wire [15:0] output_ip_length, - output wire [15:0] output_ip_identification, - output wire [2:0] output_ip_flags, - output wire [12:0] output_ip_fragment_offset, - output wire [7:0] output_ip_ttl, - output wire [7:0] output_ip_protocol, - output wire [15:0] output_ip_header_checksum, - output wire [31:0] output_ip_source_ip, - output wire [31:0] output_ip_dest_ip, - output wire [15:0] output_udp_source_port, - output wire [15:0] output_udp_dest_port, - output wire [15:0] output_udp_length, - output wire [15:0] output_udp_checksum, - output wire [7:0] output_udp_payload_tdata, - output wire output_udp_payload_tvalid, - input wire output_udp_payload_tready, - output wire output_udp_payload_tlast, - output wire output_udp_payload_tuser -); - -wire [{{n-1}}:0] request; -wire [{{n-1}}:0] acknowledge; -wire [{{n-1}}:0] grant; -wire grant_valid; -wire [{{w-1}}:0] grant_encoded; -{% for p in ports %} -assign acknowledge[{{p}}] = input_{{p}}_udp_payload_tvalid & input_{{p}}_udp_payload_tready & input_{{p}}_udp_payload_tlast; -assign request[{{p}}] = input_{{p}}_udp_hdr_valid; -{%- endfor %} - -// mux instance -udp_mux_{{n}} -mux_inst ( - .clk(clk), - .rst(rst), -{%- for p in ports %} - .input_{{p}}_udp_hdr_valid(input_{{p}}_udp_hdr_valid & grant[{{p}}]), - .input_{{p}}_udp_hdr_ready(input_{{p}}_udp_hdr_ready), - .input_{{p}}_eth_dest_mac(input_{{p}}_eth_dest_mac), - .input_{{p}}_eth_src_mac(input_{{p}}_eth_src_mac), - .input_{{p}}_eth_type(input_{{p}}_eth_type), - .input_{{p}}_ip_version(input_{{p}}_ip_version), - .input_{{p}}_ip_ihl(input_{{p}}_ip_ihl), - .input_{{p}}_ip_dscp(input_{{p}}_ip_dscp), - .input_{{p}}_ip_ecn(input_{{p}}_ip_ecn), - .input_{{p}}_ip_length(input_{{p}}_ip_length), - .input_{{p}}_ip_identification(input_{{p}}_ip_identification), - .input_{{p}}_ip_flags(input_{{p}}_ip_flags), - .input_{{p}}_ip_fragment_offset(input_{{p}}_ip_fragment_offset), - .input_{{p}}_ip_ttl(input_{{p}}_ip_ttl), - .input_{{p}}_ip_protocol(input_{{p}}_ip_protocol), - .input_{{p}}_ip_header_checksum(input_{{p}}_ip_header_checksum), - .input_{{p}}_ip_source_ip(input_{{p}}_ip_source_ip), - .input_{{p}}_ip_dest_ip(input_{{p}}_ip_dest_ip), - .input_{{p}}_udp_source_port(input_{{p}}_udp_source_port), - .input_{{p}}_udp_dest_port(input_{{p}}_udp_dest_port), - .input_{{p}}_udp_length(input_{{p}}_udp_length), - .input_{{p}}_udp_checksum(input_{{p}}_udp_checksum), - .input_{{p}}_udp_payload_tdata(input_{{p}}_udp_payload_tdata), - .input_{{p}}_udp_payload_tvalid(input_{{p}}_udp_payload_tvalid & grant[{{p}}]), - .input_{{p}}_udp_payload_tready(input_{{p}}_udp_payload_tready), - .input_{{p}}_udp_payload_tlast(input_{{p}}_udp_payload_tlast), - .input_{{p}}_udp_payload_tuser(input_{{p}}_udp_payload_tuser), -{%- endfor %} - .output_udp_hdr_valid(output_udp_hdr_valid), - .output_udp_hdr_ready(output_udp_hdr_ready), - .output_eth_dest_mac(output_eth_dest_mac), - .output_eth_src_mac(output_eth_src_mac), - .output_eth_type(output_eth_type), - .output_ip_version(output_ip_version), - .output_ip_ihl(output_ip_ihl), - .output_ip_dscp(output_ip_dscp), - .output_ip_ecn(output_ip_ecn), - .output_ip_length(output_ip_length), - .output_ip_identification(output_ip_identification), - .output_ip_flags(output_ip_flags), - .output_ip_fragment_offset(output_ip_fragment_offset), - .output_ip_ttl(output_ip_ttl), - .output_ip_protocol(output_ip_protocol), - .output_ip_header_checksum(output_ip_header_checksum), - .output_ip_source_ip(output_ip_source_ip), - .output_ip_dest_ip(output_ip_dest_ip), - .output_udp_source_port(output_udp_source_port), - .output_udp_dest_port(output_udp_dest_port), - .output_udp_length(output_udp_length), - .output_udp_checksum(output_udp_checksum), - .output_udp_payload_tdata(output_udp_payload_tdata), - .output_udp_payload_tvalid(output_udp_payload_tvalid), - .output_udp_payload_tready(output_udp_payload_tready), - .output_udp_payload_tlast(output_udp_payload_tlast), - .output_udp_payload_tuser(output_udp_payload_tuser), - .enable(grant_valid), - .select(grant_encoded) -); - -// arbiter instance -arbiter #( - .PORTS({{n}}), - .TYPE(ARB_TYPE), - .BLOCK("ACKNOWLEDGE"), - .LSB_PRIORITY(LSB_PRIORITY) -) -arb_inst ( - .clk(clk), - .rst(rst), - .request(request), - .acknowledge(acknowledge), - .grant(grant), - .grant_valid(grant_valid), - .grant_encoded(grant_encoded) -); - -endmodule - -""") - - output_file.write(t.render( - n=ports, - w=select_width, - name=name, - ports=range(ports) - )) - - print("Done") - -if __name__ == "__main__": - main() - diff --git a/rtl/udp_arb_mux.v b/rtl/udp_arb_mux.v new file mode 100644 index 00000000..abe2a1e1 --- /dev/null +++ b/rtl/udp_arb_mux.v @@ -0,0 +1,435 @@ +/* + +Copyright (c) 2014-2018 Alex Forencich + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +*/ + +// Language: Verilog 2001 + +`timescale 1ns / 1ps + +/* + * UDP arbitrated multiplexer + */ +module udp_arb_mux # +( + parameter S_COUNT = 4, + parameter DATA_WIDTH = 8, + parameter KEEP_ENABLE = (DATA_WIDTH>8), + parameter KEEP_WIDTH = (DATA_WIDTH/8), + parameter ID_ENABLE = 0, + parameter ID_WIDTH = 8, + parameter DEST_ENABLE = 0, + parameter DEST_WIDTH = 8, + parameter USER_ENABLE = 1, + parameter USER_WIDTH = 1, + // arbitration type: "PRIORITY" or "ROUND_ROBIN" + parameter ARB_TYPE = "PRIORITY", + // LSB priority: "LOW", "HIGH" + parameter LSB_PRIORITY = "HIGH" +) +( + input wire clk, + input wire rst, + + /* + * UDP frame inputs + */ + input wire [S_COUNT-1:0] s_udp_hdr_valid, + output wire [S_COUNT-1:0] s_udp_hdr_ready, + input wire [S_COUNT*48-1:0] s_eth_dest_mac, + input wire [S_COUNT*48-1:0] s_eth_src_mac, + input wire [S_COUNT*16-1:0] s_eth_type, + input wire [S_COUNT*4-1:0] s_ip_version, + input wire [S_COUNT*4-1:0] s_ip_ihl, + input wire [S_COUNT*6-1:0] s_ip_dscp, + input wire [S_COUNT*2-1:0] s_ip_ecn, + input wire [S_COUNT*16-1:0] s_ip_length, + input wire [S_COUNT*16-1:0] s_ip_identification, + input wire [S_COUNT*3-1:0] s_ip_flags, + input wire [S_COUNT*13-1:0] s_ip_fragment_offset, + input wire [S_COUNT*8-1:0] s_ip_ttl, + input wire [S_COUNT*8-1:0] s_ip_protocol, + input wire [S_COUNT*16-1:0] s_ip_header_checksum, + input wire [S_COUNT*32-1:0] s_ip_source_ip, + input wire [S_COUNT*32-1:0] s_ip_dest_ip, + input wire [S_COUNT*16-1:0] s_udp_source_port, + input wire [S_COUNT*16-1:0] s_udp_dest_port, + input wire [S_COUNT*16-1:0] s_udp_length, + input wire [S_COUNT*16-1:0] s_udp_checksum, + input wire [S_COUNT*DATA_WIDTH-1:0] s_udp_payload_axis_tdata, + input wire [S_COUNT*KEEP_WIDTH-1:0] s_udp_payload_axis_tkeep, + input wire [S_COUNT-1:0] s_udp_payload_axis_tvalid, + output wire [S_COUNT-1:0] s_udp_payload_axis_tready, + input wire [S_COUNT-1:0] s_udp_payload_axis_tlast, + input wire [S_COUNT*ID_WIDTH-1:0] s_udp_payload_axis_tid, + input wire [S_COUNT*DEST_WIDTH-1:0] s_udp_payload_axis_tdest, + input wire [S_COUNT*USER_WIDTH-1:0] s_udp_payload_axis_tuser, + + /* + * UDP frame output + */ + output wire m_udp_hdr_valid, + input wire m_udp_hdr_ready, + output wire [47:0] m_eth_dest_mac, + output wire [47:0] m_eth_src_mac, + output wire [15:0] m_eth_type, + output wire [3:0] m_ip_version, + output wire [3:0] m_ip_ihl, + output wire [5:0] m_ip_dscp, + output wire [1:0] m_ip_ecn, + output wire [15:0] m_ip_length, + output wire [15:0] m_ip_identification, + output wire [2:0] m_ip_flags, + output wire [12:0] m_ip_fragment_offset, + output wire [7:0] m_ip_ttl, + output wire [7:0] m_ip_protocol, + output wire [15:0] m_ip_header_checksum, + output wire [31:0] m_ip_source_ip, + output wire [31:0] m_ip_dest_ip, + output wire [15:0] m_udp_source_port, + output wire [15:0] m_udp_dest_port, + output wire [15:0] m_udp_length, + output wire [15:0] m_udp_checksum, + output wire [DATA_WIDTH-1:0] m_udp_payload_axis_tdata, + output wire [KEEP_WIDTH-1:0] m_udp_payload_axis_tkeep, + output wire m_udp_payload_axis_tvalid, + input wire m_udp_payload_axis_tready, + output wire m_udp_payload_axis_tlast, + output wire [ID_WIDTH-1:0] m_udp_payload_axis_tid, + output wire [DEST_WIDTH-1:0] m_udp_payload_axis_tdest, + output wire [USER_WIDTH-1:0] m_udp_payload_axis_tuser +); + +parameter CL_S_COUNT = $clog2(S_COUNT); + +reg frame_reg = 1'b0, frame_next; + +reg s_udp_hdr_ready_mask_reg = 1'b0, s_udp_hdr_ready_mask_next; + +reg m_udp_hdr_valid_reg = 1'b0, m_udp_hdr_valid_next; +reg [47:0] m_eth_dest_mac_reg = 48'd0, m_eth_dest_mac_next; +reg [47:0] m_eth_src_mac_reg = 48'd0, m_eth_src_mac_next; +reg [15:0] m_eth_type_reg = 16'd0, m_eth_type_next; +reg [3:0] m_ip_version_reg = 4'd0, m_ip_version_next; +reg [3:0] m_ip_ihl_reg = 4'd0, m_ip_ihl_next; +reg [5:0] m_ip_dscp_reg = 6'd0, m_ip_dscp_next; +reg [1:0] m_ip_ecn_reg = 2'd0, m_ip_ecn_next; +reg [15:0] m_ip_length_reg = 16'd0, m_ip_length_next; +reg [15:0] m_ip_identification_reg = 16'd0, m_ip_identification_next; +reg [2:0] m_ip_flags_reg = 3'd0, m_ip_flags_next; +reg [12:0] m_ip_fragment_offset_reg = 13'd0, m_ip_fragment_offset_next; +reg [7:0] m_ip_ttl_reg = 8'd0, m_ip_ttl_next; +reg [7:0] m_ip_protocol_reg = 8'd0, m_ip_protocol_next; +reg [15:0] m_ip_header_checksum_reg = 16'd0, m_ip_header_checksum_next; +reg [31:0] m_ip_source_ip_reg = 32'd0, m_ip_source_ip_next; +reg [31:0] m_ip_dest_ip_reg = 32'd0, m_ip_dest_ip_next; +reg [15:0] m_udp_source_port_reg = 16'd0, m_udp_source_port_next; +reg [15:0] m_udp_dest_port_reg = 16'd0, m_udp_dest_port_next; +reg [15:0] m_udp_length_reg = 16'd0, m_udp_length_next; +reg [15:0] m_udp_checksum_reg = 16'd0, m_udp_checksum_next; + +wire [S_COUNT-1:0] request; +wire [S_COUNT-1:0] acknowledge; +wire [S_COUNT-1:0] grant; +wire grant_valid; +wire [CL_S_COUNT-1:0] grant_encoded; + +// internal datapath +reg [DATA_WIDTH-1:0] m_udp_payload_axis_tdata_int; +reg [KEEP_WIDTH-1:0] m_udp_payload_axis_tkeep_int; +reg m_udp_payload_axis_tvalid_int; +reg m_udp_payload_axis_tready_int_reg = 1'b0; +reg m_udp_payload_axis_tlast_int; +reg [ID_WIDTH-1:0] m_udp_payload_axis_tid_int; +reg [DEST_WIDTH-1:0] m_udp_payload_axis_tdest_int; +reg [USER_WIDTH-1:0] m_udp_payload_axis_tuser_int; +wire m_udp_payload_axis_tready_int_early; + +assign s_udp_hdr_ready = (!s_udp_hdr_ready_mask_reg && grant_valid) << grant_encoded; + +assign s_udp_payload_axis_tready = (m_udp_payload_axis_tready_int_reg && grant_valid) << grant_encoded; + +assign m_udp_hdr_valid = m_udp_hdr_valid_reg; +assign m_eth_dest_mac = m_eth_dest_mac_reg; +assign m_eth_src_mac = m_eth_src_mac_reg; +assign m_eth_type = m_eth_type_reg; +assign m_ip_version = m_ip_version_reg; +assign m_ip_ihl = m_ip_ihl_reg; +assign m_ip_dscp = m_ip_dscp_reg; +assign m_ip_ecn = m_ip_ecn_reg; +assign m_ip_length = m_ip_length_reg; +assign m_ip_identification = m_ip_identification_reg; +assign m_ip_flags = m_ip_flags_reg; +assign m_ip_fragment_offset = m_ip_fragment_offset_reg; +assign m_ip_ttl = m_ip_ttl_reg; +assign m_ip_protocol = m_ip_protocol_reg; +assign m_ip_header_checksum = m_ip_header_checksum_reg; +assign m_ip_source_ip = m_ip_source_ip_reg; +assign m_ip_dest_ip = m_ip_dest_ip_reg; +assign m_udp_source_port = m_udp_source_port_reg; +assign m_udp_dest_port = m_udp_dest_port_reg; +assign m_udp_length = m_udp_length_reg; +assign m_udp_checksum = m_udp_checksum_reg; + +// mux for incoming packet +wire [DATA_WIDTH-1:0] current_s_tdata = s_udp_payload_axis_tdata[grant_encoded*DATA_WIDTH +: DATA_WIDTH]; +wire [KEEP_WIDTH-1:0] current_s_tkeep = s_udp_payload_axis_tkeep[grant_encoded*KEEP_WIDTH +: KEEP_WIDTH]; +wire current_s_tvalid = s_udp_payload_axis_tvalid[grant_encoded]; +wire current_s_tready = s_udp_payload_axis_tready[grant_encoded]; +wire current_s_tlast = s_udp_payload_axis_tlast[grant_encoded]; +wire [ID_WIDTH-1:0] current_s_tid = s_udp_payload_axis_tid[grant_encoded*ID_WIDTH +: ID_WIDTH]; +wire [DEST_WIDTH-1:0] current_s_tdest = s_udp_payload_axis_tdest[grant_encoded*DEST_WIDTH +: DEST_WIDTH]; +wire [USER_WIDTH-1:0] current_s_tuser = s_udp_payload_axis_tuser[grant_encoded*USER_WIDTH +: USER_WIDTH]; + +// arbiter instance +arbiter #( + .PORTS(S_COUNT), + .TYPE(ARB_TYPE), + .BLOCK("ACKNOWLEDGE"), + .LSB_PRIORITY(LSB_PRIORITY) +) +arb_inst ( + .clk(clk), + .rst(rst), + .request(request), + .acknowledge(acknowledge), + .grant(grant), + .grant_valid(grant_valid), + .grant_encoded(grant_encoded) +); + +generate + genvar n; + + for (n = 0; n < S_COUNT; n = n + 1) begin + assign request[n] = s_udp_hdr_valid[n] && !grant[n]; + assign acknowledge[n] = grant[n] && s_udp_payload_axis_tvalid[n] && s_udp_payload_axis_tready[n] && s_udp_payload_axis_tlast[n]; + end +endgenerate + +always @* begin + frame_next = frame_reg; + + s_udp_hdr_ready_mask_next = s_udp_hdr_ready_mask_reg; + + m_udp_hdr_valid_next = m_udp_hdr_valid_reg && !m_udp_hdr_ready; + m_eth_dest_mac_next = m_eth_dest_mac_reg; + m_eth_src_mac_next = m_eth_src_mac_reg; + m_eth_type_next = m_eth_type_reg; + m_ip_version_next = m_ip_version_reg; + m_ip_ihl_next = m_ip_ihl_reg; + m_ip_dscp_next = m_ip_dscp_reg; + m_ip_ecn_next = m_ip_ecn_reg; + m_ip_length_next = m_ip_length_reg; + m_ip_identification_next = m_ip_identification_reg; + m_ip_flags_next = m_ip_flags_reg; + m_ip_fragment_offset_next = m_ip_fragment_offset_reg; + m_ip_ttl_next = m_ip_ttl_reg; + m_ip_protocol_next = m_ip_protocol_reg; + m_ip_header_checksum_next = m_ip_header_checksum_reg; + m_ip_source_ip_next = m_ip_source_ip_reg; + m_ip_dest_ip_next = m_ip_dest_ip_reg; + m_udp_source_port_next = m_udp_source_port_reg; + m_udp_dest_port_next = m_udp_dest_port_reg; + m_udp_length_next = m_udp_length_reg; + m_udp_checksum_next = m_udp_checksum_reg; + + if (s_udp_payload_axis_tvalid[grant_encoded] && s_udp_payload_axis_tready[grant_encoded]) begin + // end of frame detection + if (s_udp_payload_axis_tlast[grant_encoded]) begin + frame_next = 1'b0; + s_udp_hdr_ready_mask_next = 1'b0; + end + end + + if (!frame_reg && grant_valid) begin + // start of frame + frame_next = 1'b1; + + s_udp_hdr_ready_mask_next = 1'b1; + + m_udp_hdr_valid_next = 1'b1; + m_eth_dest_mac_next = s_eth_dest_mac[grant_encoded*48 +: 48]; + m_eth_src_mac_next = s_eth_src_mac[grant_encoded*48 +: 48]; + m_eth_type_next = s_eth_type[grant_encoded*16 +: 16]; + m_ip_version_next = s_ip_version[grant_encoded*4 +: 4]; + m_ip_ihl_next = s_ip_ihl[grant_encoded*4 +: 4]; + m_ip_dscp_next = s_ip_dscp[grant_encoded*6 +: 6]; + m_ip_ecn_next = s_ip_ecn[grant_encoded*2 +: 2]; + m_ip_length_next = s_ip_length[grant_encoded*16 +: 16]; + m_ip_identification_next = s_ip_identification[grant_encoded*16 +: 16]; + m_ip_flags_next = s_ip_flags[grant_encoded*3 +: 3]; + m_ip_fragment_offset_next = s_ip_fragment_offset[grant_encoded*13 +: 13]; + m_ip_ttl_next = s_ip_ttl[grant_encoded*8 +: 8]; + m_ip_protocol_next = s_ip_protocol[grant_encoded*8 +: 8]; + m_ip_header_checksum_next = s_ip_header_checksum[grant_encoded*16 +: 16]; + m_ip_source_ip_next = s_ip_source_ip[grant_encoded*32 +: 32]; + m_ip_dest_ip_next = s_ip_dest_ip[grant_encoded*32 +: 32]; + m_udp_source_port_next = s_udp_source_port[grant_encoded*16 +: 16]; + m_udp_dest_port_next = s_udp_dest_port[grant_encoded*16 +: 16]; + m_udp_length_next = s_udp_length[grant_encoded*16 +: 16]; + m_udp_checksum_next = s_udp_checksum[grant_encoded*16 +: 16]; + end + + // pass through selected packet data + m_udp_payload_axis_tdata_int = current_s_tdata; + m_udp_payload_axis_tkeep_int = current_s_tkeep; + m_udp_payload_axis_tvalid_int = current_s_tvalid && m_udp_payload_axis_tready_int_reg && grant_valid; + m_udp_payload_axis_tlast_int = current_s_tlast; + m_udp_payload_axis_tid_int = current_s_tid; + m_udp_payload_axis_tdest_int = current_s_tdest; + m_udp_payload_axis_tuser_int = current_s_tuser; +end + +always @(posedge clk) begin + if (rst) begin + frame_reg <= 1'b0; + s_udp_hdr_ready_mask_reg <= 1'b0; + m_udp_hdr_valid_reg <= 1'b0; + end else begin + frame_reg <= frame_next; + s_udp_hdr_ready_mask_reg <= s_udp_hdr_ready_mask_next; + m_udp_hdr_valid_reg <= m_udp_hdr_valid_next; + end + + m_eth_dest_mac_reg <= m_eth_dest_mac_next; + m_eth_src_mac_reg <= m_eth_src_mac_next; + m_eth_type_reg <= m_eth_type_next; + m_ip_version_reg <= m_ip_version_next; + m_ip_ihl_reg <= m_ip_ihl_next; + m_ip_dscp_reg <= m_ip_dscp_next; + m_ip_ecn_reg <= m_ip_ecn_next; + m_ip_length_reg <= m_ip_length_next; + m_ip_identification_reg <= m_ip_identification_next; + m_ip_flags_reg <= m_ip_flags_next; + m_ip_fragment_offset_reg <= m_ip_fragment_offset_next; + m_ip_ttl_reg <= m_ip_ttl_next; + m_ip_protocol_reg <= m_ip_protocol_next; + m_ip_header_checksum_reg <= m_ip_header_checksum_next; + m_ip_source_ip_reg <= m_ip_source_ip_next; + m_ip_dest_ip_reg <= m_ip_dest_ip_next; + m_udp_source_port_reg <= m_udp_source_port_next; + m_udp_dest_port_reg <= m_udp_dest_port_next; + m_udp_length_reg <= m_udp_length_next; + m_udp_checksum_reg <= m_udp_checksum_next; +end + +// output datapath logic +reg [DATA_WIDTH-1:0] m_udp_payload_axis_tdata_reg = {DATA_WIDTH{1'b0}}; +reg [KEEP_WIDTH-1:0] m_udp_payload_axis_tkeep_reg = {KEEP_WIDTH{1'b0}}; +reg m_udp_payload_axis_tvalid_reg = 1'b0, m_udp_payload_axis_tvalid_next; +reg m_udp_payload_axis_tlast_reg = 1'b0; +reg [ID_WIDTH-1:0] m_udp_payload_axis_tid_reg = {ID_WIDTH{1'b0}}; +reg [DEST_WIDTH-1:0] m_udp_payload_axis_tdest_reg = {DEST_WIDTH{1'b0}}; +reg [USER_WIDTH-1:0] m_udp_payload_axis_tuser_reg = {USER_WIDTH{1'b0}}; + +reg [DATA_WIDTH-1:0] temp_m_udp_payload_axis_tdata_reg = {DATA_WIDTH{1'b0}}; +reg [KEEP_WIDTH-1:0] temp_m_udp_payload_axis_tkeep_reg = {KEEP_WIDTH{1'b0}}; +reg temp_m_udp_payload_axis_tvalid_reg = 1'b0, temp_m_udp_payload_axis_tvalid_next; +reg temp_m_udp_payload_axis_tlast_reg = 1'b0; +reg [ID_WIDTH-1:0] temp_m_udp_payload_axis_tid_reg = {ID_WIDTH{1'b0}}; +reg [DEST_WIDTH-1:0] temp_m_udp_payload_axis_tdest_reg = {DEST_WIDTH{1'b0}}; +reg [USER_WIDTH-1:0] temp_m_udp_payload_axis_tuser_reg = {USER_WIDTH{1'b0}}; + +// datapath control +reg store_axis_int_to_output; +reg store_axis_int_to_temp; +reg store_udp_payload_axis_temp_to_output; + +assign m_udp_payload_axis_tdata = m_udp_payload_axis_tdata_reg; +assign m_udp_payload_axis_tkeep = KEEP_ENABLE ? m_udp_payload_axis_tkeep_reg : {KEEP_WIDTH{1'b1}}; +assign m_udp_payload_axis_tvalid = m_udp_payload_axis_tvalid_reg; +assign m_udp_payload_axis_tlast = m_udp_payload_axis_tlast_reg; +assign m_udp_payload_axis_tid = ID_ENABLE ? m_udp_payload_axis_tid_reg : {ID_WIDTH{1'b0}}; +assign m_udp_payload_axis_tdest = DEST_ENABLE ? m_udp_payload_axis_tdest_reg : {DEST_WIDTH{1'b0}}; +assign m_udp_payload_axis_tuser = USER_ENABLE ? m_udp_payload_axis_tuser_reg : {USER_WIDTH{1'b0}}; + +// enable ready input next cycle if output is ready or the temp reg will not be filled on the next cycle (output reg empty or no input) +assign m_udp_payload_axis_tready_int_early = m_udp_payload_axis_tready || (!temp_m_udp_payload_axis_tvalid_reg && (!m_udp_payload_axis_tvalid_reg || !m_udp_payload_axis_tvalid_int)); + +always @* begin + // transfer sink ready state to source + m_udp_payload_axis_tvalid_next = m_udp_payload_axis_tvalid_reg; + temp_m_udp_payload_axis_tvalid_next = temp_m_udp_payload_axis_tvalid_reg; + + store_axis_int_to_output = 1'b0; + store_axis_int_to_temp = 1'b0; + store_udp_payload_axis_temp_to_output = 1'b0; + + if (m_udp_payload_axis_tready_int_reg) begin + // input is ready + if (m_udp_payload_axis_tready || !m_udp_payload_axis_tvalid_reg) begin + // output is ready or currently not valid, transfer data to output + m_udp_payload_axis_tvalid_next = m_udp_payload_axis_tvalid_int; + store_axis_int_to_output = 1'b1; + end else begin + // output is not ready, store input in temp + temp_m_udp_payload_axis_tvalid_next = m_udp_payload_axis_tvalid_int; + store_axis_int_to_temp = 1'b1; + end + end else if (m_udp_payload_axis_tready) begin + // input is not ready, but output is ready + m_udp_payload_axis_tvalid_next = temp_m_udp_payload_axis_tvalid_reg; + temp_m_udp_payload_axis_tvalid_next = 1'b0; + store_udp_payload_axis_temp_to_output = 1'b1; + end +end + +always @(posedge clk) begin + if (rst) begin + m_udp_payload_axis_tvalid_reg <= 1'b0; + m_udp_payload_axis_tready_int_reg <= 1'b0; + temp_m_udp_payload_axis_tvalid_reg <= 1'b0; + end else begin + m_udp_payload_axis_tvalid_reg <= m_udp_payload_axis_tvalid_next; + m_udp_payload_axis_tready_int_reg <= m_udp_payload_axis_tready_int_early; + temp_m_udp_payload_axis_tvalid_reg <= temp_m_udp_payload_axis_tvalid_next; + end + + // datapath + if (store_axis_int_to_output) begin + m_udp_payload_axis_tdata_reg <= m_udp_payload_axis_tdata_int; + m_udp_payload_axis_tkeep_reg <= m_udp_payload_axis_tkeep_int; + m_udp_payload_axis_tlast_reg <= m_udp_payload_axis_tlast_int; + m_udp_payload_axis_tid_reg <= m_udp_payload_axis_tid_int; + m_udp_payload_axis_tdest_reg <= m_udp_payload_axis_tdest_int; + m_udp_payload_axis_tuser_reg <= m_udp_payload_axis_tuser_int; + end else if (store_udp_payload_axis_temp_to_output) begin + m_udp_payload_axis_tdata_reg <= temp_m_udp_payload_axis_tdata_reg; + m_udp_payload_axis_tkeep_reg <= temp_m_udp_payload_axis_tkeep_reg; + m_udp_payload_axis_tlast_reg <= temp_m_udp_payload_axis_tlast_reg; + m_udp_payload_axis_tid_reg <= temp_m_udp_payload_axis_tid_reg; + m_udp_payload_axis_tdest_reg <= temp_m_udp_payload_axis_tdest_reg; + m_udp_payload_axis_tuser_reg <= temp_m_udp_payload_axis_tuser_reg; + end + + if (store_axis_int_to_temp) begin + temp_m_udp_payload_axis_tdata_reg <= m_udp_payload_axis_tdata_int; + temp_m_udp_payload_axis_tkeep_reg <= m_udp_payload_axis_tkeep_int; + temp_m_udp_payload_axis_tlast_reg <= m_udp_payload_axis_tlast_int; + temp_m_udp_payload_axis_tid_reg <= m_udp_payload_axis_tid_int; + temp_m_udp_payload_axis_tdest_reg <= m_udp_payload_axis_tdest_int; + temp_m_udp_payload_axis_tuser_reg <= m_udp_payload_axis_tuser_int; + end +end + +endmodule diff --git a/rtl/udp_arb_mux_4.v b/rtl/udp_arb_mux_4.v deleted file mode 100644 index 3c2a1b29..00000000 --- a/rtl/udp_arb_mux_4.v +++ /dev/null @@ -1,366 +0,0 @@ -/* - -Copyright (c) 2014-2018 Alex Forencich - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -// Language: Verilog 2001 - -`timescale 1ns / 1ps - -/* - * UDP 4 port arbitrated multiplexer - */ -module udp_arb_mux_4 # -( - // arbitration type: "PRIORITY" or "ROUND_ROBIN" - parameter ARB_TYPE = "PRIORITY", - // LSB priority: "LOW", "HIGH" - parameter LSB_PRIORITY = "HIGH" -) -( - input wire clk, - input wire rst, - - /* - * UDP frame inputs - */ - input wire input_0_udp_hdr_valid, - output wire input_0_udp_hdr_ready, - input wire [47:0] input_0_eth_dest_mac, - input wire [47:0] input_0_eth_src_mac, - input wire [15:0] input_0_eth_type, - input wire [3:0] input_0_ip_version, - input wire [3:0] input_0_ip_ihl, - input wire [5:0] input_0_ip_dscp, - input wire [1:0] input_0_ip_ecn, - input wire [15:0] input_0_ip_length, - input wire [15:0] input_0_ip_identification, - input wire [2:0] input_0_ip_flags, - input wire [12:0] input_0_ip_fragment_offset, - input wire [7:0] input_0_ip_ttl, - input wire [7:0] input_0_ip_protocol, - input wire [15:0] input_0_ip_header_checksum, - input wire [31:0] input_0_ip_source_ip, - input wire [31:0] input_0_ip_dest_ip, - input wire [15:0] input_0_udp_source_port, - input wire [15:0] input_0_udp_dest_port, - input wire [15:0] input_0_udp_length, - input wire [15:0] input_0_udp_checksum, - input wire [7:0] input_0_udp_payload_tdata, - input wire input_0_udp_payload_tvalid, - output wire input_0_udp_payload_tready, - input wire input_0_udp_payload_tlast, - input wire input_0_udp_payload_tuser, - - input wire input_1_udp_hdr_valid, - output wire input_1_udp_hdr_ready, - input wire [47:0] input_1_eth_dest_mac, - input wire [47:0] input_1_eth_src_mac, - input wire [15:0] input_1_eth_type, - input wire [3:0] input_1_ip_version, - input wire [3:0] input_1_ip_ihl, - input wire [5:0] input_1_ip_dscp, - input wire [1:0] input_1_ip_ecn, - input wire [15:0] input_1_ip_length, - input wire [15:0] input_1_ip_identification, - input wire [2:0] input_1_ip_flags, - input wire [12:0] input_1_ip_fragment_offset, - input wire [7:0] input_1_ip_ttl, - input wire [7:0] input_1_ip_protocol, - input wire [15:0] input_1_ip_header_checksum, - input wire [31:0] input_1_ip_source_ip, - input wire [31:0] input_1_ip_dest_ip, - input wire [15:0] input_1_udp_source_port, - input wire [15:0] input_1_udp_dest_port, - input wire [15:0] input_1_udp_length, - input wire [15:0] input_1_udp_checksum, - input wire [7:0] input_1_udp_payload_tdata, - input wire input_1_udp_payload_tvalid, - output wire input_1_udp_payload_tready, - input wire input_1_udp_payload_tlast, - input wire input_1_udp_payload_tuser, - - input wire input_2_udp_hdr_valid, - output wire input_2_udp_hdr_ready, - input wire [47:0] input_2_eth_dest_mac, - input wire [47:0] input_2_eth_src_mac, - input wire [15:0] input_2_eth_type, - input wire [3:0] input_2_ip_version, - input wire [3:0] input_2_ip_ihl, - input wire [5:0] input_2_ip_dscp, - input wire [1:0] input_2_ip_ecn, - input wire [15:0] input_2_ip_length, - input wire [15:0] input_2_ip_identification, - input wire [2:0] input_2_ip_flags, - input wire [12:0] input_2_ip_fragment_offset, - input wire [7:0] input_2_ip_ttl, - input wire [7:0] input_2_ip_protocol, - input wire [15:0] input_2_ip_header_checksum, - input wire [31:0] input_2_ip_source_ip, - input wire [31:0] input_2_ip_dest_ip, - input wire [15:0] input_2_udp_source_port, - input wire [15:0] input_2_udp_dest_port, - input wire [15:0] input_2_udp_length, - input wire [15:0] input_2_udp_checksum, - input wire [7:0] input_2_udp_payload_tdata, - input wire input_2_udp_payload_tvalid, - output wire input_2_udp_payload_tready, - input wire input_2_udp_payload_tlast, - input wire input_2_udp_payload_tuser, - - input wire input_3_udp_hdr_valid, - output wire input_3_udp_hdr_ready, - input wire [47:0] input_3_eth_dest_mac, - input wire [47:0] input_3_eth_src_mac, - input wire [15:0] input_3_eth_type, - input wire [3:0] input_3_ip_version, - input wire [3:0] input_3_ip_ihl, - input wire [5:0] input_3_ip_dscp, - input wire [1:0] input_3_ip_ecn, - input wire [15:0] input_3_ip_length, - input wire [15:0] input_3_ip_identification, - input wire [2:0] input_3_ip_flags, - input wire [12:0] input_3_ip_fragment_offset, - input wire [7:0] input_3_ip_ttl, - input wire [7:0] input_3_ip_protocol, - input wire [15:0] input_3_ip_header_checksum, - input wire [31:0] input_3_ip_source_ip, - input wire [31:0] input_3_ip_dest_ip, - input wire [15:0] input_3_udp_source_port, - input wire [15:0] input_3_udp_dest_port, - input wire [15:0] input_3_udp_length, - input wire [15:0] input_3_udp_checksum, - input wire [7:0] input_3_udp_payload_tdata, - input wire input_3_udp_payload_tvalid, - output wire input_3_udp_payload_tready, - input wire input_3_udp_payload_tlast, - input wire input_3_udp_payload_tuser, - - /* - * UDP frame output - */ - output wire output_udp_hdr_valid, - input wire output_udp_hdr_ready, - output wire [47:0] output_eth_dest_mac, - output wire [47:0] output_eth_src_mac, - output wire [15:0] output_eth_type, - output wire [3:0] output_ip_version, - output wire [3:0] output_ip_ihl, - output wire [5:0] output_ip_dscp, - output wire [1:0] output_ip_ecn, - output wire [15:0] output_ip_length, - output wire [15:0] output_ip_identification, - output wire [2:0] output_ip_flags, - output wire [12:0] output_ip_fragment_offset, - output wire [7:0] output_ip_ttl, - output wire [7:0] output_ip_protocol, - output wire [15:0] output_ip_header_checksum, - output wire [31:0] output_ip_source_ip, - output wire [31:0] output_ip_dest_ip, - output wire [15:0] output_udp_source_port, - output wire [15:0] output_udp_dest_port, - output wire [15:0] output_udp_length, - output wire [15:0] output_udp_checksum, - output wire [7:0] output_udp_payload_tdata, - output wire output_udp_payload_tvalid, - input wire output_udp_payload_tready, - output wire output_udp_payload_tlast, - output wire output_udp_payload_tuser -); - -wire [3:0] request; -wire [3:0] acknowledge; -wire [3:0] grant; -wire grant_valid; -wire [1:0] grant_encoded; - -assign acknowledge[0] = input_0_udp_payload_tvalid & input_0_udp_payload_tready & input_0_udp_payload_tlast; -assign request[0] = input_0_udp_hdr_valid; -assign acknowledge[1] = input_1_udp_payload_tvalid & input_1_udp_payload_tready & input_1_udp_payload_tlast; -assign request[1] = input_1_udp_hdr_valid; -assign acknowledge[2] = input_2_udp_payload_tvalid & input_2_udp_payload_tready & input_2_udp_payload_tlast; -assign request[2] = input_2_udp_hdr_valid; -assign acknowledge[3] = input_3_udp_payload_tvalid & input_3_udp_payload_tready & input_3_udp_payload_tlast; -assign request[3] = input_3_udp_hdr_valid; - -// mux instance -udp_mux_4 -mux_inst ( - .clk(clk), - .rst(rst), - .input_0_udp_hdr_valid(input_0_udp_hdr_valid & grant[0]), - .input_0_udp_hdr_ready(input_0_udp_hdr_ready), - .input_0_eth_dest_mac(input_0_eth_dest_mac), - .input_0_eth_src_mac(input_0_eth_src_mac), - .input_0_eth_type(input_0_eth_type), - .input_0_ip_version(input_0_ip_version), - .input_0_ip_ihl(input_0_ip_ihl), - .input_0_ip_dscp(input_0_ip_dscp), - .input_0_ip_ecn(input_0_ip_ecn), - .input_0_ip_length(input_0_ip_length), - .input_0_ip_identification(input_0_ip_identification), - .input_0_ip_flags(input_0_ip_flags), - .input_0_ip_fragment_offset(input_0_ip_fragment_offset), - .input_0_ip_ttl(input_0_ip_ttl), - .input_0_ip_protocol(input_0_ip_protocol), - .input_0_ip_header_checksum(input_0_ip_header_checksum), - .input_0_ip_source_ip(input_0_ip_source_ip), - .input_0_ip_dest_ip(input_0_ip_dest_ip), - .input_0_udp_source_port(input_0_udp_source_port), - .input_0_udp_dest_port(input_0_udp_dest_port), - .input_0_udp_length(input_0_udp_length), - .input_0_udp_checksum(input_0_udp_checksum), - .input_0_udp_payload_tdata(input_0_udp_payload_tdata), - .input_0_udp_payload_tvalid(input_0_udp_payload_tvalid & grant[0]), - .input_0_udp_payload_tready(input_0_udp_payload_tready), - .input_0_udp_payload_tlast(input_0_udp_payload_tlast), - .input_0_udp_payload_tuser(input_0_udp_payload_tuser), - .input_1_udp_hdr_valid(input_1_udp_hdr_valid & grant[1]), - .input_1_udp_hdr_ready(input_1_udp_hdr_ready), - .input_1_eth_dest_mac(input_1_eth_dest_mac), - .input_1_eth_src_mac(input_1_eth_src_mac), - .input_1_eth_type(input_1_eth_type), - .input_1_ip_version(input_1_ip_version), - .input_1_ip_ihl(input_1_ip_ihl), - .input_1_ip_dscp(input_1_ip_dscp), - .input_1_ip_ecn(input_1_ip_ecn), - .input_1_ip_length(input_1_ip_length), - .input_1_ip_identification(input_1_ip_identification), - .input_1_ip_flags(input_1_ip_flags), - .input_1_ip_fragment_offset(input_1_ip_fragment_offset), - .input_1_ip_ttl(input_1_ip_ttl), - .input_1_ip_protocol(input_1_ip_protocol), - .input_1_ip_header_checksum(input_1_ip_header_checksum), - .input_1_ip_source_ip(input_1_ip_source_ip), - .input_1_ip_dest_ip(input_1_ip_dest_ip), - .input_1_udp_source_port(input_1_udp_source_port), - .input_1_udp_dest_port(input_1_udp_dest_port), - .input_1_udp_length(input_1_udp_length), - .input_1_udp_checksum(input_1_udp_checksum), - .input_1_udp_payload_tdata(input_1_udp_payload_tdata), - .input_1_udp_payload_tvalid(input_1_udp_payload_tvalid & grant[1]), - .input_1_udp_payload_tready(input_1_udp_payload_tready), - .input_1_udp_payload_tlast(input_1_udp_payload_tlast), - .input_1_udp_payload_tuser(input_1_udp_payload_tuser), - .input_2_udp_hdr_valid(input_2_udp_hdr_valid & grant[2]), - .input_2_udp_hdr_ready(input_2_udp_hdr_ready), - .input_2_eth_dest_mac(input_2_eth_dest_mac), - .input_2_eth_src_mac(input_2_eth_src_mac), - .input_2_eth_type(input_2_eth_type), - .input_2_ip_version(input_2_ip_version), - .input_2_ip_ihl(input_2_ip_ihl), - .input_2_ip_dscp(input_2_ip_dscp), - .input_2_ip_ecn(input_2_ip_ecn), - .input_2_ip_length(input_2_ip_length), - .input_2_ip_identification(input_2_ip_identification), - .input_2_ip_flags(input_2_ip_flags), - .input_2_ip_fragment_offset(input_2_ip_fragment_offset), - .input_2_ip_ttl(input_2_ip_ttl), - .input_2_ip_protocol(input_2_ip_protocol), - .input_2_ip_header_checksum(input_2_ip_header_checksum), - .input_2_ip_source_ip(input_2_ip_source_ip), - .input_2_ip_dest_ip(input_2_ip_dest_ip), - .input_2_udp_source_port(input_2_udp_source_port), - .input_2_udp_dest_port(input_2_udp_dest_port), - .input_2_udp_length(input_2_udp_length), - .input_2_udp_checksum(input_2_udp_checksum), - .input_2_udp_payload_tdata(input_2_udp_payload_tdata), - .input_2_udp_payload_tvalid(input_2_udp_payload_tvalid & grant[2]), - .input_2_udp_payload_tready(input_2_udp_payload_tready), - .input_2_udp_payload_tlast(input_2_udp_payload_tlast), - .input_2_udp_payload_tuser(input_2_udp_payload_tuser), - .input_3_udp_hdr_valid(input_3_udp_hdr_valid & grant[3]), - .input_3_udp_hdr_ready(input_3_udp_hdr_ready), - .input_3_eth_dest_mac(input_3_eth_dest_mac), - .input_3_eth_src_mac(input_3_eth_src_mac), - .input_3_eth_type(input_3_eth_type), - .input_3_ip_version(input_3_ip_version), - .input_3_ip_ihl(input_3_ip_ihl), - .input_3_ip_dscp(input_3_ip_dscp), - .input_3_ip_ecn(input_3_ip_ecn), - .input_3_ip_length(input_3_ip_length), - .input_3_ip_identification(input_3_ip_identification), - .input_3_ip_flags(input_3_ip_flags), - .input_3_ip_fragment_offset(input_3_ip_fragment_offset), - .input_3_ip_ttl(input_3_ip_ttl), - .input_3_ip_protocol(input_3_ip_protocol), - .input_3_ip_header_checksum(input_3_ip_header_checksum), - .input_3_ip_source_ip(input_3_ip_source_ip), - .input_3_ip_dest_ip(input_3_ip_dest_ip), - .input_3_udp_source_port(input_3_udp_source_port), - .input_3_udp_dest_port(input_3_udp_dest_port), - .input_3_udp_length(input_3_udp_length), - .input_3_udp_checksum(input_3_udp_checksum), - .input_3_udp_payload_tdata(input_3_udp_payload_tdata), - .input_3_udp_payload_tvalid(input_3_udp_payload_tvalid & grant[3]), - .input_3_udp_payload_tready(input_3_udp_payload_tready), - .input_3_udp_payload_tlast(input_3_udp_payload_tlast), - .input_3_udp_payload_tuser(input_3_udp_payload_tuser), - .output_udp_hdr_valid(output_udp_hdr_valid), - .output_udp_hdr_ready(output_udp_hdr_ready), - .output_eth_dest_mac(output_eth_dest_mac), - .output_eth_src_mac(output_eth_src_mac), - .output_eth_type(output_eth_type), - .output_ip_version(output_ip_version), - .output_ip_ihl(output_ip_ihl), - .output_ip_dscp(output_ip_dscp), - .output_ip_ecn(output_ip_ecn), - .output_ip_length(output_ip_length), - .output_ip_identification(output_ip_identification), - .output_ip_flags(output_ip_flags), - .output_ip_fragment_offset(output_ip_fragment_offset), - .output_ip_ttl(output_ip_ttl), - .output_ip_protocol(output_ip_protocol), - .output_ip_header_checksum(output_ip_header_checksum), - .output_ip_source_ip(output_ip_source_ip), - .output_ip_dest_ip(output_ip_dest_ip), - .output_udp_source_port(output_udp_source_port), - .output_udp_dest_port(output_udp_dest_port), - .output_udp_length(output_udp_length), - .output_udp_checksum(output_udp_checksum), - .output_udp_payload_tdata(output_udp_payload_tdata), - .output_udp_payload_tvalid(output_udp_payload_tvalid), - .output_udp_payload_tready(output_udp_payload_tready), - .output_udp_payload_tlast(output_udp_payload_tlast), - .output_udp_payload_tuser(output_udp_payload_tuser), - .enable(grant_valid), - .select(grant_encoded) -); - -// arbiter instance -arbiter #( - .PORTS(4), - .TYPE(ARB_TYPE), - .BLOCK("ACKNOWLEDGE"), - .LSB_PRIORITY(LSB_PRIORITY) -) -arb_inst ( - .clk(clk), - .rst(rst), - .request(request), - .acknowledge(acknowledge), - .grant(grant), - .grant_valid(grant_valid), - .grant_encoded(grant_encoded) -); - -endmodule diff --git a/rtl/udp_arb_mux_64.py b/rtl/udp_arb_mux_64.py deleted file mode 100755 index b4094cde..00000000 --- a/rtl/udp_arb_mux_64.py +++ /dev/null @@ -1,258 +0,0 @@ -#!/usr/bin/env python -""" -Generates an arbitrated UDP mux with the specified number of ports -""" - -from __future__ import print_function - -import argparse -import math -from jinja2 import Template - -def main(): - parser = argparse.ArgumentParser(description=__doc__.strip()) - parser.add_argument('-p', '--ports', type=int, default=4, help="number of ports") - parser.add_argument('-n', '--name', type=str, help="module name") - parser.add_argument('-o', '--output', type=str, help="output file name") - - args = parser.parse_args() - - try: - generate(**args.__dict__) - except IOError as ex: - print(ex) - exit(1) - -def generate(ports=4, name=None, output=None): - if name is None: - name = "udp_arb_mux_64_{0}".format(ports) - - if output is None: - output = name + ".v" - - print("Opening file '{0}'...".format(output)) - - output_file = open(output, 'w') - - print("Generating {0} port UDP arbitrated mux {1}...".format(ports, name)) - - select_width = int(math.ceil(math.log(ports, 2))) - - t = Template(u"""/* - -Copyright (c) 2014-2018 Alex Forencich - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -// Language: Verilog 2001 - -`timescale 1ns / 1ps - -/* - * UDP {{n}} port arbitrated multiplexer (64 bit datapath) - */ -module {{name}} # -( - // arbitration type: "PRIORITY" or "ROUND_ROBIN" - parameter ARB_TYPE = "PRIORITY", - // LSB priority: "LOW", "HIGH" - parameter LSB_PRIORITY = "HIGH" -) -( - input wire clk, - input wire rst, - - /* - * UDP frame inputs - */ -{%- for p in ports %} - input wire input_{{p}}_udp_hdr_valid, - output wire input_{{p}}_udp_hdr_ready, - input wire [47:0] input_{{p}}_eth_dest_mac, - input wire [47:0] input_{{p}}_eth_src_mac, - input wire [15:0] input_{{p}}_eth_type, - input wire [3:0] input_{{p}}_ip_version, - input wire [3:0] input_{{p}}_ip_ihl, - input wire [5:0] input_{{p}}_ip_dscp, - input wire [1:0] input_{{p}}_ip_ecn, - input wire [15:0] input_{{p}}_ip_length, - input wire [15:0] input_{{p}}_ip_identification, - input wire [2:0] input_{{p}}_ip_flags, - input wire [12:0] input_{{p}}_ip_fragment_offset, - input wire [7:0] input_{{p}}_ip_ttl, - input wire [7:0] input_{{p}}_ip_protocol, - input wire [15:0] input_{{p}}_ip_header_checksum, - input wire [31:0] input_{{p}}_ip_source_ip, - input wire [31:0] input_{{p}}_ip_dest_ip, - input wire [15:0] input_{{p}}_udp_source_port, - input wire [15:0] input_{{p}}_udp_dest_port, - input wire [15:0] input_{{p}}_udp_length, - input wire [15:0] input_{{p}}_udp_checksum, - input wire [63:0] input_{{p}}_udp_payload_tdata, - input wire [7:0] input_{{p}}_udp_payload_tkeep, - input wire input_{{p}}_udp_payload_tvalid, - output wire input_{{p}}_udp_payload_tready, - input wire input_{{p}}_udp_payload_tlast, - input wire input_{{p}}_udp_payload_tuser, -{% endfor %} - /* - * UDP frame output - */ - output wire output_udp_hdr_valid, - input wire output_udp_hdr_ready, - output wire [47:0] output_eth_dest_mac, - output wire [47:0] output_eth_src_mac, - output wire [15:0] output_eth_type, - output wire [3:0] output_ip_version, - output wire [3:0] output_ip_ihl, - output wire [5:0] output_ip_dscp, - output wire [1:0] output_ip_ecn, - output wire [15:0] output_ip_length, - output wire [15:0] output_ip_identification, - output wire [2:0] output_ip_flags, - output wire [12:0] output_ip_fragment_offset, - output wire [7:0] output_ip_ttl, - output wire [7:0] output_ip_protocol, - output wire [15:0] output_ip_header_checksum, - output wire [31:0] output_ip_source_ip, - output wire [31:0] output_ip_dest_ip, - output wire [15:0] output_udp_source_port, - output wire [15:0] output_udp_dest_port, - output wire [15:0] output_udp_length, - output wire [15:0] output_udp_checksum, - output wire [63:0] output_udp_payload_tdata, - output wire [7:0] output_udp_payload_tkeep, - output wire output_udp_payload_tvalid, - input wire output_udp_payload_tready, - output wire output_udp_payload_tlast, - output wire output_udp_payload_tuser -); - -wire [{{n-1}}:0] request; -wire [{{n-1}}:0] acknowledge; -wire [{{n-1}}:0] grant; -wire grant_valid; -wire [{{w-1}}:0] grant_encoded; -{% for p in ports %} -assign acknowledge[{{p}}] = input_{{p}}_udp_payload_tvalid & input_{{p}}_udp_payload_tready & input_{{p}}_udp_payload_tlast; -assign request[{{p}}] = input_{{p}}_udp_hdr_valid; -{%- endfor %} - -// mux instance -udp_mux_64_{{n}} -mux_inst ( - .clk(clk), - .rst(rst), -{%- for p in ports %} - .input_{{p}}_udp_hdr_valid(input_{{p}}_udp_hdr_valid & grant[{{p}}]), - .input_{{p}}_udp_hdr_ready(input_{{p}}_udp_hdr_ready), - .input_{{p}}_eth_dest_mac(input_{{p}}_eth_dest_mac), - .input_{{p}}_eth_src_mac(input_{{p}}_eth_src_mac), - .input_{{p}}_eth_type(input_{{p}}_eth_type), - .input_{{p}}_ip_version(input_{{p}}_ip_version), - .input_{{p}}_ip_ihl(input_{{p}}_ip_ihl), - .input_{{p}}_ip_dscp(input_{{p}}_ip_dscp), - .input_{{p}}_ip_ecn(input_{{p}}_ip_ecn), - .input_{{p}}_ip_length(input_{{p}}_ip_length), - .input_{{p}}_ip_identification(input_{{p}}_ip_identification), - .input_{{p}}_ip_flags(input_{{p}}_ip_flags), - .input_{{p}}_ip_fragment_offset(input_{{p}}_ip_fragment_offset), - .input_{{p}}_ip_ttl(input_{{p}}_ip_ttl), - .input_{{p}}_ip_protocol(input_{{p}}_ip_protocol), - .input_{{p}}_ip_header_checksum(input_{{p}}_ip_header_checksum), - .input_{{p}}_ip_source_ip(input_{{p}}_ip_source_ip), - .input_{{p}}_ip_dest_ip(input_{{p}}_ip_dest_ip), - .input_{{p}}_udp_source_port(input_{{p}}_udp_source_port), - .input_{{p}}_udp_dest_port(input_{{p}}_udp_dest_port), - .input_{{p}}_udp_length(input_{{p}}_udp_length), - .input_{{p}}_udp_checksum(input_{{p}}_udp_checksum), - .input_{{p}}_udp_payload_tdata(input_{{p}}_udp_payload_tdata), - .input_{{p}}_udp_payload_tkeep(input_{{p}}_udp_payload_tkeep), - .input_{{p}}_udp_payload_tvalid(input_{{p}}_udp_payload_tvalid & grant[{{p}}]), - .input_{{p}}_udp_payload_tready(input_{{p}}_udp_payload_tready), - .input_{{p}}_udp_payload_tlast(input_{{p}}_udp_payload_tlast), - .input_{{p}}_udp_payload_tuser(input_{{p}}_udp_payload_tuser), -{%- endfor %} - .output_udp_hdr_valid(output_udp_hdr_valid), - .output_udp_hdr_ready(output_udp_hdr_ready), - .output_eth_dest_mac(output_eth_dest_mac), - .output_eth_src_mac(output_eth_src_mac), - .output_eth_type(output_eth_type), - .output_ip_version(output_ip_version), - .output_ip_ihl(output_ip_ihl), - .output_ip_dscp(output_ip_dscp), - .output_ip_ecn(output_ip_ecn), - .output_ip_length(output_ip_length), - .output_ip_identification(output_ip_identification), - .output_ip_flags(output_ip_flags), - .output_ip_fragment_offset(output_ip_fragment_offset), - .output_ip_ttl(output_ip_ttl), - .output_ip_protocol(output_ip_protocol), - .output_ip_header_checksum(output_ip_header_checksum), - .output_ip_source_ip(output_ip_source_ip), - .output_ip_dest_ip(output_ip_dest_ip), - .output_udp_source_port(output_udp_source_port), - .output_udp_dest_port(output_udp_dest_port), - .output_udp_length(output_udp_length), - .output_udp_checksum(output_udp_checksum), - .output_udp_payload_tdata(output_udp_payload_tdata), - .output_udp_payload_tkeep(output_udp_payload_tkeep), - .output_udp_payload_tvalid(output_udp_payload_tvalid), - .output_udp_payload_tready(output_udp_payload_tready), - .output_udp_payload_tlast(output_udp_payload_tlast), - .output_udp_payload_tuser(output_udp_payload_tuser), - .enable(grant_valid), - .select(grant_encoded) -); - -// arbiter instance -arbiter #( - .PORTS({{n}}), - .TYPE(ARB_TYPE), - .BLOCK("ACKNOWLEDGE"), - .LSB_PRIORITY(LSB_PRIORITY) -) -arb_inst ( - .clk(clk), - .rst(rst), - .request(request), - .acknowledge(acknowledge), - .grant(grant), - .grant_valid(grant_valid), - .grant_encoded(grant_encoded) -); - -endmodule - -""") - - output_file.write(t.render( - n=ports, - w=select_width, - name=name, - ports=range(ports) - )) - - print("Done") - -if __name__ == "__main__": - main() - diff --git a/rtl/udp_arb_mux_64_4.v b/rtl/udp_arb_mux_64_4.v deleted file mode 100644 index 93c6ae9a..00000000 --- a/rtl/udp_arb_mux_64_4.v +++ /dev/null @@ -1,376 +0,0 @@ -/* - -Copyright (c) 2014-2018 Alex Forencich - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -// Language: Verilog 2001 - -`timescale 1ns / 1ps - -/* - * UDP 4 port arbitrated multiplexer (64 bit datapath) - */ -module udp_arb_mux_64_4 # -( - // arbitration type: "PRIORITY" or "ROUND_ROBIN" - parameter ARB_TYPE = "PRIORITY", - // LSB priority: "LOW", "HIGH" - parameter LSB_PRIORITY = "HIGH" -) -( - input wire clk, - input wire rst, - - /* - * UDP frame inputs - */ - input wire input_0_udp_hdr_valid, - output wire input_0_udp_hdr_ready, - input wire [47:0] input_0_eth_dest_mac, - input wire [47:0] input_0_eth_src_mac, - input wire [15:0] input_0_eth_type, - input wire [3:0] input_0_ip_version, - input wire [3:0] input_0_ip_ihl, - input wire [5:0] input_0_ip_dscp, - input wire [1:0] input_0_ip_ecn, - input wire [15:0] input_0_ip_length, - input wire [15:0] input_0_ip_identification, - input wire [2:0] input_0_ip_flags, - input wire [12:0] input_0_ip_fragment_offset, - input wire [7:0] input_0_ip_ttl, - input wire [7:0] input_0_ip_protocol, - input wire [15:0] input_0_ip_header_checksum, - input wire [31:0] input_0_ip_source_ip, - input wire [31:0] input_0_ip_dest_ip, - input wire [15:0] input_0_udp_source_port, - input wire [15:0] input_0_udp_dest_port, - input wire [15:0] input_0_udp_length, - input wire [15:0] input_0_udp_checksum, - input wire [63:0] input_0_udp_payload_tdata, - input wire [7:0] input_0_udp_payload_tkeep, - input wire input_0_udp_payload_tvalid, - output wire input_0_udp_payload_tready, - input wire input_0_udp_payload_tlast, - input wire input_0_udp_payload_tuser, - - input wire input_1_udp_hdr_valid, - output wire input_1_udp_hdr_ready, - input wire [47:0] input_1_eth_dest_mac, - input wire [47:0] input_1_eth_src_mac, - input wire [15:0] input_1_eth_type, - input wire [3:0] input_1_ip_version, - input wire [3:0] input_1_ip_ihl, - input wire [5:0] input_1_ip_dscp, - input wire [1:0] input_1_ip_ecn, - input wire [15:0] input_1_ip_length, - input wire [15:0] input_1_ip_identification, - input wire [2:0] input_1_ip_flags, - input wire [12:0] input_1_ip_fragment_offset, - input wire [7:0] input_1_ip_ttl, - input wire [7:0] input_1_ip_protocol, - input wire [15:0] input_1_ip_header_checksum, - input wire [31:0] input_1_ip_source_ip, - input wire [31:0] input_1_ip_dest_ip, - input wire [15:0] input_1_udp_source_port, - input wire [15:0] input_1_udp_dest_port, - input wire [15:0] input_1_udp_length, - input wire [15:0] input_1_udp_checksum, - input wire [63:0] input_1_udp_payload_tdata, - input wire [7:0] input_1_udp_payload_tkeep, - input wire input_1_udp_payload_tvalid, - output wire input_1_udp_payload_tready, - input wire input_1_udp_payload_tlast, - input wire input_1_udp_payload_tuser, - - input wire input_2_udp_hdr_valid, - output wire input_2_udp_hdr_ready, - input wire [47:0] input_2_eth_dest_mac, - input wire [47:0] input_2_eth_src_mac, - input wire [15:0] input_2_eth_type, - input wire [3:0] input_2_ip_version, - input wire [3:0] input_2_ip_ihl, - input wire [5:0] input_2_ip_dscp, - input wire [1:0] input_2_ip_ecn, - input wire [15:0] input_2_ip_length, - input wire [15:0] input_2_ip_identification, - input wire [2:0] input_2_ip_flags, - input wire [12:0] input_2_ip_fragment_offset, - input wire [7:0] input_2_ip_ttl, - input wire [7:0] input_2_ip_protocol, - input wire [15:0] input_2_ip_header_checksum, - input wire [31:0] input_2_ip_source_ip, - input wire [31:0] input_2_ip_dest_ip, - input wire [15:0] input_2_udp_source_port, - input wire [15:0] input_2_udp_dest_port, - input wire [15:0] input_2_udp_length, - input wire [15:0] input_2_udp_checksum, - input wire [63:0] input_2_udp_payload_tdata, - input wire [7:0] input_2_udp_payload_tkeep, - input wire input_2_udp_payload_tvalid, - output wire input_2_udp_payload_tready, - input wire input_2_udp_payload_tlast, - input wire input_2_udp_payload_tuser, - - input wire input_3_udp_hdr_valid, - output wire input_3_udp_hdr_ready, - input wire [47:0] input_3_eth_dest_mac, - input wire [47:0] input_3_eth_src_mac, - input wire [15:0] input_3_eth_type, - input wire [3:0] input_3_ip_version, - input wire [3:0] input_3_ip_ihl, - input wire [5:0] input_3_ip_dscp, - input wire [1:0] input_3_ip_ecn, - input wire [15:0] input_3_ip_length, - input wire [15:0] input_3_ip_identification, - input wire [2:0] input_3_ip_flags, - input wire [12:0] input_3_ip_fragment_offset, - input wire [7:0] input_3_ip_ttl, - input wire [7:0] input_3_ip_protocol, - input wire [15:0] input_3_ip_header_checksum, - input wire [31:0] input_3_ip_source_ip, - input wire [31:0] input_3_ip_dest_ip, - input wire [15:0] input_3_udp_source_port, - input wire [15:0] input_3_udp_dest_port, - input wire [15:0] input_3_udp_length, - input wire [15:0] input_3_udp_checksum, - input wire [63:0] input_3_udp_payload_tdata, - input wire [7:0] input_3_udp_payload_tkeep, - input wire input_3_udp_payload_tvalid, - output wire input_3_udp_payload_tready, - input wire input_3_udp_payload_tlast, - input wire input_3_udp_payload_tuser, - - /* - * UDP frame output - */ - output wire output_udp_hdr_valid, - input wire output_udp_hdr_ready, - output wire [47:0] output_eth_dest_mac, - output wire [47:0] output_eth_src_mac, - output wire [15:0] output_eth_type, - output wire [3:0] output_ip_version, - output wire [3:0] output_ip_ihl, - output wire [5:0] output_ip_dscp, - output wire [1:0] output_ip_ecn, - output wire [15:0] output_ip_length, - output wire [15:0] output_ip_identification, - output wire [2:0] output_ip_flags, - output wire [12:0] output_ip_fragment_offset, - output wire [7:0] output_ip_ttl, - output wire [7:0] output_ip_protocol, - output wire [15:0] output_ip_header_checksum, - output wire [31:0] output_ip_source_ip, - output wire [31:0] output_ip_dest_ip, - output wire [15:0] output_udp_source_port, - output wire [15:0] output_udp_dest_port, - output wire [15:0] output_udp_length, - output wire [15:0] output_udp_checksum, - output wire [63:0] output_udp_payload_tdata, - output wire [7:0] output_udp_payload_tkeep, - output wire output_udp_payload_tvalid, - input wire output_udp_payload_tready, - output wire output_udp_payload_tlast, - output wire output_udp_payload_tuser -); - -wire [3:0] request; -wire [3:0] acknowledge; -wire [3:0] grant; -wire grant_valid; -wire [1:0] grant_encoded; - -assign acknowledge[0] = input_0_udp_payload_tvalid & input_0_udp_payload_tready & input_0_udp_payload_tlast; -assign request[0] = input_0_udp_hdr_valid; -assign acknowledge[1] = input_1_udp_payload_tvalid & input_1_udp_payload_tready & input_1_udp_payload_tlast; -assign request[1] = input_1_udp_hdr_valid; -assign acknowledge[2] = input_2_udp_payload_tvalid & input_2_udp_payload_tready & input_2_udp_payload_tlast; -assign request[2] = input_2_udp_hdr_valid; -assign acknowledge[3] = input_3_udp_payload_tvalid & input_3_udp_payload_tready & input_3_udp_payload_tlast; -assign request[3] = input_3_udp_hdr_valid; - -// mux instance -udp_mux_64_4 -mux_inst ( - .clk(clk), - .rst(rst), - .input_0_udp_hdr_valid(input_0_udp_hdr_valid & grant[0]), - .input_0_udp_hdr_ready(input_0_udp_hdr_ready), - .input_0_eth_dest_mac(input_0_eth_dest_mac), - .input_0_eth_src_mac(input_0_eth_src_mac), - .input_0_eth_type(input_0_eth_type), - .input_0_ip_version(input_0_ip_version), - .input_0_ip_ihl(input_0_ip_ihl), - .input_0_ip_dscp(input_0_ip_dscp), - .input_0_ip_ecn(input_0_ip_ecn), - .input_0_ip_length(input_0_ip_length), - .input_0_ip_identification(input_0_ip_identification), - .input_0_ip_flags(input_0_ip_flags), - .input_0_ip_fragment_offset(input_0_ip_fragment_offset), - .input_0_ip_ttl(input_0_ip_ttl), - .input_0_ip_protocol(input_0_ip_protocol), - .input_0_ip_header_checksum(input_0_ip_header_checksum), - .input_0_ip_source_ip(input_0_ip_source_ip), - .input_0_ip_dest_ip(input_0_ip_dest_ip), - .input_0_udp_source_port(input_0_udp_source_port), - .input_0_udp_dest_port(input_0_udp_dest_port), - .input_0_udp_length(input_0_udp_length), - .input_0_udp_checksum(input_0_udp_checksum), - .input_0_udp_payload_tdata(input_0_udp_payload_tdata), - .input_0_udp_payload_tkeep(input_0_udp_payload_tkeep), - .input_0_udp_payload_tvalid(input_0_udp_payload_tvalid & grant[0]), - .input_0_udp_payload_tready(input_0_udp_payload_tready), - .input_0_udp_payload_tlast(input_0_udp_payload_tlast), - .input_0_udp_payload_tuser(input_0_udp_payload_tuser), - .input_1_udp_hdr_valid(input_1_udp_hdr_valid & grant[1]), - .input_1_udp_hdr_ready(input_1_udp_hdr_ready), - .input_1_eth_dest_mac(input_1_eth_dest_mac), - .input_1_eth_src_mac(input_1_eth_src_mac), - .input_1_eth_type(input_1_eth_type), - .input_1_ip_version(input_1_ip_version), - .input_1_ip_ihl(input_1_ip_ihl), - .input_1_ip_dscp(input_1_ip_dscp), - .input_1_ip_ecn(input_1_ip_ecn), - .input_1_ip_length(input_1_ip_length), - .input_1_ip_identification(input_1_ip_identification), - .input_1_ip_flags(input_1_ip_flags), - .input_1_ip_fragment_offset(input_1_ip_fragment_offset), - .input_1_ip_ttl(input_1_ip_ttl), - .input_1_ip_protocol(input_1_ip_protocol), - .input_1_ip_header_checksum(input_1_ip_header_checksum), - .input_1_ip_source_ip(input_1_ip_source_ip), - .input_1_ip_dest_ip(input_1_ip_dest_ip), - .input_1_udp_source_port(input_1_udp_source_port), - .input_1_udp_dest_port(input_1_udp_dest_port), - .input_1_udp_length(input_1_udp_length), - .input_1_udp_checksum(input_1_udp_checksum), - .input_1_udp_payload_tdata(input_1_udp_payload_tdata), - .input_1_udp_payload_tkeep(input_1_udp_payload_tkeep), - .input_1_udp_payload_tvalid(input_1_udp_payload_tvalid & grant[1]), - .input_1_udp_payload_tready(input_1_udp_payload_tready), - .input_1_udp_payload_tlast(input_1_udp_payload_tlast), - .input_1_udp_payload_tuser(input_1_udp_payload_tuser), - .input_2_udp_hdr_valid(input_2_udp_hdr_valid & grant[2]), - .input_2_udp_hdr_ready(input_2_udp_hdr_ready), - .input_2_eth_dest_mac(input_2_eth_dest_mac), - .input_2_eth_src_mac(input_2_eth_src_mac), - .input_2_eth_type(input_2_eth_type), - .input_2_ip_version(input_2_ip_version), - .input_2_ip_ihl(input_2_ip_ihl), - .input_2_ip_dscp(input_2_ip_dscp), - .input_2_ip_ecn(input_2_ip_ecn), - .input_2_ip_length(input_2_ip_length), - .input_2_ip_identification(input_2_ip_identification), - .input_2_ip_flags(input_2_ip_flags), - .input_2_ip_fragment_offset(input_2_ip_fragment_offset), - .input_2_ip_ttl(input_2_ip_ttl), - .input_2_ip_protocol(input_2_ip_protocol), - .input_2_ip_header_checksum(input_2_ip_header_checksum), - .input_2_ip_source_ip(input_2_ip_source_ip), - .input_2_ip_dest_ip(input_2_ip_dest_ip), - .input_2_udp_source_port(input_2_udp_source_port), - .input_2_udp_dest_port(input_2_udp_dest_port), - .input_2_udp_length(input_2_udp_length), - .input_2_udp_checksum(input_2_udp_checksum), - .input_2_udp_payload_tdata(input_2_udp_payload_tdata), - .input_2_udp_payload_tkeep(input_2_udp_payload_tkeep), - .input_2_udp_payload_tvalid(input_2_udp_payload_tvalid & grant[2]), - .input_2_udp_payload_tready(input_2_udp_payload_tready), - .input_2_udp_payload_tlast(input_2_udp_payload_tlast), - .input_2_udp_payload_tuser(input_2_udp_payload_tuser), - .input_3_udp_hdr_valid(input_3_udp_hdr_valid & grant[3]), - .input_3_udp_hdr_ready(input_3_udp_hdr_ready), - .input_3_eth_dest_mac(input_3_eth_dest_mac), - .input_3_eth_src_mac(input_3_eth_src_mac), - .input_3_eth_type(input_3_eth_type), - .input_3_ip_version(input_3_ip_version), - .input_3_ip_ihl(input_3_ip_ihl), - .input_3_ip_dscp(input_3_ip_dscp), - .input_3_ip_ecn(input_3_ip_ecn), - .input_3_ip_length(input_3_ip_length), - .input_3_ip_identification(input_3_ip_identification), - .input_3_ip_flags(input_3_ip_flags), - .input_3_ip_fragment_offset(input_3_ip_fragment_offset), - .input_3_ip_ttl(input_3_ip_ttl), - .input_3_ip_protocol(input_3_ip_protocol), - .input_3_ip_header_checksum(input_3_ip_header_checksum), - .input_3_ip_source_ip(input_3_ip_source_ip), - .input_3_ip_dest_ip(input_3_ip_dest_ip), - .input_3_udp_source_port(input_3_udp_source_port), - .input_3_udp_dest_port(input_3_udp_dest_port), - .input_3_udp_length(input_3_udp_length), - .input_3_udp_checksum(input_3_udp_checksum), - .input_3_udp_payload_tdata(input_3_udp_payload_tdata), - .input_3_udp_payload_tkeep(input_3_udp_payload_tkeep), - .input_3_udp_payload_tvalid(input_3_udp_payload_tvalid & grant[3]), - .input_3_udp_payload_tready(input_3_udp_payload_tready), - .input_3_udp_payload_tlast(input_3_udp_payload_tlast), - .input_3_udp_payload_tuser(input_3_udp_payload_tuser), - .output_udp_hdr_valid(output_udp_hdr_valid), - .output_udp_hdr_ready(output_udp_hdr_ready), - .output_eth_dest_mac(output_eth_dest_mac), - .output_eth_src_mac(output_eth_src_mac), - .output_eth_type(output_eth_type), - .output_ip_version(output_ip_version), - .output_ip_ihl(output_ip_ihl), - .output_ip_dscp(output_ip_dscp), - .output_ip_ecn(output_ip_ecn), - .output_ip_length(output_ip_length), - .output_ip_identification(output_ip_identification), - .output_ip_flags(output_ip_flags), - .output_ip_fragment_offset(output_ip_fragment_offset), - .output_ip_ttl(output_ip_ttl), - .output_ip_protocol(output_ip_protocol), - .output_ip_header_checksum(output_ip_header_checksum), - .output_ip_source_ip(output_ip_source_ip), - .output_ip_dest_ip(output_ip_dest_ip), - .output_udp_source_port(output_udp_source_port), - .output_udp_dest_port(output_udp_dest_port), - .output_udp_length(output_udp_length), - .output_udp_checksum(output_udp_checksum), - .output_udp_payload_tdata(output_udp_payload_tdata), - .output_udp_payload_tkeep(output_udp_payload_tkeep), - .output_udp_payload_tvalid(output_udp_payload_tvalid), - .output_udp_payload_tready(output_udp_payload_tready), - .output_udp_payload_tlast(output_udp_payload_tlast), - .output_udp_payload_tuser(output_udp_payload_tuser), - .enable(grant_valid), - .select(grant_encoded) -); - -// arbiter instance -arbiter #( - .PORTS(4), - .TYPE(ARB_TYPE), - .BLOCK("ACKNOWLEDGE"), - .LSB_PRIORITY(LSB_PRIORITY) -) -arb_inst ( - .clk(clk), - .rst(rst), - .request(request), - .acknowledge(acknowledge), - .grant(grant), - .grant_valid(grant_valid), - .grant_encoded(grant_encoded) -); - -endmodule diff --git a/tb/test_udp_arb_mux_4.py b/tb/test_udp_arb_mux_4.py index 1c8f2bea..6b98097e 100755 --- a/tb/test_udp_arb_mux_4.py +++ b/tb/test_udp_arb_mux_4.py @@ -28,13 +28,12 @@ import os import udp_ep -module = 'udp_arb_mux_4' -testbench = 'test_%s' % module +module = 'udp_arb_mux' +testbench = 'test_%s_4' % module srcs = [] srcs.append("../rtl/%s.v" % module) -srcs.append("../rtl/udp_mux_4.v") srcs.append("../lib/axis/rtl/arbiter.v") srcs.append("../lib/axis/rtl/priority_encoder.v") srcs.append("%s.v" % testbench) @@ -45,334 +44,203 @@ build_cmd = "iverilog -o %s.vvp %s" % (testbench, src) def bench(): + # Parameters + S_COUNT = 4 + DATA_WIDTH = 8 + KEEP_ENABLE = (DATA_WIDTH>8) + KEEP_WIDTH = (DATA_WIDTH/8) + ID_ENABLE = 1 + ID_WIDTH = 8 + DEST_ENABLE = 1 + DEST_WIDTH = 8 + USER_ENABLE = 1 + USER_WIDTH = 1 + ARB_TYPE = "PRIORITY" + LSB_PRIORITY = "HIGH" + # Inputs clk = Signal(bool(0)) rst = Signal(bool(0)) current_test = Signal(intbv(0)[8:]) - input_0_udp_hdr_valid = Signal(bool(0)) - input_0_eth_dest_mac = Signal(intbv(0)[48:]) - input_0_eth_src_mac = Signal(intbv(0)[48:]) - input_0_eth_type = Signal(intbv(0)[16:]) - input_0_ip_version = Signal(intbv(0)[4:]) - input_0_ip_ihl = Signal(intbv(0)[4:]) - input_0_ip_dscp = Signal(intbv(0)[6:]) - input_0_ip_ecn = Signal(intbv(0)[2:]) - input_0_ip_length = Signal(intbv(0)[16:]) - input_0_ip_identification = Signal(intbv(0)[16:]) - input_0_ip_flags = Signal(intbv(0)[3:]) - input_0_ip_fragment_offset = Signal(intbv(0)[13:]) - input_0_ip_ttl = Signal(intbv(0)[8:]) - input_0_ip_protocol = Signal(intbv(0)[8:]) - input_0_ip_header_checksum = Signal(intbv(0)[16:]) - input_0_ip_source_ip = Signal(intbv(0)[32:]) - input_0_ip_dest_ip = Signal(intbv(0)[32:]) - input_0_udp_source_port = Signal(intbv(0)[16:]) - input_0_udp_dest_port = Signal(intbv(0)[16:]) - input_0_udp_length = Signal(intbv(0)[16:]) - input_0_udp_checksum = Signal(intbv(0)[16:]) - input_0_udp_payload_tdata = Signal(intbv(0)[8:]) - input_0_udp_payload_tvalid = Signal(bool(0)) - input_0_udp_payload_tlast = Signal(bool(0)) - input_0_udp_payload_tuser = Signal(bool(0)) - input_1_udp_hdr_valid = Signal(bool(0)) - input_1_eth_dest_mac = Signal(intbv(0)[48:]) - input_1_eth_src_mac = Signal(intbv(0)[48:]) - input_1_eth_type = Signal(intbv(0)[16:]) - input_1_ip_version = Signal(intbv(0)[4:]) - input_1_ip_ihl = Signal(intbv(0)[4:]) - input_1_ip_dscp = Signal(intbv(0)[6:]) - input_1_ip_ecn = Signal(intbv(0)[2:]) - input_1_ip_length = Signal(intbv(0)[16:]) - input_1_ip_identification = Signal(intbv(0)[16:]) - input_1_ip_flags = Signal(intbv(0)[3:]) - input_1_ip_fragment_offset = Signal(intbv(0)[13:]) - input_1_ip_ttl = Signal(intbv(0)[8:]) - input_1_ip_protocol = Signal(intbv(0)[8:]) - input_1_ip_header_checksum = Signal(intbv(0)[16:]) - input_1_ip_source_ip = Signal(intbv(0)[32:]) - input_1_ip_dest_ip = Signal(intbv(0)[32:]) - input_1_udp_source_port = Signal(intbv(0)[16:]) - input_1_udp_dest_port = Signal(intbv(0)[16:]) - input_1_udp_length = Signal(intbv(0)[16:]) - input_1_udp_checksum = Signal(intbv(0)[16:]) - input_1_udp_payload_tdata = Signal(intbv(0)[8:]) - input_1_udp_payload_tvalid = Signal(bool(0)) - input_1_udp_payload_tlast = Signal(bool(0)) - input_1_udp_payload_tuser = Signal(bool(0)) - input_2_udp_hdr_valid = Signal(bool(0)) - input_2_eth_dest_mac = Signal(intbv(0)[48:]) - input_2_eth_src_mac = Signal(intbv(0)[48:]) - input_2_eth_type = Signal(intbv(0)[16:]) - input_2_ip_version = Signal(intbv(0)[4:]) - input_2_ip_ihl = Signal(intbv(0)[4:]) - input_2_ip_dscp = Signal(intbv(0)[6:]) - input_2_ip_ecn = Signal(intbv(0)[2:]) - input_2_ip_length = Signal(intbv(0)[16:]) - input_2_ip_identification = Signal(intbv(0)[16:]) - input_2_ip_flags = Signal(intbv(0)[3:]) - input_2_ip_fragment_offset = Signal(intbv(0)[13:]) - input_2_ip_ttl = Signal(intbv(0)[8:]) - input_2_ip_protocol = Signal(intbv(0)[8:]) - input_2_ip_header_checksum = Signal(intbv(0)[16:]) - input_2_ip_source_ip = Signal(intbv(0)[32:]) - input_2_ip_dest_ip = Signal(intbv(0)[32:]) - input_2_udp_source_port = Signal(intbv(0)[16:]) - input_2_udp_dest_port = Signal(intbv(0)[16:]) - input_2_udp_length = Signal(intbv(0)[16:]) - input_2_udp_checksum = Signal(intbv(0)[16:]) - input_2_udp_payload_tdata = Signal(intbv(0)[8:]) - input_2_udp_payload_tvalid = Signal(bool(0)) - input_2_udp_payload_tlast = Signal(bool(0)) - input_2_udp_payload_tuser = Signal(bool(0)) - input_3_udp_hdr_valid = Signal(bool(0)) - input_3_eth_dest_mac = Signal(intbv(0)[48:]) - input_3_eth_src_mac = Signal(intbv(0)[48:]) - input_3_eth_type = Signal(intbv(0)[16:]) - input_3_ip_version = Signal(intbv(0)[4:]) - input_3_ip_ihl = Signal(intbv(0)[4:]) - input_3_ip_dscp = Signal(intbv(0)[6:]) - input_3_ip_ecn = Signal(intbv(0)[2:]) - input_3_ip_length = Signal(intbv(0)[16:]) - input_3_ip_identification = Signal(intbv(0)[16:]) - input_3_ip_flags = Signal(intbv(0)[3:]) - input_3_ip_fragment_offset = Signal(intbv(0)[13:]) - input_3_ip_ttl = Signal(intbv(0)[8:]) - input_3_ip_protocol = Signal(intbv(0)[8:]) - input_3_ip_header_checksum = Signal(intbv(0)[16:]) - input_3_ip_source_ip = Signal(intbv(0)[32:]) - input_3_ip_dest_ip = Signal(intbv(0)[32:]) - input_3_udp_source_port = Signal(intbv(0)[16:]) - input_3_udp_dest_port = Signal(intbv(0)[16:]) - input_3_udp_length = Signal(intbv(0)[16:]) - input_3_udp_checksum = Signal(intbv(0)[16:]) - input_3_udp_payload_tdata = Signal(intbv(0)[8:]) - input_3_udp_payload_tvalid = Signal(bool(0)) - input_3_udp_payload_tlast = Signal(bool(0)) - input_3_udp_payload_tuser = Signal(bool(0)) + s_udp_hdr_valid_list = [Signal(bool(0)) for i in range(S_COUNT)] + s_eth_dest_mac_list = [Signal(intbv(0)[48:]) for i in range(S_COUNT)] + s_eth_src_mac_list = [Signal(intbv(0)[48:]) for i in range(S_COUNT)] + s_eth_type_list = [Signal(intbv(0)[16:]) for i in range(S_COUNT)] + s_ip_version_list = [Signal(intbv(0)[4:]) for i in range(S_COUNT)] + s_ip_ihl_list = [Signal(intbv(0)[4:]) for i in range(S_COUNT)] + s_ip_dscp_list = [Signal(intbv(0)[6:]) for i in range(S_COUNT)] + s_ip_ecn_list = [Signal(intbv(0)[2:]) for i in range(S_COUNT)] + s_ip_length_list = [Signal(intbv(0)[16:]) for i in range(S_COUNT)] + s_ip_identification_list = [Signal(intbv(0)[16:]) for i in range(S_COUNT)] + s_ip_flags_list = [Signal(intbv(0)[3:]) for i in range(S_COUNT)] + s_ip_fragment_offset_list = [Signal(intbv(0)[13:]) for i in range(S_COUNT)] + s_ip_ttl_list = [Signal(intbv(0)[8:]) for i in range(S_COUNT)] + s_ip_protocol_list = [Signal(intbv(0)[8:]) for i in range(S_COUNT)] + s_ip_header_checksum_list = [Signal(intbv(0)[16:]) for i in range(S_COUNT)] + s_ip_source_ip_list = [Signal(intbv(0)[32:]) for i in range(S_COUNT)] + s_ip_dest_ip_list = [Signal(intbv(0)[32:]) for i in range(S_COUNT)] + s_udp_source_port_list = [Signal(intbv(0)[16:]) for i in range(S_COUNT)] + s_udp_dest_port_list = [Signal(intbv(0)[16:]) for i in range(S_COUNT)] + s_udp_length_list = [Signal(intbv(0)[16:]) for i in range(S_COUNT)] + s_udp_checksum_list = [Signal(intbv(0)[16:]) for i in range(S_COUNT)] + s_udp_payload_axis_tdata_list = [Signal(intbv(0)[DATA_WIDTH:]) for i in range(S_COUNT)] + s_udp_payload_axis_tkeep_list = [Signal(intbv(1)[KEEP_WIDTH:]) for i in range(S_COUNT)] + s_udp_payload_axis_tvalid_list = [Signal(bool(0)) for i in range(S_COUNT)] + s_udp_payload_axis_tlast_list = [Signal(bool(0)) for i in range(S_COUNT)] + s_udp_payload_axis_tid_list = [Signal(intbv(0)[ID_WIDTH:]) for i in range(S_COUNT)] + s_udp_payload_axis_tdest_list = [Signal(intbv(0)[DEST_WIDTH:]) for i in range(S_COUNT)] + s_udp_payload_axis_tuser_list = [Signal(intbv(0)[USER_WIDTH:]) for i in range(S_COUNT)] - output_udp_payload_tready = Signal(bool(0)) - output_udp_hdr_ready = Signal(bool(0)) + s_udp_hdr_valid = ConcatSignal(*reversed(s_udp_hdr_valid_list)) + s_eth_dest_mac = ConcatSignal(*reversed(s_eth_dest_mac_list)) + s_eth_src_mac = ConcatSignal(*reversed(s_eth_src_mac_list)) + s_eth_type = ConcatSignal(*reversed(s_eth_type_list)) + s_ip_version = ConcatSignal(*reversed(s_ip_version_list)) + s_ip_ihl = ConcatSignal(*reversed(s_ip_ihl_list)) + s_ip_dscp = ConcatSignal(*reversed(s_ip_dscp_list)) + s_ip_ecn = ConcatSignal(*reversed(s_ip_ecn_list)) + s_ip_length = ConcatSignal(*reversed(s_ip_length_list)) + s_ip_identification = ConcatSignal(*reversed(s_ip_identification_list)) + s_ip_flags = ConcatSignal(*reversed(s_ip_flags_list)) + s_ip_fragment_offset = ConcatSignal(*reversed(s_ip_fragment_offset_list)) + s_ip_ttl = ConcatSignal(*reversed(s_ip_ttl_list)) + s_ip_protocol = ConcatSignal(*reversed(s_ip_protocol_list)) + s_ip_header_checksum = ConcatSignal(*reversed(s_ip_header_checksum_list)) + s_ip_source_ip = ConcatSignal(*reversed(s_ip_source_ip_list)) + s_ip_dest_ip = ConcatSignal(*reversed(s_ip_dest_ip_list)) + s_udp_source_port = ConcatSignal(*reversed(s_udp_source_port_list)) + s_udp_dest_port = ConcatSignal(*reversed(s_udp_dest_port_list)) + s_udp_length = ConcatSignal(*reversed(s_udp_length_list)) + s_udp_checksum = ConcatSignal(*reversed(s_udp_checksum_list)) + s_udp_payload_axis_tdata = ConcatSignal(*reversed(s_udp_payload_axis_tdata_list)) + s_udp_payload_axis_tkeep = ConcatSignal(*reversed(s_udp_payload_axis_tkeep_list)) + s_udp_payload_axis_tvalid = ConcatSignal(*reversed(s_udp_payload_axis_tvalid_list)) + s_udp_payload_axis_tlast = ConcatSignal(*reversed(s_udp_payload_axis_tlast_list)) + s_udp_payload_axis_tid = ConcatSignal(*reversed(s_udp_payload_axis_tid_list)) + s_udp_payload_axis_tdest = ConcatSignal(*reversed(s_udp_payload_axis_tdest_list)) + s_udp_payload_axis_tuser = ConcatSignal(*reversed(s_udp_payload_axis_tuser_list)) + + m_udp_hdr_ready = Signal(bool(0)) + m_udp_payload_axis_tready = Signal(bool(0)) # Outputs - input_0_udp_hdr_ready = Signal(bool(0)) - input_0_udp_payload_tready = Signal(bool(0)) - input_1_udp_hdr_ready = Signal(bool(0)) - input_1_udp_payload_tready = Signal(bool(0)) - input_2_udp_hdr_ready = Signal(bool(0)) - input_2_udp_payload_tready = Signal(bool(0)) - input_3_udp_hdr_ready = Signal(bool(0)) - input_3_udp_payload_tready = Signal(bool(0)) + s_udp_hdr_ready = Signal(intbv(0)[S_COUNT:]) + s_udp_payload_axis_tready = Signal(intbv(0)[S_COUNT:]) - output_udp_hdr_valid = Signal(bool(0)) - output_eth_dest_mac = Signal(intbv(0)[48:]) - output_eth_src_mac = Signal(intbv(0)[48:]) - output_eth_type = Signal(intbv(0)[16:]) - output_ip_version = Signal(intbv(0)[4:]) - output_ip_ihl = Signal(intbv(0)[4:]) - output_ip_dscp = Signal(intbv(0)[6:]) - output_ip_ecn = Signal(intbv(0)[2:]) - output_ip_length = Signal(intbv(0)[16:]) - output_ip_identification = Signal(intbv(0)[16:]) - output_ip_flags = Signal(intbv(0)[3:]) - output_ip_fragment_offset = Signal(intbv(0)[13:]) - output_ip_ttl = Signal(intbv(0)[8:]) - output_ip_protocol = Signal(intbv(0)[8:]) - output_ip_header_checksum = Signal(intbv(0)[16:]) - output_ip_source_ip = Signal(intbv(0)[32:]) - output_ip_dest_ip = Signal(intbv(0)[32:]) - output_udp_source_port = Signal(intbv(0)[16:]) - output_udp_dest_port = Signal(intbv(0)[16:]) - output_udp_length = Signal(intbv(0)[16:]) - output_udp_checksum = Signal(intbv(0)[16:]) - output_udp_payload_tdata = Signal(intbv(0)[8:]) - output_udp_payload_tvalid = Signal(bool(0)) - output_udp_payload_tlast = Signal(bool(0)) - output_udp_payload_tuser = Signal(bool(0)) + s_udp_hdr_ready_list = [s_udp_hdr_ready(i) for i in range(S_COUNT)] + s_udp_payload_axis_tready_list = [s_udp_payload_axis_tready(i) for i in range(S_COUNT)] + + m_udp_hdr_valid = Signal(bool(0)) + m_eth_dest_mac = Signal(intbv(0)[48:]) + m_eth_src_mac = Signal(intbv(0)[48:]) + m_eth_type = Signal(intbv(0)[16:]) + m_ip_version = Signal(intbv(0)[4:]) + m_ip_ihl = Signal(intbv(0)[4:]) + m_ip_dscp = Signal(intbv(0)[6:]) + m_ip_ecn = Signal(intbv(0)[2:]) + m_ip_length = Signal(intbv(0)[16:]) + m_ip_identification = Signal(intbv(0)[16:]) + m_ip_flags = Signal(intbv(0)[3:]) + m_ip_fragment_offset = Signal(intbv(0)[13:]) + m_ip_ttl = Signal(intbv(0)[8:]) + m_ip_protocol = Signal(intbv(0)[8:]) + m_ip_header_checksum = Signal(intbv(0)[16:]) + m_ip_source_ip = Signal(intbv(0)[32:]) + m_ip_dest_ip = Signal(intbv(0)[32:]) + m_udp_source_port = Signal(intbv(0)[16:]) + m_udp_dest_port = Signal(intbv(0)[16:]) + m_udp_length = Signal(intbv(0)[16:]) + m_udp_checksum = Signal(intbv(0)[16:]) + m_udp_payload_axis_tdata = Signal(intbv(0)[DATA_WIDTH:]) + m_udp_payload_axis_tkeep = Signal(intbv(1)[KEEP_WIDTH:]) + m_udp_payload_axis_tvalid = Signal(bool(0)) + m_udp_payload_axis_tlast = Signal(bool(0)) + m_udp_payload_axis_tid = Signal(intbv(0)[ID_WIDTH:]) + m_udp_payload_axis_tdest = Signal(intbv(0)[DEST_WIDTH:]) + m_udp_payload_axis_tuser = Signal(intbv(0)[USER_WIDTH:]) # sources and sinks - source_0_pause = Signal(bool(0)) - source_1_pause = Signal(bool(0)) - source_2_pause = Signal(bool(0)) - source_3_pause = Signal(bool(0)) + source_pause_list = [] + source_list = [] + source_logic_list = [] sink_pause = Signal(bool(0)) - source_0 = udp_ep.UDPFrameSource() + for k in range(S_COUNT): + s = udp_ep.UDPFrameSource() + p = Signal(bool(0)) - source_0_logic = source_0.create_logic( - clk, - rst, - udp_hdr_ready=input_0_udp_hdr_ready, - udp_hdr_valid=input_0_udp_hdr_valid, - eth_dest_mac=input_0_eth_dest_mac, - eth_src_mac=input_0_eth_src_mac, - eth_type=input_0_eth_type, - ip_version=input_0_ip_version, - ip_ihl=input_0_ip_ihl, - ip_dscp=input_0_ip_dscp, - ip_ecn=input_0_ip_ecn, - ip_length=input_0_ip_length, - ip_identification=input_0_ip_identification, - ip_flags=input_0_ip_flags, - ip_fragment_offset=input_0_ip_fragment_offset, - ip_ttl=input_0_ip_ttl, - ip_protocol=input_0_ip_protocol, - ip_header_checksum=input_0_ip_header_checksum, - ip_source_ip=input_0_ip_source_ip, - ip_dest_ip=input_0_ip_dest_ip, - udp_source_port=input_0_udp_source_port, - udp_dest_port=input_0_udp_dest_port, - udp_length=input_0_udp_length, - udp_checksum=input_0_udp_checksum, - udp_payload_tdata=input_0_udp_payload_tdata, - udp_payload_tvalid=input_0_udp_payload_tvalid, - udp_payload_tready=input_0_udp_payload_tready, - udp_payload_tlast=input_0_udp_payload_tlast, - udp_payload_tuser=input_0_udp_payload_tuser, - pause=source_0_pause, - name='source_0' - ) + source_list.append(s) + source_pause_list.append(p) - source_1 = udp_ep.UDPFrameSource() - - source_1_logic = source_1.create_logic( - clk, - rst, - udp_hdr_ready=input_1_udp_hdr_ready, - udp_hdr_valid=input_1_udp_hdr_valid, - eth_dest_mac=input_1_eth_dest_mac, - eth_src_mac=input_1_eth_src_mac, - eth_type=input_1_eth_type, - ip_version=input_1_ip_version, - ip_ihl=input_1_ip_ihl, - ip_dscp=input_1_ip_dscp, - ip_ecn=input_1_ip_ecn, - ip_length=input_1_ip_length, - ip_identification=input_1_ip_identification, - ip_flags=input_1_ip_flags, - ip_fragment_offset=input_1_ip_fragment_offset, - ip_ttl=input_1_ip_ttl, - ip_protocol=input_1_ip_protocol, - ip_header_checksum=input_1_ip_header_checksum, - ip_source_ip=input_1_ip_source_ip, - ip_dest_ip=input_1_ip_dest_ip, - udp_source_port=input_1_udp_source_port, - udp_dest_port=input_1_udp_dest_port, - udp_length=input_1_udp_length, - udp_checksum=input_1_udp_checksum, - udp_payload_tdata=input_1_udp_payload_tdata, - udp_payload_tvalid=input_1_udp_payload_tvalid, - udp_payload_tready=input_1_udp_payload_tready, - udp_payload_tlast=input_1_udp_payload_tlast, - udp_payload_tuser=input_1_udp_payload_tuser, - pause=source_1_pause, - name='source_1' - ) - - source_2 = udp_ep.UDPFrameSource() - - source_2_logic = source_2.create_logic( - clk, - rst, - udp_hdr_ready=input_2_udp_hdr_ready, - udp_hdr_valid=input_2_udp_hdr_valid, - eth_dest_mac=input_2_eth_dest_mac, - eth_src_mac=input_2_eth_src_mac, - eth_type=input_2_eth_type, - ip_version=input_2_ip_version, - ip_ihl=input_2_ip_ihl, - ip_dscp=input_2_ip_dscp, - ip_ecn=input_2_ip_ecn, - ip_length=input_2_ip_length, - ip_identification=input_2_ip_identification, - ip_flags=input_2_ip_flags, - ip_fragment_offset=input_2_ip_fragment_offset, - ip_ttl=input_2_ip_ttl, - ip_protocol=input_2_ip_protocol, - ip_header_checksum=input_2_ip_header_checksum, - ip_source_ip=input_2_ip_source_ip, - ip_dest_ip=input_2_ip_dest_ip, - udp_source_port=input_2_udp_source_port, - udp_dest_port=input_2_udp_dest_port, - udp_length=input_2_udp_length, - udp_checksum=input_2_udp_checksum, - udp_payload_tdata=input_2_udp_payload_tdata, - udp_payload_tvalid=input_2_udp_payload_tvalid, - udp_payload_tready=input_2_udp_payload_tready, - udp_payload_tlast=input_2_udp_payload_tlast, - udp_payload_tuser=input_2_udp_payload_tuser, - pause=source_2_pause, - name='source_2' - ) - - source_3 = udp_ep.UDPFrameSource() - - source_3_logic = source_3.create_logic( - clk, - rst, - udp_hdr_ready=input_3_udp_hdr_ready, - udp_hdr_valid=input_3_udp_hdr_valid, - eth_dest_mac=input_3_eth_dest_mac, - eth_src_mac=input_3_eth_src_mac, - eth_type=input_3_eth_type, - ip_version=input_3_ip_version, - ip_ihl=input_3_ip_ihl, - ip_dscp=input_3_ip_dscp, - ip_ecn=input_3_ip_ecn, - ip_length=input_3_ip_length, - ip_identification=input_3_ip_identification, - ip_flags=input_3_ip_flags, - ip_fragment_offset=input_3_ip_fragment_offset, - ip_ttl=input_3_ip_ttl, - ip_protocol=input_3_ip_protocol, - ip_header_checksum=input_3_ip_header_checksum, - ip_source_ip=input_3_ip_source_ip, - ip_dest_ip=input_3_ip_dest_ip, - udp_source_port=input_3_udp_source_port, - udp_dest_port=input_3_udp_dest_port, - udp_length=input_3_udp_length, - udp_checksum=input_3_udp_checksum, - udp_payload_tdata=input_3_udp_payload_tdata, - udp_payload_tvalid=input_3_udp_payload_tvalid, - udp_payload_tready=input_3_udp_payload_tready, - udp_payload_tlast=input_3_udp_payload_tlast, - udp_payload_tuser=input_3_udp_payload_tuser, - pause=source_3_pause, - name='source_3' - ) + source_logic_list.append(s.create_logic( + clk, + rst, + udp_hdr_ready=s_udp_hdr_ready_list[k], + udp_hdr_valid=s_udp_hdr_valid_list[k], + eth_dest_mac=s_eth_dest_mac_list[k], + eth_src_mac=s_eth_src_mac_list[k], + eth_type=s_eth_type_list[k], + ip_version=s_ip_version_list[k], + ip_ihl=s_ip_ihl_list[k], + ip_dscp=s_ip_dscp_list[k], + ip_ecn=s_ip_ecn_list[k], + ip_length=s_ip_length_list[k], + ip_identification=s_ip_identification_list[k], + ip_flags=s_ip_flags_list[k], + ip_fragment_offset=s_ip_fragment_offset_list[k], + ip_ttl=s_ip_ttl_list[k], + ip_protocol=s_ip_protocol_list[k], + ip_header_checksum=s_ip_header_checksum_list[k], + ip_source_ip=s_ip_source_ip_list[k], + ip_dest_ip=s_ip_dest_ip_list[k], + udp_source_port=s_udp_source_port_list[k], + udp_dest_port=s_udp_dest_port_list[k], + udp_length=s_udp_length_list[k], + udp_checksum=s_udp_checksum_list[k], + udp_payload_tdata=s_udp_payload_axis_tdata_list[k], + udp_payload_tkeep=s_udp_payload_axis_tkeep_list[k], + udp_payload_tvalid=s_udp_payload_axis_tvalid_list[k], + udp_payload_tready=s_udp_payload_axis_tready_list[k], + udp_payload_tlast=s_udp_payload_axis_tlast_list[k], + udp_payload_tuser=s_udp_payload_axis_tuser_list[k], + pause=p, + name='source_%d' % k + )) sink = udp_ep.UDPFrameSink() sink_logic = sink.create_logic( clk, rst, - udp_hdr_ready=output_udp_hdr_ready, - udp_hdr_valid=output_udp_hdr_valid, - eth_dest_mac=output_eth_dest_mac, - eth_src_mac=output_eth_src_mac, - eth_type=output_eth_type, - ip_version=output_ip_version, - ip_ihl=output_ip_ihl, - ip_dscp=output_ip_dscp, - ip_ecn=output_ip_ecn, - ip_length=output_ip_length, - ip_identification=output_ip_identification, - ip_flags=output_ip_flags, - ip_fragment_offset=output_ip_fragment_offset, - ip_ttl=output_ip_ttl, - ip_protocol=output_ip_protocol, - ip_header_checksum=output_ip_header_checksum, - ip_source_ip=output_ip_source_ip, - ip_dest_ip=output_ip_dest_ip, - udp_source_port=output_udp_source_port, - udp_dest_port=output_udp_dest_port, - udp_length=output_udp_length, - udp_checksum=output_udp_checksum, - udp_payload_tdata=output_udp_payload_tdata, - udp_payload_tvalid=output_udp_payload_tvalid, - udp_payload_tready=output_udp_payload_tready, - udp_payload_tlast=output_udp_payload_tlast, - udp_payload_tuser=output_udp_payload_tuser, + udp_hdr_ready=m_udp_hdr_ready, + udp_hdr_valid=m_udp_hdr_valid, + eth_dest_mac=m_eth_dest_mac, + eth_src_mac=m_eth_src_mac, + eth_type=m_eth_type, + ip_version=m_ip_version, + ip_ihl=m_ip_ihl, + ip_dscp=m_ip_dscp, + ip_ecn=m_ip_ecn, + ip_length=m_ip_length, + ip_identification=m_ip_identification, + ip_flags=m_ip_flags, + ip_fragment_offset=m_ip_fragment_offset, + ip_ttl=m_ip_ttl, + ip_protocol=m_ip_protocol, + ip_header_checksum=m_ip_header_checksum, + ip_source_ip=m_ip_source_ip, + ip_dest_ip=m_ip_dest_ip, + udp_source_port=m_udp_source_port, + udp_dest_port=m_udp_dest_port, + udp_length=m_udp_length, + udp_checksum=m_udp_checksum, + udp_payload_tdata=m_udp_payload_axis_tdata, + udp_payload_tkeep=m_udp_payload_axis_tkeep, + udp_payload_tvalid=m_udp_payload_axis_tvalid, + udp_payload_tready=m_udp_payload_axis_tready, + udp_payload_tlast=m_udp_payload_axis_tlast, + udp_payload_tuser=m_udp_payload_axis_tuser, pause=sink_pause, name='sink' ) @@ -387,142 +255,67 @@ def bench(): rst=rst, current_test=current_test, - input_0_udp_hdr_valid=input_0_udp_hdr_valid, - input_0_udp_hdr_ready=input_0_udp_hdr_ready, - input_0_eth_dest_mac=input_0_eth_dest_mac, - input_0_eth_src_mac=input_0_eth_src_mac, - input_0_eth_type=input_0_eth_type, - input_0_ip_version=input_0_ip_version, - input_0_ip_ihl=input_0_ip_ihl, - input_0_ip_dscp=input_0_ip_dscp, - input_0_ip_ecn=input_0_ip_ecn, - input_0_ip_length=input_0_ip_length, - input_0_ip_identification=input_0_ip_identification, - input_0_ip_flags=input_0_ip_flags, - input_0_ip_fragment_offset=input_0_ip_fragment_offset, - input_0_ip_ttl=input_0_ip_ttl, - input_0_ip_protocol=input_0_ip_protocol, - input_0_ip_header_checksum=input_0_ip_header_checksum, - input_0_ip_source_ip=input_0_ip_source_ip, - input_0_ip_dest_ip=input_0_ip_dest_ip, - input_0_udp_source_port=input_0_udp_source_port, - input_0_udp_dest_port=input_0_udp_dest_port, - input_0_udp_length=input_0_udp_length, - input_0_udp_checksum=input_0_udp_checksum, - input_0_udp_payload_tdata=input_0_udp_payload_tdata, - input_0_udp_payload_tvalid=input_0_udp_payload_tvalid, - input_0_udp_payload_tready=input_0_udp_payload_tready, - input_0_udp_payload_tlast=input_0_udp_payload_tlast, - input_0_udp_payload_tuser=input_0_udp_payload_tuser, - input_1_udp_hdr_valid=input_1_udp_hdr_valid, - input_1_udp_hdr_ready=input_1_udp_hdr_ready, - input_1_eth_dest_mac=input_1_eth_dest_mac, - input_1_eth_src_mac=input_1_eth_src_mac, - input_1_eth_type=input_1_eth_type, - input_1_ip_version=input_1_ip_version, - input_1_ip_ihl=input_1_ip_ihl, - input_1_ip_dscp=input_1_ip_dscp, - input_1_ip_ecn=input_1_ip_ecn, - input_1_ip_length=input_1_ip_length, - input_1_ip_identification=input_1_ip_identification, - input_1_ip_flags=input_1_ip_flags, - input_1_ip_fragment_offset=input_1_ip_fragment_offset, - input_1_ip_ttl=input_1_ip_ttl, - input_1_ip_protocol=input_1_ip_protocol, - input_1_ip_header_checksum=input_1_ip_header_checksum, - input_1_ip_source_ip=input_1_ip_source_ip, - input_1_ip_dest_ip=input_1_ip_dest_ip, - input_1_udp_source_port=input_1_udp_source_port, - input_1_udp_dest_port=input_1_udp_dest_port, - input_1_udp_length=input_1_udp_length, - input_1_udp_checksum=input_1_udp_checksum, - input_1_udp_payload_tdata=input_1_udp_payload_tdata, - input_1_udp_payload_tvalid=input_1_udp_payload_tvalid, - input_1_udp_payload_tready=input_1_udp_payload_tready, - input_1_udp_payload_tlast=input_1_udp_payload_tlast, - input_1_udp_payload_tuser=input_1_udp_payload_tuser, - input_2_udp_hdr_valid=input_2_udp_hdr_valid, - input_2_udp_hdr_ready=input_2_udp_hdr_ready, - input_2_eth_dest_mac=input_2_eth_dest_mac, - input_2_eth_src_mac=input_2_eth_src_mac, - input_2_eth_type=input_2_eth_type, - input_2_ip_version=input_2_ip_version, - input_2_ip_ihl=input_2_ip_ihl, - input_2_ip_dscp=input_2_ip_dscp, - input_2_ip_ecn=input_2_ip_ecn, - input_2_ip_length=input_2_ip_length, - input_2_ip_identification=input_2_ip_identification, - input_2_ip_flags=input_2_ip_flags, - input_2_ip_fragment_offset=input_2_ip_fragment_offset, - input_2_ip_ttl=input_2_ip_ttl, - input_2_ip_protocol=input_2_ip_protocol, - input_2_ip_header_checksum=input_2_ip_header_checksum, - input_2_ip_source_ip=input_2_ip_source_ip, - input_2_ip_dest_ip=input_2_ip_dest_ip, - input_2_udp_source_port=input_2_udp_source_port, - input_2_udp_dest_port=input_2_udp_dest_port, - input_2_udp_length=input_2_udp_length, - input_2_udp_checksum=input_2_udp_checksum, - input_2_udp_payload_tdata=input_2_udp_payload_tdata, - input_2_udp_payload_tvalid=input_2_udp_payload_tvalid, - input_2_udp_payload_tready=input_2_udp_payload_tready, - input_2_udp_payload_tlast=input_2_udp_payload_tlast, - input_2_udp_payload_tuser=input_2_udp_payload_tuser, - input_3_udp_hdr_valid=input_3_udp_hdr_valid, - input_3_udp_hdr_ready=input_3_udp_hdr_ready, - input_3_eth_dest_mac=input_3_eth_dest_mac, - input_3_eth_src_mac=input_3_eth_src_mac, - input_3_eth_type=input_3_eth_type, - input_3_ip_version=input_3_ip_version, - input_3_ip_ihl=input_3_ip_ihl, - input_3_ip_dscp=input_3_ip_dscp, - input_3_ip_ecn=input_3_ip_ecn, - input_3_ip_length=input_3_ip_length, - input_3_ip_identification=input_3_ip_identification, - input_3_ip_flags=input_3_ip_flags, - input_3_ip_fragment_offset=input_3_ip_fragment_offset, - input_3_ip_ttl=input_3_ip_ttl, - input_3_ip_protocol=input_3_ip_protocol, - input_3_ip_header_checksum=input_3_ip_header_checksum, - input_3_ip_source_ip=input_3_ip_source_ip, - input_3_ip_dest_ip=input_3_ip_dest_ip, - input_3_udp_source_port=input_3_udp_source_port, - input_3_udp_dest_port=input_3_udp_dest_port, - input_3_udp_length=input_3_udp_length, - input_3_udp_checksum=input_3_udp_checksum, - input_3_udp_payload_tdata=input_3_udp_payload_tdata, - input_3_udp_payload_tvalid=input_3_udp_payload_tvalid, - input_3_udp_payload_tready=input_3_udp_payload_tready, - input_3_udp_payload_tlast=input_3_udp_payload_tlast, - input_3_udp_payload_tuser=input_3_udp_payload_tuser, + s_udp_hdr_valid=s_udp_hdr_valid, + s_udp_hdr_ready=s_udp_hdr_ready, + s_eth_dest_mac=s_eth_dest_mac, + s_eth_src_mac=s_eth_src_mac, + s_eth_type=s_eth_type, + s_ip_version=s_ip_version, + s_ip_ihl=s_ip_ihl, + s_ip_dscp=s_ip_dscp, + s_ip_ecn=s_ip_ecn, + s_ip_length=s_ip_length, + s_ip_identification=s_ip_identification, + s_ip_flags=s_ip_flags, + s_ip_fragment_offset=s_ip_fragment_offset, + s_ip_ttl=s_ip_ttl, + s_ip_protocol=s_ip_protocol, + s_ip_header_checksum=s_ip_header_checksum, + s_ip_source_ip=s_ip_source_ip, + s_ip_dest_ip=s_ip_dest_ip, + s_udp_source_port=s_udp_source_port, + s_udp_dest_port=s_udp_dest_port, + s_udp_length=s_udp_length, + s_udp_checksum=s_udp_checksum, + s_udp_payload_axis_tdata=s_udp_payload_axis_tdata, + s_udp_payload_axis_tkeep=s_udp_payload_axis_tkeep, + s_udp_payload_axis_tvalid=s_udp_payload_axis_tvalid, + s_udp_payload_axis_tready=s_udp_payload_axis_tready, + s_udp_payload_axis_tlast=s_udp_payload_axis_tlast, + s_udp_payload_axis_tid=s_udp_payload_axis_tid, + s_udp_payload_axis_tdest=s_udp_payload_axis_tdest, + s_udp_payload_axis_tuser=s_udp_payload_axis_tuser, - output_udp_hdr_valid=output_udp_hdr_valid, - output_udp_hdr_ready=output_udp_hdr_ready, - output_eth_dest_mac=output_eth_dest_mac, - output_eth_src_mac=output_eth_src_mac, - output_eth_type=output_eth_type, - output_ip_version=output_ip_version, - output_ip_ihl=output_ip_ihl, - output_ip_dscp=output_ip_dscp, - output_ip_ecn=output_ip_ecn, - output_ip_length=output_ip_length, - output_ip_identification=output_ip_identification, - output_ip_flags=output_ip_flags, - output_ip_fragment_offset=output_ip_fragment_offset, - output_ip_ttl=output_ip_ttl, - output_ip_protocol=output_ip_protocol, - output_ip_header_checksum=output_ip_header_checksum, - output_ip_source_ip=output_ip_source_ip, - output_ip_dest_ip=output_ip_dest_ip, - output_udp_source_port=output_udp_source_port, - output_udp_dest_port=output_udp_dest_port, - output_udp_length=output_udp_length, - output_udp_checksum=output_udp_checksum, - output_udp_payload_tdata=output_udp_payload_tdata, - output_udp_payload_tvalid=output_udp_payload_tvalid, - output_udp_payload_tready=output_udp_payload_tready, - output_udp_payload_tlast=output_udp_payload_tlast, - output_udp_payload_tuser=output_udp_payload_tuser + m_udp_hdr_valid=m_udp_hdr_valid, + m_udp_hdr_ready=m_udp_hdr_ready, + m_eth_dest_mac=m_eth_dest_mac, + m_eth_src_mac=m_eth_src_mac, + m_eth_type=m_eth_type, + m_ip_version=m_ip_version, + m_ip_ihl=m_ip_ihl, + m_ip_dscp=m_ip_dscp, + m_ip_ecn=m_ip_ecn, + m_ip_length=m_ip_length, + m_ip_identification=m_ip_identification, + m_ip_flags=m_ip_flags, + m_ip_fragment_offset=m_ip_fragment_offset, + m_ip_ttl=m_ip_ttl, + m_ip_protocol=m_ip_protocol, + m_ip_header_checksum=m_ip_header_checksum, + m_ip_source_ip=m_ip_source_ip, + m_ip_dest_ip=m_ip_dest_ip, + m_udp_source_port=m_udp_source_port, + m_udp_dest_port=m_udp_dest_port, + m_udp_length=m_udp_length, + m_udp_checksum=m_udp_checksum, + m_udp_payload_axis_tdata=m_udp_payload_axis_tdata, + m_udp_payload_axis_tkeep=m_udp_payload_axis_tkeep, + m_udp_payload_axis_tvalid=m_udp_payload_axis_tvalid, + m_udp_payload_axis_tready=m_udp_payload_axis_tready, + m_udp_payload_axis_tlast=m_udp_payload_axis_tlast, + m_udp_payload_axis_tid=m_udp_payload_axis_tid, + m_udp_payload_axis_tdest=m_udp_payload_axis_tdest, + m_udp_payload_axis_tuser=m_udp_payload_axis_tuser ) @always(delay(4)) @@ -570,7 +363,7 @@ def bench(): test_frame.payload = bytearray(range(32)) test_frame.build() - source_0.send(test_frame) + source_list[0].send(test_frame) yield sink.wait() rx_frame = sink.recv() @@ -607,7 +400,7 @@ def bench(): test_frame.payload = bytearray(range(32)) test_frame.build() - source_1.send(test_frame) + source_list[1].send(test_frame) yield sink.wait() rx_frame = sink.recv() @@ -667,8 +460,8 @@ def bench(): test_frame2.payload = bytearray(range(32)) test_frame2.build() - source_0.send(test_frame1) - source_0.send(test_frame2) + source_list[0].send(test_frame1) + source_list[0].send(test_frame2) yield sink.wait() rx_frame = sink.recv() @@ -733,8 +526,8 @@ def bench(): test_frame2.payload = bytearray(range(32)) test_frame2.build() - source_1.send(test_frame1) - source_2.send(test_frame2) + source_list[1].send(test_frame1) + source_list[2].send(test_frame2) yield sink.wait() rx_frame = sink.recv() @@ -799,23 +592,23 @@ def bench(): test_frame2.payload = bytearray(range(32)) test_frame2.build() - source_1.send(test_frame1) - source_2.send(test_frame2) + source_list[1].send(test_frame1) + source_list[2].send(test_frame2) yield clk.posedge yield clk.posedge - while input_0_udp_payload_tvalid or input_1_udp_payload_tvalid or input_2_udp_payload_tvalid or input_3_udp_payload_tvalid: - source_0_pause.next = True - source_1_pause.next = True - source_2_pause.next = True - source_3_pause.next = True + while s_udp_payload_axis_tvalid: + source_pause_list[0].next = True + source_pause_list[1].next = True + source_pause_list[2].next = True + source_pause_list[3].next = True yield clk.posedge yield clk.posedge yield clk.posedge - source_0_pause.next = False - source_1_pause.next = False - source_2_pause.next = False - source_3_pause.next = False + source_pause_list[0].next = False + source_pause_list[1].next = False + source_pause_list[2].next = False + source_pause_list[3].next = False yield clk.posedge yield sink.wait() @@ -881,12 +674,12 @@ def bench(): test_frame2.payload = bytearray(range(32)) test_frame2.build() - source_1.send(test_frame1) - source_2.send(test_frame2) + source_list[1].send(test_frame1) + source_list[2].send(test_frame2) yield clk.posedge yield clk.posedge - while input_0_udp_payload_tvalid or input_1_udp_payload_tvalid or input_2_udp_payload_tvalid or input_3_udp_payload_tvalid: + while s_udp_payload_axis_tvalid: sink_pause.next = True yield clk.posedge yield clk.posedge @@ -957,17 +750,17 @@ def bench(): test_frame2.payload = bytearray(range(32)) test_frame2.build() - source_1.send(test_frame1) - source_2.send(test_frame2) - source_2.send(test_frame2) - source_2.send(test_frame2) - source_2.send(test_frame2) - source_2.send(test_frame2) + source_list[1].send(test_frame1) + source_list[2].send(test_frame2) + source_list[2].send(test_frame2) + source_list[2].send(test_frame2) + source_list[2].send(test_frame2) + source_list[2].send(test_frame2) yield clk.posedge yield delay(800) yield clk.posedge - source_1.send(test_frame1) + source_list[1].send(test_frame1) yield sink.wait() rx_frame = sink.recv() diff --git a/tb/test_udp_arb_mux_4.v b/tb/test_udp_arb_mux_4.v index 922bf798..4072e624 100644 --- a/tb/test_udp_arb_mux_4.v +++ b/tb/test_udp_arb_mux_4.v @@ -27,154 +27,93 @@ THE SOFTWARE. `timescale 1ns / 1ps /* - * Testbench for udp_arb_mux_4 + * Testbench for udp_arb_mux */ module test_udp_arb_mux_4; +// Parameters +parameter S_COUNT = 4; +parameter DATA_WIDTH = 8; +parameter KEEP_ENABLE = (DATA_WIDTH>8); +parameter KEEP_WIDTH = (DATA_WIDTH/8); +parameter ID_ENABLE = 1; +parameter ID_WIDTH = 8; +parameter DEST_ENABLE = 1; +parameter DEST_WIDTH = 8; +parameter USER_ENABLE = 1; +parameter USER_WIDTH = 1; +parameter ARB_TYPE = "PRIORITY"; +parameter LSB_PRIORITY = "HIGH"; + // Inputs reg clk = 0; reg rst = 0; reg [7:0] current_test = 0; -reg input_0_udp_hdr_valid = 0; -reg [47:0] input_0_eth_dest_mac = 0; -reg [47:0] input_0_eth_src_mac = 0; -reg [15:0] input_0_eth_type = 0; -reg [3:0] input_0_ip_version = 0; -reg [3:0] input_0_ip_ihl = 0; -reg [5:0] input_0_ip_dscp = 0; -reg [1:0] input_0_ip_ecn = 0; -reg [15:0] input_0_ip_length = 0; -reg [15:0] input_0_ip_identification = 0; -reg [2:0] input_0_ip_flags = 0; -reg [12:0] input_0_ip_fragment_offset = 0; -reg [7:0] input_0_ip_ttl = 0; -reg [7:0] input_0_ip_protocol = 0; -reg [15:0] input_0_ip_header_checksum = 0; -reg [31:0] input_0_ip_source_ip = 0; -reg [31:0] input_0_ip_dest_ip = 0; -reg [15:0] input_0_udp_source_port = 0; -reg [15:0] input_0_udp_dest_port = 0; -reg [15:0] input_0_udp_length = 0; -reg [15:0] input_0_udp_checksum = 0; -reg [7:0] input_0_udp_payload_tdata = 0; -reg input_0_udp_payload_tvalid = 0; -reg input_0_udp_payload_tlast = 0; -reg input_0_udp_payload_tuser = 0; -reg input_1_udp_hdr_valid = 0; -reg [47:0] input_1_eth_dest_mac = 0; -reg [47:0] input_1_eth_src_mac = 0; -reg [15:0] input_1_eth_type = 0; -reg [3:0] input_1_ip_version = 0; -reg [3:0] input_1_ip_ihl = 0; -reg [5:0] input_1_ip_dscp = 0; -reg [1:0] input_1_ip_ecn = 0; -reg [15:0] input_1_ip_length = 0; -reg [15:0] input_1_ip_identification = 0; -reg [2:0] input_1_ip_flags = 0; -reg [12:0] input_1_ip_fragment_offset = 0; -reg [7:0] input_1_ip_ttl = 0; -reg [7:0] input_1_ip_protocol = 0; -reg [15:0] input_1_ip_header_checksum = 0; -reg [31:0] input_1_ip_source_ip = 0; -reg [31:0] input_1_ip_dest_ip = 0; -reg [15:0] input_1_udp_source_port = 0; -reg [15:0] input_1_udp_dest_port = 0; -reg [15:0] input_1_udp_length = 0; -reg [15:0] input_1_udp_checksum = 0; -reg [7:0] input_1_udp_payload_tdata = 0; -reg input_1_udp_payload_tvalid = 0; -reg input_1_udp_payload_tlast = 0; -reg input_1_udp_payload_tuser = 0; -reg input_2_udp_hdr_valid = 0; -reg [47:0] input_2_eth_dest_mac = 0; -reg [47:0] input_2_eth_src_mac = 0; -reg [15:0] input_2_eth_type = 0; -reg [3:0] input_2_ip_version = 0; -reg [3:0] input_2_ip_ihl = 0; -reg [5:0] input_2_ip_dscp = 0; -reg [1:0] input_2_ip_ecn = 0; -reg [15:0] input_2_ip_length = 0; -reg [15:0] input_2_ip_identification = 0; -reg [2:0] input_2_ip_flags = 0; -reg [12:0] input_2_ip_fragment_offset = 0; -reg [7:0] input_2_ip_ttl = 0; -reg [7:0] input_2_ip_protocol = 0; -reg [15:0] input_2_ip_header_checksum = 0; -reg [31:0] input_2_ip_source_ip = 0; -reg [31:0] input_2_ip_dest_ip = 0; -reg [15:0] input_2_udp_source_port = 0; -reg [15:0] input_2_udp_dest_port = 0; -reg [15:0] input_2_udp_length = 0; -reg [15:0] input_2_udp_checksum = 0; -reg [7:0] input_2_udp_payload_tdata = 0; -reg input_2_udp_payload_tvalid = 0; -reg input_2_udp_payload_tlast = 0; -reg input_2_udp_payload_tuser = 0; -reg input_3_udp_hdr_valid = 0; -reg [47:0] input_3_eth_dest_mac = 0; -reg [47:0] input_3_eth_src_mac = 0; -reg [15:0] input_3_eth_type = 0; -reg [3:0] input_3_ip_version = 0; -reg [3:0] input_3_ip_ihl = 0; -reg [5:0] input_3_ip_dscp = 0; -reg [1:0] input_3_ip_ecn = 0; -reg [15:0] input_3_ip_length = 0; -reg [15:0] input_3_ip_identification = 0; -reg [2:0] input_3_ip_flags = 0; -reg [12:0] input_3_ip_fragment_offset = 0; -reg [7:0] input_3_ip_ttl = 0; -reg [7:0] input_3_ip_protocol = 0; -reg [15:0] input_3_ip_header_checksum = 0; -reg [31:0] input_3_ip_source_ip = 0; -reg [31:0] input_3_ip_dest_ip = 0; -reg [15:0] input_3_udp_source_port = 0; -reg [15:0] input_3_udp_dest_port = 0; -reg [15:0] input_3_udp_length = 0; -reg [15:0] input_3_udp_checksum = 0; -reg [7:0] input_3_udp_payload_tdata = 0; -reg input_3_udp_payload_tvalid = 0; -reg input_3_udp_payload_tlast = 0; -reg input_3_udp_payload_tuser = 0; +reg [S_COUNT-1:0] s_udp_hdr_valid = 0; +reg [S_COUNT*48-1:0] s_eth_dest_mac = 0; +reg [S_COUNT*48-1:0] s_eth_src_mac = 0; +reg [S_COUNT*16-1:0] s_eth_type = 0; +reg [S_COUNT*4-1:0] s_ip_version = 0; +reg [S_COUNT*4-1:0] s_ip_ihl = 0; +reg [S_COUNT*6-1:0] s_ip_dscp = 0; +reg [S_COUNT*2-1:0] s_ip_ecn = 0; +reg [S_COUNT*16-1:0] s_ip_length = 0; +reg [S_COUNT*16-1:0] s_ip_identification = 0; +reg [S_COUNT*3-1:0] s_ip_flags = 0; +reg [S_COUNT*13-1:0] s_ip_fragment_offset = 0; +reg [S_COUNT*8-1:0] s_ip_ttl = 0; +reg [S_COUNT*8-1:0] s_ip_protocol = 0; +reg [S_COUNT*16-1:0] s_ip_header_checksum = 0; +reg [S_COUNT*32-1:0] s_ip_source_ip = 0; +reg [S_COUNT*32-1:0] s_ip_dest_ip = 0; +reg [S_COUNT*16-1:0] s_udp_source_port = 0; +reg [S_COUNT*16-1:0] s_udp_dest_port = 0; +reg [S_COUNT*16-1:0] s_udp_length = 0; +reg [S_COUNT*16-1:0] s_udp_checksum = 0; +reg [S_COUNT*DATA_WIDTH-1:0] s_udp_payload_axis_tdata = 0; +reg [S_COUNT*KEEP_WIDTH-1:0] s_udp_payload_axis_tkeep = 0; +reg [S_COUNT-1:0] s_udp_payload_axis_tvalid = 0; +reg [S_COUNT-1:0] s_udp_payload_axis_tlast = 0; +reg [S_COUNT*ID_WIDTH-1:0] s_udp_payload_axis_tid = 0; +reg [S_COUNT*DEST_WIDTH-1:0] s_udp_payload_axis_tdest = 0; +reg [S_COUNT*USER_WIDTH-1:0] s_udp_payload_axis_tuser = 0; -reg output_udp_hdr_ready = 0; -reg output_udp_payload_tready = 0; +reg m_udp_hdr_ready = 0; +reg m_udp_payload_axis_tready = 0; // Outputs -wire input_0_udp_payload_tready; -wire input_0_udp_hdr_ready; -wire input_1_udp_payload_tready; -wire input_1_udp_hdr_ready; -wire input_2_udp_payload_tready; -wire input_2_udp_hdr_ready; -wire input_3_udp_payload_tready; -wire input_3_udp_hdr_ready; +wire [S_COUNT-1:0] s_udp_hdr_ready; +wire [S_COUNT-1:0] s_udp_payload_axis_tready; -wire output_udp_hdr_valid; -wire [47:0] output_eth_dest_mac; -wire [47:0] output_eth_src_mac; -wire [15:0] output_eth_type; -wire [3:0] output_ip_version; -wire [3:0] output_ip_ihl; -wire [5:0] output_ip_dscp; -wire [1:0] output_ip_ecn; -wire [15:0] output_ip_length; -wire [15:0] output_ip_identification; -wire [2:0] output_ip_flags; -wire [12:0] output_ip_fragment_offset; -wire [7:0] output_ip_ttl; -wire [7:0] output_ip_protocol; -wire [15:0] output_ip_header_checksum; -wire [31:0] output_ip_source_ip; -wire [31:0] output_ip_dest_ip; -wire [15:0] output_udp_source_port; -wire [15:0] output_udp_dest_port; -wire [15:0] output_udp_length; -wire [15:0] output_udp_checksum; -wire [7:0] output_udp_payload_tdata; -wire output_udp_payload_tvalid; -wire output_udp_payload_tlast; -wire output_udp_payload_tuser; +wire m_udp_hdr_valid; +wire [47:0] m_eth_dest_mac; +wire [47:0] m_eth_src_mac; +wire [15:0] m_eth_type; +wire [3:0] m_ip_version; +wire [3:0] m_ip_ihl; +wire [5:0] m_ip_dscp; +wire [1:0] m_ip_ecn; +wire [15:0] m_ip_length; +wire [15:0] m_ip_identification; +wire [2:0] m_ip_flags; +wire [12:0] m_ip_fragment_offset; +wire [7:0] m_ip_ttl; +wire [7:0] m_ip_protocol; +wire [15:0] m_ip_header_checksum; +wire [31:0] m_ip_source_ip; +wire [31:0] m_ip_dest_ip; +wire [15:0] m_udp_source_port; +wire [15:0] m_udp_dest_port; +wire [15:0] m_udp_length; +wire [15:0] m_udp_checksum; +wire [DATA_WIDTH-1:0] m_udp_payload_axis_tdata; +wire [KEEP_WIDTH-1:0] m_udp_payload_axis_tkeep; +wire m_udp_payload_axis_tvalid; +wire m_udp_payload_axis_tlast; +wire [ID_WIDTH-1:0] m_udp_payload_axis_tid; +wire [DEST_WIDTH-1:0] m_udp_payload_axis_tdest; +wire [USER_WIDTH-1:0] m_udp_payload_axis_tuser; initial begin // myhdl integration @@ -182,143 +121,68 @@ initial begin clk, rst, current_test, - input_0_udp_hdr_valid, - input_0_eth_dest_mac, - input_0_eth_src_mac, - input_0_eth_type, - input_0_ip_version, - input_0_ip_ihl, - input_0_ip_dscp, - input_0_ip_ecn, - input_0_ip_length, - input_0_ip_identification, - input_0_ip_flags, - input_0_ip_fragment_offset, - input_0_ip_ttl, - input_0_ip_protocol, - input_0_ip_header_checksum, - input_0_ip_source_ip, - input_0_ip_dest_ip, - input_0_udp_source_port, - input_0_udp_dest_port, - input_0_udp_length, - input_0_udp_checksum, - input_0_udp_payload_tdata, - input_0_udp_payload_tvalid, - input_0_udp_payload_tlast, - input_0_udp_payload_tuser, - input_1_udp_hdr_valid, - input_1_eth_dest_mac, - input_1_eth_src_mac, - input_1_eth_type, - input_1_ip_version, - input_1_ip_ihl, - input_1_ip_dscp, - input_1_ip_ecn, - input_1_ip_length, - input_1_ip_identification, - input_1_ip_flags, - input_1_ip_fragment_offset, - input_1_ip_ttl, - input_1_ip_protocol, - input_1_ip_header_checksum, - input_1_ip_source_ip, - input_1_ip_dest_ip, - input_1_udp_source_port, - input_1_udp_dest_port, - input_1_udp_length, - input_1_udp_checksum, - input_1_udp_payload_tdata, - input_1_udp_payload_tvalid, - input_1_udp_payload_tlast, - input_1_udp_payload_tuser, - input_2_udp_hdr_valid, - input_2_eth_dest_mac, - input_2_eth_src_mac, - input_2_eth_type, - input_2_ip_version, - input_2_ip_ihl, - input_2_ip_dscp, - input_2_ip_ecn, - input_2_ip_length, - input_2_ip_identification, - input_2_ip_flags, - input_2_ip_fragment_offset, - input_2_ip_ttl, - input_2_ip_protocol, - input_2_ip_header_checksum, - input_2_ip_source_ip, - input_2_ip_dest_ip, - input_2_udp_source_port, - input_2_udp_dest_port, - input_2_udp_length, - input_2_udp_checksum, - input_2_udp_payload_tdata, - input_2_udp_payload_tvalid, - input_2_udp_payload_tlast, - input_2_udp_payload_tuser, - input_3_udp_hdr_valid, - input_3_eth_dest_mac, - input_3_eth_src_mac, - input_3_eth_type, - input_3_ip_version, - input_3_ip_ihl, - input_3_ip_dscp, - input_3_ip_ecn, - input_3_ip_length, - input_3_ip_identification, - input_3_ip_flags, - input_3_ip_fragment_offset, - input_3_ip_ttl, - input_3_ip_protocol, - input_3_ip_header_checksum, - input_3_ip_source_ip, - input_3_ip_dest_ip, - input_3_udp_source_port, - input_3_udp_dest_port, - input_3_udp_length, - input_3_udp_checksum, - input_3_udp_payload_tdata, - input_3_udp_payload_tvalid, - input_3_udp_payload_tlast, - input_3_udp_payload_tuser, - output_udp_hdr_ready, - output_udp_payload_tready + s_udp_hdr_valid, + s_eth_dest_mac, + s_eth_src_mac, + s_eth_type, + s_ip_version, + s_ip_ihl, + s_ip_dscp, + s_ip_ecn, + s_ip_length, + s_ip_identification, + s_ip_flags, + s_ip_fragment_offset, + s_ip_ttl, + s_ip_protocol, + s_ip_header_checksum, + s_ip_source_ip, + s_ip_dest_ip, + s_udp_source_port, + s_udp_dest_port, + s_udp_length, + s_udp_checksum, + s_udp_payload_axis_tdata, + s_udp_payload_axis_tkeep, + s_udp_payload_axis_tvalid, + s_udp_payload_axis_tlast, + s_udp_payload_axis_tid, + s_udp_payload_axis_tdest, + s_udp_payload_axis_tuser, + m_udp_hdr_ready, + m_udp_payload_axis_tready ); $to_myhdl( - input_0_udp_hdr_ready, - input_0_udp_payload_tready, - input_1_udp_hdr_ready, - input_1_udp_payload_tready, - input_2_udp_hdr_ready, - input_2_udp_payload_tready, - input_3_udp_hdr_ready, - input_3_udp_payload_tready, - output_udp_hdr_valid, - output_eth_dest_mac, - output_eth_src_mac, - output_eth_type, - output_ip_version, - output_ip_ihl, - output_ip_dscp, - output_ip_ecn, - output_ip_length, - output_ip_identification, - output_ip_flags, - output_ip_fragment_offset, - output_ip_ttl, - output_ip_protocol, - output_ip_header_checksum, - output_ip_source_ip, - output_ip_dest_ip, - output_udp_source_port, - output_udp_dest_port, - output_udp_length, - output_udp_checksum, - output_udp_payload_tdata, - output_udp_payload_tvalid, - output_udp_payload_tlast, - output_udp_payload_tuser + s_udp_hdr_ready, + s_udp_payload_axis_tready, + m_udp_hdr_valid, + m_eth_dest_mac, + m_eth_src_mac, + m_eth_type, + m_ip_version, + m_ip_ihl, + m_ip_dscp, + m_ip_ecn, + m_ip_length, + m_ip_identification, + m_ip_flags, + m_ip_fragment_offset, + m_ip_ttl, + m_ip_protocol, + m_ip_header_checksum, + m_ip_source_ip, + m_ip_dest_ip, + m_udp_source_port, + m_udp_dest_port, + m_udp_length, + m_udp_checksum, + m_udp_payload_axis_tdata, + m_udp_payload_axis_tkeep, + m_udp_payload_axis_tvalid, + m_udp_payload_axis_tlast, + m_udp_payload_axis_tid, + m_udp_payload_axis_tdest, + m_udp_payload_axis_tuser ); // dump file @@ -326,147 +190,85 @@ initial begin $dumpvars(0, test_udp_arb_mux_4); end -udp_arb_mux_4 +udp_arb_mux #( + .S_COUNT(S_COUNT), + .DATA_WIDTH(DATA_WIDTH), + .KEEP_ENABLE(KEEP_ENABLE), + .KEEP_WIDTH(KEEP_WIDTH), + .ID_ENABLE(ID_ENABLE), + .ID_WIDTH(ID_WIDTH), + .DEST_ENABLE(DEST_ENABLE), + .DEST_WIDTH(DEST_WIDTH), + .USER_ENABLE(USER_ENABLE), + .USER_WIDTH(USER_WIDTH), + .ARB_TYPE(ARB_TYPE), + .LSB_PRIORITY(LSB_PRIORITY) +) UUT ( .clk(clk), .rst(rst), - // UDP frame inputs - .input_0_udp_hdr_valid(input_0_udp_hdr_valid), - .input_0_udp_hdr_ready(input_0_udp_hdr_ready), - .input_0_eth_dest_mac(input_0_eth_dest_mac), - .input_0_eth_src_mac(input_0_eth_src_mac), - .input_0_eth_type(input_0_eth_type), - .input_0_ip_version(input_0_ip_version), - .input_0_ip_ihl(input_0_ip_ihl), - .input_0_ip_dscp(input_0_ip_dscp), - .input_0_ip_ecn(input_0_ip_ecn), - .input_0_ip_length(input_0_ip_length), - .input_0_ip_identification(input_0_ip_identification), - .input_0_ip_flags(input_0_ip_flags), - .input_0_ip_fragment_offset(input_0_ip_fragment_offset), - .input_0_ip_ttl(input_0_ip_ttl), - .input_0_ip_protocol(input_0_ip_protocol), - .input_0_ip_header_checksum(input_0_ip_header_checksum), - .input_0_ip_source_ip(input_0_ip_source_ip), - .input_0_ip_dest_ip(input_0_ip_dest_ip), - .input_0_udp_source_port(input_0_udp_source_port), - .input_0_udp_dest_port(input_0_udp_dest_port), - .input_0_udp_length(input_0_udp_length), - .input_0_udp_checksum(input_0_udp_checksum), - .input_0_udp_payload_tdata(input_0_udp_payload_tdata), - .input_0_udp_payload_tvalid(input_0_udp_payload_tvalid), - .input_0_udp_payload_tready(input_0_udp_payload_tready), - .input_0_udp_payload_tlast(input_0_udp_payload_tlast), - .input_0_udp_payload_tuser(input_0_udp_payload_tuser), - .input_1_udp_hdr_valid(input_1_udp_hdr_valid), - .input_1_udp_hdr_ready(input_1_udp_hdr_ready), - .input_1_eth_dest_mac(input_1_eth_dest_mac), - .input_1_eth_src_mac(input_1_eth_src_mac), - .input_1_eth_type(input_1_eth_type), - .input_1_ip_version(input_1_ip_version), - .input_1_ip_ihl(input_1_ip_ihl), - .input_1_ip_dscp(input_1_ip_dscp), - .input_1_ip_ecn(input_1_ip_ecn), - .input_1_ip_length(input_1_ip_length), - .input_1_ip_identification(input_1_ip_identification), - .input_1_ip_flags(input_1_ip_flags), - .input_1_ip_fragment_offset(input_1_ip_fragment_offset), - .input_1_ip_ttl(input_1_ip_ttl), - .input_1_ip_protocol(input_1_ip_protocol), - .input_1_ip_header_checksum(input_1_ip_header_checksum), - .input_1_ip_source_ip(input_1_ip_source_ip), - .input_1_ip_dest_ip(input_1_ip_dest_ip), - .input_1_udp_source_port(input_1_udp_source_port), - .input_1_udp_dest_port(input_1_udp_dest_port), - .input_1_udp_length(input_1_udp_length), - .input_1_udp_checksum(input_1_udp_checksum), - .input_1_udp_payload_tdata(input_1_udp_payload_tdata), - .input_1_udp_payload_tvalid(input_1_udp_payload_tvalid), - .input_1_udp_payload_tready(input_1_udp_payload_tready), - .input_1_udp_payload_tlast(input_1_udp_payload_tlast), - .input_1_udp_payload_tuser(input_1_udp_payload_tuser), - .input_2_udp_hdr_valid(input_2_udp_hdr_valid), - .input_2_udp_hdr_ready(input_2_udp_hdr_ready), - .input_2_eth_dest_mac(input_2_eth_dest_mac), - .input_2_eth_src_mac(input_2_eth_src_mac), - .input_2_eth_type(input_2_eth_type), - .input_2_ip_version(input_2_ip_version), - .input_2_ip_ihl(input_2_ip_ihl), - .input_2_ip_dscp(input_2_ip_dscp), - .input_2_ip_ecn(input_2_ip_ecn), - .input_2_ip_length(input_2_ip_length), - .input_2_ip_identification(input_2_ip_identification), - .input_2_ip_flags(input_2_ip_flags), - .input_2_ip_fragment_offset(input_2_ip_fragment_offset), - .input_2_ip_ttl(input_2_ip_ttl), - .input_2_ip_protocol(input_2_ip_protocol), - .input_2_ip_header_checksum(input_2_ip_header_checksum), - .input_2_ip_source_ip(input_2_ip_source_ip), - .input_2_ip_dest_ip(input_2_ip_dest_ip), - .input_2_udp_source_port(input_2_udp_source_port), - .input_2_udp_dest_port(input_2_udp_dest_port), - .input_2_udp_length(input_2_udp_length), - .input_2_udp_checksum(input_2_udp_checksum), - .input_2_udp_payload_tdata(input_2_udp_payload_tdata), - .input_2_udp_payload_tvalid(input_2_udp_payload_tvalid), - .input_2_udp_payload_tready(input_2_udp_payload_tready), - .input_2_udp_payload_tlast(input_2_udp_payload_tlast), - .input_2_udp_payload_tuser(input_2_udp_payload_tuser), - .input_3_udp_hdr_valid(input_3_udp_hdr_valid), - .input_3_udp_hdr_ready(input_3_udp_hdr_ready), - .input_3_eth_dest_mac(input_3_eth_dest_mac), - .input_3_eth_src_mac(input_3_eth_src_mac), - .input_3_eth_type(input_3_eth_type), - .input_3_ip_version(input_3_ip_version), - .input_3_ip_ihl(input_3_ip_ihl), - .input_3_ip_dscp(input_3_ip_dscp), - .input_3_ip_ecn(input_3_ip_ecn), - .input_3_ip_length(input_3_ip_length), - .input_3_ip_identification(input_3_ip_identification), - .input_3_ip_flags(input_3_ip_flags), - .input_3_ip_fragment_offset(input_3_ip_fragment_offset), - .input_3_ip_ttl(input_3_ip_ttl), - .input_3_ip_protocol(input_3_ip_protocol), - .input_3_ip_header_checksum(input_3_ip_header_checksum), - .input_3_ip_source_ip(input_3_ip_source_ip), - .input_3_ip_dest_ip(input_3_ip_dest_ip), - .input_3_udp_source_port(input_3_udp_source_port), - .input_3_udp_dest_port(input_3_udp_dest_port), - .input_3_udp_length(input_3_udp_length), - .input_3_udp_checksum(input_3_udp_checksum), - .input_3_udp_payload_tdata(input_3_udp_payload_tdata), - .input_3_udp_payload_tvalid(input_3_udp_payload_tvalid), - .input_3_udp_payload_tready(input_3_udp_payload_tready), - .input_3_udp_payload_tlast(input_3_udp_payload_tlast), - .input_3_udp_payload_tuser(input_3_udp_payload_tuser), - // UDP frame output - .output_udp_hdr_valid(output_udp_hdr_valid), - .output_udp_hdr_ready(output_udp_hdr_ready), - .output_eth_dest_mac(output_eth_dest_mac), - .output_eth_src_mac(output_eth_src_mac), - .output_eth_type(output_eth_type), - .output_ip_version(output_ip_version), - .output_ip_ihl(output_ip_ihl), - .output_ip_dscp(output_ip_dscp), - .output_ip_ecn(output_ip_ecn), - .output_ip_length(output_ip_length), - .output_ip_identification(output_ip_identification), - .output_ip_flags(output_ip_flags), - .output_ip_fragment_offset(output_ip_fragment_offset), - .output_ip_ttl(output_ip_ttl), - .output_ip_protocol(output_ip_protocol), - .output_ip_header_checksum(output_ip_header_checksum), - .output_ip_source_ip(output_ip_source_ip), - .output_ip_dest_ip(output_ip_dest_ip), - .output_udp_source_port(output_udp_source_port), - .output_udp_dest_port(output_udp_dest_port), - .output_udp_length(output_udp_length), - .output_udp_checksum(output_udp_checksum), - .output_udp_payload_tdata(output_udp_payload_tdata), - .output_udp_payload_tvalid(output_udp_payload_tvalid), - .output_udp_payload_tready(output_udp_payload_tready), - .output_udp_payload_tlast(output_udp_payload_tlast), - .output_udp_payload_tuser(output_udp_payload_tuser) + // Ethernet frame inputs + .s_udp_hdr_valid(s_udp_hdr_valid), + .s_udp_hdr_ready(s_udp_hdr_ready), + .s_eth_dest_mac(s_eth_dest_mac), + .s_eth_src_mac(s_eth_src_mac), + .s_eth_type(s_eth_type), + .s_ip_version(s_ip_version), + .s_ip_ihl(s_ip_ihl), + .s_ip_dscp(s_ip_dscp), + .s_ip_ecn(s_ip_ecn), + .s_ip_length(s_ip_length), + .s_ip_identification(s_ip_identification), + .s_ip_flags(s_ip_flags), + .s_ip_fragment_offset(s_ip_fragment_offset), + .s_ip_ttl(s_ip_ttl), + .s_ip_protocol(s_ip_protocol), + .s_ip_header_checksum(s_ip_header_checksum), + .s_ip_source_ip(s_ip_source_ip), + .s_ip_dest_ip(s_ip_dest_ip), + .s_udp_source_port(s_udp_source_port), + .s_udp_dest_port(s_udp_dest_port), + .s_udp_length(s_udp_length), + .s_udp_checksum(s_udp_checksum), + .s_udp_payload_axis_tdata(s_udp_payload_axis_tdata), + .s_udp_payload_axis_tkeep(s_udp_payload_axis_tkeep), + .s_udp_payload_axis_tvalid(s_udp_payload_axis_tvalid), + .s_udp_payload_axis_tready(s_udp_payload_axis_tready), + .s_udp_payload_axis_tlast(s_udp_payload_axis_tlast), + .s_udp_payload_axis_tid(s_udp_payload_axis_tid), + .s_udp_payload_axis_tdest(s_udp_payload_axis_tdest), + .s_udp_payload_axis_tuser(s_udp_payload_axis_tuser), + // Ethernet frame output + .m_udp_hdr_valid(m_udp_hdr_valid), + .m_udp_hdr_ready(m_udp_hdr_ready), + .m_eth_dest_mac(m_eth_dest_mac), + .m_eth_src_mac(m_eth_src_mac), + .m_eth_type(m_eth_type), + .m_ip_version(m_ip_version), + .m_ip_ihl(m_ip_ihl), + .m_ip_dscp(m_ip_dscp), + .m_ip_ecn(m_ip_ecn), + .m_ip_length(m_ip_length), + .m_ip_identification(m_ip_identification), + .m_ip_flags(m_ip_flags), + .m_ip_fragment_offset(m_ip_fragment_offset), + .m_ip_ttl(m_ip_ttl), + .m_ip_protocol(m_ip_protocol), + .m_ip_header_checksum(m_ip_header_checksum), + .m_ip_source_ip(m_ip_source_ip), + .m_ip_dest_ip(m_ip_dest_ip), + .m_udp_source_port(m_udp_source_port), + .m_udp_dest_port(m_udp_dest_port), + .m_udp_length(m_udp_length), + .m_udp_checksum(m_udp_checksum), + .m_udp_payload_axis_tdata(m_udp_payload_axis_tdata), + .m_udp_payload_axis_tkeep(m_udp_payload_axis_tkeep), + .m_udp_payload_axis_tvalid(m_udp_payload_axis_tvalid), + .m_udp_payload_axis_tready(m_udp_payload_axis_tready), + .m_udp_payload_axis_tlast(m_udp_payload_axis_tlast), + .m_udp_payload_axis_tid(m_udp_payload_axis_tid), + .m_udp_payload_axis_tdest(m_udp_payload_axis_tdest), + .m_udp_payload_axis_tuser(m_udp_payload_axis_tuser) ); endmodule diff --git a/tb/test_udp_arb_mux_64_4.py b/tb/test_udp_arb_mux_64_4.py index 867b3af5..c28ac25c 100755 --- a/tb/test_udp_arb_mux_64_4.py +++ b/tb/test_udp_arb_mux_64_4.py @@ -28,13 +28,12 @@ import os import udp_ep -module = 'udp_arb_mux_64_4' -testbench = 'test_%s' % module +module = 'udp_arb_mux' +testbench = 'test_%s_64_4' % module srcs = [] srcs.append("../rtl/%s.v" % module) -srcs.append("../rtl/udp_mux_64_4.v") srcs.append("../lib/axis/rtl/arbiter.v") srcs.append("../lib/axis/rtl/priority_encoder.v") srcs.append("%s.v" % testbench) @@ -45,344 +44,203 @@ build_cmd = "iverilog -o %s.vvp %s" % (testbench, src) def bench(): + # Parameters + S_COUNT = 4 + DATA_WIDTH = 64 + KEEP_ENABLE = (DATA_WIDTH>8) + KEEP_WIDTH = (DATA_WIDTH/8) + ID_ENABLE = 1 + ID_WIDTH = 8 + DEST_ENABLE = 1 + DEST_WIDTH = 8 + USER_ENABLE = 1 + USER_WIDTH = 1 + ARB_TYPE = "PRIORITY" + LSB_PRIORITY = "HIGH" + # Inputs clk = Signal(bool(0)) rst = Signal(bool(0)) current_test = Signal(intbv(0)[8:]) - input_0_udp_hdr_valid = Signal(bool(0)) - input_0_eth_dest_mac = Signal(intbv(0)[48:]) - input_0_eth_src_mac = Signal(intbv(0)[48:]) - input_0_eth_type = Signal(intbv(0)[16:]) - input_0_ip_version = Signal(intbv(0)[4:]) - input_0_ip_ihl = Signal(intbv(0)[4:]) - input_0_ip_dscp = Signal(intbv(0)[6:]) - input_0_ip_ecn = Signal(intbv(0)[2:]) - input_0_ip_length = Signal(intbv(0)[16:]) - input_0_ip_identification = Signal(intbv(0)[16:]) - input_0_ip_flags = Signal(intbv(0)[3:]) - input_0_ip_fragment_offset = Signal(intbv(0)[13:]) - input_0_ip_ttl = Signal(intbv(0)[8:]) - input_0_ip_protocol = Signal(intbv(0)[8:]) - input_0_ip_header_checksum = Signal(intbv(0)[16:]) - input_0_ip_source_ip = Signal(intbv(0)[32:]) - input_0_ip_dest_ip = Signal(intbv(0)[32:]) - input_0_udp_source_port = Signal(intbv(0)[16:]) - input_0_udp_dest_port = Signal(intbv(0)[16:]) - input_0_udp_length = Signal(intbv(0)[16:]) - input_0_udp_checksum = Signal(intbv(0)[16:]) - input_0_udp_payload_tdata = Signal(intbv(0)[64:]) - input_0_udp_payload_tkeep = Signal(intbv(0)[8:]) - input_0_udp_payload_tvalid = Signal(bool(0)) - input_0_udp_payload_tlast = Signal(bool(0)) - input_0_udp_payload_tuser = Signal(bool(0)) - input_1_udp_hdr_valid = Signal(bool(0)) - input_1_eth_dest_mac = Signal(intbv(0)[48:]) - input_1_eth_src_mac = Signal(intbv(0)[48:]) - input_1_eth_type = Signal(intbv(0)[16:]) - input_1_ip_version = Signal(intbv(0)[4:]) - input_1_ip_ihl = Signal(intbv(0)[4:]) - input_1_ip_dscp = Signal(intbv(0)[6:]) - input_1_ip_ecn = Signal(intbv(0)[2:]) - input_1_ip_length = Signal(intbv(0)[16:]) - input_1_ip_identification = Signal(intbv(0)[16:]) - input_1_ip_flags = Signal(intbv(0)[3:]) - input_1_ip_fragment_offset = Signal(intbv(0)[13:]) - input_1_ip_ttl = Signal(intbv(0)[8:]) - input_1_ip_protocol = Signal(intbv(0)[8:]) - input_1_ip_header_checksum = Signal(intbv(0)[16:]) - input_1_ip_source_ip = Signal(intbv(0)[32:]) - input_1_ip_dest_ip = Signal(intbv(0)[32:]) - input_1_udp_source_port = Signal(intbv(0)[16:]) - input_1_udp_dest_port = Signal(intbv(0)[16:]) - input_1_udp_length = Signal(intbv(0)[16:]) - input_1_udp_checksum = Signal(intbv(0)[16:]) - input_1_udp_payload_tdata = Signal(intbv(0)[64:]) - input_1_udp_payload_tkeep = Signal(intbv(0)[8:]) - input_1_udp_payload_tvalid = Signal(bool(0)) - input_1_udp_payload_tlast = Signal(bool(0)) - input_1_udp_payload_tuser = Signal(bool(0)) - input_2_udp_hdr_valid = Signal(bool(0)) - input_2_eth_dest_mac = Signal(intbv(0)[48:]) - input_2_eth_src_mac = Signal(intbv(0)[48:]) - input_2_eth_type = Signal(intbv(0)[16:]) - input_2_ip_version = Signal(intbv(0)[4:]) - input_2_ip_ihl = Signal(intbv(0)[4:]) - input_2_ip_dscp = Signal(intbv(0)[6:]) - input_2_ip_ecn = Signal(intbv(0)[2:]) - input_2_ip_length = Signal(intbv(0)[16:]) - input_2_ip_identification = Signal(intbv(0)[16:]) - input_2_ip_flags = Signal(intbv(0)[3:]) - input_2_ip_fragment_offset = Signal(intbv(0)[13:]) - input_2_ip_ttl = Signal(intbv(0)[8:]) - input_2_ip_protocol = Signal(intbv(0)[8:]) - input_2_ip_header_checksum = Signal(intbv(0)[16:]) - input_2_ip_source_ip = Signal(intbv(0)[32:]) - input_2_ip_dest_ip = Signal(intbv(0)[32:]) - input_2_udp_source_port = Signal(intbv(0)[16:]) - input_2_udp_dest_port = Signal(intbv(0)[16:]) - input_2_udp_length = Signal(intbv(0)[16:]) - input_2_udp_checksum = Signal(intbv(0)[16:]) - input_2_udp_payload_tdata = Signal(intbv(0)[64:]) - input_2_udp_payload_tkeep = Signal(intbv(0)[8:]) - input_2_udp_payload_tvalid = Signal(bool(0)) - input_2_udp_payload_tlast = Signal(bool(0)) - input_2_udp_payload_tuser = Signal(bool(0)) - input_3_udp_hdr_valid = Signal(bool(0)) - input_3_eth_dest_mac = Signal(intbv(0)[48:]) - input_3_eth_src_mac = Signal(intbv(0)[48:]) - input_3_eth_type = Signal(intbv(0)[16:]) - input_3_ip_version = Signal(intbv(0)[4:]) - input_3_ip_ihl = Signal(intbv(0)[4:]) - input_3_ip_dscp = Signal(intbv(0)[6:]) - input_3_ip_ecn = Signal(intbv(0)[2:]) - input_3_ip_length = Signal(intbv(0)[16:]) - input_3_ip_identification = Signal(intbv(0)[16:]) - input_3_ip_flags = Signal(intbv(0)[3:]) - input_3_ip_fragment_offset = Signal(intbv(0)[13:]) - input_3_ip_ttl = Signal(intbv(0)[8:]) - input_3_ip_protocol = Signal(intbv(0)[8:]) - input_3_ip_header_checksum = Signal(intbv(0)[16:]) - input_3_ip_source_ip = Signal(intbv(0)[32:]) - input_3_ip_dest_ip = Signal(intbv(0)[32:]) - input_3_udp_source_port = Signal(intbv(0)[16:]) - input_3_udp_dest_port = Signal(intbv(0)[16:]) - input_3_udp_length = Signal(intbv(0)[16:]) - input_3_udp_checksum = Signal(intbv(0)[16:]) - input_3_udp_payload_tdata = Signal(intbv(0)[64:]) - input_3_udp_payload_tkeep = Signal(intbv(0)[8:]) - input_3_udp_payload_tvalid = Signal(bool(0)) - input_3_udp_payload_tlast = Signal(bool(0)) - input_3_udp_payload_tuser = Signal(bool(0)) + s_udp_hdr_valid_list = [Signal(bool(0)) for i in range(S_COUNT)] + s_eth_dest_mac_list = [Signal(intbv(0)[48:]) for i in range(S_COUNT)] + s_eth_src_mac_list = [Signal(intbv(0)[48:]) for i in range(S_COUNT)] + s_eth_type_list = [Signal(intbv(0)[16:]) for i in range(S_COUNT)] + s_ip_version_list = [Signal(intbv(0)[4:]) for i in range(S_COUNT)] + s_ip_ihl_list = [Signal(intbv(0)[4:]) for i in range(S_COUNT)] + s_ip_dscp_list = [Signal(intbv(0)[6:]) for i in range(S_COUNT)] + s_ip_ecn_list = [Signal(intbv(0)[2:]) for i in range(S_COUNT)] + s_ip_length_list = [Signal(intbv(0)[16:]) for i in range(S_COUNT)] + s_ip_identification_list = [Signal(intbv(0)[16:]) for i in range(S_COUNT)] + s_ip_flags_list = [Signal(intbv(0)[3:]) for i in range(S_COUNT)] + s_ip_fragment_offset_list = [Signal(intbv(0)[13:]) for i in range(S_COUNT)] + s_ip_ttl_list = [Signal(intbv(0)[8:]) for i in range(S_COUNT)] + s_ip_protocol_list = [Signal(intbv(0)[8:]) for i in range(S_COUNT)] + s_ip_header_checksum_list = [Signal(intbv(0)[16:]) for i in range(S_COUNT)] + s_ip_source_ip_list = [Signal(intbv(0)[32:]) for i in range(S_COUNT)] + s_ip_dest_ip_list = [Signal(intbv(0)[32:]) for i in range(S_COUNT)] + s_udp_source_port_list = [Signal(intbv(0)[16:]) for i in range(S_COUNT)] + s_udp_dest_port_list = [Signal(intbv(0)[16:]) for i in range(S_COUNT)] + s_udp_length_list = [Signal(intbv(0)[16:]) for i in range(S_COUNT)] + s_udp_checksum_list = [Signal(intbv(0)[16:]) for i in range(S_COUNT)] + s_udp_payload_axis_tdata_list = [Signal(intbv(0)[DATA_WIDTH:]) for i in range(S_COUNT)] + s_udp_payload_axis_tkeep_list = [Signal(intbv(1)[KEEP_WIDTH:]) for i in range(S_COUNT)] + s_udp_payload_axis_tvalid_list = [Signal(bool(0)) for i in range(S_COUNT)] + s_udp_payload_axis_tlast_list = [Signal(bool(0)) for i in range(S_COUNT)] + s_udp_payload_axis_tid_list = [Signal(intbv(0)[ID_WIDTH:]) for i in range(S_COUNT)] + s_udp_payload_axis_tdest_list = [Signal(intbv(0)[DEST_WIDTH:]) for i in range(S_COUNT)] + s_udp_payload_axis_tuser_list = [Signal(intbv(0)[USER_WIDTH:]) for i in range(S_COUNT)] - output_udp_payload_tready = Signal(bool(0)) - output_udp_hdr_ready = Signal(bool(0)) + s_udp_hdr_valid = ConcatSignal(*reversed(s_udp_hdr_valid_list)) + s_eth_dest_mac = ConcatSignal(*reversed(s_eth_dest_mac_list)) + s_eth_src_mac = ConcatSignal(*reversed(s_eth_src_mac_list)) + s_eth_type = ConcatSignal(*reversed(s_eth_type_list)) + s_ip_version = ConcatSignal(*reversed(s_ip_version_list)) + s_ip_ihl = ConcatSignal(*reversed(s_ip_ihl_list)) + s_ip_dscp = ConcatSignal(*reversed(s_ip_dscp_list)) + s_ip_ecn = ConcatSignal(*reversed(s_ip_ecn_list)) + s_ip_length = ConcatSignal(*reversed(s_ip_length_list)) + s_ip_identification = ConcatSignal(*reversed(s_ip_identification_list)) + s_ip_flags = ConcatSignal(*reversed(s_ip_flags_list)) + s_ip_fragment_offset = ConcatSignal(*reversed(s_ip_fragment_offset_list)) + s_ip_ttl = ConcatSignal(*reversed(s_ip_ttl_list)) + s_ip_protocol = ConcatSignal(*reversed(s_ip_protocol_list)) + s_ip_header_checksum = ConcatSignal(*reversed(s_ip_header_checksum_list)) + s_ip_source_ip = ConcatSignal(*reversed(s_ip_source_ip_list)) + s_ip_dest_ip = ConcatSignal(*reversed(s_ip_dest_ip_list)) + s_udp_source_port = ConcatSignal(*reversed(s_udp_source_port_list)) + s_udp_dest_port = ConcatSignal(*reversed(s_udp_dest_port_list)) + s_udp_length = ConcatSignal(*reversed(s_udp_length_list)) + s_udp_checksum = ConcatSignal(*reversed(s_udp_checksum_list)) + s_udp_payload_axis_tdata = ConcatSignal(*reversed(s_udp_payload_axis_tdata_list)) + s_udp_payload_axis_tkeep = ConcatSignal(*reversed(s_udp_payload_axis_tkeep_list)) + s_udp_payload_axis_tvalid = ConcatSignal(*reversed(s_udp_payload_axis_tvalid_list)) + s_udp_payload_axis_tlast = ConcatSignal(*reversed(s_udp_payload_axis_tlast_list)) + s_udp_payload_axis_tid = ConcatSignal(*reversed(s_udp_payload_axis_tid_list)) + s_udp_payload_axis_tdest = ConcatSignal(*reversed(s_udp_payload_axis_tdest_list)) + s_udp_payload_axis_tuser = ConcatSignal(*reversed(s_udp_payload_axis_tuser_list)) + + m_udp_hdr_ready = Signal(bool(0)) + m_udp_payload_axis_tready = Signal(bool(0)) # Outputs - input_0_udp_hdr_ready = Signal(bool(0)) - input_0_udp_payload_tready = Signal(bool(0)) - input_1_udp_hdr_ready = Signal(bool(0)) - input_1_udp_payload_tready = Signal(bool(0)) - input_2_udp_hdr_ready = Signal(bool(0)) - input_2_udp_payload_tready = Signal(bool(0)) - input_3_udp_hdr_ready = Signal(bool(0)) - input_3_udp_payload_tready = Signal(bool(0)) + s_udp_hdr_ready = Signal(intbv(0)[S_COUNT:]) + s_udp_payload_axis_tready = Signal(intbv(0)[S_COUNT:]) - output_udp_hdr_valid = Signal(bool(0)) - output_eth_dest_mac = Signal(intbv(0)[48:]) - output_eth_src_mac = Signal(intbv(0)[48:]) - output_eth_type = Signal(intbv(0)[16:]) - output_ip_version = Signal(intbv(0)[4:]) - output_ip_ihl = Signal(intbv(0)[4:]) - output_ip_dscp = Signal(intbv(0)[6:]) - output_ip_ecn = Signal(intbv(0)[2:]) - output_ip_length = Signal(intbv(0)[16:]) - output_ip_identification = Signal(intbv(0)[16:]) - output_ip_flags = Signal(intbv(0)[3:]) - output_ip_fragment_offset = Signal(intbv(0)[13:]) - output_ip_ttl = Signal(intbv(0)[8:]) - output_ip_protocol = Signal(intbv(0)[8:]) - output_ip_header_checksum = Signal(intbv(0)[16:]) - output_ip_source_ip = Signal(intbv(0)[32:]) - output_ip_dest_ip = Signal(intbv(0)[32:]) - output_udp_source_port = Signal(intbv(0)[16:]) - output_udp_dest_port = Signal(intbv(0)[16:]) - output_udp_length = Signal(intbv(0)[16:]) - output_udp_checksum = Signal(intbv(0)[16:]) - output_udp_payload_tdata = Signal(intbv(0)[64:]) - output_udp_payload_tkeep = Signal(intbv(0)[8:]) - output_udp_payload_tvalid = Signal(bool(0)) - output_udp_payload_tlast = Signal(bool(0)) - output_udp_payload_tuser = Signal(bool(0)) + s_udp_hdr_ready_list = [s_udp_hdr_ready(i) for i in range(S_COUNT)] + s_udp_payload_axis_tready_list = [s_udp_payload_axis_tready(i) for i in range(S_COUNT)] + + m_udp_hdr_valid = Signal(bool(0)) + m_eth_dest_mac = Signal(intbv(0)[48:]) + m_eth_src_mac = Signal(intbv(0)[48:]) + m_eth_type = Signal(intbv(0)[16:]) + m_ip_version = Signal(intbv(0)[4:]) + m_ip_ihl = Signal(intbv(0)[4:]) + m_ip_dscp = Signal(intbv(0)[6:]) + m_ip_ecn = Signal(intbv(0)[2:]) + m_ip_length = Signal(intbv(0)[16:]) + m_ip_identification = Signal(intbv(0)[16:]) + m_ip_flags = Signal(intbv(0)[3:]) + m_ip_fragment_offset = Signal(intbv(0)[13:]) + m_ip_ttl = Signal(intbv(0)[8:]) + m_ip_protocol = Signal(intbv(0)[8:]) + m_ip_header_checksum = Signal(intbv(0)[16:]) + m_ip_source_ip = Signal(intbv(0)[32:]) + m_ip_dest_ip = Signal(intbv(0)[32:]) + m_udp_source_port = Signal(intbv(0)[16:]) + m_udp_dest_port = Signal(intbv(0)[16:]) + m_udp_length = Signal(intbv(0)[16:]) + m_udp_checksum = Signal(intbv(0)[16:]) + m_udp_payload_axis_tdata = Signal(intbv(0)[DATA_WIDTH:]) + m_udp_payload_axis_tkeep = Signal(intbv(1)[KEEP_WIDTH:]) + m_udp_payload_axis_tvalid = Signal(bool(0)) + m_udp_payload_axis_tlast = Signal(bool(0)) + m_udp_payload_axis_tid = Signal(intbv(0)[ID_WIDTH:]) + m_udp_payload_axis_tdest = Signal(intbv(0)[DEST_WIDTH:]) + m_udp_payload_axis_tuser = Signal(intbv(0)[USER_WIDTH:]) # sources and sinks - source_0_pause = Signal(bool(0)) - source_1_pause = Signal(bool(0)) - source_2_pause = Signal(bool(0)) - source_3_pause = Signal(bool(0)) + source_pause_list = [] + source_list = [] + source_logic_list = [] sink_pause = Signal(bool(0)) - source_0 = udp_ep.UDPFrameSource() + for k in range(S_COUNT): + s = udp_ep.UDPFrameSource() + p = Signal(bool(0)) - source_0_logic = source_0.create_logic( - clk, - rst, - udp_hdr_ready=input_0_udp_hdr_ready, - udp_hdr_valid=input_0_udp_hdr_valid, - eth_dest_mac=input_0_eth_dest_mac, - eth_src_mac=input_0_eth_src_mac, - eth_type=input_0_eth_type, - ip_version=input_0_ip_version, - ip_ihl=input_0_ip_ihl, - ip_dscp=input_0_ip_dscp, - ip_ecn=input_0_ip_ecn, - ip_length=input_0_ip_length, - ip_identification=input_0_ip_identification, - ip_flags=input_0_ip_flags, - ip_fragment_offset=input_0_ip_fragment_offset, - ip_ttl=input_0_ip_ttl, - ip_protocol=input_0_ip_protocol, - ip_header_checksum=input_0_ip_header_checksum, - ip_source_ip=input_0_ip_source_ip, - ip_dest_ip=input_0_ip_dest_ip, - udp_source_port=input_0_udp_source_port, - udp_dest_port=input_0_udp_dest_port, - udp_length=input_0_udp_length, - udp_checksum=input_0_udp_checksum, - udp_payload_tdata=input_0_udp_payload_tdata, - udp_payload_tkeep=input_0_udp_payload_tkeep, - udp_payload_tvalid=input_0_udp_payload_tvalid, - udp_payload_tready=input_0_udp_payload_tready, - udp_payload_tlast=input_0_udp_payload_tlast, - udp_payload_tuser=input_0_udp_payload_tuser, - pause=source_0_pause, - name='source_0' - ) + source_list.append(s) + source_pause_list.append(p) - source_1 = udp_ep.UDPFrameSource() - - source_1_logic = source_1.create_logic( - clk, - rst, - udp_hdr_ready=input_1_udp_hdr_ready, - udp_hdr_valid=input_1_udp_hdr_valid, - eth_dest_mac=input_1_eth_dest_mac, - eth_src_mac=input_1_eth_src_mac, - eth_type=input_1_eth_type, - ip_version=input_1_ip_version, - ip_ihl=input_1_ip_ihl, - ip_dscp=input_1_ip_dscp, - ip_ecn=input_1_ip_ecn, - ip_length=input_1_ip_length, - ip_identification=input_1_ip_identification, - ip_flags=input_1_ip_flags, - ip_fragment_offset=input_1_ip_fragment_offset, - ip_ttl=input_1_ip_ttl, - ip_protocol=input_1_ip_protocol, - ip_header_checksum=input_1_ip_header_checksum, - ip_source_ip=input_1_ip_source_ip, - ip_dest_ip=input_1_ip_dest_ip, - udp_source_port=input_1_udp_source_port, - udp_dest_port=input_1_udp_dest_port, - udp_length=input_1_udp_length, - udp_checksum=input_1_udp_checksum, - udp_payload_tdata=input_1_udp_payload_tdata, - udp_payload_tkeep=input_1_udp_payload_tkeep, - udp_payload_tvalid=input_1_udp_payload_tvalid, - udp_payload_tready=input_1_udp_payload_tready, - udp_payload_tlast=input_1_udp_payload_tlast, - udp_payload_tuser=input_1_udp_payload_tuser, - pause=source_1_pause, - name='source_1' - ) - - source_2 = udp_ep.UDPFrameSource() - - source_2_logic = source_2.create_logic( - clk, - rst, - udp_hdr_ready=input_2_udp_hdr_ready, - udp_hdr_valid=input_2_udp_hdr_valid, - eth_dest_mac=input_2_eth_dest_mac, - eth_src_mac=input_2_eth_src_mac, - eth_type=input_2_eth_type, - ip_version=input_2_ip_version, - ip_ihl=input_2_ip_ihl, - ip_dscp=input_2_ip_dscp, - ip_ecn=input_2_ip_ecn, - ip_length=input_2_ip_length, - ip_identification=input_2_ip_identification, - ip_flags=input_2_ip_flags, - ip_fragment_offset=input_2_ip_fragment_offset, - ip_ttl=input_2_ip_ttl, - ip_protocol=input_2_ip_protocol, - ip_header_checksum=input_2_ip_header_checksum, - ip_source_ip=input_2_ip_source_ip, - ip_dest_ip=input_2_ip_dest_ip, - udp_source_port=input_2_udp_source_port, - udp_dest_port=input_2_udp_dest_port, - udp_length=input_2_udp_length, - udp_checksum=input_2_udp_checksum, - udp_payload_tdata=input_2_udp_payload_tdata, - udp_payload_tkeep=input_2_udp_payload_tkeep, - udp_payload_tvalid=input_2_udp_payload_tvalid, - udp_payload_tready=input_2_udp_payload_tready, - udp_payload_tlast=input_2_udp_payload_tlast, - udp_payload_tuser=input_2_udp_payload_tuser, - pause=source_2_pause, - name='source_2' - ) - - source_3 = udp_ep.UDPFrameSource() - - source_3_logic = source_3.create_logic( - clk, - rst, - udp_hdr_ready=input_3_udp_hdr_ready, - udp_hdr_valid=input_3_udp_hdr_valid, - eth_dest_mac=input_3_eth_dest_mac, - eth_src_mac=input_3_eth_src_mac, - eth_type=input_3_eth_type, - ip_version=input_3_ip_version, - ip_ihl=input_3_ip_ihl, - ip_dscp=input_3_ip_dscp, - ip_ecn=input_3_ip_ecn, - ip_length=input_3_ip_length, - ip_identification=input_3_ip_identification, - ip_flags=input_3_ip_flags, - ip_fragment_offset=input_3_ip_fragment_offset, - ip_ttl=input_3_ip_ttl, - ip_protocol=input_3_ip_protocol, - ip_header_checksum=input_3_ip_header_checksum, - ip_source_ip=input_3_ip_source_ip, - ip_dest_ip=input_3_ip_dest_ip, - udp_source_port=input_3_udp_source_port, - udp_dest_port=input_3_udp_dest_port, - udp_length=input_3_udp_length, - udp_checksum=input_3_udp_checksum, - udp_payload_tdata=input_3_udp_payload_tdata, - udp_payload_tkeep=input_3_udp_payload_tkeep, - udp_payload_tvalid=input_3_udp_payload_tvalid, - udp_payload_tready=input_3_udp_payload_tready, - udp_payload_tlast=input_3_udp_payload_tlast, - udp_payload_tuser=input_3_udp_payload_tuser, - pause=source_3_pause, - name='source_3' - ) + source_logic_list.append(s.create_logic( + clk, + rst, + udp_hdr_ready=s_udp_hdr_ready_list[k], + udp_hdr_valid=s_udp_hdr_valid_list[k], + eth_dest_mac=s_eth_dest_mac_list[k], + eth_src_mac=s_eth_src_mac_list[k], + eth_type=s_eth_type_list[k], + ip_version=s_ip_version_list[k], + ip_ihl=s_ip_ihl_list[k], + ip_dscp=s_ip_dscp_list[k], + ip_ecn=s_ip_ecn_list[k], + ip_length=s_ip_length_list[k], + ip_identification=s_ip_identification_list[k], + ip_flags=s_ip_flags_list[k], + ip_fragment_offset=s_ip_fragment_offset_list[k], + ip_ttl=s_ip_ttl_list[k], + ip_protocol=s_ip_protocol_list[k], + ip_header_checksum=s_ip_header_checksum_list[k], + ip_source_ip=s_ip_source_ip_list[k], + ip_dest_ip=s_ip_dest_ip_list[k], + udp_source_port=s_udp_source_port_list[k], + udp_dest_port=s_udp_dest_port_list[k], + udp_length=s_udp_length_list[k], + udp_checksum=s_udp_checksum_list[k], + udp_payload_tdata=s_udp_payload_axis_tdata_list[k], + udp_payload_tkeep=s_udp_payload_axis_tkeep_list[k], + udp_payload_tvalid=s_udp_payload_axis_tvalid_list[k], + udp_payload_tready=s_udp_payload_axis_tready_list[k], + udp_payload_tlast=s_udp_payload_axis_tlast_list[k], + udp_payload_tuser=s_udp_payload_axis_tuser_list[k], + pause=p, + name='source_%d' % k + )) sink = udp_ep.UDPFrameSink() sink_logic = sink.create_logic( clk, rst, - udp_hdr_ready=output_udp_hdr_ready, - udp_hdr_valid=output_udp_hdr_valid, - eth_dest_mac=output_eth_dest_mac, - eth_src_mac=output_eth_src_mac, - eth_type=output_eth_type, - ip_version=output_ip_version, - ip_ihl=output_ip_ihl, - ip_dscp=output_ip_dscp, - ip_ecn=output_ip_ecn, - ip_length=output_ip_length, - ip_identification=output_ip_identification, - ip_flags=output_ip_flags, - ip_fragment_offset=output_ip_fragment_offset, - ip_ttl=output_ip_ttl, - ip_protocol=output_ip_protocol, - ip_header_checksum=output_ip_header_checksum, - ip_source_ip=output_ip_source_ip, - ip_dest_ip=output_ip_dest_ip, - udp_source_port=output_udp_source_port, - udp_dest_port=output_udp_dest_port, - udp_length=output_udp_length, - udp_checksum=output_udp_checksum, - udp_payload_tdata=output_udp_payload_tdata, - udp_payload_tkeep=output_udp_payload_tkeep, - udp_payload_tvalid=output_udp_payload_tvalid, - udp_payload_tready=output_udp_payload_tready, - udp_payload_tlast=output_udp_payload_tlast, - udp_payload_tuser=output_udp_payload_tuser, + udp_hdr_ready=m_udp_hdr_ready, + udp_hdr_valid=m_udp_hdr_valid, + eth_dest_mac=m_eth_dest_mac, + eth_src_mac=m_eth_src_mac, + eth_type=m_eth_type, + ip_version=m_ip_version, + ip_ihl=m_ip_ihl, + ip_dscp=m_ip_dscp, + ip_ecn=m_ip_ecn, + ip_length=m_ip_length, + ip_identification=m_ip_identification, + ip_flags=m_ip_flags, + ip_fragment_offset=m_ip_fragment_offset, + ip_ttl=m_ip_ttl, + ip_protocol=m_ip_protocol, + ip_header_checksum=m_ip_header_checksum, + ip_source_ip=m_ip_source_ip, + ip_dest_ip=m_ip_dest_ip, + udp_source_port=m_udp_source_port, + udp_dest_port=m_udp_dest_port, + udp_length=m_udp_length, + udp_checksum=m_udp_checksum, + udp_payload_tdata=m_udp_payload_axis_tdata, + udp_payload_tkeep=m_udp_payload_axis_tkeep, + udp_payload_tvalid=m_udp_payload_axis_tvalid, + udp_payload_tready=m_udp_payload_axis_tready, + udp_payload_tlast=m_udp_payload_axis_tlast, + udp_payload_tuser=m_udp_payload_axis_tuser, pause=sink_pause, name='sink' ) @@ -397,147 +255,67 @@ def bench(): rst=rst, current_test=current_test, - input_0_udp_hdr_valid=input_0_udp_hdr_valid, - input_0_udp_hdr_ready=input_0_udp_hdr_ready, - input_0_eth_dest_mac=input_0_eth_dest_mac, - input_0_eth_src_mac=input_0_eth_src_mac, - input_0_eth_type=input_0_eth_type, - input_0_ip_version=input_0_ip_version, - input_0_ip_ihl=input_0_ip_ihl, - input_0_ip_dscp=input_0_ip_dscp, - input_0_ip_ecn=input_0_ip_ecn, - input_0_ip_length=input_0_ip_length, - input_0_ip_identification=input_0_ip_identification, - input_0_ip_flags=input_0_ip_flags, - input_0_ip_fragment_offset=input_0_ip_fragment_offset, - input_0_ip_ttl=input_0_ip_ttl, - input_0_ip_protocol=input_0_ip_protocol, - input_0_ip_header_checksum=input_0_ip_header_checksum, - input_0_ip_source_ip=input_0_ip_source_ip, - input_0_ip_dest_ip=input_0_ip_dest_ip, - input_0_udp_source_port=input_0_udp_source_port, - input_0_udp_dest_port=input_0_udp_dest_port, - input_0_udp_length=input_0_udp_length, - input_0_udp_checksum=input_0_udp_checksum, - input_0_udp_payload_tdata=input_0_udp_payload_tdata, - input_0_udp_payload_tkeep=input_0_udp_payload_tkeep, - input_0_udp_payload_tvalid=input_0_udp_payload_tvalid, - input_0_udp_payload_tready=input_0_udp_payload_tready, - input_0_udp_payload_tlast=input_0_udp_payload_tlast, - input_0_udp_payload_tuser=input_0_udp_payload_tuser, - input_1_udp_hdr_valid=input_1_udp_hdr_valid, - input_1_udp_hdr_ready=input_1_udp_hdr_ready, - input_1_eth_dest_mac=input_1_eth_dest_mac, - input_1_eth_src_mac=input_1_eth_src_mac, - input_1_eth_type=input_1_eth_type, - input_1_ip_version=input_1_ip_version, - input_1_ip_ihl=input_1_ip_ihl, - input_1_ip_dscp=input_1_ip_dscp, - input_1_ip_ecn=input_1_ip_ecn, - input_1_ip_length=input_1_ip_length, - input_1_ip_identification=input_1_ip_identification, - input_1_ip_flags=input_1_ip_flags, - input_1_ip_fragment_offset=input_1_ip_fragment_offset, - input_1_ip_ttl=input_1_ip_ttl, - input_1_ip_protocol=input_1_ip_protocol, - input_1_ip_header_checksum=input_1_ip_header_checksum, - input_1_ip_source_ip=input_1_ip_source_ip, - input_1_ip_dest_ip=input_1_ip_dest_ip, - input_1_udp_source_port=input_1_udp_source_port, - input_1_udp_dest_port=input_1_udp_dest_port, - input_1_udp_length=input_1_udp_length, - input_1_udp_checksum=input_1_udp_checksum, - input_1_udp_payload_tdata=input_1_udp_payload_tdata, - input_1_udp_payload_tkeep=input_1_udp_payload_tkeep, - input_1_udp_payload_tvalid=input_1_udp_payload_tvalid, - input_1_udp_payload_tready=input_1_udp_payload_tready, - input_1_udp_payload_tlast=input_1_udp_payload_tlast, - input_1_udp_payload_tuser=input_1_udp_payload_tuser, - input_2_udp_hdr_valid=input_2_udp_hdr_valid, - input_2_udp_hdr_ready=input_2_udp_hdr_ready, - input_2_eth_dest_mac=input_2_eth_dest_mac, - input_2_eth_src_mac=input_2_eth_src_mac, - input_2_eth_type=input_2_eth_type, - input_2_ip_version=input_2_ip_version, - input_2_ip_ihl=input_2_ip_ihl, - input_2_ip_dscp=input_2_ip_dscp, - input_2_ip_ecn=input_2_ip_ecn, - input_2_ip_length=input_2_ip_length, - input_2_ip_identification=input_2_ip_identification, - input_2_ip_flags=input_2_ip_flags, - input_2_ip_fragment_offset=input_2_ip_fragment_offset, - input_2_ip_ttl=input_2_ip_ttl, - input_2_ip_protocol=input_2_ip_protocol, - input_2_ip_header_checksum=input_2_ip_header_checksum, - input_2_ip_source_ip=input_2_ip_source_ip, - input_2_ip_dest_ip=input_2_ip_dest_ip, - input_2_udp_source_port=input_2_udp_source_port, - input_2_udp_dest_port=input_2_udp_dest_port, - input_2_udp_length=input_2_udp_length, - input_2_udp_checksum=input_2_udp_checksum, - input_2_udp_payload_tdata=input_2_udp_payload_tdata, - input_2_udp_payload_tkeep=input_2_udp_payload_tkeep, - input_2_udp_payload_tvalid=input_2_udp_payload_tvalid, - input_2_udp_payload_tready=input_2_udp_payload_tready, - input_2_udp_payload_tlast=input_2_udp_payload_tlast, - input_2_udp_payload_tuser=input_2_udp_payload_tuser, - input_3_udp_hdr_valid=input_3_udp_hdr_valid, - input_3_udp_hdr_ready=input_3_udp_hdr_ready, - input_3_eth_dest_mac=input_3_eth_dest_mac, - input_3_eth_src_mac=input_3_eth_src_mac, - input_3_eth_type=input_3_eth_type, - input_3_ip_version=input_3_ip_version, - input_3_ip_ihl=input_3_ip_ihl, - input_3_ip_dscp=input_3_ip_dscp, - input_3_ip_ecn=input_3_ip_ecn, - input_3_ip_length=input_3_ip_length, - input_3_ip_identification=input_3_ip_identification, - input_3_ip_flags=input_3_ip_flags, - input_3_ip_fragment_offset=input_3_ip_fragment_offset, - input_3_ip_ttl=input_3_ip_ttl, - input_3_ip_protocol=input_3_ip_protocol, - input_3_ip_header_checksum=input_3_ip_header_checksum, - input_3_ip_source_ip=input_3_ip_source_ip, - input_3_ip_dest_ip=input_3_ip_dest_ip, - input_3_udp_source_port=input_3_udp_source_port, - input_3_udp_dest_port=input_3_udp_dest_port, - input_3_udp_length=input_3_udp_length, - input_3_udp_checksum=input_3_udp_checksum, - input_3_udp_payload_tdata=input_3_udp_payload_tdata, - input_3_udp_payload_tkeep=input_3_udp_payload_tkeep, - input_3_udp_payload_tvalid=input_3_udp_payload_tvalid, - input_3_udp_payload_tready=input_3_udp_payload_tready, - input_3_udp_payload_tlast=input_3_udp_payload_tlast, - input_3_udp_payload_tuser=input_3_udp_payload_tuser, + s_udp_hdr_valid=s_udp_hdr_valid, + s_udp_hdr_ready=s_udp_hdr_ready, + s_eth_dest_mac=s_eth_dest_mac, + s_eth_src_mac=s_eth_src_mac, + s_eth_type=s_eth_type, + s_ip_version=s_ip_version, + s_ip_ihl=s_ip_ihl, + s_ip_dscp=s_ip_dscp, + s_ip_ecn=s_ip_ecn, + s_ip_length=s_ip_length, + s_ip_identification=s_ip_identification, + s_ip_flags=s_ip_flags, + s_ip_fragment_offset=s_ip_fragment_offset, + s_ip_ttl=s_ip_ttl, + s_ip_protocol=s_ip_protocol, + s_ip_header_checksum=s_ip_header_checksum, + s_ip_source_ip=s_ip_source_ip, + s_ip_dest_ip=s_ip_dest_ip, + s_udp_source_port=s_udp_source_port, + s_udp_dest_port=s_udp_dest_port, + s_udp_length=s_udp_length, + s_udp_checksum=s_udp_checksum, + s_udp_payload_axis_tdata=s_udp_payload_axis_tdata, + s_udp_payload_axis_tkeep=s_udp_payload_axis_tkeep, + s_udp_payload_axis_tvalid=s_udp_payload_axis_tvalid, + s_udp_payload_axis_tready=s_udp_payload_axis_tready, + s_udp_payload_axis_tlast=s_udp_payload_axis_tlast, + s_udp_payload_axis_tid=s_udp_payload_axis_tid, + s_udp_payload_axis_tdest=s_udp_payload_axis_tdest, + s_udp_payload_axis_tuser=s_udp_payload_axis_tuser, - output_udp_hdr_valid=output_udp_hdr_valid, - output_udp_hdr_ready=output_udp_hdr_ready, - output_eth_dest_mac=output_eth_dest_mac, - output_eth_src_mac=output_eth_src_mac, - output_eth_type=output_eth_type, - output_ip_version=output_ip_version, - output_ip_ihl=output_ip_ihl, - output_ip_dscp=output_ip_dscp, - output_ip_ecn=output_ip_ecn, - output_ip_length=output_ip_length, - output_ip_identification=output_ip_identification, - output_ip_flags=output_ip_flags, - output_ip_fragment_offset=output_ip_fragment_offset, - output_ip_ttl=output_ip_ttl, - output_ip_protocol=output_ip_protocol, - output_ip_header_checksum=output_ip_header_checksum, - output_ip_source_ip=output_ip_source_ip, - output_ip_dest_ip=output_ip_dest_ip, - output_udp_source_port=output_udp_source_port, - output_udp_dest_port=output_udp_dest_port, - output_udp_length=output_udp_length, - output_udp_checksum=output_udp_checksum, - output_udp_payload_tdata=output_udp_payload_tdata, - output_udp_payload_tkeep=output_udp_payload_tkeep, - output_udp_payload_tvalid=output_udp_payload_tvalid, - output_udp_payload_tready=output_udp_payload_tready, - output_udp_payload_tlast=output_udp_payload_tlast, - output_udp_payload_tuser=output_udp_payload_tuser + m_udp_hdr_valid=m_udp_hdr_valid, + m_udp_hdr_ready=m_udp_hdr_ready, + m_eth_dest_mac=m_eth_dest_mac, + m_eth_src_mac=m_eth_src_mac, + m_eth_type=m_eth_type, + m_ip_version=m_ip_version, + m_ip_ihl=m_ip_ihl, + m_ip_dscp=m_ip_dscp, + m_ip_ecn=m_ip_ecn, + m_ip_length=m_ip_length, + m_ip_identification=m_ip_identification, + m_ip_flags=m_ip_flags, + m_ip_fragment_offset=m_ip_fragment_offset, + m_ip_ttl=m_ip_ttl, + m_ip_protocol=m_ip_protocol, + m_ip_header_checksum=m_ip_header_checksum, + m_ip_source_ip=m_ip_source_ip, + m_ip_dest_ip=m_ip_dest_ip, + m_udp_source_port=m_udp_source_port, + m_udp_dest_port=m_udp_dest_port, + m_udp_length=m_udp_length, + m_udp_checksum=m_udp_checksum, + m_udp_payload_axis_tdata=m_udp_payload_axis_tdata, + m_udp_payload_axis_tkeep=m_udp_payload_axis_tkeep, + m_udp_payload_axis_tvalid=m_udp_payload_axis_tvalid, + m_udp_payload_axis_tready=m_udp_payload_axis_tready, + m_udp_payload_axis_tlast=m_udp_payload_axis_tlast, + m_udp_payload_axis_tid=m_udp_payload_axis_tid, + m_udp_payload_axis_tdest=m_udp_payload_axis_tdest, + m_udp_payload_axis_tuser=m_udp_payload_axis_tuser ) @always(delay(4)) @@ -585,7 +363,7 @@ def bench(): test_frame.payload = bytearray(range(32)) test_frame.build() - source_0.send(test_frame) + source_list[0].send(test_frame) yield sink.wait() rx_frame = sink.recv() @@ -622,7 +400,7 @@ def bench(): test_frame.payload = bytearray(range(32)) test_frame.build() - source_1.send(test_frame) + source_list[1].send(test_frame) yield sink.wait() rx_frame = sink.recv() @@ -682,8 +460,8 @@ def bench(): test_frame2.payload = bytearray(range(32)) test_frame2.build() - source_0.send(test_frame1) - source_0.send(test_frame2) + source_list[0].send(test_frame1) + source_list[0].send(test_frame2) yield sink.wait() rx_frame = sink.recv() @@ -748,8 +526,8 @@ def bench(): test_frame2.payload = bytearray(range(32)) test_frame2.build() - source_1.send(test_frame1) - source_2.send(test_frame2) + source_list[1].send(test_frame1) + source_list[2].send(test_frame2) yield sink.wait() rx_frame = sink.recv() @@ -814,23 +592,23 @@ def bench(): test_frame2.payload = bytearray(range(32)) test_frame2.build() - source_1.send(test_frame1) - source_2.send(test_frame2) + source_list[1].send(test_frame1) + source_list[2].send(test_frame2) yield clk.posedge yield clk.posedge - while input_0_udp_payload_tvalid or input_1_udp_payload_tvalid or input_2_udp_payload_tvalid or input_3_udp_payload_tvalid: - source_0_pause.next = True - source_1_pause.next = True - source_2_pause.next = True - source_3_pause.next = True + while s_udp_payload_axis_tvalid: + source_pause_list[0].next = True + source_pause_list[1].next = True + source_pause_list[2].next = True + source_pause_list[3].next = True yield clk.posedge yield clk.posedge yield clk.posedge - source_0_pause.next = False - source_1_pause.next = False - source_2_pause.next = False - source_3_pause.next = False + source_pause_list[0].next = False + source_pause_list[1].next = False + source_pause_list[2].next = False + source_pause_list[3].next = False yield clk.posedge yield sink.wait() @@ -896,12 +674,12 @@ def bench(): test_frame2.payload = bytearray(range(32)) test_frame2.build() - source_1.send(test_frame1) - source_2.send(test_frame2) + source_list[1].send(test_frame1) + source_list[2].send(test_frame2) yield clk.posedge yield clk.posedge - while input_0_udp_payload_tvalid or input_1_udp_payload_tvalid or input_2_udp_payload_tvalid or input_3_udp_payload_tvalid: + while s_udp_payload_axis_tvalid: sink_pause.next = True yield clk.posedge yield clk.posedge @@ -972,17 +750,17 @@ def bench(): test_frame2.payload = bytearray(range(32)) test_frame2.build() - source_1.send(test_frame1) - source_2.send(test_frame2) - source_2.send(test_frame2) - source_2.send(test_frame2) - source_2.send(test_frame2) - source_2.send(test_frame2) + source_list[1].send(test_frame1) + source_list[2].send(test_frame2) + source_list[2].send(test_frame2) + source_list[2].send(test_frame2) + source_list[2].send(test_frame2) + source_list[2].send(test_frame2) yield clk.posedge - yield delay(150) + yield delay(120) yield clk.posedge - source_1.send(test_frame1) + source_list[1].send(test_frame1) yield sink.wait() rx_frame = sink.recv() diff --git a/tb/test_udp_arb_mux_64_4.v b/tb/test_udp_arb_mux_64_4.v index 88765489..db33c235 100644 --- a/tb/test_udp_arb_mux_64_4.v +++ b/tb/test_udp_arb_mux_64_4.v @@ -27,159 +27,93 @@ THE SOFTWARE. `timescale 1ns / 1ps /* - * Testbench for udp_arb_mux_64_4 + * Testbench for udp_arb_mux */ module test_udp_arb_mux_64_4; +// Parameters +parameter S_COUNT = 4; +parameter DATA_WIDTH = 64; +parameter KEEP_ENABLE = (DATA_WIDTH>8); +parameter KEEP_WIDTH = (DATA_WIDTH/8); +parameter ID_ENABLE = 1; +parameter ID_WIDTH = 8; +parameter DEST_ENABLE = 1; +parameter DEST_WIDTH = 8; +parameter USER_ENABLE = 1; +parameter USER_WIDTH = 1; +parameter ARB_TYPE = "PRIORITY"; +parameter LSB_PRIORITY = "HIGH"; + // Inputs reg clk = 0; reg rst = 0; reg [7:0] current_test = 0; -reg input_0_udp_hdr_valid = 0; -reg [47:0] input_0_eth_dest_mac = 0; -reg [47:0] input_0_eth_src_mac = 0; -reg [15:0] input_0_eth_type = 0; -reg [3:0] input_0_ip_version = 0; -reg [3:0] input_0_ip_ihl = 0; -reg [5:0] input_0_ip_dscp = 0; -reg [1:0] input_0_ip_ecn = 0; -reg [15:0] input_0_ip_length = 0; -reg [15:0] input_0_ip_identification = 0; -reg [2:0] input_0_ip_flags = 0; -reg [12:0] input_0_ip_fragment_offset = 0; -reg [7:0] input_0_ip_ttl = 0; -reg [7:0] input_0_ip_protocol = 0; -reg [15:0] input_0_ip_header_checksum = 0; -reg [31:0] input_0_ip_source_ip = 0; -reg [31:0] input_0_ip_dest_ip = 0; -reg [15:0] input_0_udp_source_port = 0; -reg [15:0] input_0_udp_dest_port = 0; -reg [15:0] input_0_udp_length = 0; -reg [15:0] input_0_udp_checksum = 0; -reg [63:0] input_0_udp_payload_tdata = 0; -reg [7:0] input_0_udp_payload_tkeep = 0; -reg input_0_udp_payload_tvalid = 0; -reg input_0_udp_payload_tlast = 0; -reg input_0_udp_payload_tuser = 0; -reg input_1_udp_hdr_valid = 0; -reg [47:0] input_1_eth_dest_mac = 0; -reg [47:0] input_1_eth_src_mac = 0; -reg [15:0] input_1_eth_type = 0; -reg [3:0] input_1_ip_version = 0; -reg [3:0] input_1_ip_ihl = 0; -reg [5:0] input_1_ip_dscp = 0; -reg [1:0] input_1_ip_ecn = 0; -reg [15:0] input_1_ip_length = 0; -reg [15:0] input_1_ip_identification = 0; -reg [2:0] input_1_ip_flags = 0; -reg [12:0] input_1_ip_fragment_offset = 0; -reg [7:0] input_1_ip_ttl = 0; -reg [7:0] input_1_ip_protocol = 0; -reg [15:0] input_1_ip_header_checksum = 0; -reg [31:0] input_1_ip_source_ip = 0; -reg [31:0] input_1_ip_dest_ip = 0; -reg [15:0] input_1_udp_source_port = 0; -reg [15:0] input_1_udp_dest_port = 0; -reg [15:0] input_1_udp_length = 0; -reg [15:0] input_1_udp_checksum = 0; -reg [63:0] input_1_udp_payload_tdata = 0; -reg [7:0] input_1_udp_payload_tkeep = 0; -reg input_1_udp_payload_tvalid = 0; -reg input_1_udp_payload_tlast = 0; -reg input_1_udp_payload_tuser = 0; -reg input_2_udp_hdr_valid = 0; -reg [47:0] input_2_eth_dest_mac = 0; -reg [47:0] input_2_eth_src_mac = 0; -reg [15:0] input_2_eth_type = 0; -reg [3:0] input_2_ip_version = 0; -reg [3:0] input_2_ip_ihl = 0; -reg [5:0] input_2_ip_dscp = 0; -reg [1:0] input_2_ip_ecn = 0; -reg [15:0] input_2_ip_length = 0; -reg [15:0] input_2_ip_identification = 0; -reg [2:0] input_2_ip_flags = 0; -reg [12:0] input_2_ip_fragment_offset = 0; -reg [7:0] input_2_ip_ttl = 0; -reg [7:0] input_2_ip_protocol = 0; -reg [15:0] input_2_ip_header_checksum = 0; -reg [31:0] input_2_ip_source_ip = 0; -reg [31:0] input_2_ip_dest_ip = 0; -reg [15:0] input_2_udp_source_port = 0; -reg [15:0] input_2_udp_dest_port = 0; -reg [15:0] input_2_udp_length = 0; -reg [15:0] input_2_udp_checksum = 0; -reg [63:0] input_2_udp_payload_tdata = 0; -reg [7:0] input_2_udp_payload_tkeep = 0; -reg input_2_udp_payload_tvalid = 0; -reg input_2_udp_payload_tlast = 0; -reg input_2_udp_payload_tuser = 0; -reg input_3_udp_hdr_valid = 0; -reg [47:0] input_3_eth_dest_mac = 0; -reg [47:0] input_3_eth_src_mac = 0; -reg [15:0] input_3_eth_type = 0; -reg [3:0] input_3_ip_version = 0; -reg [3:0] input_3_ip_ihl = 0; -reg [5:0] input_3_ip_dscp = 0; -reg [1:0] input_3_ip_ecn = 0; -reg [15:0] input_3_ip_length = 0; -reg [15:0] input_3_ip_identification = 0; -reg [2:0] input_3_ip_flags = 0; -reg [12:0] input_3_ip_fragment_offset = 0; -reg [7:0] input_3_ip_ttl = 0; -reg [7:0] input_3_ip_protocol = 0; -reg [15:0] input_3_ip_header_checksum = 0; -reg [31:0] input_3_ip_source_ip = 0; -reg [31:0] input_3_ip_dest_ip = 0; -reg [15:0] input_3_udp_source_port = 0; -reg [15:0] input_3_udp_dest_port = 0; -reg [15:0] input_3_udp_length = 0; -reg [15:0] input_3_udp_checksum = 0; -reg [63:0] input_3_udp_payload_tdata = 0; -reg [7:0] input_3_udp_payload_tkeep = 0; -reg input_3_udp_payload_tvalid = 0; -reg input_3_udp_payload_tlast = 0; -reg input_3_udp_payload_tuser = 0; +reg [S_COUNT-1:0] s_udp_hdr_valid = 0; +reg [S_COUNT*48-1:0] s_eth_dest_mac = 0; +reg [S_COUNT*48-1:0] s_eth_src_mac = 0; +reg [S_COUNT*16-1:0] s_eth_type = 0; +reg [S_COUNT*4-1:0] s_ip_version = 0; +reg [S_COUNT*4-1:0] s_ip_ihl = 0; +reg [S_COUNT*6-1:0] s_ip_dscp = 0; +reg [S_COUNT*2-1:0] s_ip_ecn = 0; +reg [S_COUNT*16-1:0] s_ip_length = 0; +reg [S_COUNT*16-1:0] s_ip_identification = 0; +reg [S_COUNT*3-1:0] s_ip_flags = 0; +reg [S_COUNT*13-1:0] s_ip_fragment_offset = 0; +reg [S_COUNT*8-1:0] s_ip_ttl = 0; +reg [S_COUNT*8-1:0] s_ip_protocol = 0; +reg [S_COUNT*16-1:0] s_ip_header_checksum = 0; +reg [S_COUNT*32-1:0] s_ip_source_ip = 0; +reg [S_COUNT*32-1:0] s_ip_dest_ip = 0; +reg [S_COUNT*16-1:0] s_udp_source_port = 0; +reg [S_COUNT*16-1:0] s_udp_dest_port = 0; +reg [S_COUNT*16-1:0] s_udp_length = 0; +reg [S_COUNT*16-1:0] s_udp_checksum = 0; +reg [S_COUNT*DATA_WIDTH-1:0] s_udp_payload_axis_tdata = 0; +reg [S_COUNT*KEEP_WIDTH-1:0] s_udp_payload_axis_tkeep = 0; +reg [S_COUNT-1:0] s_udp_payload_axis_tvalid = 0; +reg [S_COUNT-1:0] s_udp_payload_axis_tlast = 0; +reg [S_COUNT*ID_WIDTH-1:0] s_udp_payload_axis_tid = 0; +reg [S_COUNT*DEST_WIDTH-1:0] s_udp_payload_axis_tdest = 0; +reg [S_COUNT*USER_WIDTH-1:0] s_udp_payload_axis_tuser = 0; -reg output_udp_hdr_ready = 0; -reg output_udp_payload_tready = 0; +reg m_udp_hdr_ready = 0; +reg m_udp_payload_axis_tready = 0; // Outputs -wire input_0_udp_payload_tready; -wire input_0_udp_hdr_ready; -wire input_1_udp_payload_tready; -wire input_1_udp_hdr_ready; -wire input_2_udp_payload_tready; -wire input_2_udp_hdr_ready; -wire input_3_udp_payload_tready; -wire input_3_udp_hdr_ready; +wire [S_COUNT-1:0] s_udp_hdr_ready; +wire [S_COUNT-1:0] s_udp_payload_axis_tready; -wire output_udp_hdr_valid; -wire [47:0] output_eth_dest_mac; -wire [47:0] output_eth_src_mac; -wire [15:0] output_eth_type; -wire [3:0] output_ip_version; -wire [3:0] output_ip_ihl; -wire [5:0] output_ip_dscp; -wire [1:0] output_ip_ecn; -wire [15:0] output_ip_length; -wire [15:0] output_ip_identification; -wire [2:0] output_ip_flags; -wire [12:0] output_ip_fragment_offset; -wire [7:0] output_ip_ttl; -wire [7:0] output_ip_protocol; -wire [15:0] output_ip_header_checksum; -wire [31:0] output_ip_source_ip; -wire [31:0] output_ip_dest_ip; -wire [15:0] output_udp_source_port; -wire [15:0] output_udp_dest_port; -wire [15:0] output_udp_length; -wire [15:0] output_udp_checksum; -wire [63:0] output_udp_payload_tdata; -wire [7:0] output_udp_payload_tkeep; -wire output_udp_payload_tvalid; -wire output_udp_payload_tlast; -wire output_udp_payload_tuser; +wire m_udp_hdr_valid; +wire [47:0] m_eth_dest_mac; +wire [47:0] m_eth_src_mac; +wire [15:0] m_eth_type; +wire [3:0] m_ip_version; +wire [3:0] m_ip_ihl; +wire [5:0] m_ip_dscp; +wire [1:0] m_ip_ecn; +wire [15:0] m_ip_length; +wire [15:0] m_ip_identification; +wire [2:0] m_ip_flags; +wire [12:0] m_ip_fragment_offset; +wire [7:0] m_ip_ttl; +wire [7:0] m_ip_protocol; +wire [15:0] m_ip_header_checksum; +wire [31:0] m_ip_source_ip; +wire [31:0] m_ip_dest_ip; +wire [15:0] m_udp_source_port; +wire [15:0] m_udp_dest_port; +wire [15:0] m_udp_length; +wire [15:0] m_udp_checksum; +wire [DATA_WIDTH-1:0] m_udp_payload_axis_tdata; +wire [KEEP_WIDTH-1:0] m_udp_payload_axis_tkeep; +wire m_udp_payload_axis_tvalid; +wire m_udp_payload_axis_tlast; +wire [ID_WIDTH-1:0] m_udp_payload_axis_tid; +wire [DEST_WIDTH-1:0] m_udp_payload_axis_tdest; +wire [USER_WIDTH-1:0] m_udp_payload_axis_tuser; initial begin // myhdl integration @@ -187,148 +121,68 @@ initial begin clk, rst, current_test, - input_0_udp_hdr_valid, - input_0_eth_dest_mac, - input_0_eth_src_mac, - input_0_eth_type, - input_0_ip_version, - input_0_ip_ihl, - input_0_ip_dscp, - input_0_ip_ecn, - input_0_ip_length, - input_0_ip_identification, - input_0_ip_flags, - input_0_ip_fragment_offset, - input_0_ip_ttl, - input_0_ip_protocol, - input_0_ip_header_checksum, - input_0_ip_source_ip, - input_0_ip_dest_ip, - input_0_udp_source_port, - input_0_udp_dest_port, - input_0_udp_length, - input_0_udp_checksum, - input_0_udp_payload_tdata, - input_0_udp_payload_tkeep, - input_0_udp_payload_tvalid, - input_0_udp_payload_tlast, - input_0_udp_payload_tuser, - input_1_udp_hdr_valid, - input_1_eth_dest_mac, - input_1_eth_src_mac, - input_1_eth_type, - input_1_ip_version, - input_1_ip_ihl, - input_1_ip_dscp, - input_1_ip_ecn, - input_1_ip_length, - input_1_ip_identification, - input_1_ip_flags, - input_1_ip_fragment_offset, - input_1_ip_ttl, - input_1_ip_protocol, - input_1_ip_header_checksum, - input_1_ip_source_ip, - input_1_ip_dest_ip, - input_1_udp_source_port, - input_1_udp_dest_port, - input_1_udp_length, - input_1_udp_checksum, - input_1_udp_payload_tdata, - input_1_udp_payload_tkeep, - input_1_udp_payload_tvalid, - input_1_udp_payload_tlast, - input_1_udp_payload_tuser, - input_2_udp_hdr_valid, - input_2_eth_dest_mac, - input_2_eth_src_mac, - input_2_eth_type, - input_2_ip_version, - input_2_ip_ihl, - input_2_ip_dscp, - input_2_ip_ecn, - input_2_ip_length, - input_2_ip_identification, - input_2_ip_flags, - input_2_ip_fragment_offset, - input_2_ip_ttl, - input_2_ip_protocol, - input_2_ip_header_checksum, - input_2_ip_source_ip, - input_2_ip_dest_ip, - input_2_udp_source_port, - input_2_udp_dest_port, - input_2_udp_length, - input_2_udp_checksum, - input_2_udp_payload_tdata, - input_2_udp_payload_tkeep, - input_2_udp_payload_tvalid, - input_2_udp_payload_tlast, - input_2_udp_payload_tuser, - input_3_udp_hdr_valid, - input_3_eth_dest_mac, - input_3_eth_src_mac, - input_3_eth_type, - input_3_ip_version, - input_3_ip_ihl, - input_3_ip_dscp, - input_3_ip_ecn, - input_3_ip_length, - input_3_ip_identification, - input_3_ip_flags, - input_3_ip_fragment_offset, - input_3_ip_ttl, - input_3_ip_protocol, - input_3_ip_header_checksum, - input_3_ip_source_ip, - input_3_ip_dest_ip, - input_3_udp_source_port, - input_3_udp_dest_port, - input_3_udp_length, - input_3_udp_checksum, - input_3_udp_payload_tdata, - input_3_udp_payload_tkeep, - input_3_udp_payload_tvalid, - input_3_udp_payload_tlast, - input_3_udp_payload_tuser, - output_udp_hdr_ready, - output_udp_payload_tready + s_udp_hdr_valid, + s_eth_dest_mac, + s_eth_src_mac, + s_eth_type, + s_ip_version, + s_ip_ihl, + s_ip_dscp, + s_ip_ecn, + s_ip_length, + s_ip_identification, + s_ip_flags, + s_ip_fragment_offset, + s_ip_ttl, + s_ip_protocol, + s_ip_header_checksum, + s_ip_source_ip, + s_ip_dest_ip, + s_udp_source_port, + s_udp_dest_port, + s_udp_length, + s_udp_checksum, + s_udp_payload_axis_tdata, + s_udp_payload_axis_tkeep, + s_udp_payload_axis_tvalid, + s_udp_payload_axis_tlast, + s_udp_payload_axis_tid, + s_udp_payload_axis_tdest, + s_udp_payload_axis_tuser, + m_udp_hdr_ready, + m_udp_payload_axis_tready ); $to_myhdl( - input_0_udp_hdr_ready, - input_0_udp_payload_tready, - input_1_udp_hdr_ready, - input_1_udp_payload_tready, - input_2_udp_hdr_ready, - input_2_udp_payload_tready, - input_3_udp_hdr_ready, - input_3_udp_payload_tready, - output_udp_hdr_valid, - output_eth_dest_mac, - output_eth_src_mac, - output_eth_type, - output_ip_version, - output_ip_ihl, - output_ip_dscp, - output_ip_ecn, - output_ip_length, - output_ip_identification, - output_ip_flags, - output_ip_fragment_offset, - output_ip_ttl, - output_ip_protocol, - output_ip_header_checksum, - output_ip_source_ip, - output_ip_dest_ip, - output_udp_source_port, - output_udp_dest_port, - output_udp_length, - output_udp_checksum, - output_udp_payload_tdata, - output_udp_payload_tkeep, - output_udp_payload_tvalid, - output_udp_payload_tlast, - output_udp_payload_tuser + s_udp_hdr_ready, + s_udp_payload_axis_tready, + m_udp_hdr_valid, + m_eth_dest_mac, + m_eth_src_mac, + m_eth_type, + m_ip_version, + m_ip_ihl, + m_ip_dscp, + m_ip_ecn, + m_ip_length, + m_ip_identification, + m_ip_flags, + m_ip_fragment_offset, + m_ip_ttl, + m_ip_protocol, + m_ip_header_checksum, + m_ip_source_ip, + m_ip_dest_ip, + m_udp_source_port, + m_udp_dest_port, + m_udp_length, + m_udp_checksum, + m_udp_payload_axis_tdata, + m_udp_payload_axis_tkeep, + m_udp_payload_axis_tvalid, + m_udp_payload_axis_tlast, + m_udp_payload_axis_tid, + m_udp_payload_axis_tdest, + m_udp_payload_axis_tuser ); // dump file @@ -336,152 +190,85 @@ initial begin $dumpvars(0, test_udp_arb_mux_64_4); end -udp_arb_mux_64_4 +udp_arb_mux #( + .S_COUNT(S_COUNT), + .DATA_WIDTH(DATA_WIDTH), + .KEEP_ENABLE(KEEP_ENABLE), + .KEEP_WIDTH(KEEP_WIDTH), + .ID_ENABLE(ID_ENABLE), + .ID_WIDTH(ID_WIDTH), + .DEST_ENABLE(DEST_ENABLE), + .DEST_WIDTH(DEST_WIDTH), + .USER_ENABLE(USER_ENABLE), + .USER_WIDTH(USER_WIDTH), + .ARB_TYPE(ARB_TYPE), + .LSB_PRIORITY(LSB_PRIORITY) +) UUT ( .clk(clk), .rst(rst), - // UDP frame inputs - .input_0_udp_hdr_valid(input_0_udp_hdr_valid), - .input_0_udp_hdr_ready(input_0_udp_hdr_ready), - .input_0_eth_dest_mac(input_0_eth_dest_mac), - .input_0_eth_src_mac(input_0_eth_src_mac), - .input_0_eth_type(input_0_eth_type), - .input_0_ip_version(input_0_ip_version), - .input_0_ip_ihl(input_0_ip_ihl), - .input_0_ip_dscp(input_0_ip_dscp), - .input_0_ip_ecn(input_0_ip_ecn), - .input_0_ip_length(input_0_ip_length), - .input_0_ip_identification(input_0_ip_identification), - .input_0_ip_flags(input_0_ip_flags), - .input_0_ip_fragment_offset(input_0_ip_fragment_offset), - .input_0_ip_ttl(input_0_ip_ttl), - .input_0_ip_protocol(input_0_ip_protocol), - .input_0_ip_header_checksum(input_0_ip_header_checksum), - .input_0_ip_source_ip(input_0_ip_source_ip), - .input_0_ip_dest_ip(input_0_ip_dest_ip), - .input_0_udp_source_port(input_0_udp_source_port), - .input_0_udp_dest_port(input_0_udp_dest_port), - .input_0_udp_length(input_0_udp_length), - .input_0_udp_checksum(input_0_udp_checksum), - .input_0_udp_payload_tdata(input_0_udp_payload_tdata), - .input_0_udp_payload_tkeep(input_0_udp_payload_tkeep), - .input_0_udp_payload_tvalid(input_0_udp_payload_tvalid), - .input_0_udp_payload_tready(input_0_udp_payload_tready), - .input_0_udp_payload_tlast(input_0_udp_payload_tlast), - .input_0_udp_payload_tuser(input_0_udp_payload_tuser), - .input_1_udp_hdr_valid(input_1_udp_hdr_valid), - .input_1_udp_hdr_ready(input_1_udp_hdr_ready), - .input_1_eth_dest_mac(input_1_eth_dest_mac), - .input_1_eth_src_mac(input_1_eth_src_mac), - .input_1_eth_type(input_1_eth_type), - .input_1_ip_version(input_1_ip_version), - .input_1_ip_ihl(input_1_ip_ihl), - .input_1_ip_dscp(input_1_ip_dscp), - .input_1_ip_ecn(input_1_ip_ecn), - .input_1_ip_length(input_1_ip_length), - .input_1_ip_identification(input_1_ip_identification), - .input_1_ip_flags(input_1_ip_flags), - .input_1_ip_fragment_offset(input_1_ip_fragment_offset), - .input_1_ip_ttl(input_1_ip_ttl), - .input_1_ip_protocol(input_1_ip_protocol), - .input_1_ip_header_checksum(input_1_ip_header_checksum), - .input_1_ip_source_ip(input_1_ip_source_ip), - .input_1_ip_dest_ip(input_1_ip_dest_ip), - .input_1_udp_source_port(input_1_udp_source_port), - .input_1_udp_dest_port(input_1_udp_dest_port), - .input_1_udp_length(input_1_udp_length), - .input_1_udp_checksum(input_1_udp_checksum), - .input_1_udp_payload_tdata(input_1_udp_payload_tdata), - .input_1_udp_payload_tkeep(input_1_udp_payload_tkeep), - .input_1_udp_payload_tvalid(input_1_udp_payload_tvalid), - .input_1_udp_payload_tready(input_1_udp_payload_tready), - .input_1_udp_payload_tlast(input_1_udp_payload_tlast), - .input_1_udp_payload_tuser(input_1_udp_payload_tuser), - .input_2_udp_hdr_valid(input_2_udp_hdr_valid), - .input_2_udp_hdr_ready(input_2_udp_hdr_ready), - .input_2_eth_dest_mac(input_2_eth_dest_mac), - .input_2_eth_src_mac(input_2_eth_src_mac), - .input_2_eth_type(input_2_eth_type), - .input_2_ip_version(input_2_ip_version), - .input_2_ip_ihl(input_2_ip_ihl), - .input_2_ip_dscp(input_2_ip_dscp), - .input_2_ip_ecn(input_2_ip_ecn), - .input_2_ip_length(input_2_ip_length), - .input_2_ip_identification(input_2_ip_identification), - .input_2_ip_flags(input_2_ip_flags), - .input_2_ip_fragment_offset(input_2_ip_fragment_offset), - .input_2_ip_ttl(input_2_ip_ttl), - .input_2_ip_protocol(input_2_ip_protocol), - .input_2_ip_header_checksum(input_2_ip_header_checksum), - .input_2_ip_source_ip(input_2_ip_source_ip), - .input_2_ip_dest_ip(input_2_ip_dest_ip), - .input_2_udp_source_port(input_2_udp_source_port), - .input_2_udp_dest_port(input_2_udp_dest_port), - .input_2_udp_length(input_2_udp_length), - .input_2_udp_checksum(input_2_udp_checksum), - .input_2_udp_payload_tdata(input_2_udp_payload_tdata), - .input_2_udp_payload_tkeep(input_2_udp_payload_tkeep), - .input_2_udp_payload_tvalid(input_2_udp_payload_tvalid), - .input_2_udp_payload_tready(input_2_udp_payload_tready), - .input_2_udp_payload_tlast(input_2_udp_payload_tlast), - .input_2_udp_payload_tuser(input_2_udp_payload_tuser), - .input_3_udp_hdr_valid(input_3_udp_hdr_valid), - .input_3_udp_hdr_ready(input_3_udp_hdr_ready), - .input_3_eth_dest_mac(input_3_eth_dest_mac), - .input_3_eth_src_mac(input_3_eth_src_mac), - .input_3_eth_type(input_3_eth_type), - .input_3_ip_version(input_3_ip_version), - .input_3_ip_ihl(input_3_ip_ihl), - .input_3_ip_dscp(input_3_ip_dscp), - .input_3_ip_ecn(input_3_ip_ecn), - .input_3_ip_length(input_3_ip_length), - .input_3_ip_identification(input_3_ip_identification), - .input_3_ip_flags(input_3_ip_flags), - .input_3_ip_fragment_offset(input_3_ip_fragment_offset), - .input_3_ip_ttl(input_3_ip_ttl), - .input_3_ip_protocol(input_3_ip_protocol), - .input_3_ip_header_checksum(input_3_ip_header_checksum), - .input_3_ip_source_ip(input_3_ip_source_ip), - .input_3_ip_dest_ip(input_3_ip_dest_ip), - .input_3_udp_source_port(input_3_udp_source_port), - .input_3_udp_dest_port(input_3_udp_dest_port), - .input_3_udp_length(input_3_udp_length), - .input_3_udp_checksum(input_3_udp_checksum), - .input_3_udp_payload_tdata(input_3_udp_payload_tdata), - .input_3_udp_payload_tkeep(input_3_udp_payload_tkeep), - .input_3_udp_payload_tvalid(input_3_udp_payload_tvalid), - .input_3_udp_payload_tready(input_3_udp_payload_tready), - .input_3_udp_payload_tlast(input_3_udp_payload_tlast), - .input_3_udp_payload_tuser(input_3_udp_payload_tuser), - // UDP frame output - .output_udp_hdr_valid(output_udp_hdr_valid), - .output_udp_hdr_ready(output_udp_hdr_ready), - .output_eth_dest_mac(output_eth_dest_mac), - .output_eth_src_mac(output_eth_src_mac), - .output_eth_type(output_eth_type), - .output_ip_version(output_ip_version), - .output_ip_ihl(output_ip_ihl), - .output_ip_dscp(output_ip_dscp), - .output_ip_ecn(output_ip_ecn), - .output_ip_length(output_ip_length), - .output_ip_identification(output_ip_identification), - .output_ip_flags(output_ip_flags), - .output_ip_fragment_offset(output_ip_fragment_offset), - .output_ip_ttl(output_ip_ttl), - .output_ip_protocol(output_ip_protocol), - .output_ip_header_checksum(output_ip_header_checksum), - .output_ip_source_ip(output_ip_source_ip), - .output_ip_dest_ip(output_ip_dest_ip), - .output_udp_source_port(output_udp_source_port), - .output_udp_dest_port(output_udp_dest_port), - .output_udp_length(output_udp_length), - .output_udp_checksum(output_udp_checksum), - .output_udp_payload_tdata(output_udp_payload_tdata), - .output_udp_payload_tkeep(output_udp_payload_tkeep), - .output_udp_payload_tvalid(output_udp_payload_tvalid), - .output_udp_payload_tready(output_udp_payload_tready), - .output_udp_payload_tlast(output_udp_payload_tlast), - .output_udp_payload_tuser(output_udp_payload_tuser) + // Ethernet frame inputs + .s_udp_hdr_valid(s_udp_hdr_valid), + .s_udp_hdr_ready(s_udp_hdr_ready), + .s_eth_dest_mac(s_eth_dest_mac), + .s_eth_src_mac(s_eth_src_mac), + .s_eth_type(s_eth_type), + .s_ip_version(s_ip_version), + .s_ip_ihl(s_ip_ihl), + .s_ip_dscp(s_ip_dscp), + .s_ip_ecn(s_ip_ecn), + .s_ip_length(s_ip_length), + .s_ip_identification(s_ip_identification), + .s_ip_flags(s_ip_flags), + .s_ip_fragment_offset(s_ip_fragment_offset), + .s_ip_ttl(s_ip_ttl), + .s_ip_protocol(s_ip_protocol), + .s_ip_header_checksum(s_ip_header_checksum), + .s_ip_source_ip(s_ip_source_ip), + .s_ip_dest_ip(s_ip_dest_ip), + .s_udp_source_port(s_udp_source_port), + .s_udp_dest_port(s_udp_dest_port), + .s_udp_length(s_udp_length), + .s_udp_checksum(s_udp_checksum), + .s_udp_payload_axis_tdata(s_udp_payload_axis_tdata), + .s_udp_payload_axis_tkeep(s_udp_payload_axis_tkeep), + .s_udp_payload_axis_tvalid(s_udp_payload_axis_tvalid), + .s_udp_payload_axis_tready(s_udp_payload_axis_tready), + .s_udp_payload_axis_tlast(s_udp_payload_axis_tlast), + .s_udp_payload_axis_tid(s_udp_payload_axis_tid), + .s_udp_payload_axis_tdest(s_udp_payload_axis_tdest), + .s_udp_payload_axis_tuser(s_udp_payload_axis_tuser), + // Ethernet frame output + .m_udp_hdr_valid(m_udp_hdr_valid), + .m_udp_hdr_ready(m_udp_hdr_ready), + .m_eth_dest_mac(m_eth_dest_mac), + .m_eth_src_mac(m_eth_src_mac), + .m_eth_type(m_eth_type), + .m_ip_version(m_ip_version), + .m_ip_ihl(m_ip_ihl), + .m_ip_dscp(m_ip_dscp), + .m_ip_ecn(m_ip_ecn), + .m_ip_length(m_ip_length), + .m_ip_identification(m_ip_identification), + .m_ip_flags(m_ip_flags), + .m_ip_fragment_offset(m_ip_fragment_offset), + .m_ip_ttl(m_ip_ttl), + .m_ip_protocol(m_ip_protocol), + .m_ip_header_checksum(m_ip_header_checksum), + .m_ip_source_ip(m_ip_source_ip), + .m_ip_dest_ip(m_ip_dest_ip), + .m_udp_source_port(m_udp_source_port), + .m_udp_dest_port(m_udp_dest_port), + .m_udp_length(m_udp_length), + .m_udp_checksum(m_udp_checksum), + .m_udp_payload_axis_tdata(m_udp_payload_axis_tdata), + .m_udp_payload_axis_tkeep(m_udp_payload_axis_tkeep), + .m_udp_payload_axis_tvalid(m_udp_payload_axis_tvalid), + .m_udp_payload_axis_tready(m_udp_payload_axis_tready), + .m_udp_payload_axis_tlast(m_udp_payload_axis_tlast), + .m_udp_payload_axis_tid(m_udp_payload_axis_tid), + .m_udp_payload_axis_tdest(m_udp_payload_axis_tdest), + .m_udp_payload_axis_tuser(m_udp_payload_axis_tuser) ); endmodule