1 module tx_buffer_inband
2 ( usbclk, bus_reset, reset, usbdata, WR, have_space,
3 channels, tx_i_0, tx_q_0, tx_i_1, tx_q_1,
4 tx_i_2, tx_q_2, tx_i_3, tx_q_3, txclk, txstrobe,
5 clear_status, tx_empty, debugbus,
6 rx_databus, rx_WR, rx_WR_done, rx_WR_enabled, reg_io_enable,
7 reg_data_in, reg_data_out, reg_addr, rssi_0, rssi_1, rssi_2,
8 rssi_3, rssi_wait, threshhold, tx_underrun
11 parameter NUM_CHAN = 2 ;
13 parameter STROBE_RATE_0 = 8'd1 ;
14 parameter STROBE_RATE_1 = 8'd2 ;
17 input wire bus_reset ; // Used here for the 257-Hack to fix the FX2 bug
18 input wire reset ; // standard DSP-side reset
19 input wire [15:0] usbdata ;
23 input wire rx_WR_enabled;
25 input wire [3:0] channels ;
26 input wire clear_status ;
28 input wire [31:0]reg_data_out;
30 input wire [31:0]rssi_0;
31 input wire [31:0]rssi_1;
32 input wire [31:0]rssi_2;
33 input wire [31:0]rssi_3;
34 input wire [31:0]threshhold;
35 input wire [31:0]rssi_wait;
37 output wire have_space ;
38 output wire tx_empty ;
39 output wire [15:0] tx_i_0 ;
40 output wire [15:0] tx_q_0 ;
41 output wire [15:0] tx_i_1 ;
42 output wire [15:0] tx_q_1 ;
43 output wire [15:0] debugbus ;
45 output wire [15:0] tx_i_2 ;
46 output wire [15:0] tx_q_2 ;
47 output wire [15:0] tx_i_3 ;
48 output wire [15:0] tx_q_3 ;
50 output wire [15:0] rx_databus ;
52 output wire rx_WR_done;
54 output wire [31:0] reg_data_in;
55 output wire [6:0] reg_addr;
56 output wire [1:0] reg_io_enable;
57 output wire [NUM_CHAN-1:0] tx_underrun;
59 /* To generate channel readers */
62 /* These will eventually be external register */
64 wire [7:0] txstrobe_rate [NUM_CHAN-1:0] ;
65 wire [31:0] rssi [3:0];
66 assign rssi[0] = rssi_0;
67 assign rssi[1] = rssi_1;
68 assign rssi[2] = rssi_2;
69 assign rssi[3] = rssi_3;
71 always @(posedge txclk)
75 adc_time <= adc_time + 1;
78 /* Connections between tx_usb_fifo_reader and
79 cnannel/command processing blocks */
80 wire [31:0] tx_data_bus ;
81 wire [NUM_CHAN:0] chan_WR ;
82 wire [NUM_CHAN:0] chan_done ;
84 /* Connections between data block and the
86 wire [NUM_CHAN:0] chan_underrun ;
87 wire [NUM_CHAN:0] chan_txempty ;
89 /* Conections between tx_data_packet_fifo and
90 its reader + strobe generator */
91 wire [31:0] chan_fifodata [NUM_CHAN:0] ;
92 wire chan_pkt_waiting [NUM_CHAN:0] ;
93 wire chan_rdreq [NUM_CHAN:0] ;
94 wire chan_skip [NUM_CHAN:0] ;
95 wire [NUM_CHAN:0] chan_have_space ;
96 wire chan_txstrobe [NUM_CHAN-1:0] ;
100 /* Outputs to transmit chains */
101 wire [15:0] tx_i [NUM_CHAN-1:0] ;
102 wire [15:0] tx_q [NUM_CHAN-1:0] ;
104 /* TODO: Figure out how to write this genericly */
105 assign have_space = chan_have_space[0] & chan_have_space[1];
106 assign tx_empty = chan_txempty[0] & chan_txempty[1] ;
107 assign tx_i_0 = chan_txempty[0] ? 16'b0 : tx_i[0] ;
108 assign tx_q_0 = chan_txempty[0] ? 16'b0 : tx_q[0] ;
109 assign tx_i_1 = chan_txempty[1] ? 16'b0 : tx_i[1] ;
110 assign tx_q_1 = chan_txempty[1] ? 16'b0 : tx_q[1] ;
112 /* Debug statement */
113 assign txstrobe_rate[0] = STROBE_RATE_0 ;
114 assign txstrobe_rate[1] = STROBE_RATE_1 ;
115 assign tx_q_2 = 16'b0 ;
116 assign tx_i_2 = 16'b0 ;
117 assign tx_q_3 = 16'b0 ;
118 assign tx_i_3 = 16'b0 ;
119 assign tx_i_3 = 16'b0 ;
121 assign debugbus = {debug, txclk};
123 wire [31:0] usbdata_final;
126 tx_packer tx_usb_packer
128 .bus_reset (bus_reset),
134 .usbdata_final (usbdata_final),
138 channel_demux channel_demuxer
140 .usbdata_final (usbdata_final),
141 .WR_final (WR_final),
144 .WR_channel (chan_WR),
145 .WR_done_channel (chan_done),
146 .ram_data (tx_data_bus)
149 generate for (i = 0 ; i < NUM_CHAN; i = i + 1)
150 begin : generate_channel_readers
151 assign tx_underrun[i] = chan_underrun[i];
152 channel_ram tx_data_packet_fifo
155 .datain (tx_data_bus),
157 .WR_done (chan_done[i]),
158 .have_space (chan_have_space[i]),
159 .dataout (chan_fifodata[i]),
160 .packet_waiting (chan_pkt_waiting[i]),
162 .RD_done (chan_skip[i])
165 chan_fifo_reader tx_chan_reader
168 .tx_strobe (txstrobe),
169 .adc_time (adc_time),
170 .samples_format (4'b0),
173 .underrun (chan_underrun[i]),
174 .skip (chan_skip[i]),
175 .rdreq (chan_rdreq[i]),
176 .fifodata (chan_fifodata[i]),
177 .pkt_waiting (chan_pkt_waiting[i]),
178 .tx_empty (chan_txempty[i]),
180 .threshhold (threshhold),
181 .rssi_wait (rssi_wait)
188 channel_ram tx_cmd_packet_fifo
191 .datain (tx_data_bus),
192 .WR (chan_WR[NUM_CHAN]),
193 .WR_done (chan_done[NUM_CHAN]),
194 .have_space (chan_have_space[NUM_CHAN]),
195 .dataout (chan_fifodata[NUM_CHAN]),
196 .packet_waiting (chan_pkt_waiting[NUM_CHAN]),
197 .RD (chan_rdreq[NUM_CHAN]),
198 .RD_done (chan_skip[NUM_CHAN])
202 cmd_reader tx_cmd_reader
205 .adc_time (adc_time),
206 .skip (chan_skip[NUM_CHAN]),
207 .rdreq (chan_rdreq[NUM_CHAN]),
208 .fifodata (chan_fifodata[NUM_CHAN]),
209 .pkt_waiting (chan_pkt_waiting[NUM_CHAN]),
210 .rx_databus (rx_databus),
212 .rx_WR_done (rx_WR_done),
213 .rx_WR_enabled (rx_WR_enabled),
214 .reg_data_in (reg_data_in),
215 .reg_data_out (reg_data_out),
216 .reg_addr (reg_addr),
217 .reg_io_enable (reg_io_enable),
223 endmodule // tx_buffer