首页 > 其他分享 >Verilog实现基于DDS的LFM信号发生器

Verilog实现基于DDS的LFM信号发生器

时间:2024-11-22 12:15:44浏览次数:3  
标签:wire DDS tdata tvalid LFM Verilog conf phase axis

DDS LFM Generator

  • 此项目实现了一个基于DDS的LFM信号发生器。使用vivado版本为2018.3.模块提供频率起始配置端口freq_conf_h / freq_conf_l (24bits) 对应频率29.8 Hz — 500 Mhz,频率分辨率为\Delta f = \frac{500Mhz}{2^{24}} \approx 29.8Hz

 原理图

  • IO overview

Components

  • 模块包括一个24bit的计数器(pinc_conter) 用于提供相位tdata实现频率控制。计数器连接到IP核生成的DDS模块,提供IQ两路信号输出。
  • 操作时序
    • Start/End Config
      • The conter reads the input config ports at the positive edge of clk when both conf & conf_valid port is high.
    • Mode Config
      • Modulate mode can be configured at the positive edge of clk when the en port is high.Port mode 0 stands for sawtooth modulate,1 stands for triangle modulate.
  • 仿真

部分代码

module top(
    input clk,
    input[23:0] freq_conf_l,freq_conf_h,offset_conf,
    input mode,en,config_valid,dds_rst_n,cnt_rst_n,conf,
    output[15:0] I_out,Q_out
    );
    
reg[23:0]       config_data_pinc;
wire            data_tvalid,phase_tvalid;
wire[23:0]      phase_tdata;
wire[23:0]      cout;




dds_001 dds0 (
  .aclk(clk),                                  // input wire aclk
  .aresetn(dds_rst_n),                            // input wire aresetn
  .s_axis_phase_tvalid(config_valid),    // input wire s_axis_phase_tvalid
  .s_axis_phase_tdata(config_data_pinc),      // input wire [23 : 0] s_axis_phase_tdata
  .s_axis_config_tvalid(config_valid),  // input wire s_axis_config_tvalid
  .s_axis_config_tdata(offset_conf),    // input wire [23 : 0] s_axis_config_tdata
  .m_axis_data_tvalid(data_tvalid),      // output wire m_axis_data_tvalid
  .m_axis_data_tdata({I_out,Q_out}),        // output wire [31 : 0] m_axis_data_tdata
  .m_axis_phase_tvalid(phase_tvalid),    // output wire m_axis_phase_tvalid
  .m_axis_phase_tdata(phase_tdata)      // output wire [23 : 0] m_axis_phase_tdata
);

pinc_counter cnt0(
    .clk(clk),
    .rst_n(cnt_rst_n),
    .conf_start(freq_conf_l),
    .conf_end(freq_conf_h),
    .c_out(cout),
    .conf(conf),
    .en(en),
    .mode(mode)
);


always @(cout) begin
        config_data_pinc <= cout; // 将 cout的值赋给 tb_config_data_pinc
end

always @(posedge config_valid) begin
        config_data_pinc <= 24'd1000;
end
    
endmodule

 完整的工程文件:

https://download.csdn.net/download/m0_55845774/90023444

标签:wire,DDS,tdata,tvalid,LFM,Verilog,conf,phase,axis
From: https://blog.csdn.net/m0_55845774/article/details/143964229

相关文章

  • vim的verilog补全插件更新(支持变量名补全)
    本文是vim使用的verilog补全插件(即插即用)_vimverilog插件-CSDN博客 的后续,请先阅读这篇文章后再查看这篇文章更新了一些功能同时修复了插件的使用的bug新增功能1:支持变量名称补全,如果变量端口超过1提供中括号补全推荐2:简单的识别补全场景功能(比如assign后面只推荐变量......
  • 1(2)verilog语法基础
    语法介绍可综合与不可综合可综合的verilog语法:语法可以综合成实际的电路组合逻辑:由一堆逻辑单元实现时序逻辑:由寄存器(D触发器)实现,如always@(posedgei_clk)b<=a;只有在时钟上升沿才会把值输出出去,否则就一直存着不可综合的verilog语法:语法不可综合成实际的电路如a<=#1b......
  • 你想了解的DDS协议解决方案在这里
        随着汽车电子电气架构快速演进,车企对车内网络通信性能、安全性、灵活性要求日益提升,车载总线通信技术也迎来革新挑战。在此背景下,DDS(DataDistributionService)凭借其高性能、高可靠和低延迟的特点,有力支撑了智能汽车系统的高效运行。    DDS协议凭借其在物联......
  • 你想了解的DDS协议解决方案在这里
        随着汽车电子电气架构快速演进,车企对车内网络通信性能、安全性、灵活性要求日益提升,车载总线通信技术也迎来革新挑战。在此背景下,DDS(DataDistributionService)凭借其高性能、高可靠和低延迟的特点,有力支撑了智能汽车系统的高效运行。    DDS协议凭借其在物......
  • Verilog中genvar 和 generate的使用
    1.genvar和generate的作用genvar是一种特殊的数据类型,用于在generate语句块中定义循环变量。与普通变量不同的是,genvar只能用于generate语句中,并且只能用于生成时刻(编译时)进行评估,而非仿真时。generate块用于生成硬件逻辑。它允许使用for循环、if条件语句等来创......
  • 第18篇 :深入剖析systemverilog中 randomize 失败之烧脑案例(三)
    在工作实践中,验证环境往往十分复杂,约束条件根据实际测试场景,也是层出不穷,到处都是。可能会遇到各种各样,奇奇怪怪的问题。 针对systemverilog中的randomize()随机约束问题,前面总结了一些规则,这些规则,语法书并不会讲的很透彻,全面覆盖到。只有我们在实际工作中,反复捶打,不断尝试......
  • verilog实现消抖操作
    发的第一篇文章,是我仿照别人做的verilog消抖代码,有什么不足之处希望各位大佬能帮我提出来,尽管批评!也欢迎各位和我一样的初学者来和我一起讨论.设计思路:通过按键按下代表输入高电平,当检测到有输入时,开始计时,短暂计时结束后如果发现仍有输入,则判断为有效输入,输出高电......
  • 数字IC中Verilog编码注意事项
    一、禁用多驱动一个wire型变量(具体到每个bit),只能在一个assign语句赋值一个reg型变量(具体到每个bit),只能在一个always语句赋值综合工具不能识别互斥条件在一个always块内,一次触发,对同一个信号最多只赋一次值比如:不要用多个ifalways@(posedgeclkornegedgerstn)begin......
  • verilog中 +:的使用
    在Verilog中,+:是一种选取位范围的语法,称为"位选择运算符"(bitsliceoperator)。它可以用来从一个位向量中选择连续的比特位。这个运算符的使用形式为start_index+:size,其含义可以具体解释如下:start_index:表示选取的起始位的索引。+::表示从start_index开始向前选取......
  • IIC通信协议详解 & PCF8591应用(Verilog实现)
    该文章结合PCF85918-bitAD/DA模数/数模转换器来详细介绍IIC通信协议,尽量做到条理清晰,通俗易懂。该文图片均从PCF8591手册中截取,一定程度上引导读者学习阅读datasheet。1.PCF8591引脚2.功能介绍2.1地址位在I2C总线系统中,每个PCF8591设备都通过发送一个有效地址来激活。......