/ 9_Firmware / 9_2_FPGA / radar_system_top_te0713_umft601x_dev.v
radar_system_top_te0713_umft601x_dev.v
  1  `timescale 1ns / 1ps
  2  
  3  module radar_system_top_te0713_umft601x_dev (
  4      input  wire        ft601_clk_in,
  5      inout  wire [31:0] ft601_data,
  6      output wire [3:0]  ft601_be,
  7      input  wire        ft601_txe,
  8      input  wire        ft601_rxf,
  9      output wire        ft601_wr_n,
 10      output wire        ft601_rd_n,
 11      output wire        ft601_oe_n,
 12      output wire        ft601_siwu_n,
 13      output wire        ft601_chip_reset_n,
 14      output wire        ft601_wakeup_n,
 15      output wire        ft601_gpio0,
 16      output wire        ft601_gpio1
 17  );
 18  
 19  reg [15:0] por_counter = 16'd0;
 20  reg [31:0] hb_counter = 32'd0;
 21  reg [15:0] packet_div = 16'd0;
 22  reg [2:0] stream_control_reg = 3'b001;
 23  reg        status_request_reg = 1'b0;
 24  reg [31:0] range_profile_reg = 32'd0;
 25  reg        range_valid_reg = 1'b0;
 26  reg [15:0] doppler_real_reg = 16'd0;
 27  reg [15:0] doppler_imag_reg = 16'd0;
 28  reg        doppler_valid_reg = 1'b0;
 29  reg        cfar_detection_reg = 1'b0;
 30  reg        cfar_valid_reg = 1'b0;
 31  
 32  wire        sys_reset_n;
 33  wire [31:0] cmd_data;
 34  wire        cmd_valid;
 35  wire [7:0]  cmd_opcode;
 36  wire [7:0]  cmd_addr;
 37  wire [15:0] cmd_value;
 38  wire        ft601_clk_out_unused;
 39  wire        ft601_txe_n_unused;
 40  wire        ft601_rxf_n_unused;
 41  
 42  assign sys_reset_n = por_counter[15];
 43  assign ft601_chip_reset_n = sys_reset_n;
 44  assign ft601_wakeup_n = 1'b1;
 45  assign ft601_gpio0 = hb_counter[24];
 46  assign ft601_gpio1 = sys_reset_n;
 47  
 48  always @(posedge ft601_clk_in) begin
 49      if (!sys_reset_n) begin
 50          por_counter <= por_counter + 1'b1;
 51          hb_counter <= 32'd0;
 52          packet_div <= 16'd0;
 53          stream_control_reg <= 3'b001;
 54          status_request_reg <= 1'b0;
 55          range_profile_reg <= 32'd0;
 56          range_valid_reg <= 1'b0;
 57          doppler_real_reg <= 16'd0;
 58          doppler_imag_reg <= 16'd0;
 59          doppler_valid_reg <= 1'b0;
 60          cfar_detection_reg <= 1'b0;
 61          cfar_valid_reg <= 1'b0;
 62      end else begin
 63          hb_counter <= hb_counter + 1'b1;
 64          packet_div <= packet_div + 1'b1;
 65  
 66          status_request_reg <= 1'b0;
 67          range_valid_reg <= 1'b0;
 68          doppler_valid_reg <= 1'b0;
 69          cfar_valid_reg <= 1'b0;
 70  
 71          if (cmd_valid) begin
 72              case (cmd_opcode)
 73                  8'h04: stream_control_reg <= cmd_value[2:0];
 74                  8'hFF: status_request_reg <= 1'b1;
 75                  default: ;
 76              endcase
 77          end
 78  
 79          if (packet_div == 16'hFFFF && stream_control_reg[0]) begin
 80              range_profile_reg <= {hb_counter[31:16], hb_counter[15:0] ^ 16'hA5A5};
 81              range_valid_reg <= 1'b1;
 82  
 83              if (stream_control_reg[1]) begin
 84                  doppler_real_reg <= hb_counter[31:16];
 85                  doppler_imag_reg <= hb_counter[15:0];
 86                  doppler_valid_reg <= 1'b1;
 87              end
 88  
 89              if (stream_control_reg[2]) begin
 90                  cfar_detection_reg <= hb_counter[10];
 91                  cfar_valid_reg <= 1'b1;
 92              end
 93          end
 94      end
 95  end
 96  
 97  usb_data_interface usb_inst (
 98      .clk(ft601_clk_in),
 99      .reset_n(sys_reset_n),
100      .ft601_reset_n(sys_reset_n),
101      .range_profile(range_profile_reg),
102      .range_valid(range_valid_reg),
103      .doppler_real(doppler_real_reg),
104      .doppler_imag(doppler_imag_reg),
105      .doppler_valid(doppler_valid_reg),
106      .cfar_detection(cfar_detection_reg),
107      .cfar_valid(cfar_valid_reg),
108      .ft601_data(ft601_data),
109      .ft601_be(ft601_be),
110      .ft601_txe_n(ft601_txe_n_unused),
111      .ft601_rxf_n(ft601_rxf_n_unused),
112      .ft601_txe(ft601_txe),
113      .ft601_rxf(ft601_rxf),
114      .ft601_wr_n(ft601_wr_n),
115      .ft601_rd_n(ft601_rd_n),
116      .ft601_oe_n(ft601_oe_n),
117      .ft601_siwu_n(ft601_siwu_n),
118      .ft601_srb(2'b00),
119      .ft601_swb(2'b00),
120      .ft601_clk_out(ft601_clk_out_unused),
121      .ft601_clk_in(ft601_clk_in),
122      .cmd_data(cmd_data),
123      .cmd_valid(cmd_valid),
124      .cmd_opcode(cmd_opcode),
125      .cmd_addr(cmd_addr),
126      .cmd_value(cmd_value),
127      .stream_control(stream_control_reg),
128      .status_request(status_request_reg),
129      .status_cfar_threshold(16'h1234),
130      .status_stream_ctrl(stream_control_reg),
131      .status_radar_mode(2'b00),
132      .status_long_chirp(16'd3000),
133      .status_long_listen(16'd13700),
134      .status_guard(16'd17540),
135      .status_short_chirp(16'd50),
136      .status_short_listen(16'd17450),
137      .status_chirps_per_elev(6'd32),
138      .status_range_mode(2'b01),
139      .status_self_test_flags(5'b11111),
140      .status_self_test_detail(8'hA5),
141      .status_self_test_busy(1'b0)
142  );
143  
144  endmodule