"); //-->
如何连接Nios II和SDRAM
SDRAM和Nios II连接的典型电路框图如下图所示。SDRAM和System使用同一个PLL输出时钟,可以保证System Clock和SDRAM Clock的相对抖动比较小。外部晶振的时钟送入PLL,然后由PLL产生两个同频的时钟一个供给Nios II系统使用,另一个供给SDRAM使用。(把PLL设置成Zero Buffer Mode可以比较方便地控制SDRAM Clock和输入时钟Extern Clock的相位关系。)Nios II系统中的SDRAM控制器和SDRAM通过双向数据线以及其它的单向控制线和SDRAM相连。
用实线向上箭头表示Extern Clock的上升沿,用虚线向上箭头表示Sdram Clock的上升沿。先看第一种情况:FPGA输出数据,而SDRAM采样数据。FPGA在Extern Clock上升沿的时候送出数据,经过最大Tcoutmax(FPGA)的时间在FPGA的管腿输出,由于SDRAM的输入建立时间为Tsu(SDRAM),所以Sdram Clock的采样时机必须在信号到达SDRAM后再等Tsu(SDRAM)。忽略PCB板传输延时,有:
Tlead=T-(Tcoutmax(FPGA)+ Tsu(SDRAM));其中Tlead为SDRAM Clock相对Extern Clock的最大提前量,T为时钟周期。
在下一个时钟上升沿来了后,FPGA会驱动新的信号,在经过最小Tcoutmin(FPGA)的时间(相当于输出保持时间)可能把先前驱动的信号冲掉,而SDRAM要求输入信号要求在采样的时候保持Tih(SDRAM)的时间,所以SDRAM的采样时机必须在Tcoutmin(FPGA)到来之前Tih(SDRAM)。忽略PCB板传输延时,有:
Tlag=Tcoutmin(FPGA)-Tih(SDRAM);其中Tlag为SDRAM Clock相对Extern Clock的最大落后量,Tih(SDRAM)为SDRAM输入保持时间。
第二种情况:SDRAM输出数据,FPGA采样数据。分析和上面类似,最后有:
Tlead=Tcoutmin(SDRAM)-Tih(FPGA);
Tlag= T-(Tcoutmax(SDRAM)+ Tsu(FPGA));
选取最小的Tlead和最小的TlagSDRAM Clock的允许最大提前量和最大的落后量。举个例子:Nios II和SDRAM(MT48LC4M32B2-7)相连主频100MHz。其数据如下:
- Data In: Tsu= 2 ns, Tih= 1 ns
- Data Out: Toh(Tcoutmin)= 2.5 ns, Thz/tac(Tcoutmax)= 5.5 ns (CL=3)
l 2.5–5.5 ns (Data Undefined)
|
比如:
- Data In: Tsu= 1.75 ns, Tih= 0 ns
- Data Out: Tcoutmin(FPGA) = 2 ns, Tcoutmax(FPGA)=5.5 ns
Tlead=T-(Tcoutmax(FPGA)+ Tsu(SDRAM))=10ns-5.5ns-2ns=2.5ns
Tlead=Tcoutmin(SDRAM)-Tih(FPGA)=2.5ns-0ns=2.5ns
选一个小的,仍然是2.5ns。即Tlead=2.5ns
Tlag=Tcoutmin(FPGA)-Tih(SDRAM)=2ns-1ns=1ns
Tlag= T-(Tcoutmax(SDRAM)+ Tsu(FPGA))=10-5.5ns-1.75ns=2.75ns
选一个小的,即Tlag=1ns。
所以SDRAM Clock的相对External Clock相位为-2.5ns~+1ns之间。在生成PLL时指定在这个范围内的相位偏移就可以了。
注意:因为FPGA的时序分析报告都是以External Clock来算的,所以我们并没有使用System Clock来分析。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。