如何在Altera的FPGA上使用DDR2存储器

如何在Altera的FPGA上使用DDR2存储器,第1张

近日,尝试着在Altera的FPGA上使用DDR2存储器。先是在互联网上down几个例子,无奈这些例子均是基于sopcbuilder的,存储器直接挂在nios cpu下,读写细节均不需要我们手动干预,若仅仅是简单的用来跑跑代码、存放临时数据等,体现不了DDR的优势。如果用户逻辑部分(相当于主设备)要以高带宽的占用和nios cpu共享的DDR,那么需要使用Avalon主动传输或者流模式。由于对这两种模式了或卖解不多,因此先准备在Quartus下使用纯逻辑的方式 *** 作DDR。

在Quartus下使用向导生成IP后(HPC II或者是Uniphy核),以Uniphy为例,在10.0sp1版本下,使用half模式,Avalon最大突发长度设为64。根据IP的datasheet上面的时序图,写了一段控制代码,反复几次后,代码能够正常跑起来,读写数据也是正确的。但有一些疑问:

1.一次突发读/写过程中,不能连续 *** 作,也就是不能一个时钟出/写一个数据。突发过程中,控制器的反馈信号local_ready偶尔会在我们的突发过程中被慎衫置低,这样我们只能保持地址,进行等待。控制器在我们启动突发后,间隔一定的时间,会输出数据,这个时间是不定的。但是,一旦其开始输出数据,它不像其他的DDR控制核那样,可以连续出数,而是会被随机打断。这种不确定性,导致我们使用的时候有诸多的不便。既然不能连续出数,还能称作突发吗?突发的真正含义是什么?

2.bank地址固定,一次突发过程中,读能够连续出64次数据,写不能。

3.根据其手册,在突发读过程中,此时只要local_ready信号有效,即使突发的数据还未到达,这个时候也可以直接就行突发写 *** 作。这么繁琐的控制过程,在真正的产品中有用到吗?

由于没有接触过那些真正使用DDR做大量数据传输的例子,对DDR的使用也是闭门造车,走的可能是歪路子,希望大家指正。不知道大家在FPGA中,是如何高效使用DDR存储器的?希望有衫孝逗这方面经验的网友给一些建议。

另外,查询了Avalon总线的技术文档,资料的结论是,Avalon总线在主动传输时,确实是不能保证一个时钟出一次数据,仅能保证在一次突发开始后不被其他的主设备中断。假设一个从设备,比喻DDR,它仅支持突发传输,当它挂在总线上时,其它主设备只能以突发模式访问吗?或者是,以突发模式访问得到的访问带宽将会最大化?假如从设备仅原生支持16个突发长度,而主设备想一次突发24个长度,那么Avalon交换结构会不会自动转换,对从设备发起两次传输?对Avalon结构的一些仲裁细节,不甚理解,自定义主设备无法提高其性能。

你用的DDR2是肆弯多少位宽的啊?时序上有没有对简雹段先?

你上面总结的这个拦誉规律,没有任何意义的,直接对0xaaaaaa地址写0x55555555然后读出是否一致就可以了。如果正确,再对0x55555555写0xaaaaaa,当然要根据你的地址宽度和位宽来具体确定的。

可以发我邮箱看看[email protected]

-DDR2 然后就设置各种兆渣坦参数,生成IP之后会生梁塌成相应的TESTBENCH,用modelsim...直接打开quartus,生成DDR2 IP核族桐的同时,就生成了仿真和测试代码。do文件都...


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12364050.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存