1.Intel FPGA中SDRAM控制器IP示意图
- 相比LED/数码管等简单外设,SDRAM芯片配置显得复杂许多,当然可以自行编写状态机实现初始化和读写控制,但是为了加快开发速度,可以借助Intel提供的基于Qsys系统的SDRAM控制器IP并进行简单的设置来实现对外设SDRAM的读写操作。
- PLL phase shift:使得输入SDRAM控制器和外部SDRAM芯片的时钟有一定的相位偏移(需要看具体SDRAM的手册),满足时序要求。
- Avalon-MM Slave Port:通过在Qsys中配置NIOS CPU和SDRAM控制器连线完成对SDRAM的数据和命令写入。
- address:地址线,在此处会把SDRAM的行列段地址映射成一种连续的地址形式;
- data:数据线,宽度与SDRAM数据线位宽相同;
- Control:读写信号;
- waitrequest:请求等待,发送读请求或者写请求时,若该位为高则本次请求不会被处理;因为SDRAM的操作比较繁琐,包括刷新/预充电等,不同于片上的RAM/FIFO发送请求或者地址立刻出数据,也许片外SDRAM正在处于刷新状态,因此必须等待其处理完成自身的任务之后才可以处理FPGA发来的读写请求。
- readdatavalid:当读取SDRAM芯片时,只有当本信号为高,读取的数据才是有效数据。
- interface to SDRAM pins:同外部SDRAM的引脚接口。
- 注意图中SDRAM的dp端口是双向IO。
2.Qsys SDRAM配置
- Memory Profile
根据所使用的SDRAM数据手册查询相关信息填入即可。通过检查左下角系统算出的SDRAM大小与实际器件大小是否相符来判断数据填入是否有误。 - Timing
从上到下解释参数 - 初始化时需要刷新几个周期,可以查看SDRAM芯片数据手册。一般是要求大于等于2周期。
- 间隔多少us执行一次刷新的命令,比如某器件每32ms刷新一次,每次刷新一行,一共有11bit表示行数,因此总的刷新指令周期=32000/(2^11)=15.625us。值得注意的是,本页面下所有设置的时间都是以Qsys系统输入时钟周期为参考的,也就是说并不一定能够达到小数点后3位的精度,但是会提前执行刷新。
- 在上电后需要延时多久后执行初始化,查手册。
- 刷新指令持续时间(Trfc),指令周期,查手册,可以比手册的时间长一些。
- 预充电指令持续时间(Trp),预充电周期,查手册。
- 行列延时(Trcd),查手册,可以比手册的时间长一些。
- 访问时间(Tac),查手册,根据上面的CAS的latency来选择参数。
- 写回周期(Twr),差手册,可以大于手册要求时间。
3.SDRAM配置复用
- 通过将上述设置信息保存产生.qprs配置文件,在软件安装路径下寻找到sopc_builder_ip/SDRAM_controller文件夹下的.qprs,将刚刚产生的配置信息复制粘贴到系统文件中即可在下次调用SDRAM IP时选中本次保存的配置信息。避免重复去查手册。