FPGA例化的内部RAM读取延迟差异

来源:本站
导读:目前正在解读《FPGA例化的内部RAM读取延迟差异》的相关信息,《FPGA例化的内部RAM读取延迟差异》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《FPGA例化的内部RAM读取延迟差异》的详细说明。
简介: 之前一直将这种RAM和FIFO的操作等同了,其实二者的数据读取还是有区别的,FIFO在读请求有效的下一个时钟即有数据输出;而单口RAM是在地址有效的下下个时钟周期才能得到读取的数据。

问题

在进行查找表读取实验的时候,已经验证FPGA内部RAM(单口、单时钟)读取动作在地址有效后下一个时钟读取的数据就有效,如图1所示。而在今天调试符合仿真的时候,发现仿真数据从RAM读出送给CS时需要等待2个时钟周期,如图2所示。

FPGA例化的内部RAM读取延迟差异

图1:存储TLUT的RAM读取只需等待1一个时钟周期

FPGA例化的内部RAM读取延迟差异

图2:存储符合仿真数据的RAM读取需要等待2个时钟周期

FPGA例化的内部RAM读取延迟差异

图3:图2局部放大效果

分析

这两个RAM都是调用相同的函数,除了端口位宽和深度不同外其它参数都一样。那么是什么原因导致它们的读取时序的差异呢?通过查看工程的编译报告,也许能够找到其它的一些差异,如图4所示,是图2所示的大RAM的编译实现后的资源报告。可以看到该RAM的实现消耗了172个M4K以及2个M-RAM。

FPGA例化的内部RAM读取延迟差异

图4:大RAM实现后的资源消耗

而我们查看图1所示的小RAM实现后的资源消耗情况,如图5所示,可以看到这个小RAM使用一个M4K就足够了。

FPGA例化的内部RAM读取延迟差异

图5:存储TLUT小RAM的实现结果

那么是否是这种实现差异导致了RAM读取时序的差异呢?从Altera的RAM用户手册上并没有找到我想要的答案。

我试图改变设计使用唯一的一个M-RAM来实现该大RAM,如图6所示,但是效果还是一样,即其读取时序还是需要等待2个时钟周期。

FPGA例化的内部RAM读取延迟差异

图6:仅使用1个M-RAM来实现大RAM

结论

上述问题,其实并不是问题,是本人在调试的时候观察SignalTap的时候视觉误差导致,其实图1和图2是一样的。即都是在地址有效存在ram地址端口2个时钟周期后输出端口上稳定得到该地址的数据,注意图1中每个地址出现的时间长度是2个时钟周期,而不是我之前误认为的1个时钟周期。

图7是器件手册里面给出的单口RAM时序波形图,仔细看看同步Q输出其实就是在地址有效的下下个时钟周期才稳定在总线上。

FPGA例化的内部RAM读取延迟差异

之前一直将这种RAM和FIFO的操作等同了,其实二者的数据读取还是有区别的,FIFO在读请求有效的下一个时钟即有数据输出;而单口RAM是在地址有效的下下个时钟周期才能得到读取的数据。

提醒:《FPGA例化的内部RAM读取延迟差异》最后刷新时间 2024-03-14 00:57:29,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《FPGA例化的内部RAM读取延迟差异》该内容的真实性请自行鉴别。