diff --git a/example/ADM_PCIE_9V3/fpga_25g/ip/axis_width_converter.tcl b/example/ADM_PCIE_9V3/fpga_25g/ip/axis_width_converter.tcl new file mode 100644 index 0000000000000000000000000000000000000000..c26877dc51ec3d1f33b5456bf67a81e988ba8ed4 --- /dev/null +++ b/example/ADM_PCIE_9V3/fpga_25g/ip/axis_width_converter.tcl @@ -0,0 +1,8 @@ +create_ip -name axis_dwidth_converter -vendor xilinx.com -library ip -version 1.1 -module_name axis_dwidth_converter_256_64 +set_property -dict [list CONFIG.S_TDATA_NUM_BYTES {256} CONFIG.M_TDATA_NUM_BYTES {64} CONFIG.HAS_TLAST {1} CONFIG.HAS_TKEEP {1} CONFIG.HAS_MI_TKEEP {0}] [get_ips axis_dwidth_converter_256_64] +generate_target {all} [get_ips axis_dwidth_converter_256_64] + +create_ip -name axis_dwidth_converter -vendor xilinx.com -library ip -version 1.1 -module_name axis_dwidth_converter_64_256 +set_property -dict [list CONFIG.S_TDATA_NUM_BYTES {64} CONFIG.M_TDATA_NUM_BYTES {256} CONFIG.HAS_TLAST {1} CONFIG.HAS_TKEEP {1} CONFIG.HAS_MI_TKEEP {0}] [get_ips axis_dwidth_converter_64_256] +generate_target {all} [get_ips axis_dwidth_converter_64_256] + diff --git a/example/ADM_PCIE_9V3/fpga_25g/rtl/fpga.v b/example/ADM_PCIE_9V3/fpga_25g/rtl/fpga.v index 4ee71dc047c3c5df6b87ee563cae2311bb628e0f..9dae4fa9b87c3732a58d6d1f16ddd4d49ad3990a 100644 --- a/example/ADM_PCIE_9V3/fpga_25g/rtl/fpga.v +++ b/example/ADM_PCIE_9V3/fpga_25g/rtl/fpga.v @@ -31,12 +31,12 @@ THE SOFTWARE. /* * FPGA top-level module */ -module fpga ( +module fpga + ( /* * Clock: 300MHz LVDS */ - input wire clk_300mhz_p, - input wire clk_300mhz_n, + input wire clk, /* * GPIO @@ -69,6 +69,8 @@ module fpga ( input wire qsfp_0_mgt_refclk_n, input wire qsfp_0_modprs_l, output wire qsfp_0_sel_l, + output wire qsfp_0_mgt_refclk, + output wire qsfp_1_tx_0_p, output wire qsfp_1_tx_0_n, @@ -90,22 +92,23 @@ module fpga ( input wire qsfp_1_mgt_refclk_n, input wire qsfp_1_modprs_l, output wire qsfp_1_sel_l, + output wire qsfp_1_mgt_refclk, output wire qsfp_reset_l, - input wire qsfp_int_l + input wire qsfp_int_l, //input and output payload - output wire [63:0] rx_payload_axis_tdata, - output wire [7:0] rx_payload_axis_tkeep, - output wire rx_payload_axis_tvalid, - input wire rx_payload_axis_tready, - output wire rx_payload_axis_tlast, - - input wire [63:0] tx_payload_axis_tdata, - input wire [7:0] tx_payload_axis_tkeep, - input wire tx_payload_axis_tvalid, - output wire tx_payload_axis_tready, - input wire tx_payload_axis_tlast, + output wire [255:0] rx_payload_axis_tdata_256, + output wire [7:0] rx_payload_axis_tkeep_256, + output wire rx_payload_axis_tvalid_256, + input wire rx_payload_axis_tready_256, + output wire rx_payload_axis_tlast_256, + + input wire [255:0] tx_payload_axis_tdata_256, + input wire [7:0] tx_payload_axis_tkeep_256, + input wire tx_payload_axis_tvalid_256, + output wire tx_payload_axis_tready_256, + input wire tx_payload_axis_tlast_256, //networking parameter // Configuration @@ -134,15 +137,31 @@ wire mmcm_rst = 1'b0; wire mmcm_locked; wire mmcm_clkfb; +// 256bit to 64bit convertion +wire [255:0] rx_payload_axis_tdata_64, +wire [7:0] rx_payload_axis_tkeep_64, +wire rx_payload_axis_tvalid_64, +wire rx_payload_axis_tready_64, +wire rx_payload_axis_tlast_64, +wire [255:0] tx_payload_axis_tdata_64, +wire [7:0] tx_payload_axis_tkeep_64, +wire tx_payload_axis_tvalid_64, +wire tx_payload_axis_tready_64, +wire tx_payload_axis_tlast_64, + IBUFGDS #( .DIFF_TERM("FALSE"), .IBUF_LOW_PWR("FALSE") ) + +/* clk_300mhz_ibufg_inst ( .O (clk_300mhz_ibufg), .I (clk_300mhz_p), .IB (clk_300mhz_n) ); +*/ +assign clk_300mhz_ibufg = clk; // MMCM instance // 300 MHz in, 125 MHz out @@ -752,7 +771,38 @@ qsfp_1_phy_3_inst ( assign front_led[0] = qsfp_0_rx_block_lock_0; assign front_led[1] = qsfp_1_rx_block_lock_0; -fpga_core +axis_dwidth_converter_256_64 ( + aclk(clk_390mhz_int), + aresetn(rst_390mhz_int), + s_axis_tvalid(rx_payload_axis_tvalid_256), + s_axis_tready(rx_payload_axis_tready_256), + s_axis_tdata(rx_payload_axis_tdata_256), + s_axis_tkeep(rx_payload_axis_tkeep_256), + s_axis_tlast(rx_payload_axis_tlast_256), + m_axis_tvalid(rx_payload_axis_tdata_64), + m_axis_tready(rx_payload_axis_tready_64), + m_axis_tdata(rx_payload_axis_tdata_64), + m_axis_tkeep(rx_payload_axis_tkeep_64), + m_axis_tlast(rx_payload_axis_tlast_64) +); + +axis_dwidth_converter_64_256 ( + aclk(clk_390mhz_int), + aresetn(rst_390mhz_int), + s_axis_tvalid(tx_payload_axis_tdata_64), + s_axis_tready(tx_payload_axis_tready_64), + s_axis_tdata(tx_payload_axis_tdata_64), + s_axis_tkeep(tx_payload_axis_tkeep_64), + s_axis_tlast(tx_payload_axis_tlast_64), + m_axis_tvalid(tx_payload_axis_tvalid_256), + m_axis_tready(tx_payload_axis_tready_256), + m_axis_tdata(tx_payload_axis_tdata_256), + m_axis_tkeep(tx_payload_axis_tkeep_256), + m_axis_tlast(tx_payload_axis_tlast_256) +); + + +fpga_core core_inst ( /* * Clock: 390.625 MHz @@ -846,17 +896,17 @@ core_inst ( //input and output payload - .rx_payload_axis_tdata, - .rx_payload_axis_tkeep, - .rx_payload_axis_tvalid, - .rx_payload_axis_tready, - .rx_payload_axis_tlast, - - .tx_payload_axis_tdata, - .tx_payload_axis_tkeep, - .tx_payload_axis_tvalid, - .tx_payload_axis_tready, - .tx_payload_axis_tlast + .rx_payload_axis_tdata(rx_payload_axis_tdata_64), + .rx_payload_axis_tkeep(rx_payload_axis_tkeep_64), + .rx_payload_axis_tvalid(rx_payload_axis_tvalid_64), + .rx_payload_axis_tready(rx_payload_axis_tready_64), + .rx_payload_axis_tlast(rx_payload_axis_tlast_64), + + .tx_payload_axis_tdata(tx_payload_axis_tdata_64), + .tx_payload_axis_tkeep(tx_payload_axis_tkeep_64), + .tx_payload_axis_tvalid(tx_payload_axis_tvalid_64), + .tx_payload_axis_tready(tx_payload_axis_tready_64), + .tx_payload_axis_tlast(tx_payload_axis_tlast_64) ); endmodule