aboutsummaryrefslogtreecommitdiffstats
path: root/fpga/usrp3/lib
diff options
context:
space:
mode:
authorWade Fife <wade.fife@ettus.com>2020-02-18 16:01:57 -0600
committerWade Fife <32272501+wordimont@users.noreply.github.com>2020-02-19 13:27:00 -0600
commit8727642de2aa22e982e012d85d32325f664a3e9e (patch)
tree3a5a1f21de9d0d82f181e0e20ddcfd2f19191976 /fpga/usrp3/lib
parent2a91fe52ad12d4709360236598e00ffd2780667c (diff)
downloaduhd-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.sv58
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();