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

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 begin
aclk_0 = 0;
forever #5 aclk_0 = ~aclk_0;  // 每5ns翻转一次
end
endmodule

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

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 begin
S_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) begin
if (cycle_count < NUM_UPDATES)begin
if (count ==UPDATE_INTERVAL) begin
// 更新PINC值
count<=1;
cycle_count <= cycle_count + 1;
S_AXIS_PHASE_0_tdata <= S_AXIS_PHASE_0_tdata + PINC_STEP;
end
else
count<=count+1;
end
else begin
S_AXIS_PHASE_0_tdata <= PINC_START;
cycle_count<=0;
end
end
endmodule

写在最后

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

http://www.jsqmd.com/news/423/

相关文章:

  • 03作业
  • 软工作业个人项目
  • rapidxml中接口函数
  • YOLO进阶提升 6模型训练与测试
  • 深入解析:C语言---判断语句
  • vue基于Springboot框架网上电子书店商城好书推荐管理系统 - 教程
  • YOLO进阶提升 4训练准备与数据处理
  • YOLO进阶提升 5标注与配置
  • 【学术会议前沿信息|科研必备】IEEE/EI/Scopus三检护航!人工智能+自动化控制+人文社科+遥感+地理信息+视觉领域国际会议征稿启动,硕博生速来! - 教程
  • YOLO进阶提升 3YOLOv4 改进
  • 解码C语言位字段
  • Sql Server 多层嵌套事务的执行结果
  • 深入解析:数据库入门实战版
  • es入门
  • YOLO进阶提升 1YOLOv2 改进
  • C# Avalonia 15- Animation- AnimationPlayerTest
  • Windows电脑快捷键
  • 基于Python+Vue开发的体育场馆预约管理系统源码+运行步骤
  • JSONArray集合根据某个字段查询对象
  • 详细介绍:Parasoft C/C++test 针对嵌入式开发的内存错误检测解决方案
  • [WC2006] 水管局长
  • 02-Media-7-uvc.py 应用软件解码的USB摄像头(UVC)捕获视频并显示的程序
  • YOLO入门理解 3YOLOv1 思路与细节
  • 完整教程:Qt开发经验 --- qmake执行系统命令(15)
  • YOLO入门理解 评估指标
  • 清除win+r“运行”对话框中的历史记录
  • [ICPC 2024 Yokohama R] Peculiar Protocol
  • YOLO入门理解 基础概念
  • The 2025 ICPC Asia East Continent Online Contest (II)(C,D,E,H,I)
  • 深入解析:不同上位开发语言、PLC下位平台、工业协议与操作系统平台下的数据类型通用性与差异性详解