马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 574920045 于 2015-4-15 19:21 编辑
基于FPGA的SDRAM接口实现 看到特权同学在eetop中举行的活动,来参加一下表示支持,因为当初买的第一块板子就是特权同学的板子。买的板子性价比很高,而且有很详细的资料和教程,是块非常好的入门级开发板,这里就不多说开发板,以免有打广告之嫌。现在我想分享一下自己在学习FPGA的道路中的一些收获,自己也不是什么高手,写的东西算是对自己入门的总结,同时也算是抛砖引玉吧,希望那些技术大牛们来传道授业解惑。用FPGA实现SDRAM接口算是刚入门,进入公司工作的第一个独立调试的东西吧,当时同事给做了一个板子,我开始调试sdram的代码是从lattice的官方网站上下载的一个开放的IP,然后自己在这个IP的基础上调试的。首先,在调试sdram之前自己也是看的sdram的技术手册,我用的是三星的K4S643232H,这个技术手册是个很重要的东西,由于当时第一次调试sdram,什么都不会,所以还是反复的多看了几遍,大致理解了结构和操作原理。感觉主要看的就是芯片信号及其作用,内部需要设置的寄存器,以及操作步骤和操作注意事项等,刚尝试调试sdram的朋友在调试的时候要细心。很多时候没有调通都是因为某些细节导致的。各个厂商的sdram的型号不同,设置和操作有细微的差别,但是大概的设置就是那些,现在我们从接口方面来介绍一下。 Lattice的IP是通过用户总线来访问sdram,完成对SDRAM的初始化,设置寄存器等操作 我在调试sdram的时候,在初始化的时候就犯了一个错误,我一上电就对sdram进行初始化,当你仔细阅读sdram手册的时候,你会发现在上电的时候,需要等待一段时间,各个厂商有差别大致是几百微秒。所以当时初始化一直是错误的,后面的错误就很明显了,从lattice的IP中也可以看到初始化的状态机操作 上面也是有一个延时后操作初始化。 这个就是进入工作状态的状态机,通过不同的信号控制读写等操作。当然了,最重要的就是读写操作的时序, 读时序 写时序 这样操作这个sdram接口的读写时序就能看出,读写的时候该操作那些信号。 对于在初始化的寄存器的时候要按照手册和你自己的需要配置寄存器,比如我在写的时候是单次写,但是我读的时候设置为促发读,一次连续读8个地址的数据,这时候你想想,你的地址的变化应该是怎样的,可能你会忽略地址变化,造成你对数据的疑惑。我还出现过的错误就是初始化没有成功,读出来的数据只有一个,但是我设置的是8位促发读,后来检查了很多,最后定位是初始化没有初始化正确的配置,最后一个一个寄存器初始化,发现软件编译的时候对宏定义的支持不好,后来改为直接赋值,最后初始化完成。所以,在调试sdram的过程中,有很多细节的问题决定了调试的结果。 当然,我见到有人调试的时候是用串口发送命令来调试,我调试的方法是通过单片机通过FSMC总线接到lattice的sdram的IP提供的用户总线,我在特权同学的博客上看到用FSMC总线来和FPGA交互的设计方案,然后通过上位机超级终端通过用户界面来读写访问sdram内存,这样通过交互界面很方便完成调试。当然,这样需要外接有MCU来提供支持。如果你的FPGA只接sdram也可以通过例化一个通用的软核CPU来实现交互式的调试。 最后总结感觉调试sdram最主要的是多看手册,多细心调试观察,调试的手段有很多。Sdram在现实项目中有很多应用,我做的项目中sdram接口逻辑的主要就是做数据存储,作为LED显示数据的缓存。当然,学习sdram主要是学会使用它,你如果对存储带宽有更高的要求,可以学习调试ddr,对于ddr的调试,网上也有一些介绍。我推荐大家使用开发板通过Hard IP来调试,这样节省调试时间。调试的时候要仔细研读IP的UG,这样会省去你很多做无用功的时间,我在这说那么多看手册的废话,希望大家能多看手册也是自己在学习中总结的一些经验。希望大家在学习FPGA的过程中都有所收获吧。 |