@@ -499,6 +499,7 @@ localparam RBB = RB_BASE_ADDR & {AXIL_CTRL_ADDR_WIDTH{1'b1}};
499
499
500
500
localparam RB_DRP_QSFP_0_BASE = RB_BASE_ADDR + 16'h70 ;
501
501
localparam RB_DRP_QSFP_1_BASE = RB_DRP_QSFP_0_BASE + 16'h20 ;
502
+ localparam RB_TDMA_BER_BASE = RB_DRP_QSFP_1_BASE + 16'h20 ;
502
503
503
504
initial begin
504
505
if (PORT_COUNT > 8 ) begin
@@ -507,27 +508,6 @@ initial begin
507
508
end
508
509
end
509
510
510
- // AXI lite connections
511
- wire [AXIL_CSR_ADDR_WIDTH- 1 :0 ] axil_csr_awaddr;
512
- wire [2 :0 ] axil_csr_awprot;
513
- wire axil_csr_awvalid;
514
- wire axil_csr_awready;
515
- wire [AXIL_CTRL_DATA_WIDTH- 1 :0 ] axil_csr_wdata;
516
- wire [AXIL_CTRL_STRB_WIDTH- 1 :0 ] axil_csr_wstrb;
517
- wire axil_csr_wvalid;
518
- wire axil_csr_wready;
519
- wire [1 :0 ] axil_csr_bresp;
520
- wire axil_csr_bvalid;
521
- wire axil_csr_bready;
522
- wire [AXIL_CSR_ADDR_WIDTH- 1 :0 ] axil_csr_araddr;
523
- wire [2 :0 ] axil_csr_arprot;
524
- wire axil_csr_arvalid;
525
- wire axil_csr_arready;
526
- wire [AXIL_CTRL_DATA_WIDTH- 1 :0 ] axil_csr_rdata;
527
- wire [1 :0 ] axil_csr_rresp;
528
- wire axil_csr_rvalid;
529
- wire axil_csr_rready;
530
-
531
511
// PTP
532
512
wire ptp_td_sd;
533
513
wire ptp_pps;
@@ -569,6 +549,12 @@ wire [AXIL_CTRL_DATA_WIDTH-1:0] qsfp_1_drp_reg_rd_data;
569
549
wire qsfp_1_drp_reg_rd_wait;
570
550
wire qsfp_1_drp_reg_rd_ack;
571
551
552
+ wire tdma_ber_reg_wr_wait;
553
+ wire tdma_ber_reg_wr_ack;
554
+ wire [AXIL_CTRL_DATA_WIDTH- 1 :0 ] tdma_ber_reg_rd_data;
555
+ wire tdma_ber_reg_rd_wait;
556
+ wire tdma_ber_reg_rd_ack;
557
+
572
558
reg ctrl_reg_wr_ack_reg = 1'b0 ;
573
559
reg [AXIL_CTRL_DATA_WIDTH- 1 :0 ] ctrl_reg_rd_data_reg = {AXIL_CTRL_DATA_WIDTH{1'b0 }};
574
560
reg ctrl_reg_rd_ack_reg = 1'b0 ;
@@ -599,11 +585,11 @@ wire bmc_status_idle;
599
585
wire bmc_status_done;
600
586
wire bmc_status_timeout;
601
587
602
- assign ctrl_reg_wr_wait = qsfp_0_drp_reg_wr_wait | qsfp_1_drp_reg_wr_wait;
603
- assign ctrl_reg_wr_ack = ctrl_reg_wr_ack_reg | qsfp_0_drp_reg_wr_ack | qsfp_1_drp_reg_wr_ack;
604
- assign ctrl_reg_rd_data = ctrl_reg_rd_data_reg | qsfp_0_drp_reg_rd_data | qsfp_1_drp_reg_rd_data;
605
- assign ctrl_reg_rd_wait = qsfp_0_drp_reg_rd_wait | qsfp_1_drp_reg_rd_wait;
606
- assign ctrl_reg_rd_ack = ctrl_reg_rd_ack_reg | qsfp_0_drp_reg_rd_ack | qsfp_1_drp_reg_rd_ack;
588
+ assign ctrl_reg_wr_wait = qsfp_0_drp_reg_wr_wait | qsfp_1_drp_reg_wr_wait | tdma_ber_reg_wr_wait ;
589
+ assign ctrl_reg_wr_ack = ctrl_reg_wr_ack_reg | qsfp_0_drp_reg_wr_ack | qsfp_1_drp_reg_wr_ack | tdma_ber_reg_wr_ack ;
590
+ assign ctrl_reg_rd_data = ctrl_reg_rd_data_reg | qsfp_0_drp_reg_rd_data | qsfp_1_drp_reg_rd_data | tdma_ber_reg_rd_data ;
591
+ assign ctrl_reg_rd_wait = qsfp_0_drp_reg_rd_wait | qsfp_1_drp_reg_rd_wait | tdma_ber_reg_rd_wait ;
592
+ assign ctrl_reg_rd_ack = ctrl_reg_rd_ack_reg | qsfp_0_drp_reg_rd_ack | qsfp_1_drp_reg_rd_ack | tdma_ber_reg_rd_ack ;
607
593
608
594
assign qsfp_0_reset_n = ! qsfp_0_reset_reg;
609
595
assign qsfp_0_lp_mode = qsfp_0_lp_mode_reg;
@@ -878,7 +864,7 @@ rb_drp #(
878
864
.REG_DATA_WIDTH(AXIL_CTRL_DATA_WIDTH),
879
865
.REG_STRB_WIDTH(AXIL_CTRL_STRB_WIDTH),
880
866
.RB_BASE_ADDR(RB_DRP_QSFP_1_BASE),
881
- .RB_NEXT_PTR(0 )
867
+ .RB_NEXT_PTR(RB_TDMA_BER_BASE )
882
868
)
883
869
qsfp_1_rb_drp_inst (
884
870
.clk(clk_250mhz),
@@ -920,55 +906,63 @@ generate
920
906
if (TDMA_BER_ENABLE) begin
921
907
922
908
// BER tester
923
- tdma_ber #(
909
+ mqnic_tdma_ber #(
924
910
.COUNT(8 ),
925
- .INDEX_WIDTH(6 ),
926
- .SLICE_WIDTH(5 ),
927
- .AXIL_DATA_WIDTH(AXIL_CTRL_DATA_WIDTH),
928
- .AXIL_ADDR_WIDTH(8 +6 +$clog2(8 )),
929
- .AXIL_STRB_WIDTH(AXIL_CTRL_STRB_WIDTH),
930
- .SCHEDULE_START_S(0 ),
931
- .SCHEDULE_START_NS(0 ),
932
- .SCHEDULE_PERIOD_S(0 ),
933
- .SCHEDULE_PERIOD_NS(1000000 ),
934
- .TIMESLOT_PERIOD_S(0 ),
935
- .TIMESLOT_PERIOD_NS(100000 ),
936
- .ACTIVE_PERIOD_S(0 ),
937
- .ACTIVE_PERIOD_NS(90000 )
911
+ .TDMA_INDEX_W(TDMA_INDEX_WIDTH),
912
+ .ERR_BITS(66 ),
913
+ .ERR_CNT_W(7 ),
914
+ .RAM_SIZE(1024 ),
915
+ .PHY_PIPELINE(2 ),
916
+
917
+ .REG_ADDR_WIDTH(AXIL_CSR_ADDR_WIDTH),
918
+ .REG_DATA_WIDTH(AXIL_CTRL_DATA_WIDTH),
919
+ .REG_STRB_WIDTH(AXIL_CTRL_STRB_WIDTH),
920
+ .RB_BASE_ADDR(RB_TDMA_BER_BASE),
921
+ .RB_NEXT_PTR(0 )
938
922
)
939
923
tdma_ber_inst (
940
924
.clk(clk_250mhz),
941
925
.rst(rst_250mhz),
926
+
927
+ /*
928
+ * Register interface
929
+ */
930
+ .ctrl_reg_wr_addr(ctrl_reg_wr_addr),
931
+ .ctrl_reg_wr_data(ctrl_reg_wr_data),
932
+ .ctrl_reg_wr_strb(ctrl_reg_wr_strb),
933
+ .ctrl_reg_wr_en(ctrl_reg_wr_en),
934
+ .ctrl_reg_wr_wait(tdma_ber_reg_wr_wait),
935
+ .ctrl_reg_wr_ack(tdma_ber_reg_wr_ack),
936
+ .ctrl_reg_rd_addr(ctrl_reg_rd_addr),
937
+ .ctrl_reg_rd_en(ctrl_reg_rd_en),
938
+ .ctrl_reg_rd_data(tdma_ber_reg_rd_data),
939
+ .ctrl_reg_rd_wait(tdma_ber_reg_rd_wait),
940
+ .ctrl_reg_rd_ack(tdma_ber_reg_rd_ack),
941
+
942
+ /*
943
+ * PTP clock
944
+ */
945
+ .ptp_ts_tod(ptp_sync_ts_tod),
946
+ .ptp_ts_tod_step(ptp_sync_ts_tod_step),
947
+
948
+ /*
949
+ * PHY connections
950
+ */
942
951
.phy_tx_clk({qsfp_1_tx_clk_3, qsfp_1_tx_clk_2, qsfp_1_tx_clk_1, qsfp_1_tx_clk_0, qsfp_0_tx_clk_3, qsfp_0_tx_clk_2, qsfp_0_tx_clk_1, qsfp_0_tx_clk_0}),
943
952
.phy_rx_clk({qsfp_1_rx_clk_3, qsfp_1_rx_clk_2, qsfp_1_rx_clk_1, qsfp_1_rx_clk_0, qsfp_0_rx_clk_3, qsfp_0_rx_clk_2, qsfp_0_rx_clk_1, qsfp_0_rx_clk_0}),
944
953
.phy_rx_error_count({qsfp_1_rx_error_count_3, qsfp_1_rx_error_count_2, qsfp_1_rx_error_count_1, qsfp_1_rx_error_count_0, qsfp_0_rx_error_count_3, qsfp_0_rx_error_count_2, qsfp_0_rx_error_count_1, qsfp_0_rx_error_count_0}),
945
954
.phy_cfg_tx_prbs31_enable({qsfp_1_cfg_tx_prbs31_enable_3, qsfp_1_cfg_tx_prbs31_enable_2, qsfp_1_cfg_tx_prbs31_enable_1, qsfp_1_cfg_tx_prbs31_enable_0, qsfp_0_cfg_tx_prbs31_enable_3, qsfp_0_cfg_tx_prbs31_enable_2, qsfp_0_cfg_tx_prbs31_enable_1, qsfp_0_cfg_tx_prbs31_enable_0}),
946
- .phy_cfg_rx_prbs31_enable({qsfp_1_cfg_rx_prbs31_enable_3, qsfp_1_cfg_rx_prbs31_enable_2, qsfp_1_cfg_rx_prbs31_enable_1, qsfp_1_cfg_rx_prbs31_enable_0, qsfp_0_cfg_rx_prbs31_enable_3, qsfp_0_cfg_rx_prbs31_enable_2, qsfp_0_cfg_rx_prbs31_enable_1, qsfp_0_cfg_rx_prbs31_enable_0}),
947
- .s_axil_awaddr(axil_csr_awaddr),
948
- .s_axil_awprot(axil_csr_awprot),
949
- .s_axil_awvalid(axil_csr_awvalid),
950
- .s_axil_awready(axil_csr_awready),
951
- .s_axil_wdata(axil_csr_wdata),
952
- .s_axil_wstrb(axil_csr_wstrb),
953
- .s_axil_wvalid(axil_csr_wvalid),
954
- .s_axil_wready(axil_csr_wready),
955
- .s_axil_bresp(axil_csr_bresp),
956
- .s_axil_bvalid(axil_csr_bvalid),
957
- .s_axil_bready(axil_csr_bready),
958
- .s_axil_araddr(axil_csr_araddr),
959
- .s_axil_arprot(axil_csr_arprot),
960
- .s_axil_arvalid(axil_csr_arvalid),
961
- .s_axil_arready(axil_csr_arready),
962
- .s_axil_rdata(axil_csr_rdata),
963
- .s_axil_rresp(axil_csr_rresp),
964
- .s_axil_rvalid(axil_csr_rvalid),
965
- .s_axil_rready(axil_csr_rready),
966
- .ptp_ts_96(ptp_sync_ts_tod),
967
- .ptp_ts_step(ptp_sync_ts_tod_step)
955
+ .phy_cfg_rx_prbs31_enable({qsfp_1_cfg_rx_prbs31_enable_3, qsfp_1_cfg_rx_prbs31_enable_2, qsfp_1_cfg_rx_prbs31_enable_1, qsfp_1_cfg_rx_prbs31_enable_0, qsfp_0_cfg_rx_prbs31_enable_3, qsfp_0_cfg_rx_prbs31_enable_2, qsfp_0_cfg_rx_prbs31_enable_1, qsfp_0_cfg_rx_prbs31_enable_0})
968
956
);
969
957
970
958
end else begin
971
959
960
+ assign tdma_ber_reg_wr_wait = 0 ;
961
+ assign tdma_ber_reg_wr_ack = 0 ;
962
+ assign tdma_ber_reg_rd_data = 0 ;
963
+ assign tdma_ber_reg_rd_wait = 0 ;
964
+ assign tdma_ber_reg_rd_ack = 0 ;
965
+
972
966
assign qsfp_0_cfg_tx_prbs31_enable_0 = 1'b0 ;
973
967
assign qsfp_0_cfg_rx_prbs31_enable_0 = 1'b0 ;
974
968
assign qsfp_0_cfg_tx_prbs31_enable_1 = 1'b0 ;
@@ -1403,7 +1397,7 @@ mqnic_core_pcie_us #(
1403
1397
.AXIL_CTRL_STRB_WIDTH(AXIL_CTRL_STRB_WIDTH),
1404
1398
.AXIL_IF_CTRL_ADDR_WIDTH(AXIL_IF_CTRL_ADDR_WIDTH),
1405
1399
.AXIL_CSR_ADDR_WIDTH(AXIL_CSR_ADDR_WIDTH),
1406
- .AXIL_CSR_PASSTHROUGH_ENABLE(TDMA_BER_ENABLE ),
1400
+ .AXIL_CSR_PASSTHROUGH_ENABLE(0 ),
1407
1401
.RB_NEXT_PTR(RB_BASE_ADDR),
1408
1402
1409
1403
// AXI lite interface configuration (application control)
@@ -1537,25 +1531,25 @@ core_inst (
1537
1531
/*
1538
1532
* AXI-Lite master interface (passthrough for NIC control and status)
1539
1533
*/
1540
- .m_axil_csr_awaddr(axil_csr_awaddr ),
1541
- .m_axil_csr_awprot(axil_csr_awprot ),
1542
- .m_axil_csr_awvalid(axil_csr_awvalid ),
1543
- .m_axil_csr_awready(axil_csr_awready ),
1544
- .m_axil_csr_wdata(axil_csr_wdata ),
1545
- .m_axil_csr_wstrb(axil_csr_wstrb ),
1546
- .m_axil_csr_wvalid(axil_csr_wvalid ),
1547
- .m_axil_csr_wready(axil_csr_wready ),
1548
- .m_axil_csr_bresp(axil_csr_bresp ),
1549
- .m_axil_csr_bvalid(axil_csr_bvalid ),
1550
- .m_axil_csr_bready(axil_csr_bready ),
1551
- .m_axil_csr_araddr(axil_csr_araddr ),
1552
- .m_axil_csr_arprot(axil_csr_arprot ),
1553
- .m_axil_csr_arvalid(axil_csr_arvalid ),
1554
- .m_axil_csr_arready(axil_csr_arready ),
1555
- .m_axil_csr_rdata(axil_csr_rdata ),
1556
- .m_axil_csr_rresp(axil_csr_rresp ),
1557
- .m_axil_csr_rvalid(axil_csr_rvalid ),
1558
- .m_axil_csr_rready(axil_csr_rready ),
1534
+ .m_axil_csr_awaddr(),
1535
+ .m_axil_csr_awprot(),
1536
+ .m_axil_csr_awvalid(),
1537
+ .m_axil_csr_awready(1 ),
1538
+ .m_axil_csr_wdata(),
1539
+ .m_axil_csr_wstrb(),
1540
+ .m_axil_csr_wvalid(),
1541
+ .m_axil_csr_wready(1 ),
1542
+ .m_axil_csr_bresp(0 ),
1543
+ .m_axil_csr_bvalid(0 ),
1544
+ .m_axil_csr_bready(),
1545
+ .m_axil_csr_araddr(),
1546
+ .m_axil_csr_arprot(),
1547
+ .m_axil_csr_arvalid(),
1548
+ .m_axil_csr_arready(1 ),
1549
+ .m_axil_csr_rdata(0 ),
1550
+ .m_axil_csr_rresp(0 ),
1551
+ .m_axil_csr_rvalid(0 ),
1552
+ .m_axil_csr_rready(),
1559
1553
1560
1554
/*
1561
1555
* Control register interface
0 commit comments