SOPC Eclipse下载出错总结(一)

问题总结

  这是我用Eclipse下载到AC620时出现的相关错误,仅此收录在这篇博客里面,会不定时得更新。

一.SDRAM存储问题:

  这个问题要看你下载是否报错之前的界面,也就是verify那里,注意看下地址,然后一般根据地址就会发现是SDRAM报错。
  1.一般这里报错都是PLL锁相环得时钟相位差给错了
  2.可能有玄学问题,就那种什么都不改,昨天好好得,今天就会报错得那种,也很正常。碰到了,不要管他,仔细照着把Qsys弄好,然后重新写Eclipse代码。注意每次更改Qsys后要对Eclipse得BSP文件重新Generate以下。具体图如下所示:

在这里插入图片描述

图一.重新生成BSP标记图

SDRAM相位差计算方法

  对于第一种问题,以下是相关的解决方案
  首先先介绍下PLL和SDRAM的相关计算方法
虽然可能不会去用,但是不能不会怎么么去计算,万一可以教教妹子啥的呢?
正文开始:
  SDRAM和NIos II连接的典型框图如下图所示:
在这里插入图片描述

图一.Nios和SDRAM的大致连接框图

  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相连。
  SDRAM Clock通常是C0输出或者C1输出,C0和C1都是PLL专用于输出外部时钟的,有比较小的抖动。由于一个FPGA中通常有若干个PLL,综合后使用哪个PLL是由输入时钟Extern Clock决定的,所以SDRAM Clock必须和Extern Clock是同一个PLL的专用输入管腿和专用输出管腿。调试SDRAM和Nios II 的最关键是调整SDRAM Clock的相位

  下面推导SDRAM Clock和ExternClock的相位关系。
在这里插入图片描述

图二.时钟信号图

  用实现向上箭头表示Extern Clock的上升沿,用虚线向上箭头表示Sdram Clock的上升沿。

先看第一种情况:

  FPGA输出数据,而SDRAM采样数据。FPGA在ExternClock(输出时钟引脚)上升沿的时候送出数据,经过最大Tcoutmax(FPGA)的时间在FPGA的管腿输出,由于SDRAM的输入建立时间为Tsu(SDRAM),所以Sdram Clock的采样时机必须在信号到达SDRAM后再等Tsu(SDRAM)。忽略PCB板传输延时,有:

Tlead=T-(Tcoutmax(FPGA)+Tsu(SDRAM));其中Tlead 为SDRAMClock相对ExternClock的最大提前量,T为时钟周期。

  在下一个时钟上升沿来了后,FPGA会驱动新的信号,在经过最小Tcoutmin(FPGA)的时间(相当于输出保持时间)可能把先前驱动的信号冲掉,而SDRAM要求输入信号要求在采样的时候保持Tih(SDRAM)的时间,所以SDRAM的采样时机必须在Tcoutmin(FPGA)到来之前Tih(SDRAM)。忽略PCB板传输延时,有:

Tlag=Tcoutmin(FPGA)-Tih(SDRAM);其中Tlag为SDRAMClock相对ExternClock的最大落后量,Tih(SDRAM)为SDRAM输入保持时间
再看第二种情况:

  SDRAM输出数据,FPGA采样数据。分析和上面类似,最后有:

Tlead=Tcoutmin(SDRAM)-Tih(FPGA);
Tlag=T-(Tcoutmax(SDRAM)+ Tsu(FPGA))

  选取最小的Tlead和最小的Tlag和SDRAMClock允许的最大提前量和最大落后量。举个例子: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)
  Tlead=2.51 ns = 1.5 ns (Data Undefined)

  FGPA的数据可以在编译报告的时序分析部分得到,Tcoutmax(FPGA),Tsu(FPGA),Tih(FPGA)分别可以从Tco,Tsu,Th部分得到各个SDRAM相关信号的最大值。而Tcoutmin(FPGA)则可以运行Fast timing model timing analyzer 来得到。
比如:

- Data In: Tsu = 1.75 ns, Tih = 0 ns ,T = 10 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))105.5ns-1.75ns=2.75ns
  结果中咱选一个小的,即Tlag=1ns。

  所以SDRAM Clock的相对ExternalClock相位为-2.5ns~+1ns之间。在生成PLL时指定在这个范围内的相位偏移就可以了。
注意:因为FPGA的时序分析报告都是以External Clock来算的,所以我们并没有使用System Clock来分析。
  通过分析我们知道了Qsys里面PLL的相位应该设置成多少,但是肯定有很多人不愿意看这么长篇大论的推断吧:AC620的PLL相位一般设成-90度,其他的可以根据相关例程的PLL设置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值