Chirp信号生成(FPGA、基于cordic IP核)

一、Chirp生成模块介绍

采用Verilog 生成Chirp,实现输入使能电平,模块输出Chirp信号,Chirp信号频率范围,时间宽度,连续Chirp信号数量可配置。

二、模块例化方法示例

parameter     FL	 ='d20_000 		;
parameter     FH	 ='d30_000 		;
parameter     Tc	 ='d10			;  //ms
parameter   Chirp_Num='d128;
chirp 
#(
	.  SYS_CLK	(SYS_CLK),
	.  FL	 	(FL),
	.  FH	 	(FH),
	.  Tc	 	(Tc), //ms
	.  Chirp_Num(Chirp_Num)
)
chirp_inst
(
	 .   	sys_clk		(clk_9_6m),
	 .  	rst_n		(rst_n),
	 .  	chirp_en	(chirp_en),

	 .  	chirp_out	(chirp_out),
	 .		chirp_valid	(chirp_valid),
	 .		chirp_index (chirp_index)
 );

三、模块仿真时序图

四、模块代码

`timescale 1ns / 1ps
//
// Company: 
// Engineer: YOU
// 
// Create Date: 2023/10/25 10:11:24
// Design Name: 
// Module Name: Chirp
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module chirp_cp
#(
	parameter     SYS_CLK='d6_400_000,
	parameter     FL	 ='d22_400 	,
	parameter     FH	 ='d28_800 	,
	parameter     Tc	 ='d20		,//ms
	parameter     Chirp_Num='d128
)
(
	 input	   wire		    sys_clk,
	 input	   wire			rst_n,
	 input     wire  		chirp_en,
	 
	 output	   wire	 [7:0]		chirp_out,
	 output	   wire	     		chirp_valid,
	 output	   reg	 [19:0]		chirp_index

 );

 

 parameter   B =FH-FL;
 parameter   K =B*1000/Tc;
 parameter   T_MAX=SYS_CLK*Tc/1000; // t/SYS_CLK  单位为s

reg [7:0] chirp_cnt;
 
reg   [39:0]  t;
reg   [39:0] t_dl;

always@(posedge sys_clk or negedge rst_n)
if(!rst_n)
chirp_cnt<='d0;
else if(chirp_en==1'b1)
chirp_cnt<='d0;
else if(t==T_MAX+1'b1)
chirp_cnt<=chirp_cnt+1'b1;
else
chirp_cnt<=chirp_cnt;


always@(posedge sys_clk or negedge rst_n)
if(!rst_n)
t<='d0;
else if(t==T_MAX+1'b1&&chirp_cnt>=Chirp_Num-1)
t<='d0;
else if(t==T_MAX+1'b1&&chirp_cnt<Chirp_Num-1)
t<='d2;
else if(chirp_en==1'b1)
t<=t+1'b1;
else if(t>=1'b1)
t<=t+1'b1;
else
t<='d0;
 
//t_dl
always@(posedge sys_clk or negedge rst_n)
if(!rst_n)
t_dl<='d0;
else
t_dl<=t;

wire [79:0]  t_2;
chirp_mul chirp_mul_inst (
  .CLK(sys_clk),  // input wire CLK
  .A(t),      // input wire [39 : 0] A
  .B(t),      // input wire [39 : 0] B
  .P(t_2)      // output wire [79 : 0] P
);

reg [15:0] phase_reg;
//phase_reg
always@(posedge sys_clk or negedge rst_n)
if(!rst_n)
phase_reg<='d0;
else
phase_reg<=2*FL*32768*t_dl/SYS_CLK+K*32768*t_2/SYS_CLK/SYS_CLK;    //由于cordic输入为fix16_13 ,所以乘上2^13,就能获得fix16_13数据


reg  [15:0] phase; 
//phase
always@(posedge sys_clk or negedge rst_n)
if(!rst_n)
phase<='d0;
else if(phase_reg[15:15]=='b0)
	phase<=(phase_reg+1'b1)>>2;   //将-32767~32767 对应 -pi~pi  转为000.00000  形式取值范围为-1~1 单位为pi   
										
else  
	phase<=(phase_reg>>2)+16'b1100_0000_0000_0000;	//这个右移两位,高位补一能实现,负数到fix16_13形式的转换
														




reg chirp_cordic_en;
always@(posedge sys_clk or negedge rst_n)
if(!rst_n)
chirp_cordic_en<=1'b0;
else if(t>=2&&t<=T_MAX+1'b1)
chirp_cordic_en<=1'b1;
else
chirp_cordic_en<=1'b0;




wire [15:0]   chirp_data;


chirp_cordic chirp_cordic_inst (
  .aclk(sys_clk),                                // input wire aclk
  .s_axis_phase_tvalid(chirp_cordic_en),  // input wire s_axis_phase_tvalid
  .s_axis_phase_tdata(phase),    // input wire [15: 0] s_axis_phase_tdata
  .m_axis_dout_tvalid(chirp_valid),    // output wire m_axis_dout_tvalid
  .m_axis_dout_tdata(chirp_data)      // output wire [15 : 0] m_axis_dout_tdata
);

assign chirp_out=chirp_data[7:0];

//chirp_index
always@(posedge sys_clk or negedge rst_n)
if(!rst_n)
chirp_index<='d0;
else if(chirp_valid==1'b1)
chirp_index<=chirp_index+1'b1;
else
chirp_index<='d0;

	
endmodule

五、模块相关IP核配置(vivado)

六、总结

以上内容介绍,基于FPGA实现的可配置参数的chirp信号生成模块使用以及代码,如果确实有帮助到大家谢谢点赞支持。

相关推荐
深圳信迈科技DSP+ARM+FPGA10 小时前
基于X86+FPGA+AI的切割机控制、六轴机器人控制方案
人工智能·fpga开发·视觉检测
Anin蓝天(北京太速科技-陈)11 小时前
116-基于5VLX110T FPGA FMC接口功能验证6U CPCI平台
图像处理·嵌入式硬件·fpga开发
作精本精14 小时前
Xilinx FPGA:vivado关于真双端口的串口传输数据的实验
fpga开发
迪普微社区16 小时前
双芯合璧,双FPGA赋能的软件无线电平台上线!
图像处理·fpga开发·fpga·开发板·通信·射频·雷达监测
程序员不想敲代码啊20 小时前
【Emacs Verilog mode保姆级的使用指南】
fpga开发·编辑器·emacs
小达爱学习1 天前
verilog实现PID控制
fpga开发
FPGAmaster创新者1 天前
基于AGX ORIN与FPGA K7实现PCIE高速数据通信/Orin与FPGA高速数据传输/XDMA在linux系统使用教程
linux·嵌入式硬件·fpga开发
9527华安1 天前
Zynq系列FPGA实现SDI视频编解码,基于GTX高速接口,提供5套工程源码和技术支持
fpga开发·视频编解码·sdi·gtx
不会倒的鸡蛋1 天前
单片机与FPGA的关系及其在嵌入式系统中的应用
fpga开发
夏天是冰红茶2 天前
基于FPGA的DDS信号发生器
fpga开发·vivado·dds