summaryrefslogtreecommitdiff
path: root/gr-radar-mono/src/fpga/lib
diff options
context:
space:
mode:
Diffstat (limited to 'gr-radar-mono/src/fpga/lib')
-rw-r--r--gr-radar-mono/src/fpga/lib/Makefile.am2
-rw-r--r--gr-radar-mono/src/fpga/lib/radar.v13
-rw-r--r--gr-radar-mono/src/fpga/lib/radar_control.v15
-rw-r--r--gr-radar-mono/src/fpga/lib/radar_rx.v96
4 files changed, 62 insertions, 64 deletions
diff --git a/gr-radar-mono/src/fpga/lib/Makefile.am b/gr-radar-mono/src/fpga/lib/Makefile.am
index 8aefd754d..2a7d6d883 100644
--- a/gr-radar-mono/src/fpga/lib/Makefile.am
+++ b/gr-radar-mono/src/fpga/lib/Makefile.am
@@ -31,4 +31,4 @@ EXTRA_DIST = \
fifo32_4k.v \
cordic_nco.v
-MOSTLYCLEANFILES = *~
+MOSTLYCLEANFILES = *~ *.bak
diff --git a/gr-radar-mono/src/fpga/lib/radar.v b/gr-radar-mono/src/fpga/lib/radar.v
index 127e9cee3..d71d9397c 100644
--- a/gr-radar-mono/src/fpga/lib/radar.v
+++ b/gr-radar-mono/src/fpga/lib/radar.v
@@ -24,8 +24,8 @@
module radar(clk_i,saddr_i,sdata_i,s_strobe_i,
tx_side_o,tx_strobe_o,tx_dac_i_o,tx_dac_q_o,
rx_adc_i_i,rx_adc_q_i,
- rx_strobe_o,rx_ech_i_o,rx_ech_q_o);
-
+ rx_strobe_o,rx_ech_i_o,rx_ech_q_o,auto_tr_o);
+
// System interface
input clk_i; // Master clock @ 64 MHz
input [6:0] saddr_i; // Configuration bus address
@@ -37,7 +37,8 @@ module radar(clk_i,saddr_i,sdata_i,s_strobe_i,
output tx_strobe_o; // Generate an transmitter output sample
output [13:0] tx_dac_i_o; // I channel transmitter output to DAC
output [13:0] tx_dac_q_o; // Q channel transmitter output to DAC
-
+ output auto_tr_o; // Transmit/Receive switching
+
// Receive subsystem
input [15:0] rx_adc_i_i; // I channel input from ADC
input [15:0] rx_adc_q_i; // Q channel input from ADC
@@ -53,6 +54,7 @@ module radar(clk_i,saddr_i,sdata_i,s_strobe_i,
wire rx_enable; // Receiver enable
wire tx_ctrl; // Transmitter on control
wire rx_ctrl; // Receiver on control
+ wire [15:0] pulse_num; // Count of pulses since tx_enabled
// Configuration
wire [15:0] ampl; // Pulse amplitude
@@ -63,7 +65,8 @@ module radar(clk_i,saddr_i,sdata_i,s_strobe_i,
(.clk_i(clk_i),.saddr_i(saddr_i),.sdata_i(sdata_i),.s_strobe_i(s_strobe_i),
.reset_o(reset),.tx_side_o(tx_side_o),.dbg_o(debug_enabled),
.tx_strobe_o(tx_strobe_o),.tx_ctrl_o(tx_ctrl),.rx_ctrl_o(rx_ctrl),
- .ampl_o(ampl),.fstart_o(fstart),.fincr_o(fincr));
+ .ampl_o(ampl),.fstart_o(fstart),.fincr_o(fincr),.pulse_num_o(pulse_num));
+ assign auto_tr_o = tx_ctrl;
radar_tx transmitter
( .clk_i(clk_i),.rst_i(reset),.ena_i(tx_ctrl),.strobe_i(tx_strobe_o),
@@ -72,7 +75,7 @@ module radar(clk_i,saddr_i,sdata_i,s_strobe_i,
radar_rx receiver
( .clk_i(clk_i),.rst_i(reset),.ena_i(rx_ctrl),.dbg_i(debug_enabled),
- .rx_in_i_i(rx_adc_i_i),.rx_in_q_i(rx_adc_q_i),
+ .pulse_num_i(pulse_num),.rx_in_i_i(rx_adc_i_i),.rx_in_q_i(rx_adc_q_i),
.rx_strobe_o(rx_strobe_o),.rx_i_o(rx_ech_i_o),.rx_q_o(rx_ech_q_o) );
endmodule // radar
diff --git a/gr-radar-mono/src/fpga/lib/radar_control.v b/gr-radar-mono/src/fpga/lib/radar_control.v
index e22da962d..864941109 100644
--- a/gr-radar-mono/src/fpga/lib/radar_control.v
+++ b/gr-radar-mono/src/fpga/lib/radar_control.v
@@ -21,10 +21,9 @@
`include "../lib/radar_config.vh"
-module radar_control(clk_i,saddr_i,sdata_i,s_strobe_i,
- reset_o,tx_side_o,dbg_o,
- tx_strobe_o,tx_ctrl_o,rx_ctrl_o,
- ampl_o,fstart_o,fincr_o);
+module radar_control(clk_i,saddr_i,sdata_i,s_strobe_i,reset_o,
+ tx_side_o,dbg_o,tx_strobe_o,tx_ctrl_o,rx_ctrl_o,
+ ampl_o,fstart_o,fincr_o,pulse_num_o);
// System interface
input clk_i; // Master clock @ 64 MHz
@@ -42,7 +41,8 @@ module radar_control(clk_i,saddr_i,sdata_i,s_strobe_i,
output [15:0] ampl_o;
output [31:0] fstart_o;
output [31:0] fincr_o;
-
+ output [15:0] pulse_num_o;
+
// Internal configuration
wire lp_ena;
wire md_ena;
@@ -94,12 +94,14 @@ module radar_control(clk_i,saddr_i,sdata_i,s_strobe_i,
reg [3:0] state;
reg [31:0] count;
-
+ reg [15:0] pulse_num_o;
+
always @(posedge clk_i)
if (reset_o)
begin
state <= `ST_ON;
count <= 32'b0;
+ pulse_num_o <= 16'b0;
end
else
case (state)
@@ -108,6 +110,7 @@ module radar_control(clk_i,saddr_i,sdata_i,s_strobe_i,
begin
state <= `ST_SW;
count <= 32'b0;
+ pulse_num_o <= pulse_num_o + 16'b1;
end
else
count <= count + 32'b1;
diff --git a/gr-radar-mono/src/fpga/lib/radar_rx.v b/gr-radar-mono/src/fpga/lib/radar_rx.v
index 1ca546134..29bbadd4d 100644
--- a/gr-radar-mono/src/fpga/lib/radar_rx.v
+++ b/gr-radar-mono/src/fpga/lib/radar_rx.v
@@ -22,9 +22,8 @@
`include "../../../../usrp/firmware/include/fpga_regs_common.v"
`include "../../../../usrp/firmware/include/fpga_regs_standard.v"
-module radar_rx(clk_i,rst_i,ena_i,dbg_i,
- rx_in_i_i,rx_in_q_i,
- rx_i_o,rx_q_o,rx_strobe_o);
+module radar_rx(clk_i,rst_i,ena_i,dbg_i,pulse_num_i,rx_in_i_i,
+ rx_in_q_i,rx_i_o,rx_q_o,rx_strobe_o);
input clk_i;
input rst_i;
@@ -33,11 +32,12 @@ module radar_rx(clk_i,rst_i,ena_i,dbg_i,
input [15:0] rx_in_i_i;
input [15:0] rx_in_q_i;
+ input [15:0] pulse_num_i;
output [15:0] rx_i_o;
output [15:0] rx_q_o;
output reg rx_strobe_o;
-
+
reg [15:0] count;
always @(posedge clk_i)
@@ -46,71 +46,63 @@ module radar_rx(clk_i,rst_i,ena_i,dbg_i,
else
count <= count + 16'b1;
- wire [31:0] fifo_data = dbg_i ? {count[15:0],16'hAA55} : {rx_in_i_i,rx_in_q_i};
+ wire [31:0] fifo_inp = dbg_i ? {count[15:0],pulse_num_i[15:0]} : {rx_in_i_i,rx_in_q_i};
- // Need to buffer received samples as they come in at 32 bits per cycle
- // but the rx_buffer.v fifo is only 16 bits wide.
- //
- reg fifo_read;
+ // Buffer incoming samples every clock
wire [31:0] fifo_out;
+ reg fifo_ack;
wire fifo_empty;
+
+// Use model if simulating, otherwise Altera Megacell
+`ifdef SIMULATION
+ fifo_1clk #(32, 4096) buffer(.clock(clk_i),.sclr(rst_i),
+ .data(fifo_inp),.wrreq(ena_i),
+ .rdreq(fifo_ack),.q(fifo_out),
+ .empty(fifo_empty));
+`else
+ fifo32_4k buffer(.clock(clk_i),.sclr(rst_i),
+ .data(fifo_inp),.wrreq(ena_i),
+ .rdreq(fifo_ack),.q(fifo_out),
+ .empty(fifo_empty));
+`endif
- fifo32_4k fifo(.clock(clk_i),.sclr(rst_i),
- .data(fifo_data),.wrreq(ena_i),
- .q(fifo_out),.rdreq(fifo_read),
- .empty(fifo_empty) );
+ // Write samples to rx_fifo every third clock
+ `define ST_FIFO_IDLE 3'b001
+ `define ST_FIFO_STROBE 3'b010
+ `define ST_FIFO_ACK 3'b100
- `define ST_RD_IDLE 4'b0001
- `define ST_RD_REQ 4'b0010
- `define ST_WR_FIFO 4'b0100
- `define ST_RD_DELAY 4'b1000
+ reg [2:0] state;
- reg [3:0] state;
- reg [3:0] delay;
-
always @(posedge clk_i)
- if (rst_i | ~ena_i)
+ if (rst_i)
begin
- state <= `ST_RD_IDLE;
- delay <= 4'd0;
+ state <= `ST_FIFO_IDLE;
rx_strobe_o <= 1'b0;
- fifo_read <= 1'b0;
+ fifo_ack <= 1'b0;
end
else
case (state)
- `ST_RD_IDLE:
- begin
- if (!fifo_empty)
- begin
- fifo_read <= 1'b1;
- state <= `ST_RD_REQ;
- end
- end
-
- `ST_RD_REQ:
+ `ST_FIFO_IDLE:
+ if (!fifo_empty)
+ begin
+ // Tell rx_fifo sample is ready
+ rx_strobe_o <= 1'b1;
+ state <= `ST_FIFO_STROBE;
+ end
+ `ST_FIFO_STROBE:
begin
- fifo_read <= 1'b0;
- rx_strobe_o <= 1'b1;
- state <= `ST_WR_FIFO;
+ rx_strobe_o <= 1'b0;
+ // Ack our FIFO
+ fifo_ack <= 1'b1;
+ state <= `ST_FIFO_ACK;
end
-
- `ST_WR_FIFO:
+ `ST_FIFO_ACK:
begin
- rx_strobe_o <= 1'b0;
- state <= `ST_RD_DELAY;
+ fifo_ack <= 1'b0;
+ state <= `ST_FIFO_IDLE;
end
-
- `ST_RD_DELAY:
- if (delay == 7)
- begin
- delay <= 0;
- state <= `ST_RD_IDLE;
- end
- else
- delay <= delay + 1'b1;
-
endcase // case(state)
-
+
assign rx_i_o = fifo_out[31:16];
assign rx_q_o = fifo_out[15:0];