深圳市华为技术有限公司研究管理部文档中心文档编号产品版本密级V1.0秘密产品名称:同步电路设计技术及规则共27页同步电路设计技术及规则(仅供内部使用)FPGAGROUP文档作者:周志坚日期:1999/11/18研究部:日期:文档管理员:日期:深圳市华为技术有限公司版权所有不得复制同步电路设计技术及规则秘密请输入文档编号修订记录[P1]日期修订版本描述作者1999/11/181.00初稿完成周志坚2005-10-21版权所有,侵权必究第2页,共2页同步电路设计技术及规则秘密请输入文档编号目录1设计可靠性42时序分析基础43同步电路设计53.1同步电路的优越性53.2同步电路的设计规则63.3异步设计中常见问题及其解决方法63.4不建议使用电路174SET和RESET信号处理185时延电路处理196全局信号的处理方法207时序设计的可靠性保障措施248ALTERA参考设计准则252005-10-21版权所有,侵权必究第3页,共3页同步电路设计技术及规则秘密请输入文档编号2005-10-21版权所有,侵权必究第4页,共4页同步电路设计技术及规则秘密请输入文档编号同步电路设计技术及规则1设计可靠性为了增加可编程逻辑器件电路工作的稳定性,一定要加强可编程逻辑器件设计的规范要求,要尽量采用同步电路设计。对于设计中的异步电路,要给出不能转换为同步设计的原因,并对该部分异步电路的工作可靠性(如时钟等信号上是否有毛刺,建立-保持时间是否满足要求等)作出分析判断,提供分析报告。2时序分析基础电路设计的难点在时序设计,而时序设计的实质就是满足每一个触发器的建立/保持时间的要求。①组合逻辑DQDQREG1REG2③其它控制信号CLK②CLKCREG1REG2(D)CLK(REG2)REG2(Q)T1T_cycleT1nTTsThTn+1nn+1图1.1如上图所示,以REG2为例,假定2005-10-21版权所有,侵权必究第5页,共5页同步电路设计技术及规则秘密请输入文档编号触发器的建立时间要求为:T_setup,保持时间要求为:T_hold,路径①延时为:T1,路径②延时为:T2,路径③延时为:T3,时钟周期为:T_cycle,Ts=(T_cycle+△T)-T1,Th=T1-△T,令△T=T3-T2,则条件1.如果T_setupTs,即T_setup(T_cycle+△T)-T1,这说明信号比时钟有效沿超过T_setup时间到达REG2的D端,满足建立时间要求。反之则不满足;条件2.如果T_holdTh,即T_holdT1-△T,这说明在时钟有效沿到达之后,信号能维持足够长的时间,满足保持时间要求。反之则不满足。从条件1和2我们可以看出,当△T0时,T_hold受影响;当△T0时,T_setup受影响。如果我们采用的是严格的同步设计电路,即一个设计只有一个CLK,并且来自时钟PAD或时钟BUFF(全局时钟),则△T对电路的影响很小,几乎为0;如果采用的是异步电路,设计中时钟满天飞,无法保证每一个时钟都来自强大的驱动BUFF(非全局时钟),如下图所示,则△T影响较大,有时甚至超过人们想象。这就是为什么我们建议采用同步电路进行设计的重要原因之一。①组合逻辑DQDQREG1REG2③其它控制信号CLK②组合逻辑图1.23同步电路设计3.1同步电路的优越性1.同步电路比较容易使用寄存器的异步复位/置位端,以使整个电路有一个确定的初始状态;2.在可编程逻辑器件中,使用同步电路可以避免器件受温度,电压,工艺的影响,易于消除电路的毛刺,使设计更可靠,单板更稳定;3.同步电路可以很容易地组织流水线,提高芯片的运行速度,设计容易实现;2005-10-21版权所有,侵权必究第6页,共6页同步电路设计技术及规则秘密请输入文档编号下图是一个设计中所要准备采用的电路,该设计采用Xilinx的FPGA器件4062xla来实现,工作频率是32.768MHz(即图中CLK频率)。设计原打算在每隔60ns输出一个数据,即DATA。然而,我们在设计之前,考虑到256x7的同步RAM延时可能比较大,如果在加上其后的同步RAM延时的话,估计在60ns之内很难完成。该部分电路是整个设计中的一个关键路径,因此,我们在进行具体设计之前,先对这种电路结构进行了验证,事实证明我们的担心是对的。正确的做法是,采用流水线方法,在256x7的RAM之后再加一个触发器,每个RAM都按60ns的速度读取数据,整个流程滞后60ns输出DATA。其它相关信号(在其它模块中)也随之滞后60ns输出。触发器输出组合逻辑触发器输出+1触发器模块1模块0DINARAM256×7DOUTDINA32×6RAMCLKWENA0WENA1DOUTDATA图1.34.同步电路可以很好地利用先进的设计工具,如静态时序分析工具等,为设计者提供最大便利条件,便于电路错误分析,加快设计进度。1.1同步电路的设计规则1.尽可能在整个设计中只使用一个主时钟,同时只使用同一个时钟沿,主时钟走全局时钟网络。2.在FPGA设计中,推荐所有输入、输出信号均应通过寄存器寄存,寄存器接口当作异步接口考虑。3.当全部电路不能用同步电路思想设计时,即需要多个时钟来实现,则可以将全部电路分成若干局部同步电路(尽量以同一个时钟为一个模块),局部同步电路之间接口当作异步接口考虑。4.当必须采用多个时钟设计时,每个时钟信号的时钟偏差(△T)要严格控制。5.电路的实际最高工作频率不应大于理论最高工作频率,留有设计余量,保证芯片可靠工作。2005-10-21版权所有,侵权必究第7页,共7页同步电路设计技术及规则秘密请输入文档编号6.电路中所有寄存器、状态机在单板上电复位时应处在一个已知的状态。1.2异步设计中常见问题及其解决方法异步电路设计主要体现在时钟的使用上,如使用组合逻辑时钟、级连时钟和多时钟网络;另外还有采用异步置位、复位、自清零、自复位等。这些异步电路的大量存在,一是增加设计难度,二是在出现错误时,电路分析比较困难,有时会严重影响设计进度。很多异步设计都可以转化为同步设计,对于可以转化的逻辑必须转化,不能转化的逻辑,应将异步的部分减到最小,而其前后级仍然应该采用同步设计。下面给出一些异步逻辑转化为同步逻辑的方法:1.组合逻辑产生的时钟QD组合逻辑...输入图1.4组合逻辑产生的时钟组合逻辑的时钟如果产生毛刺,易使触发器误翻转。2.行波计数器/行波时钟QDQDQDclkQ1Q2Q0·····图1.5行波计数器2005-10-21版权所有,侵权必究第8页,共8页同步电路设计技术及规则秘密请输入文档编号行波记数器虽然原理简单,设计方便,但级连时钟(行波时钟)最容易造成时钟偏差(△T),级数多了,很可能会影响其控制的触发器的建立/保持时间,使设计难度加大。转换的方法是采用同步记数器,同步计数器用原理图描述可能较难,但用VHDL很简单就可以描述一个4位计数器:Counter4:Process(nreset,clk)BeginIfnreset='0'thenCnt=(others=0);Elsifclk='1'andclk'eventthenCnt=cnt+1;Endif;Endprocesscounter4;通常逻辑综合工具都会对上述描述按不同器件的特点进行不同的优化,我们并不需要关心它是逐位进位计数器还是超前进位计数器。4.不规则的计数器图1.6不规则的计数器这是一个53计数器,采用计到53后产生异步复位的办法实现清0,产生毛刺是必然的。然而最严重的是,当计数器所有bit或相关bit均在翻转时,电路有可能出错,例如:计数器从“110011”-“110100”,由于电路延时的原因,中间会出现“110101”状态,导致计数器误清0。采用同步清0的办法,不仅可以有效地消除毛刺,而且能避免计数器误清0。电路如下图所示。QDclk+1=53。CLRN6位二进制计数器Q[5:0]2005-10-21版权所有,侵权必究第9页,共9页同步电路设计技术及规则秘密请输入文档编号QDclk+1=526位二进制计数器Q[5:0]000000图1.7规则的计数器5.分频器这是3和4的特例,我们推荐使用同步计数器最高位的方法,如果需要保证占空比,可以使用图1.8所示电路进行最后一次二分频。下图是19.44MHz分频到8kMHz(分频数为2430)的电路:QDclk+1=121411位二进制计数器0QDENAclkout··图1.8分频数为2430的电路若是奇数分频,则处理比较特殊,以5分频器为例,其要求产生的时序关系如下图所示,MCLKDIV5_CLK很显然,该电路要用上MCLK的上沿和下研,对上图时序进行分解,得下图2005-10-21版权所有,侵权必究第10页,共10页同步电路设计技术及规则秘密请输入文档编号40123444012304012344401230MCLKCOUNTODIVOCOUNT1DIV1DIV5_CLK图1.95分频信号时序分解图中,COUNT0采用上沿计数,COUNT1采用下沿计数,DIV0和DIV1是分别是上沿触发器和下沿触发器的输出,DIV5_CLK是DIV0和DIV1的或门输出。读者可根据该时序图,画出相应的原理图,或者用HDL语言进行描述。在使用该电路时,需要注意:(1)DIV0和DIV1到DIV5_CLK的约束要严,越快越好。不然,无法保证1:1的占空比。(2)MCLK频率要求较高,尽量不要出现窄脉冲,尤其是在高频电路里。(3)COUNT1可有可无,视时钟频率高低而定。频率越高,COUNT1越需要。6.多时钟的同步化我们在设计中,经常预见这种情况:一个控制信号来自其它芯片(或者芯片其它模块),该信号相对本电路来讲是异步的,即来自不同的时钟源。其模型可用图1.10表示。组合逻辑组合逻辑组合逻辑DDDDQQQQREG2REG3REG4REG1CLK1CLK2图1.10在图1.10中,CLK1与CLK2来自不同的时钟源,该电路即可能出现在同一芯片里,又可能出现在不同芯片里。但效果是一样的,即存在危险性:由于时钟源不同,对REG2和REG3来讲,在同一时刻,一个“认为”REG1的输出是“1”,另一个认为是“0”。这必定造成电路判断出现混乱,导致出错。2005-10-21版权所有,侵权必究第11页,共11页同步电路设计技术及规则秘密请输入文档编号这种错误的实质是内部其它电路对输入控制信号(也可认为是状态信号)认识不一致,导致不同的电路进入不同的状态。正确的做法是在REG1之后再加一个触发器,用CLK2的时钟沿去采样,然后用该触发器的输出参与其后同步电路“活动”。如图1.11所示。CLK1组合逻辑DQ组合逻辑组合逻辑DDQQREG2REG3REG4DQREG1CLK2DQREG5图1.11如果输入信号是两根以上信号线,如下图所示,则该处理方法不准确。应引入专门的同步调整电路或其它特殊处理电路。我们在设计时,会对总线数据进行同步调整,却往往忽略了对一组控制信号进行同步调整。CLK1组合逻辑DQ组合逻辑组合逻辑DDQQREG2REG3REG4DQREG1CLK2DQREG5组合逻辑DQ组合逻辑组合逻辑DDQQREG8REG9REG10DQREG6DQREG7图1.12问题电路7.RS触发器2005-10-21版权所有,侵权必究第12页,共12页同步电路设计技术及规则秘密请输入文档编号。。··RSQQ图1.13RS触发器是一种危险的触发器,R=S=1会导致不稳定态,初始状态也不确定。在设计时尽量避免采用这种电路,或用如图1.14电路改进图1.14可编程逻辑器件一般选用结构中的D触发器来完成设计。我们认为,设计时最好从系统的角度来考虑,实现电路的功能,建议使用用VHDL直接描述所需要的设计。这样作,既安全,又具有极大的灵活性:Process(nreset,clk)BeginIfnreset='0'thenRs='0';Elsifclk='1'andclk'eventthenCaser&sisWhen00=Rs=rs;When01=