Imported Upstream version 3.0
[debian/gnuradio] / usrp / fpga / tb / interp_tb.v
1 // -*- verilog -*-
2 //
3 //  USRP - Universal Software Radio Peripheral
4 //
5 //  Copyright (C) 2003 Matt Ettus
6 //
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.
11 //
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.
16 //
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
20 //
21
22
23 // testbench for fullchip
24
25 module interp_tb();
26
27 `include "usrp_tasks.v"
28    
29         reg clk_120mhz;
30         reg usbclk;
31         reg reset;
32
33         reg [11:0] adc1_data, adc2_data;
34         wire [13:0] dac1_data, dac2_data;
35
36         wire [5:0] usbctl;
37         wire [5:0] usbrdy;
38
39         wire [15:0] usbdata;
40
41         reg WE, RD, OE;
42
43         assign usbctl[0] = WE;
44         assign usbctl[1] = RD;
45         assign usbctl[2] = OE;
46         assign usbctl[5:3] = 0;
47
48         reg tb_oe;
49         assign usbdata = tb_oe ? usbdatareg : 16'hxxxx;
50         reg serload, serenable, serclk, serdata;
51         reg enable_tx, enable_rx;
52         reg [15:0] usbdatareg;
53
54 ///////////////////////////////////////////////
55 //  Simulation Control
56 initial
57 begin
58         $dumpfile("interp_tb.vcd");
59         $dumpvars(0, fc_tb);
60 end
61
62 initial #100000 $finish;
63
64 ///////////////////////////////////////////////
65 //  Monitors
66
67 reg [7:0] counter_interp;
68 wire [7:0] interp_rate;
69 assign interp_rate = 32;
70 initial $monitor(dac1_data);
71
72        always @(posedge clk_120mhz)
73         begin
74                 if(reset | ~enable_tx)
75                         counter_interp <= #1 0;
76                 else if(counter_interp == 0)
77                         counter_interp <= #1 interp_rate - 8'b1;
78                 else
79                         counter_interp <= #1 counter_interp - 8'b1;
80         end
81
82 ///////////////////////////////////////////////
83 // Clock and reset
84
85 initial clk_120mhz = 0;
86 initial usbclk = 0;
87 always #48 clk_120mhz = ~clk_120mhz;
88 always #120 usbclk = ~usbclk;
89
90 initial reset = 1'b1;
91 initial #500 reset = 1'b0;
92
93
94 initial enable_tx = 1'b1;
95
96         wire [31:0] interp_out, q_interp_out;
97         wire [31:0] decim_out;
98         wire [31:0] phase;
99                         
100         cic_interp #(.bitwidth(32),.stages(4)) 
101                 interp_i(.clock(clk_120mhz),.reset(reset),.enable(enable_tx),
102                         .strobe(counter_interp == 8'b0),.signal_in(32'h1),.signal_out(interp_out));
103
104         cic_decim #(.bitwidth(32),.stages(4)) 
105                 decim(.clock(clk_120mhz),.reset(reset),.enable(enable_tx),
106                         .strobe(counter_interp == 8'b0),.signal_in(32'h1),.signal_out(decim_out));
107                         
108 endmodule