基于A7 的DDR3 SDRAM 控制器IP核的相关操作——端口优化(三)

目录

一、概况

二、实现方法

(一)用户写控制模块

(二)用户读控制模块


一、概况

在上一篇文章中,我们通过添加fifo解决了防止数据和命令丢失的问题。但是引入了很多的端口信号,这导致使用的时候不是很方便,所以在该篇文章中我们设计两个模块,分别是“用户写控制”和“用户读控制”模块,来减少端口信号。

二、实现方法

(一)用户控制模块

1.该模块的设计框架如图2-1所示,左边的信号是输入信号,右边的信号是输出信号,供上篇文章的fifo使用。

图2-1 用户写控制模块

2.设计思路:先输入数据wr_data和写使能wr_en,打一拍后作为“写数据fifo”的使能和数据输入;当输入的数据结束时候(p2_wr_en拉低),我们产生“写命令fifo”的写使能p2_cmd_en;当“写数据fifo”里面的数据全部被写入到DDR3里面的时候,p2_wr_empty信号会拉高,此时我们产生user_wr_end信号;

3.注意

  (1)p2_wr_empty 是由“写数据fifo”读出端的“ui_clk”产生的,而我们这里用的是用户时钟,属于跨时钟域;所以在p2_wr_empty输入到本设计要实现的用户写控制模块中后,要打两拍才可以用。因为打两拍后跨时钟域使用产生亚稳态的可能足够低了。

   (2)注意这里的P2_cmd_addr是起始地址,不能一直是零,要给出递增,增量设置为512,因为我们数据是128bit,ddr3的数据位宽为16bit,所以写入128bit数据ddr3的地址要增加8,而我们设计一次性写入64个128bit的数据,所以每写一次,ddr3的地址增加64*8=512。

(二)用户控制模块

1.该模块的设计框架如图2-2所示。

图2-2 用户读模块设计框架

2.设计思路:在输入的rd_start信号有效时,,给出“读命令fifo”所需的使能信号、突发长度、命令和地址信号,然后当“读数据fifo”里面存够一定数量的数据(p1_rd_count),给出“读数据fifo”的读使能p1_rd_en;当读出的数据满足本次突发的数据时,拉低p1_rd_en,并且产生user_rd_end信号。

3.两个模块都应该注意起始地址和终了地址应该在编写模块代码中就给出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲敲打打在创造

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值