FPGA 读SRAM 时候的注意事项(原创)

2020-02-27 21:12发布

SRAM 是很通用的存储器,分为同步SRAM 和异步SRAM 关于二者的区别:同步SRAM,读写需要时钟控制,而异步SRAM 读写无需时钟。举个例子 我们最常用的SRAM IS61LV25616 就是异步SRAM ,异步SRAM 比同步SRAM 要快,操作也很简单.在写SRAM的时候速度是相当快的,地址单元变化后,数据线上放上数据,就一定能写进指定的单元中。但是在读SRAM的时候要注意一个输出延时,以前没有注意到,想当然的以为数据输出是按我写的来运行的,其实不然,现在把我的“研究”分享一下!
    首先看一下IS61LV25616的数据手册,可以看到共有4中型号可供选择 8ns 10ns 12ns 15ns  它们的速度不同,自己使用的SRAM 到底是什么型号的,芯片上是标着-8,-10 。。的 所以这个指标也要关注一下!
    其他得操作时序我就不多说了,这里只需要说一点。看图 图1 图1
TAA.png
当读条件建立后,地址变化时候 理想的情况下,数据会跟着地址实时变化,但是很遗憾,它有个延时输出,延时了多久呢?TAA 这个taa 是不能忽略的,可以看到如果选用10ns的期间,它的最大值有10ns 这是什么概念呢?如果时钟频率是50MHZ(20ns) 那么当在第一个时钟上升沿建立地址后,数据要延时半个时钟周期才会输出!Dout 是数据线上的数据,如果在FPGA中用一个寄存器保存下来,那么如果不注意,那么这个寄存器保存下来的值是前一个地址的值!如果你不知道这一点,那么后面的数据处理就出错了。
  我从网上找到一个好东西,就是IS61LV25616的verilog 模型,这样我就可以用modelsim进行仿真了。下面是我的仿真结果:写SRAM m_writ_Sram.png
读SRAM m_read_Sram.png

第一个图是写SRAM ,地址单元0 写入的是0069H 地址单元1写入的是0068H
第二个图是读SRAM, 地址单元0时,shuju 并没有输出,而是延时了半个时钟周期采输出,data_temp2 保存的是地址单元1中的数据,但是实际上保存了写入地址单元0中的数据 0069H 地址单元2 保存了写入地址单元1中的数据0068H.

仿真的结果和实际的运行结果是不是一样的呢?
看一下SigTapII Logic Anylazer 的结果就知道了 写SRAM
write_Sram.png
读SRAM read_sram.png
和仿真结果完全一样。
所以,大家在使用SRAM 的时候一定要注意这个时延,否则就会出错!


SRAM 仿真模型:很有用的 eetop.cn_IS61LV25616.zip (1.14 KB, 下载次数: 194) 2012-11-15 11:43 上传 点击文件名下载附件
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。