当前位置: 首页 > ai >正文

VIVADO的IP核 DDS快速使用——生成正弦波,线性调频波

本文帮助大家快速配置DDS核,并给出相应的仿真代码观察相应的波形。没有多余的讲解,先用起来再说。

DDS核产生正弦波

产生的正弦波效果如图:

是一个1M的正弦波
对IP核的配置
第一页

 第二页第三页默认就行
第四页
仿真代码如下:                                                                         

module sys_sim();// 定义信号
reg aclk_0;
wire [7:0] M_AXIS_DATA_0_tdata;
wire M_AXIS_DATA_0_tvalid;
wire [31:0] M_AXIS_PHASE_0_tdata;
wire M_AXIS_PHASE_0_tvalid;
wire [7:0] sin;
wire [7:0]cos;
// 实例化被测模块
design_1_wrapper dut (.M_AXIS_DATA_0_tdata(M_AXIS_DATA_0_tdata),.M_AXIS_DATA_0_tvalid(M_AXIS_DATA_0_tvalid),.M_AXIS_PHASE_0_tdata(M_AXIS_PHASE_0_tdata),.M_AXIS_PHASE_0_tvalid(M_AXIS_PHASE_0_tvalid),.aclk_0(aclk_0)
);// 生成100MHz时钟 (周期=10ns)
initial beginaclk_0 = 0;forever #5 aclk_0 = ~aclk_0;  // 每5ns翻转一次
endendmodule

生成单一频率的正弦波配置确实很简单,可以直接设置自己想要的频率。

DSS核产生线性调频波

下图为线性调频波的生成效果

不断的产生100HZ到100Khz的线性调频波,周期为10ms。
要生成这样的波形,IP核要做如下的配置
第一页

第二页

上面的红框是设置IP核可以在运行过程中修改输出的频率,下面的红框是把相位的输出关掉了。
第三页

仿真代码如下:

module sys_sim();// 定义信号
reg aclk_0;
reg [31:0] S_AXIS_PHASE_0_tdata;
reg S_AXIS_PHASE_0_tvalid;
wire [15:0] M_AXIS_DATA_0_tdata;
wire M_AXIS_DATA_0_tvalid;// 实例化被测模块
design_1_wrapper dut (.M_AXIS_DATA_0_tdata(M_AXIS_DATA_0_tdata),.M_AXIS_DATA_0_tvalid(M_AXIS_DATA_0_tvalid),.S_AXIS_PHASE_0_tdata(S_AXIS_PHASE_0_tdata),.S_AXIS_PHASE_0_tvalid(S_AXIS_PHASE_0_tvalid),.aclk_0(aclk_0)
);// 开始生成线性调频波// 参数计算
parameter TOTAL_CYCLES = 1_000_000; // 10ms @ 100MHz 这个参数设置线性调频波的周期
parameter PINC_START = 167;          //这个参数设置起始频率,计算公式为 (START_FREQ * (2**相位累加器宽度)) / 时钟频率;
parameter PINC_END = 16777;         //这个参数设置结束频率,计算公式为 (END_FREQ * (2**相位累加器宽度)) / 时钟频率;
parameter PINC_DELTA = PINC_END - PINC_START;// 每K个周期更新一次PINC
parameter UPDATE_INTERVAL = 1000; // 这个参数设置你频率改变的速度,值越小速度越快
parameter NUM_UPDATES = TOTAL_CYCLES / UPDATE_INTERVAL;
parameter PINC_STEP = PINC_DELTA / NUM_UPDATES;// 生成100MHz时钟 (周期=10ns)
initial beginS_AXIS_PHASE_0_tdata <= 167;S_AXIS_PHASE_0_tvalid<=1;aclk_0 = 0;forever #5 aclk_0 = ~aclk_0;
end// 控制逻辑
reg [31:0] cycle_count=0;
reg [31:0] count=0;
always @(posedge aclk_0) beginif (cycle_count < NUM_UPDATES)beginif (count ==UPDATE_INTERVAL) begin// 更新PINC值count<=1;cycle_count <= cycle_count + 1;S_AXIS_PHASE_0_tdata <= S_AXIS_PHASE_0_tdata + PINC_STEP;endelse    count<=count+1;endelse beginS_AXIS_PHASE_0_tdata <= PINC_START;cycle_count<=0;end
endendmodule

写在最后

希望这篇文章可以帮大家快速的使用DDS这个IP核,下篇文章我会根据一些实际的需求教大家怎么改参数,大家有什么问题欢迎留言讨论。如果配置还是有困难也可以私聊我发你工程。

http://www.xdnf.cn/news/20095.html

相关文章:

  • 【FastDDS】Discovery ( 04-STATIC Discovery Settings)
  • yolov8环境配置:从安装到卸载,从入门到放弃。
  • std::complex
  • 深入剖析Spring动态代理:揭秘JDK动态代理如何精确路由接口方法调用
  • 实习结束,秋招开启
  • 通过API接口管理企业微信通讯录案例
  • AI大模型如何重塑日常?从智能办公到生活服务的5个核心改变
  • 算法模板(Java版)_DFS与BFS
  • 贵州移动创维E900V22F-S905L3SB-全分区备份
  • 【Linux网络编程】应用层协议-----HTTPS协议
  • C#中IEnumerable 、IAsyncEnumerable、yield
  • 13问详解VoLTE视频客服:菊风带你从基础到应用,厘清所有疑惑
  • 储能调峰新实践:智慧能源平台如何保障风电消纳与电网稳定?
  • 从 0 到 1 攻克订单表分表分库:亿级流量下的数据库架构实战指南
  • 嵌入式第四十六天(51单片机(通信))
  • 2025年你需要了解的大型语言模型部署工具
  • 配置WSL2的Ubuntu接受外部设备访问
  • 课前准备--基因组(WGS/WES)联合单细胞获取突变信息
  • 分析KLA-Tencor公司膜厚THK产品
  • Python 算数运算练习题
  • 应对技术选型与技术债务以及架构设计与业务需求的关系
  • 概率与数理统计公式及结论汇总
  • 从策略到实效|Adobe Target 实战应用与成功案例
  • uni-app iOS 文件调试常见问题与解决方案:结合 itools、克魔、iMazing 的实战经验
  • 用spring框架实现简单的MVC业务
  • 远程协作下的项目失控:不是信任危机,而是感知缺失
  • 7种流行Prompt设计模式详解:适用场景与最佳实践
  • 快速、归并、堆、希尔、ArrayList排序
  • pyinstaller
  • SQL decode() 函数