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

使用DDR4控制器实现多通道数据读写(十九)

一、 概述
上一节我们使用dds生成了两个通道的波形数据,在这一节中,我们需要将dds生成的波形数据存储到ddr4中,在存储过程中,每次突发只能最多传输256个数据,并且如果使用dds产生双通到数据,那么两组波形出来后,需要同时存储。这些情况是存储时需要考虑的事情。接下来按照设计思路,逐步实现向ddr4中存储两个通道的波形数据。本章节着重讲述dds的配置设计。
二、 Dds配置设计
1、添加使能信号
在向ddr4中写入数据时,每次最多突发256个数据,而且dds生成的数据要实时的写进ddr4中。这时就需要用一个使能信号,来控制何时输出波形。在dds IP配置中,勾选上
ACLKEN选项。
在这里插入图片描述
通过控制aclken电平的高低,可以实现实时产生波形,如图2所示。
在这里插入图片描述
在图3中,可以看到m_axis_data_tdata只在aclken为高时输出sin波形,并且在aclken为低时数据保持不变,这样就确保了在aclken为高时的sin波形的连续性。
在这里插入图片描述
在如此情况下,可以将ddr4的写数据有效(wvalid与wready的握手)当做aclken,这样在向ddr4写数据时,不论wready何时有效,都可以产生连续的sin波形,并将波形存储到ddr4中。
2、使用两组dds IP输出波形
由于ddr4同时只能写入一个数据,不能实现将两通道的数据同时写入,所以在这里还需要另外创建一个dds IP,此时就有两个dds IP来产生sin波形数据了。所以在dds IP配置中,通道数量选择一个就可以了,以前输入的系统时钟为200MHz,单通道的输出波形的时钟频率为100MHz,此时改换为单通道的输出,系统时钟改为100MHz。如图4所示。
在这里插入图片描述
两个dds Ip配置中,相位角增量配置如下。通道0输出2MHz,通道1输出5MHz。
在这里插入图片描述
在这里插入图片描述
三、 dds模块仿真测试
dds控制模块代码:
module dds_top(
input wire clk,
input wire rst,
input wire aclken_0,
output wire [7:0] chnl_0_data,
input wire aclken_1,
output wire [7:0] chnl_1_data
);

wire m_axis_data_tvalid_0;
wire m_axis_data_tvalid_1;

dds_compiler_0 dds_compiler_0 (
.aclk(clk), // input wire aclk
.aclken(aclken_0),
.m_axis_data_tvalid(m_axis_data_tvalid_0), // output wire m_axis_data_tvalid
.m_axis_data_tdata(chnl_0_data) // output wire [7 : 0] m_axis_data_tdata
);

dds_compiler_1 dds_compiler_1 (
.aclk(clk), // input wire aclk
.aclken(aclken_1), // input wire aclken
.m_axis_data_tvalid(m_axis_data_tvalid_1), // output wire m_axis_data_tvalid
.m_axis_data_tdata(chnl_1_data) // output wire [7 : 0] m_axis_data_tdata
);
endmodule
dds仿真模块代码:
`timescale 1ns / 1ps
module dds_top_tb( );

reg clk;
reg rst;
reg aclken_0;
reg aclken_1;
wire [7:0] chnl_0_data;
wire [7:0] chnl_1_data;
initial begin
clk = 0;
rst = 1;
#500
rst = 0;
aclken_0 = 0;
aclken_1 = 1;
while(1) begin
repeat(256)@(posedge clk);
aclken_0 = ~aclken_0;
aclken_1 = ~aclken_1;
end
end

always #5 clk = ~ clk;

dds_top inst_dds_top(.clk         (clk),.rst         (rst),.aclken_0    (aclken_0),.chnl_0_data (chnl_0_data),.aclken_1    (aclken_1),.chnl_1_data (chnl_1_data));

endmodule

仿真波形如图7所示。
在这里插入图片描述
经过如此配置后,每个通道的数据与数据有效信号可以分别单独控制,以便根据ddr4的写数据握手情况来控制各自的dds IP输出自己的波形。并且输出的有效数据为连续的sin波形。
四、 章节总结
在本章节中,使用两个dds IP来分别产生sin波形,并添加了aclken信号,此信号为高时IP输出的波形有效,并且可以保障sin波形的连续性。下一章节来继续讲述如何截取波形并写进ddr4。
本文章由威三学社出品
对课程感兴趣可以私信联系

http://www.lryc.cn/news/583077.html

相关文章:

  • Amazon S3 对象存储服务深度解析:存储原理、应用场景与实战指南
  • 1.1 ARMv8/ARMv9安全扩展
  • ReactNative【实战】轮播图(含组件封装 ImageSlider)
  • 洛谷P1044 栈(学习向)
  • react16-react19都更新哪些内容?
  • clickhouse 各个引擎适用的场景
  • 【TCP/IP】2. 计算机网络与因特网体系结构
  • 手机文件夹隐藏工具,一键保护隐私
  • 数据库性能优化指南:解决ORDER BY导致的查询性能问题( SQL Server )
  • Dify 文本语意识别与自动补全工作流
  • MyBatisPlus-03-扩展功能
  • C#基础篇(11)泛型类与泛型方法详解
  • 1068.产品销售分析Ⅰ
  • huggingface 笔记: Trainer
  • 打造自己的组件库(二)CSS工程化方案
  • 跨服务sqlplus连接oracle数据库
  • 54页|PPT|新型数字政府综合解决方案:“一网 一云 一中台 N应用”平台体系 及“安全+运营”服务体系
  • 人工智能的基石:TensorFlow与PyTorch在图像识别和NLP中的应用
  • 影石(insta360)X4运动相机视频删除的恢复方法
  • 【视频观看系统】- 需求分析
  • 【DB2】load报错SQL3501W、SQL3109N、SQL2036N
  • Tensorflow的安装记录
  • django 一个表中包括id和parentid,如何通过parentid找到全部父爷id
  • react+ts 移动端页面分页,触底加载下一页
  • 板凳-------Mysql cookbook学习 (十一--------6)
  • 安卓设备信息查看器 - 源码编译
  • Android-重学kotlin(协程源码第二阶段)新学习总结
  • 中望CAD2026亮点速递(5):【相似查找】高效自动化识别定位
  • uniapp AndroidiOS 定位权限检查
  • Android ViewModel机制与底层原理详解