⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 radar_control.v

📁 这是用python语言写的一个数字广播的信号处理工具包。利用它
💻 V
字号:
// -*- verilog -*-////  USRP - Universal Software Radio Peripheral////  Copyright (C) 2007 Corgan Enterprises LLC////  This program is free software; you can redistribute it and/or modify//  it under the terms of the GNU General Public License as published by//  the Free Software Foundation; either version 2 of the License, or//  (at your option) any later version.////  This program is distributed in the hope that it will be useful,//  but WITHOUT ANY WARRANTY; without even the implied warranty of//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the//  GNU General Public License for more details.////  You should have received a copy of the GNU General Public License//  along with this program; if not, write to the Free Software//  Foundation, Inc., 51 Franklin Street, Boston, MA  02110-1301  USA//`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,pulse_num_o,io_tx_ena_o);      // System interface   input         clk_i;		// Master clock @ 64 MHz   input  [6:0]  saddr_i;	// Configuration bus address   input  [31:0] sdata_i;	// Configuration bus data   input 	 s_strobe_i;    // Configuration bus write   // Control and configuration outputs   output 	 reset_o;   output        tx_side_o;   output        dbg_o;   output        tx_strobe_o;   output        tx_ctrl_o;   output        rx_ctrl_o;   output [15:0] ampl_o;   output [31:0] fstart_o;   output [31:0] fincr_o;   output [15:0] pulse_num_o;   output        io_tx_ena_o;      // Internal configuration   wire 	 lp_ena;   wire 	 md_ena;   wire 	 dr_ena;   wire   [1:0]  chirps;   wire   [15:0] t_on;   wire   [15:0] t_sw;   wire   [15:0] t_look;   wire   [31:0] t_idle;   wire   [31:0] atrdel;      // Configuration from host   wire [31:0] 	 mode;   setting_reg #(`FR_RADAR_MODE)   sr_mode(.clock(clk_i),.reset(1'b0),.strobe(s_strobe_i),.addr(saddr_i),.in(sdata_i),					   .out(mode));   assign reset_o   = mode[0];   assign tx_side_o = mode[1];   assign lp_ena    = mode[2];   assign md_ena    = mode[3];   assign dr_ena    = mode[4];   assign chirps    = mode[6:5];   assign dbg_o     = mode[7];      setting_reg #(`FR_RADAR_TON)    sr_ton(.clock(clk_i),.reset(1'b0),.strobe(s_strobe_i),.addr(saddr_i),.in(sdata_i),					  .out(t_on));      setting_reg #(`FR_RADAR_TSW)    sr_tsw(.clock(clk_i),.reset(1'b0),.strobe(s_strobe_i),.addr(saddr_i),.in(sdata_i),					  .out(t_sw));   				        setting_reg #(`FR_RADAR_TLOOK)  sr_tlook(.clock(clk_i),.reset(1'b0),.strobe(s_strobe_i),.addr(saddr_i),.in(sdata_i),					    .out(t_look));   				        setting_reg #(`FR_RADAR_TIDLE)  sr_tidle(.clock(clk_i),.reset(1'b0),.strobe(s_strobe_i),.addr(saddr_i),.in(sdata_i),					    .out(t_idle));   				        setting_reg #(`FR_RADAR_AMPL)   sr_ampl(.clock(clk_i),.reset(1'b0),.strobe(s_strobe_i),.addr(saddr_i),.in(sdata_i),					   .out(ampl_o));   setting_reg #(`FR_RADAR_FSTART) sr_fstart(.clock(clk_i),.reset(1'b0),.strobe(s_strobe_i),.addr(saddr_i),.in(sdata_i),					     .out(fstart_o));   setting_reg #(`FR_RADAR_FINCR)  sr_fincr(.clock(clk_i),.reset(1'b0),.strobe(s_strobe_i),.addr(saddr_i),.in(sdata_i),					    .out(fincr_o));   setting_reg #(`FR_RADAR_ATRDEL)  sr_atrdel(.clock(clk_i),.reset(1'b0),.strobe(s_strobe_i),.addr(saddr_i),.in(sdata_i),					    .out(atrdel));      // Pulse state machine   `define ST_ON   4'b0001   `define ST_SW   4'b0010   `define ST_LOOK 4'b0100   `define ST_IDLE 4'b1000   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)	 `ST_ON:	   if (count == {16'b0,t_on})	     begin	        state <= `ST_SW;	        count <= 32'b0;		pulse_num_o <= pulse_num_o + 16'b1;	     end	   else	     count <= count + 32'b1;	 	 `ST_SW:	   if (count == {16'b0,t_sw})	     begin		state <= `ST_LOOK;		count <= 32'b0;	     end	   else	     count <= count + 32'b1;	 `ST_LOOK:	   if (count == {16'b0,t_look})	     begin		state <= `ST_IDLE;		count <= 32'b0;	     end	   else	     count <= count + 32'b1;	 `ST_IDLE:	   if (count == t_idle)	     begin		state <= `ST_ON;		count <= 32'b0;	     end	   else	     count <= count + 32'b1;	 default:		  // Invalid state, reset state machine	   begin	      state <= `ST_ON;	      count <= 32'b0;	   end       endcase      assign tx_strobe_o = count[0]; // Drive DAC inputs at 32 MHz   assign tx_ctrl_o = (state == `ST_ON);   assign rx_ctrl_o = (state == `ST_LOOK);   // Create delayed version of tx_ctrl_o to drive mixers and TX/RX switch   atr_delay atr_delay(.clk_i(clk_i),.rst_i(reset_o),.ena_i(1'b1),.tx_empty_i(!tx_ctrl_o),		       .tx_delay_i(atrdel[27:16]),.rx_delay_i(atrdel[11:0]),		       .atr_tx_o(io_tx_ena_o));   endmodule // radar_control

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -