原创 FPGA时序问题一例——同步接口和输出寄存器布局位置约束

2007-8-8 07:29 8276 6 15 分类: FPGA/CPLD

一、出问题的同步接口介绍 riple


    下图是一个芯片的同步接口时序图,这里给出的是向芯片寄存器写入数据的时序图。 riple


点击看大图




    简单介绍一下接口时序。该接口的同步时钟是BCLK,由FPGA提供,最高50MHz。除去SRDYN信号是该芯片驱动以外,所有信号都由FPGA驱动。除去ADSN信号外,所有信号都和BCLK有一定的建立、保持时间关系。 riple


    FPGA和芯片的握手关系如下: riple



  1. 该次写传输从FPGA驱动ADSN有效开始,芯片在ADSN的上升沿捕获访问地址。 riple 
  2. FPGA驱动SWR信号置高(和BCLK的关系是t5、t6)。  riple
  3. FPGA驱动CYCLEN信号有效(和BCLK的关系是t3、t4),SWR信号高电平被芯片捕获,芯片确认此次传输是写入操作。  riple
  4. 芯片驱动SRDYN信号有效(和BCLK的关系是t9、t10),作为对CYCLEN信号的反馈。  riple
  5. FPGA驱动RDYRTN信号有效(和BCLK的关系是t11、t12),Write Data被芯片捕获(Write Data和BCLK的关系是t7、t8)。  riple
  6. 芯片驱动SRDYN信号无效,写传输结束。 riple

 


二、时序问题的表现 riple


    我在设计该接口时,采用了FPGA片内的PLL。由PLL输出两路同频同相的50MHz时钟,一路驱动片内同步逻辑,一路驱动时钟输出引脚BCLK。之所以采用PLL,是为了在需要的时候可以调整两路时钟的相位关系,补偿时钟信号和总线信号到达的时间差。 riple


    这里我有一个假设,即在理想情况下,两路时钟在片内和片外都没有相位差,这样一来,用FPGA片内寄存器的Tco就可以保证总线信号的保持时间,而建立时间会很宽裕。现在看来,这一假设是很冒险的:这一假设只有在FPGA片内才能成立,布局布线工具可以保证满足FPGA内部寄存器的建立保持时间;在片外,PCB的布线、连接件都会影响信号的传播时间,布局布线工具虽然可以考虑这些因素,但是很难得到这些因素的准确数值;还有一点很重要,就是FPGA寄存器输出端到FPGA引脚的延时,在后面会详细说明这一点。 riple


    上板实测时,采用内部和外部逻辑分析仪分别观察了总线信号的时序关系,发现不需要进行相位补偿就可以满足芯片的时序要求。经过小批量的数据传输测试,也没出现问题。 riple


    接下来,由于项目进展的需要,在FPGA开发板和芯片测试板之间增加了一块转接板。同时,FPGA内部的相关逻辑也完成了,压力测试也跑起来了。问题逐渐在压力测试中暴露出来——写入芯片缓冲区的数据会不规则地出现连续的0值,而缓冲区的地址指针递增无误。 riple


    看起来,是芯片接口的数据总线出现了问题。 riple


 


三、时序问题的定位 riple


    我从数据总线驱动的源头一直查到数据总线选择器的控制输入,检查过程中既采用了代码审查的方式查找可能的逻辑错误,也采用了内部逻辑分析仪观察关键信号,还检查了时序分析的结果,都没有发现问题。最后,采用外部逻辑分析仪确认FPGA没有向总线上输出过错误模式的数据。这时,我开始怀疑是芯片接口出现了时序问题。 riple


    在采用内部逻辑分析仪调试的过程中,每次观察信号发生变化重新编译后,问题出现的频率也会产生变化。有时候问题反复出现,有时候问题又不出现了。 riple


    我采用外部逻辑分析仪对问题重现频率最高的版本进行了观察,发现上述时序图中的RDYRTN信号相对于BCLK会出现保持时间不够的情况,而其它接口信号的时序正常。数据出错的问题得到了初步定位,缓冲区指针递增正确的现象也得到了解释。 riple


 


四、时序问题的解决 riple


    解决保持时间不够的问题预先有准备,调节PLL输出的两路时钟的相位差即可。但是问题真的这么简单吗?不是。这里存在三个因素会影响接口时序。 riple


    问题一:BCLK的相位没有调整到最佳,没能使芯片按照BCLK采样控制信号时得到最大的采样窗口,甚至使部分接口信号的采样位置处于临界状态,时序问题时有发生。这是该接口表现出来的主要的时序问题。 riple


    问题二:在调试过程中出现过编译条件改变后会导致时序情况恶化或好转的现象,这表明在该时序问题中还存在除BCLK之外的其他因素。通过比较时序表现差异很大的两次编译结果的Timing Closure Floorplan,发现RDYRTN引脚的驱动逻辑的布局位置有很大的差别,进而导致驱动逻辑到输出引脚的延时在两次编译后出现最大1.5ns的差异,这一差异是该时序问题对编译条件敏感的主要原因。如果不解决该问题,会导致通过调整BCLK相位获得的采样窗口在不同的编译条件下发生移动,调整BCLK相位的效果会打折扣;该问题还会导致接口上各个信号的输出延时不一致,按照一个信号的观察结果调整BCLK的相位可能会顾此失彼。 riple


    问题三:调整BCLK相位后,BCLK与FPGA片内时钟会产生一个相位差,芯片按照BCLK驱动的信号SRDYN被FPGA片内时钟采样时,该相位差就会影响SRDYN信号在FPGA端的采样窗口。这一问题在调整BCLK相位后表现很明显。 riple


    首先,解决了问题二。在FPGA驱动的接口信号的输出端都引入了一个寄存器,然后通过Quartus II的Assignment Editor工具给这几个寄存器都加入了Fast Output Register的约束,在Timing Closure Floorplan中观察编译后的结果发现这些寄存器都被布局到输出引脚对应的IO cell中的寄存器位置,该寄存器到输出引脚的延时都是0ns,可以保证所有接口输出引脚延迟一致。 riple


    接下来,解决了问题一。给FPGA内部时钟加入了120度的相移。该数值是实际观察接口时序得到的最佳值,可以保证各个信号与BCLK的最大采样窗口。 riple


    最后,解决了问题三。对SRDYN信号在FPGA端进行了跨时钟域处理,采用两级寄存器同步了该信号。 riple


    经过上述修改的电路彻底消除了在该接口的时序问题,可以通过压力测试。 riple


 


五、避免和解决该问题的方法归纳 riple



  1. 同步接口的时钟相位问题需要在设计前充分考虑,建议采用PLL,在设计实现后最好采用示波器或逻辑分析仪实测,并进行调整,保证最大的采样窗口。外部电路发生改变后,需要重复调整过程。  riple

  2. 在上述接口中,由于引入了信号驱动时钟和接口时钟的相位差,所以芯片反馈的时钟需要进行跨时钟域处理。两级寄存器同步即可。 即使不引入相位差,也最好采用跨时钟域处理。 riple


  3. Signal Tap II提供了内部信号良好的可观测性,但是也会对内部信号的运行产生干扰,表现在影响内部信号的布局和布线上。该影响会导致芯片时序发生变化。这一影响也可以作为检验电路时序余量的依据。  riple


  4. 在编译后执行时序分析,如果时序分析的结果有很大的时序余量,内部逻辑发生时序问题的可能性可以排除。但不能排除接口电路的时序问题。  riple


  5. 为了控制输出信号的时序,在设计的顶层对所有组合逻辑驱动的输出信号都要加入一级寄存器,这样才能方便地进行布局约束和时序分析。  riple


  6. 在同步接口中,对同步时钟和总线信号有确定的时序要求。满足这一要求,既可以采用调整同步时钟相位的方法,也可以采用约束输出信号输出延时的方法,两种方法需要结合使用。调整信号输出延时仅采用逻辑方法是不够的,还需要在物理层面对信号的布局布线进行约束。下图就是采用Fast Output Register约束的效果,其中0-3区的LEDS[0]引脚的扇入寄存器就被约束到了IO cell中,扇入延时为0;而0-2区的LEDS[1]信号没有采用该约束,扇入延时达到了5.694ns;同样,0-1区的LEDS[2]的扇入延时为4.866ns。 riple

 







点击看大图


 


推荐强文一篇:系统时序基础理论

文章评论9条评论)

登录后参与讨论

ash_riple_768180695 2008-7-27 18:27

扇入=fan-in,在Quartus HELP中的解释为Fan-in refers to the maximum number of input signals that feed the input equations of a logic cell.我在这里想要表示的是“输入”,采用fan-in可能不太准确。 fast指的是从时钟沿到信号发生跳变的时间快慢。由于pin本身是一个相当于wire的变量,并没有时钟的概念,所以约束是针对output pin紧邻的寄存器来说的。 这样看来,约束应该针对reg变量。 针对FPGA的输入信号进行寄存器缓存,对输出信号也用寄存器打一拍是很好的同步设计原则。这样做有利于时序约束和分析。这一原则也适用于内部模块的边界处理。

用户131284 2008-7-26 11:06

还想问一下,这个fast output register约束应该对REG变量添加呢,还是输出管脚添加??

用户131284 2008-7-26 10:27

riple,麻烦你能帮忙解释一下那个扇入延时是怎么回事儿么?明明添加的是fast output register约束呀,怎么以扇入延时来评价呢?问题可能有点儿弱...

ash_riple_768180695 2008-7-20 20:29

画图的话,有个Timing tool不错。Quartus II的波形编辑器也可以。

ash_riple_768180695 2008-7-20 19:49

从PDF里拷出来的,不稀罕。

用户94269 2008-7-20 15:35

你的时许图是用什么软件画的,推荐一下,呵呵。多谢。

用户119502 2007-8-30 15:31

     谢谢分享  受益匪浅

ash_riple_768180695 2007-8-21 11:27

抛砖引玉,很高兴能和你讨论,互相借鉴。

用户94269 2007-8-21 11:01

对你们遇到的问题非常感兴趣,我是做IC的FPGA验证的,对约束比较松,一般仅仅做一下管脚和时钟约束就好了。不知道有没有机会一起讨论。

相关推荐阅读
ash_riple_768180695 2015-12-18 11:06
学习示例程序:FPGA快速系统原型设计--敏捷实践
        学习与开发板配套的示例程序,是敏捷实践的起点。示例程序是厂商针对开发板上提供的硬件资源和接口量身定做的工程,可以展示其FPGA芯片的功能和性能特点。从示例程序入手最大的好处就是:示...
ash_riple_768180695 2015-11-03 16:46
开发板选取:FPGA快速系统原型设计--敏捷实践
    既然是“实践”,就不能只谈编码和仿真,必须要上板运行、调试。这个虚拟项目的目标是实现一块兼容Intel82574L以太网控制器的千兆网卡,需要运行在一块具备PCIe接口和10/100/10...
ash_riple_768180695 2015-10-22 12:41
开篇:FPGA快速系统原型设计--敏捷实践
    虽然借用了 “系统原型开发”的标题,本系列文章将围绕FPGA IP级别的开发这个主题展开,如果可能的话,将扩展至FPGA System级别的开发。     先上一篇PPT:RSPwFP...
ash_riple_768180695 2013-08-26 10:21
学习SystemVerilog(二)——学习它的理由
    学习SystemVerilog的理由也很多,我在阅读SystemVerilog for Design 和 SystemVerilog for Verification两本书前言的过程中,总...
ash_riple_768180695 2013-08-26 10:19
学习SystemVerilog(一)——不学习它的理由
    想要学习SystemVerilog已经很久了。曾经尝试通过Accellera网站上给出的LRM学习,怎奈内容众多,找不出入手点和重点,只能望而却步。虽然手头有三本SystemVerilog...
ash_riple_768180695 2011-06-26 23:20
Hardware-Assisted IEEE1588 Implementation Analysis
06/18/11 11:00:05 PM         最近一段时间在研究IEEE1588-2008精确时间同步协议(PTP)。该协议可以在软件中实现,如果需要提高时间同步...
我要评论
9
6
关闭 站长推荐上一条 /2 下一条