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信号生成模块使用以及代码,如果确实有帮助到大家谢谢点赞支持。

相关推荐
HIZYUAN23 分钟前
AGM FPGA如何配置上拉或者下拉电阻
fpga开发
∑狸猫不是猫27 分钟前
(13)CT137A- 简易音乐盒设计
fpga开发
ThreeYear_s6 小时前
基于FPGA 的4位密码锁 矩阵键盘 数码管显示 报警仿真
fpga开发·矩阵·计算机外设
Anin蓝天(北京太速科技-陈)12 小时前
252-8路SATAII 6U VPX高速存储模块
fpga开发
如何学会学习?15 小时前
2. FPGA基础了解--全局网络
fpga开发
Anin蓝天(北京太速科技-陈)15 小时前
271-基于XC7V690T的12路光纤PCIe接口卡
嵌入式硬件·fpga开发
碎碎思19 小时前
FPGA新闻速览-WiMi开发基于FPGA的数字量子计算机验证技术
fpga开发·量子计算
hi941 天前
Vivado - 远程调试 + 远程综合实现 + vmWare网络配置 + NFS 文件共享 + 使用 VIO 核
嵌入式硬件·fpga开发·vivado 远程开发·vmware网络配置
乘风~&2 天前
基于发FPGA 练手智能小车顶层文件
fpga开发
_Hello_Panda_2 天前
高云GW5AT系列FPGA在接口扩展和桥接领域的应用方向探讨分享
fpga开发·高云·gw5at