您当前的位置:五五电子网电子知识单片机-工控设备DSP/FPGA技术星载FPGA混合时钟域设计 正文
星载FPGA混合时钟域设计

星载FPGA混合时钟域设计

点击数:7187 次   录入时间:03-04 11:59:53   整理:http://www.55dianzi.com   DSP/FPGA技术

自从2003年XQVR4000XL成功运用于火星探测任务中后,国内外航天领域对Xilinx FPGA产生了极其浓厚的兴趣,这种SRAM工艺的FPGA被越来越多地运用到星载数字系统中,极大提高了系统的集成度。FPGA进行数据处理或数据传输时,需要使用到高速时钟;而出于某些因素考虑,一些低速的接口、通信协议等模块仍然继续使用,而且与高速时钟域还会有数据流交换、控制信号传递等操作,时钟域间的操作对时序稳定性提出了极其苛刻的要求。
    本文基于实际项目需求[1],结合核心处理芯片XC2-V3000的特点,提出了一种基于全局时钟网络,时钟鉴相和FIFO缓冲的混合时钟域设计方案,解决了工作在各个时钟频段的时钟驱动、控制信号传递、数据流交换的问题。经过硬件在线调试,验证了这种方案确实可行,可提供高可靠性的时钟信号。
1 混合时钟域系统时序设计
    FPGA内时序电路根据时钟驱动方式不同,可以分为同步时序电路和异步时序电路[2]。异步时序电路中触发器的驱动是逻辑设计中的直接触发事件,各触发器的输出并不同步变化,容易出现毛刺问题,一般很少采用。同步时序电路中,所有触发器受同一个时钟信号驱动,在时钟信号的上升沿或下降沿到来时刻同步输出结果。同步设计的系统功能可靠,实现简单,绝大多数设计采用的都是这种设计方法。
    同步设计时钟信号一般从FPGA特定管脚输入,模块设计可以使用它作为驱动时钟,同时,这个输入时钟经过锁相分频或同步计数分频等处理后又可以产生内部时钟。默认情况下,分频时钟经由普通布线路径驱动相应的模块,被驱动模块与分频器的布线距离不一定相同,这样会带来隐患。
    以两个串联模块为例,如图1所示,同一个时钟通过不同路径的可编程连线驱动这两个模块,其中模块1的输出作为模块2的输入。时钟上升沿到来时刻,模块2的次态取决于模块1的现态。设tM1是模块1的输出建立时间,也就是时钟上升沿到M1模块输出更新完毕的时间。设t1是分频时钟到达模块1的时刻,t2是分频时钟到达模块2的时刻。令Δt=t1-t2,功能设计时假设Δt=0,认为时钟到来时刻相同。由于分频时钟走的是普通可编程连线,Δt并不等于0。若Δt<0,模块2先工作,模块1 的输出Data1尚未发生改变,模块2的输出仍然正确;若Δt>tM1,即模块1先工作,而且工作结束输出稳定后模块2才开始工作,这样模块2接收到的是模块1的次态,系统工作异常;若Δt在0到tM1之间,则系统工作在临界状态。在临界状态下,系统有可能工作正常,也有可能工作不正常。同步时序电路的时钟偏差问题隐蔽性很强,不易分析。

    时钟源到所有由该时钟驱动的触发器的最大延时之差称为时钟偏差。针对解决时钟偏差问题,本文提出了将所有驱动时钟引入全局时钟网络,不能引入全局网络的时钟作为普通控制信号处理的方案。
    FPGA芯片内部使用单独的一层金属布线层和相应的可配置开关,构成一种接近中心散射的对称梳妆全局时钟网络,也称作全局时钟树。全局时钟网络负载能力强,时钟偏差、时钟波形畸变小,工作可靠性好。在设计实现时,只要模块使用全局时钟作为驱动,设计工具会自动将工作在该时钟域内的所有触发器平衡分布在时钟树上,使时钟偏差最小。全局时钟网络驱动的同步时序电路时钟偏差将不再影响系统正常工作。
    在设计全局时钟网络时,要注意几个问题:
    (1)分频时钟信号质量。计数分频器产生的时钟信号接入全局时钟网络前要手动添加一个寄存器,对该信号进行寄存器滤波,消除可能出现的信号毛刺。
    (2)时钟网络的覆盖性[3]。在器件XC2V3000的所有16个全局时钟接入点(BUFG)中,8个是主时钟接入点,8个是次时钟接入点,分别对应一个主接入点,如图2所示。主接入点和次接入点引入的时钟覆盖范围不一样。主接入点的8个时钟都可以驱动全部4个时区(Quadrant NW/NE/SW/SE),如果系统内需要超过8个全局时钟信号,则需要使用次接入点。次接入点与主接入点在硬件上并没有本质区别,只是次接入点的时钟不能工作在它所对应的主接入点的时区内。

    ISE在布局布线过程中会自动为设计代码中的BUFG选择合适的布局,低于8个全局时钟信号时会全部选择主接入点以获得更优化的布局,如有特殊情况需要进行手动布局,则需要留意这样的位置约束。由于设计工具在布局时会沿着时钟树平衡分布,当资源消耗量大的两个或者多个时钟网络驱动同一个时区时,要充分考虑逻辑资源冲突问题。布局时资源紧张,不能进行优化设计,可能产生临界状态,并且导致功耗集中,局部发热快、温度高,长期工作会导致器件的性能下降。这种情况在逻辑资源比较紧张的设计中容易出现,因此设计初期要进行资源预估,保证足够的降额。Xilinx建议用户设计资源利用率一般在60%~70%左右,超过这个范围,系统性能将会受到影响。
    全局时钟树可以实现芯片内高速、中速、低速和甚低速任意组合的混合时钟域设计,有助于将印刷板上原本使用专用器件完成的功能移植到FPGA上实现,提高系统的集成度,在航天器微型化的发展中起关键作用。
    使用全局时钟树实现的混合时钟域设计中,时钟域之间不可避免地会有控制信号传递和数据流的交换。如果这两个时钟有“沿对沿”的相位关系,可能会发生“时钟碰撞”。触发器工作过程中存在数据建立和保持时间的约束,如果不能满足约束,触发器就会进入某种不确定状态——亚稳态。如图3所示,Clk1和Clk2的相位关系使得在某些时刻Clk1时钟域输出的数据Data还未完全建立,Clk2的上升沿便触发了对这个数据的采集,进入到Clk2时钟域的数据Data_Clk2便处于亚稳态。这个亚稳态数据会对Clk2时钟域的工作状态产生不可预期的影响,可能导致连锁反应,甚至引起整体系统功能混乱。



www.55dianzi.com


    为解决这个问题,提高同步时序设计可靠性,本文提出了基于时钟鉴相和基于异步FIFO的解决方案。
    当信号在两个频率相差较大的时钟域间传递时,时钟鉴相法可以保证信号的可靠传递。低速时钟域的信号向高速时钟域传递的时序如图4所示。使用高速时钟对低速时钟波形进行采样,分别记录采样现态CLK_SL和两个先前态CLK_SL_DL1、CLK_SL_DL2,根据这3个状态可以判断低速时钟的相位。令STATE=CLK_SL& CLK_SL_DL1&CLK_SL_DL2,当STATE=“100”时认为采到低速时钟的上升沿,假设低速信号在这个上升沿开始变化,则在STATE=“110”时,低速信号输出稳定,用采样时钟将此时的信号寄存,这样就完成了低速信号到高速时钟域的传递。高速时钟域的信号向低速时钟域传递时,同样使用高速时钟对低速时钟进行采样,记录现态和两个先前态。假设低速时钟域中,低速时钟在时钟的上升沿采集控制信号,则当STATE=“011”时,认为是低速时钟的下降沿,执行对信号的赋值操作。在低速时钟的上升沿,高速信号不刷新,低速时钟域可以正确接收信号。

    如果系统众多时钟里只有一个高速时钟,其余都是低速或甚低速时钟,可以利用时钟鉴相法将混合时钟域转化为单一时钟域。具体做法是使用高速时钟触发片内所有触发器,原低速时钟驱动模块改用高速时钟驱动,低速时钟作为一般控制信号或同步刷新信号使用。时钟域单一化有利于实现同步设计,当所用控制信号和数据流信号在同一个时刻触发变化时,信号传递时的亚稳态错误便不会存在,可以极大地提高系统的稳定性。混合时钟域单一化方法在模块化设计中对每个触发点都要做一次时钟鉴相,增加了系统的资源消耗,而且设计代码可读性不强,移植性也不好。在大规模系统设计时,单一的高速时钟驱动还会增加功耗。在大型复杂设计中并不推荐混合时钟域单一化。
    当信号跨越的两个时钟域时钟频率比较接近时,时钟鉴相法不能有效地相互鉴别时钟相位,亚稳态问题仍然威胁系统的可靠性。在两个都是低速时钟域的情况下,可以先将信号从源时钟域中转到高速时钟域,然后再传递到目标时钟域。但中转传递降低了工作效率而且增加了资源消耗,因此较少采用。

[1] [2]  下一页


本文关键字:暂无联系方式DSP/FPGA技术单片机-工控设备 - DSP/FPGA技术

《星载FPGA混合时钟域设计》相关文章>>>