安路AXI 接口的SDRAM精简控制器例程,基于EG4S20-Anlogic-安路论坛-FPGA CPLD-ChipDebug

安路AXI 接口的SDRAM精简控制器例程,基于EG4S20

该帖子部分内容已隐藏
付费阅读
已售 4
16积分
此内容为付费阅读,请付费后查看

转载自wye11083大牛的AXI接口 SDRAM控制器 

input clk_i,
input rst_i,
input clk2x_i,//Read clock should be tested. Since all IOs use IODDR, the timing is relatively fixed.

注意时序问题。根据估计,安路的ODDR到OPAD再到SDRAM再到DQ再到IDDR总路径估计有~5ns左右,不算上SDRAM的Output Hold的话起码也得有3.5ns。
实际使用时,clk_i和clk2x_i请对齐,因为SDRAM的clk是下降沿出1,这样就构成了1:2的SDRAM控制器。安路的内核效率不咋的,高频上不去,因此这样设计不太影响有效的带宽。

模块实际工作在74.25MHz,clk2x_i为148.5MHz,此时从SDRAM的clk到DQ的延迟最大有3.36ns,实际估计可能会稍微吃掉一点SDRAM的Output Hold。如果要提高频率,则需要把clk2x_i往前提一点,以避免Setup Time不足造成读数据错误。

此外,安路的工具链似乎不太稳定,工程改一个地方都有可能造成SDRAM崩溃,第1个Burst的最低字节始终是错的。目前也没有找到原因,遇到这种情况直接打开LPF_SDRAMULPController,把DEBUG_DDR_TRP改一下,为1或2,一般都能解决SDRAM出错的问题。国产就是这样,总会有点小毛病不太顺,但是基本上能用。

模块为标准AXI4接口,但是很多特性都不支持。模块不区分4KB边界,但是为防万一,建议外面手动加上4K边界,避免移植出现问题。已知Xilinx官方IP会在4K边界上出错。模块仅支持BRAM接口,要求输入输出ready或valid均为恒1,没有内置FIFO,不支持传输阻塞。

模块为最精简化控制器,是不包含打开的页地址记录的。也即,每次操作都是一次全新的操作,控制器会自动进行ACT-RW-PRE的操作。因此对于小的Burst会带来严重的效率损失。对连续地址短Burst有需求的则需要自己去增加Opened Bank管理了。同理,AXI总线也会带来最大2个周期的延迟,不支持流水线操作,每次只能响应一条指令,对目前我的应用需求来说可以满足。想要追求极致效率的可以自己研究高性能控制器。给个思路:用一堆Bank Machine去管理读写指令,由每个Bank Machine去管理映射到它的指令,用id实现无缝交替传输。

此外,注意一下安路的工具链时序分析似乎有bug,生成的时序比实际时序要多出~2ns,比如设置10ns,工具链实际是按~12ns去布线,没有找到原因,且安路FAE似乎也没有解释原因。实际使用时需要手动缩短时序以避免出现意外情况。实测片内逻辑最高可跑到~150MHz的主频(只能留出来5%的时序余量,而且需要极度流水线化,就像Intel的Prescott处理器一样拼命加深流水线),实用主频不超过100MHz。


根据最新测试结果,当SDRAM时钟提前2.666ns时,读时序bug基本消失(多次未复现)。因此推算安路FPGA的输出buffer延迟应在2~2.5ns之间,输入buffer延迟应在0.5~1ns之间,总延迟在2.5~3.5ns左右。因此,clk2x_i需要向后延长一点时间或向前提一点时间,使clk2x的下降沿到clk_i的两个边沿延迟在2.666ns~2.75ns之间,理论上可以达成完美读写。

当前工程综合资源占用率不到50%,理论上EG4S20共有19600个LUT,但是它有一半是LUT5,因此折合29400个LUT4,19600个DFF,64个1Kx9的RAM,16个4Kx8的RAM,资源量已经明显超过XC6SLX25了。当然主频是个很大的bug,一个模块为了跑到150MHz内部所有信号全部做了深度流水线。综合性能约为Spartan-6的50%~65%。欢迎大家都来搞国产FPGA图片[1]-安路AXI 接口的SDRAM精简控制器例程,基于EG4S20-Anlogic-安路论坛-FPGA CPLD-ChipDebug

控制器代码见附件

请登录后发表评论