diff options
author | Wade Fife <wade.fife@ettus.com> | 2020-02-18 16:01:57 -0600 |
---|---|---|
committer | Wade Fife <32272501+wordimont@users.noreply.github.com> | 2020-02-19 13:27:00 -0600 |
commit | 8727642de2aa22e982e012d85d32325f664a3e9e (patch) | |
tree | 3a5a1f21de9d0d82f181e0e20ddcfd2f19191976 /fpga/usrp3/lib | |
parent | 2a91fe52ad12d4709360236598e00ffd2780667c (diff) | |
download | uhd-8727642de2aa22e982e012d85d32325f664a3e9e.tar.gz uhd-8727642de2aa22e982e012d85d32325f664a3e9e.tar.bz2 uhd-8727642de2aa22e982e012d85d32325f664a3e9e.zip |
radio: Update TB to use new block ctrl connect
This eliminates the complicated semaphore from the testbench and brings
the radio testbench in line with the other testbenches.
Diffstat (limited to 'fpga/usrp3/lib')
-rw-r--r-- | fpga/usrp3/lib/rfnoc/blocks/rfnoc_block_radio/rfnoc_block_radio_tb.sv | 58 |
1 files changed, 17 insertions, 41 deletions
diff --git a/fpga/usrp3/lib/rfnoc/blocks/rfnoc_block_radio/rfnoc_block_radio_tb.sv b/fpga/usrp3/lib/rfnoc/blocks/rfnoc_block_radio/rfnoc_block_radio_tb.sv index b42d3d8da..4438cae9e 100644 --- a/fpga/usrp3/lib/rfnoc/blocks/rfnoc_block_radio/rfnoc_block_radio_tb.sv +++ b/fpga/usrp3/lib/rfnoc/blocks/rfnoc_block_radio/rfnoc_block_radio_tb.sv @@ -81,14 +81,26 @@ module rfnoc_block_radio_tb #( //--------------------------------------------------------------------------- // Connections to DUT as interfaces: - RfnocBackendIf backend (rfnoc_chdr_clk, rfnoc_ctrl_clk); - AxiStreamIf #(32) m_ctrl (rfnoc_ctrl_clk, 1'b0); - AxiStreamIf #(32) s_ctrl (rfnoc_ctrl_clk, 1'b0); + RfnocBackendIf backend (rfnoc_chdr_clk, rfnoc_ctrl_clk); + AxiStreamIf #(32) m_ctrl (rfnoc_ctrl_clk, 1'b0); + AxiStreamIf #(32) s_ctrl (rfnoc_ctrl_clk, 1'b0); AxiStreamIf #(CHDR_W) m_chdr [NUM_PORTS] (rfnoc_chdr_clk, 1'b0); AxiStreamIf #(CHDR_W) s_chdr [NUM_PORTS] (rfnoc_chdr_clk, 1'b0); // Bus functional model for a software block controller - RfnocBlockCtrlBfm #(.CHDR_W(CHDR_W)) blk_ctrl; + RfnocBlockCtrlBfm #(.CHDR_W(CHDR_W)) blk_ctrl = new(backend, m_ctrl, s_ctrl); + + // Connect block controller to BFMs + for (genvar i = 0; i < NUM_PORTS; i++) begin : gen_bfm_connections + initial begin + blk_ctrl.connect_master_data_port(i, m_chdr[i]); + blk_ctrl.connect_slave_data_port(i, s_chdr[i]); + + // Set the initial CHDR BFM stall probability + blk_ctrl.set_master_stall_prob(i, STALL_PROB); + blk_ctrl.set_slave_stall_prob(i, STALL_PROB); + end + end @@ -141,12 +153,9 @@ module rfnoc_block_radio_tb #( logic [ NUM_PORTS-1:0] m_rfnoc_chdr_tvalid_flat; logic [ NUM_PORTS-1:0] m_rfnoc_chdr_tready_flat; - semaphore port_sem = new(0); - // Use the same strobe for both Rx and Tx assign radio_tx_stb = radio_rx_stb; - // Flatten the data stream arrays into concatenated vectors genvar i; for (i = 0; i < NUM_PORTS; i++) begin : gen_radio_connections @@ -159,19 +168,6 @@ module rfnoc_block_radio_tb #( assign s_chdr[i].tlast = m_rfnoc_chdr_tlast_flat[i]; assign s_chdr[i].tvalid = m_rfnoc_chdr_tvalid_flat[i]; assign m_rfnoc_chdr_tready_flat[i] = s_chdr[i].tready; - - // Connect each interface to the BFM. This is done in a generate block - // since the interface indices must be constant in SystemVerilog :( - initial begin - // Get the port number (plus 1) from the semaphore. This will block until - // the semaphore is incremented to this port number (plus 1). - port_sem.get(i+1); - // Connect the master and slave interfaces to the BFM - void'(blk_ctrl.add_master_data_port(m_chdr[i])); - void'(blk_ctrl.add_slave_data_port(s_chdr[i])); - // Put the port number to communicate that we're done - port_sem.put(i+1); - end end @@ -1305,27 +1301,7 @@ module rfnoc_block_radio_tb #( rfnoc_ctrl_clk_gen.start(); radio_clk_gen.start(); - // Setup and start the stream endpoint BFM - blk_ctrl = new(backend, m_ctrl, s_ctrl); - for (int i = 0; i < NUM_PORTS; i++) begin - // I'd love to do this: - // void'(blk_ctrl.add_master_data_port(m_chdr[i])); - // void'(blk_ctrl.add_slave_data_port(s_chdr[i])); - // But interface indices must be constant. So instead, we use a semaphore - // to trigger port initialization and control the order of initialization - // in the generate block gen_radio_connections. - - // Put the port number in the semaphore to cause its initializer to run - port_sem.put(i+1); - // Delay to allow gen_radio_connections to run - #0; - // Get the port number again to know when it's done - port_sem.get(i+1); - - // Set the CHDR BFM stall probability - blk_ctrl.set_master_stall_prob(i, STALL_PROB); - blk_ctrl.set_slave_stall_prob(i, STALL_PROB); - end + // Start the BFMs running blk_ctrl.run(); |