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_i(tx_strobe),.tx_dac_i_o(tx_dac_i),.tx_dac_q_o(tx_dac_q),
68 .rx_strobe_i(rx_strobe),.rx_adc_i_i(rx_adc_i),.rx_adc_q_i(rx_adc_q),
69 .rx_strobe_o(fifo_strobe),.rx_imp_i_o(fifo_i),.rx_imp_q_o(fifo_q));
71 // Drive tx_strobe @ half clock rate
73 tx_strobe <= ~tx_strobe;
75 // Start up initialization
104 $monitor($time, " clk=%b rst=%b tx_strobe=%b fifo_strobe=%b phs=%x pn_o=%b pn_ref=%b fifo_i=%x fifo_q=",
105 clk, uut.reset, tx_strobe, fifo_strobe, uut.receiver.phase_strobe.count_o,
106 uut.transmitter.pn, uut.receiver.pn_ref, fifo_i, fifo_q);
107 $dumpfile("sounder_tb.vcd");
108 $dumpvars(0, sounder_tb);
112 task write_cfg_register;
124 endtask // write_cfg_register
126 // Application reset line
131 mode = reset ? (mode | `bmFR_MODE_RESET) : (mode & ~`bmFR_MODE_RESET);
132 write_cfg_register(`FR_MODE, mode);
136 // Set the PN code degree
140 write_cfg_register(`FR_DEGREE, degree);
142 endtask // set_degree
144 // Turn on or off the transmitter
149 mode = tx ? (mode | `bmFR_MODE_TX) : (mode & ~`bmFR_MODE_TX);
150 write_cfg_register(`FR_MODE, mode);
154 // Turn on or off the receiver
159 mode = rx ? (mode | `bmFR_MODE_RX) : (mode & ~`bmFR_MODE_RX);
160 write_cfg_register(`FR_MODE, mode);
165 // Turn on or off digital loopback
170 mode = lp ? (mode | `bmFR_MODE_LP) : (mode & ~`bmFR_MODE_LP);
171 write_cfg_register(`FR_MODE, mode);
175 // Test transmitter functionality
181 #20 set_degree(degree);
184 #(uut.len*20); // One PN code period
189 // Test loopback functionality
195 #20 set_degree(degree);
200 #((uut.len+1)*uut.len*20*2);