DDR3(4):读控制
写控制完成后开始设计读控制,写控制和读控制是非常相似的。
一、总线详解


由 User Guide 可知各信号之间的逻辑关系,读数据是在给出命令之后一段时间后开始出现的。图中没有给出app_rd_data_end信号,此信号和app_wdf_end是相同的,即在DDR3的物理层端与用户端存在两种速率情况,此次设计速率为4:1,app_rd_data_end 和 app_rd_data_valid 相同。
二、读控制模块设计
本次设计读控制模块,试着将之前写控制模块的64个128bit数据读回来,并最终进行仿真验证。写控制模块框图如下所示:

当 rd_cmd_start 有效时,启动本次的读突发,根据由外部输入的 rd_cmd_bl 可以确定本次突发需要读多少个数据。wr_cmd_addr 代表本次突发读的起始地址,数据是128bit的,一个地址能存16bit,因此每个128bit数据需要占用8个地址,即每次的地址计数+8。rd_end 用于告知其他模块,本次突发读结束。

本次设计均学自《威三学院FPGA教程》,具体代码就不贴了。
顶层文件不要忘了例化此模块,此外此处设计只考虑读控制,应该把top层中写控制先注释掉,以免两方打架。关于如何复用总线,见下一章:仲裁模块
/*
//写控制模块 ---------------------------------------------------------------
wr_ctrl u_wr_ctrl
(
.sclk (ui_clk ), // input 100Mhz
.rst (ui_clk_sync_rst | (~init_calib_complete)), // input
.wr_cmd_start (wr_cmd_start ), // input
.wr_cmd_instr (wr_cmd_instr ), // input [ 2:0]
.wr_cmd_bl (wr_cmd_bl ), // input [ 6:0]
.wr_cmd_addr (wr_cmd_addr ), // input [27:0]
.wr_cmd_mask (wr_cmd_mask ), // input [15:0]
.data_128bit (data_128bit ), // input [127:0]
.data_req (data_req ), // output
.wr_end (wr_end ), // output
.app_rdy (app_rdy ), // input
.app_wdf_rdy (app_wdf_rdy ), // input
.app_en (app_wr_en ), // output
.app_addr (app_wr_addr ), // output [27:0]
.app_cmd (app_wr_cmd ), // output [ 2:0]
.app_wdf_mask (app_wdf_mask ), // output
.app_wdf_wren (app_wdf_wren ), // output
.app_wdf_data (app_wdf_data ), // output [127:0]
.app_wdf_end (app_wdf_end ) // output
);
*/ //读控制模块 ----------------------------------------------------------------
rd_ctrl u_rd_ctrl
(
.sclk (ui_clk ), // input 100Mhz
.rst (ui_clk_sync_rst | (~init_calib_complete)), // input
.rd_cmd_start (rd_cmd_start ), // input
.rd_cmd_instr (rd_cmd_instr ), // input [ 2:0]
.rd_cmd_bl (rd_cmd_bl ), // input [ 6:0]
.rd_cmd_addr (rd_cmd_addr ), // input [27:0]
.rd_data_128bit (rd_data_128bit ), // output [127:0]
.rd_data_valid (rd_data_valid ), // output
.rd_end (rd_end ), // output
.app_rdy (app_rdy ), // input
.app_en (app_rd_en ), // output
.app_addr (app_rd_addr ), // output [27:0]
.app_cmd (app_rd_cmd ), // output
.app_rd_data (app_rd_data ), // input
.app_rd_data_valid (app_rd_data_valid ), // input
.app_rd_data_end (app_rd_data_end ) // input
);
三、读控制模块仿真


可以看到一开始读出的数据是ddr3进行自我校验时残留的数据,后面则都是xxxx,由此看出读控制模块设计大致成功,具体对不对得结合写控制,那就涉及到信号复用了,下章记录仲裁模块解决读写复用问题。
参考资料:威三学院FPGA教程
DDR3(4):读控制的更多相关文章
- 异步fifo with 读控制
之前做LDPC编码器时,学习了一下异步FIFO的相关知识,主要参考了http://www.cnblogs.com/aslmer/p/6114216.html,并在此基础上根据项目需求,添加了一个读控制 ...
- 基于FPGA的DDR3多端口读写存储管理系统设计
基于FPGA的DDR3多端口读写存储管理系统设计 文章出处:电子技术设计 发布时间: 2015/03/12 | 1747 次阅读 每天新产品 时刻新体验专业薄膜开关打样工厂,12小时加急出货 机载 ...
- 基于MIG IP核的DDR3控制器(二)
上一节中,记录到了ddr控制器的整体架构,在本节中,准备把ddr控制器的各个模块完善一下. 可以看到上一节中介绍了DDR控制器的整体架构,因为这几周事情多,又要课设什么的麻烦,今天抽点时间把这个记录完 ...
- M1卡修改各区块控制位值和数据
(一),以常用设置"08 77 8F 69"控制条件为例,先搞清楚它――具有的访问权限. 1.对"08 77 8F 69"值进行计算,该值定位于各区块3的6,7 ...
- 如何读懂 STATSPACK 报告 (转) & Toad 结合
可与 toad 相结合的内容, 用 这种颜色可以利用 toad(database->monitor->server statistics)查看到下边的很多信息, 比如 wait event ...
- M1卡区块控制位详解
M1卡区块控制位详解 Mifare 1S50/Mifare 1S70 每个扇区的密码和存取控制都是独立的,可以根据实际需要设定各自的密码及存取 控制.存取控制为4个字节,共32位,扇区中的每个块(包括 ...
- 如何读懂statspack报告
前言:这篇文章是我从网上找到的,但可惜不知道是哪位大侠写(译)的,因此这里无法注明了.仔细看了看,这篇文章对初学者应该很有帮助,写的比较详细,通俗易懂,因此整理一下,便于阅读:内容略有调整,不单做调整 ...
- am335x 内核频率 ddr3频率 电压调整
由Makefile可知,SPL的入口在u-boot-2011.09-psp04.06.00.08\arch\arm\cpu\armv7\start.S中 SPL的功能无非是设置MPU的Clock.PL ...
- 【等待事件】等待事件系列(3+4)--System IO(控制文件)+日志类等待
[等待事件]等待事件系列(3+4)--System IO(控制文件)+日志类等待 1 BLOG文档结构图 2 前言部分 2.1 导读和注意事项 各位技术爱好者,看完本文后,你可 ...
随机推荐
- iOS 报错信息: dyld: Library not loaded: @rpath/XCTest.framework/XCTest Referenced from
新建项目,引入framework,运行时出现警告:dyld: Library not loaded: @rpath/RLLibrary.framework/RLLibrary Referenced ...
- C# 读取Excel文件数据
1.首先需要在管理NuGet程序包中添加外部包:ExcelDataReader,添加好后,不要忘记在命名空间那里引用. 2.定义文件流,将文件流传入IExcelDataReader类型的对象excel ...
- Django框架(八)--单表增删改查,在Python脚本中调用Django环境
一.数据库连接配置 如果连接的是pycharm默认的Sqlite,不用改动,使用默认配置即可 如果连接mysql,需要在配置文件中的setting中进行配置: 将DATABASES={} 更新为 DA ...
- 让Linux中的Nginx支持中文文件名
原文:https://blog.csdn.net/soeben/article/details/79525964 首先你的服务器需要安装了UTF-8字符集在命令行里输入env|grep LANG如果显 ...
- 【JavaScript】图片加载由模糊变清晰 —— 图片优化
开发过程中,一些图片的展示时,加载很慢很久,后来把图片缩放压成缩略图吧,速度是快了但是模糊不清,如何处理这样问题,下面就和大家分享一下自己的处理方法. 先让客户端加载像素小的缩略图: <img ...
- btcWallet系列之一-grpc模块
btcwallet对外服务 btcwallet除了像btcd对外提供rpc服务以外,还提供了grpc服务,同时grpc采用的是protobuf来实现. 这方便与不同语言进行交互,降低客户端代码编写量. ...
- centos virtualbox虚拟机无法连接外网
各种方法都试了,不好使. 最后重启了很多次,最后一次成功了... ----详情---- 发生的原因是因为突然断电导致的异常. 先通过systemctl restart network 来启动,结果报错 ...
- maker使用说明书
1.以自带的示例数据为例 dpp_contig.fasta dpp_est.fasta dpp_protein.fasta te_proteins.fasta 2.生成控制文件 控制文件是特定于运行的 ...
- 如何更新GitHub上的代码?
更新github上的代码 一.克隆代码 1.先是把自己GitHub上的代码克隆到本地(下载到本地) 步骤1.随便创建一个新文件夹(用来存放下载下来的代码) 步骤2.在文件夹中打开cmd 输入下载指令下 ...
- Socket网络编程——C++实现
本代码可直接使用 根据TCP/IP三次握手,实验时可使用两台电脑,或者打开两个终端模拟通信. 服务器端: #include <iostream> #include <windows. ...