3 // USRP - Universal Software Radio Peripheral
5 // Copyright (C) 2007 Corgan Enterprises LLC
7 // This program is free software; you can redistribute it and/or modify
8 // it under the terms of the GNU General Public License as published by
9 // the Free Software Foundation; either version 2 of the License, or
10 // (at your option) any later version.
12 // This program is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 // GNU General Public License for more details.
17 // You should have received a copy of the GNU General Public License
18 // along with this program; if not, write to the Free Software
19 // Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA
24 `include "../lib/sounder.v"
27 `define bmFR_MODE_RESET 32'h0001
28 `define bmFR_MODE_TX 32'h0002
29 `define bmFR_MODE_RX 32'h0004
30 `define bmFR_MODE_LP 32'h0008
32 `define FR_DEGREE 7'd65
61 // Configuration shadow registers
66 (.clk_i(clk),.saddr_i(saddr),.sdata_i(sdata),.s_strobe_i(s_strobe),
67 .tx_strobe_o(tx_strobe),.tx_dac_i_o(tx_dac_i),.tx_dac_q_o(tx_dac_q),
68 .rx_strobe_o(fifo_strobe),.rx_adc_i_i(rx_adc_i),.rx_adc_q_i(rx_adc_q),
69 .rx_imp_i_o(fifo_i),.rx_imp_q_o(fifo_q));
71 // Start up initialization
98 $monitor($time, " c=%b r=%b phs=%d txs=%b rfs=%b rxs=%b sms=%b pn=%b pnr=%b prd=%x sum=%x tot=%x",
99 clk, rst, uut.master.phase, uut.tx_strobe_o, uut.ref_strobe, uut.rx_strobe_o,
100 uut.sum_strobe, uut.transmitter.pn, uut.receiver.pn_ref, uut.receiver.prod_i,
101 uut.receiver.sum_i, uut.receiver.total_i);
103 $dumpfile("sounder_tb.vcd");
104 $dumpvars(0, sounder_tb);
108 task write_cfg_register;
120 endtask // write_cfg_register
122 // Application reset line
127 mode = reset ? (mode | `bmFR_MODE_RESET) : (mode & ~`bmFR_MODE_RESET);
128 write_cfg_register(`FR_MODE, mode);
132 // Set the PN code degree
136 write_cfg_register(`FR_DEGREE, degree);
138 endtask // set_degree
140 // Set the PN amplitude
144 write_cfg_register(`FR_AMPL, ampl);
148 // Turn on or off the transmitter
153 mode = tx ? (mode | `bmFR_MODE_TX) : (mode & ~`bmFR_MODE_TX);
154 write_cfg_register(`FR_MODE, mode);
158 // Turn on or off the receiver
163 mode = rx ? (mode | `bmFR_MODE_RX) : (mode & ~`bmFR_MODE_RX);
164 write_cfg_register(`FR_MODE, mode);
169 // Turn on or off digital loopback
174 mode = lp ? (mode | `bmFR_MODE_LP) : (mode & ~`bmFR_MODE_LP);
175 write_cfg_register(`FR_MODE, mode);
179 // Test transmitter functionality
182 input [31:0] test_len;
186 #20 set_degree(degree);
187 #20 set_amplitude(14'h1000);
196 // Test loopback functionality
199 input [31:0] test_len;
203 #20 set_degree(degree);
212 // Test receiver only functionality
215 input [31:0] test_len;
219 #20 set_degree(degree);
231 #20 test_tx(8,255*20);
232 #20 test_lp(8,255*255*20*5);
233 //#20 test_rx(8,255*255*20*5);