首页 | 期刊简介 | 编辑部 | 广告部 | 发行部 | 在线投稿 | 联系我们 | 产品信息索取
2024年10月17日星期四
2011年第01期
 
2010年第12期
 
2010年第11期
2010年第11期
 
2010年第10期
2010年第10期
 
2010年第09期
2010年第09期
 
2010年第09期
2010年第08期
 
2010年第07期
2010年第07期
 
2010年第06期
2010年第06期
 
2010年第05期
2010年第05期
 
2010年第04期
2010年第04期
 
2010年第03期
2010年第03期
 
2010年第02期
2010年第02期
 
2010年第01期
2010年第01期
 
2009年第12期
2009年第12期
 
2009年第11期
2009年第11期
 
2009年第10期
2009年第10期
 
2009年第9期
2009年第9期
 
2009年第8期
2009年第8期
 
2009年第7期
2009年第7期
 
2009年第6期
2009年第6期
 
2009年第5期
2009年第5期
 
2009年第4期
2009年第4期
 
2009年第3期
2009年第3期
 
2009年第2期
2009年第2期
 
2009年第1期
2009年第1期
 
2008年第12期
2008年第12期
 
2008年第11期
2008年第11期
 
2008年第10期
2008年第10期
 
2008年第9期
2008年第9期
 
2008年第8期
2008年第8期
 
2008年第7期
2008年第7期
 
2008年第6期
2008年第6期
 
2008年第5期
2008年第5期
 
2008年第4期
2008年第4期
 
2008年第3期
2008年第3期
 
2008年第2期
2008年第2期
 
2008年第1期
2008年第1期
FPGA设计中的组合逻辑与时钟方案
Combinational Logic and Clocking Schemes in FPGA Design
■ 作者: Altera公司Jennifer Stephenson

在用HDL设计时,理解综合工具如何解释不同的HDL代码风格和预期结果是非常重要的。设计人员的代码风格会影响逻辑的利用率和时限性能。本文讨论一些基本的设计技术,确保FPGA最佳的综合结果,同时避免一些不可靠和不稳定的因素。设计人员应当认真设计组合逻辑以避免潜在的问题,同时应注意时钟方案保证同步功能。

组合逻辑结构

组合环路

组合环路是数字逻辑设计中不稳定性和不可靠性最常见的原因之一。在同步设计中,所有的反馈环路都应该包括寄存器。组合环路直接建立没有寄存器的反馈,违反了同步设计的原则。例如,当算术表达式的左边也出现在右边,就会发生组合循环。当把一个寄存器输出通过组合逻辑反馈给同一个寄存器的异步管脚时,也会产生组合环路,见图1。

图1 通过异步控制管理的组合循环(略)

组合环路是高风险的设计结构,这是因为:
● 组合环路的功能通常依靠环路逻辑的相对传播延迟。正如所讨论的,传播延迟可能改变,那么环路行为也可能发生改变。

● 在一些设计工具中,组合环路可能造成无尽的计算循环。大部分的工具会打断组合环路进行处理。设计流程中所用的不同工具会以不同的方式打断同样的环路,这样可能和设计初衷不一致。

延迟链

当两个以上连续的单输入单扇出节点引起延迟时,就会产生延迟链。通常, 把反相器连在一起增加延迟。延迟链通常是由异步设计引入的,有时是用来解决其它组合逻辑引起的竞争冒险。FPGA延迟会随每次布局布线的变化而改变。延迟链可能引起不同的设计问题,包括增加了设计对工作条件的敏感性,减小了设计的可靠性,不利于移植到其它器件结构上。在设计中要避免使用延迟链,而应采用同步设计。

脉冲发生器和多频振荡器


设计者有时用延迟链来产生单个脉冲(脉冲发生器)或一系列脉冲(多频振荡器)。脉冲生成有两种常见的方式,这些技术完全依靠异步逻辑,应该避免:

● 触发信号送给一个两输入AND或OR门的输入,但给其中一个输入设计反相或延迟链。脉冲的宽度取决于直接进入门和经过延迟进入门的这两个通道的相对延迟。输入发生变换,这同样在组合逻辑上产生毛刺。这种技术可以用延迟链,人为地增加脉冲信号的宽度。

● 寄存器的输出经过一个延迟链驱动同一个寄存器的异步复位信号。本质上就是寄存器在经过一定延迟之后异步复位自己。

这些设计的主要问题是综合和布局布线软件很难确定、设置或验证脉冲的宽度。只有在布局布线之后,知道布线和传播延迟之后才能最后确定实际的脉冲宽度。所以,在编写HDL代码时,很难可靠地确定脉冲的宽度,也无法用EDA工具来设置这个宽度。在所有的PVT条件下,脉冲可能并不够宽。如果移植到不同的器件上,脉冲宽度就会改变。另外,静态时限分析并不能用来验证脉冲宽度,所以验证是非常困难的。

多频振荡器除了用组合环路,把电路变成振荡器外,还采用了"毛刺生成器"的方式来产生脉冲。因为它涉及到多个脉冲,所以这种结构所带来的问题比脉冲生成器要多得多。另外,当结构生成多个脉冲时,它们也会增加设计的频率。

当需要使用脉冲生成器时,应该按照图2的纯同步技术来实现。

在本例设计中,脉冲宽度总是等于时钟周期。这种脉冲生成器是可预测的,可以用时限分析还验证,而且易于移植到其它体系、器件或速度等级。

图2 推荐采用的脉冲生成技术(略)
图3 推荐采用时钟生成技术(略)

锁存器

在数字逻辑中,锁存器保留一个信号的值直到赋予其一个新的值。当设计者不打算使用锁存器,HDL代码也会暗指出锁存器来保存值。FPGA拥有大量的寄存器,因此基于锁存器的设计比基于寄存器的设计要占用更多的逻辑,性能降低。

锁存器会造成设计中的各种困难。虽然锁存器是和寄存器类似的存储单元,但是它们根本上是不同的。当锁存器工作在"feed-through"模式下,就是数据输入和输出的直接通路。输入数据的毛刺也会传送到输出。锁存器的时限本来就很不明确。例如在分析带有D锁存器的设计时,软件无法确定设计人员是否打算在时钟的前沿或后沿把数据输出。在一些情况下,只有最初的设计者才会知道设计的全部考虑,因而另一个设计者不可能很容易地移植设计或重用代码。

在设计组合逻辑时,某些代码风格可能产生窃て诘乃嫫鳌@纾盋ASE或IF语句没有覆盖所有可能的输入条件时,如果没有赋于新的值,就可能产生锁存器来保持输出结果。在IF或CASE表达中遗漏最后一条ELSE语句或WHEN OTHERS语句也可能产生锁存器。为了避免产生非预期的锁存器,必须将缺省CASE或最后的ELSE语句赋给一个"don't care"值。

时钟方案

内部生成的时钟

避免使用内部生成的时钟,因为它们可能引起设计中的功能和时限问题。由组合逻辑产生的时钟会引入毛刺会造成功能问题,而引入的延迟则会导致时限问题。

如果用组合逻辑的输出作为时钟信号或异步复位信号,那么在设计中就会出现毛刺。在同步设计中,寄存器输入数据的毛刺是很正常的,对设计没有什么影响。然而,时钟输入(或寄存器异步输入)上的毛刺或脉冲则会导致严重的后果。窄毛刺可能违反了寄存器的最小脉冲宽带要求。如果当毛刺到达时钟输入时寄存器的输入数据正在变化,那么也无法满足建立和保持时限要求。即使设计没有违反时限需求,寄存器输出可能意想不到地改变值,造成设计其它部分的功能不正常。

因为存在这些问题,所有在用组合逻辑输出作为时钟信号之前,必须加一级寄存器(见图3)。这个寄存操作确保了组合逻辑生成的毛刺被阻挡在寄存器的数据输入端口上。

用于生成内部时钟的组合逻辑也会增加时钟线的延迟。在一些设计中,时钟线上的逻辑延迟可能会造成时钟偏移大于两个寄存器之间的数据通道的长度。如果时钟偏移大于数据延迟,寄存器的时限参数将无法满足,设计也无法正确运行。为了减小时钟域上的时钟偏移,(如果可能的话)应把生成的时钟指定到FPGA中一个高扇出和低偏移的时钟树上。使用低偏移时钟树如Altera的全局信号,就可以帮助减小该信号的整个时钟偏移。在Altera的Quartus II软件,设计人员可以用Assignment Editor把一个节点指定为全局信号。

分频时钟

一些设计要分频主时钟产生工作时钟。一些FPGA为时钟分频提供专门的电路,如Altera的锁相环(PLL)。使用PLL电路会避免有异步时钟分频逻辑引入的一些问题。

当使用逻辑分频主时钟时,总要使用同步计数器或状态机。另外,在设计中总是用寄存器直接产生分频时钟信号。设计不再对计数器或状态机进行译码来产生时钟信号。这种实现通常会造成毛刺。

波纹计数器

FPGA设计者经常实现波纹计数器来对时钟进行二次幂分频,因为计数器易于设计而且比同步计数器占用更少的逻辑门。波纹计数器使用级联寄存器,每个寄存器的输出管脚进入下一级寄存器的时钟管脚。因为寄存器在每级上建立了波纹时钟,这种级联方式会造成一些问题。这些波纹时钟必须和时限分析那样处理,这可能很困难并在综合和布局步行工具中设置合适的时限需求。设计人员需要努力避免这些类型的结构,减轻验证压力。

复用时钟

时钟复用可以用不同的时钟源来作同一个逻辑功能。某些复用逻辑选择时钟源。例如,涉及多个频率标准的电信应用通常使用复用时钟。
给时钟信号增加复用逻辑可能会出现一些问题,但是复用时钟的需求根据不同的应用也大大不同。如果满足下列条件,则可以采用时钟复用:
● 初始化配置之后时钟复用逻辑不会变化。
● 设计用复用逻辑选择时钟进行测试。
● 切换时钟之后总是进行复位。
● 时钟切换产生暂时不正确的响应对设计没有什么影响。

如果设计没有经过复位就匆忙地切换时钟,设计就无法容忍暂时不正确的响应。那么必须采用同步设计,这样才不会违反寄存器的时限,时钟信号也没有毛刺,没有竞争冒险或其它逻辑问题。

门控时钟

门控时钟用使能信号打开和关闭时钟信号,这个使能信号控制着某种门电路。当时钟关闭时,相应的时钟域被关闭,功能也暂停。门控时钟是减小功耗的强大技术。当门控时钟时,时钟树和寄存器不再触发,不消耗切换能量。

门控时钟不是同步方案,因此在某些情况下它能够大大地增加设计实现和验证工作,造成一些问题。门控时钟会造成时钟偏移,不利于器件的移植。这些时钟对毛刺也很敏感,造成设计无法工作。

从功能方面考虑,设计人员可以用同步时钟使能在纯同步方式下关闭时钟域。然而,当使用同步时钟使能方案时,时钟树一直触发,每个寄存器的内部电路仍在工作(虽然输出不改变值),它不减小功耗。因此,设计人员应该在绝大部分情况下使用下面归纳的同步方案。要降低更多的功耗,见推荐的时钟门控方案

同步时钟使能

要以同步方式关闭时钟域,褂猛绞敝邮鼓堋T诰蟛糠諪PGA中,器件寄存器上有时钟使能信号。该方案不会降低功耗,因为时钟树和内部电路一直在触发中,但是具有门控时钟同样的功能。在每个寄存器的输入数据前插入一个复用器,以载入新的数据或复制寄存器的输出(见图4)。

推荐采用的时钟门控方式

只有当目标应用需要大量地降低功耗才有必要使用门控时钟。如果必须使用门控时钟,可以使用图5所示的安全的时钟门控技术来实现。
设计人员可以在时钟树的根部、叶或二者之间的某个位置门控一个时钟信号。因为时钟树在切换时会消耗能量,那么在根部生成时钟就可以关闭整个时钟树而不是沿着时钟树在叶子上门控时钟。
正如图5所示,一个寄存器生成使能信号确保其没有毛刺和窄脉冲。设计在时钟的无效沿上钟控着生成使能信号进行门控的寄存器(在图5中,当门控的时钟是上升沿有效的情况下,门控寄存器要使用下降沿)。这种实现方案,一次开关时钟门只有一个输入会改变,这样就不会在输出上产生毛刺或窄脉冲。使用AND门门控上升沿有效的时钟。对于下降沿有效的时钟,则使用OR门来生成时钟,由正沿寄存器来存储使能信号。

图4 同步时钟使能(略)
图5 推荐采用的时钟门控技术(略)

在采用这种方案的时候,应该注意时钟的占空比,因为只有准时的操作才能生成有效的使能信号。如果生成使能信号的逻辑特别复杂,或者时钟的占空比极其不平衡,那么这种方案也可能会产生一些问题。然而,占空比和其它门控时钟方式相比,是一个微不足道的问题
         
版权所有《世界电子元器件》杂志社
地址:北京市海淀区上地东路35号颐泉汇 邮编:100085
电话:010-62985649
E-mail:dongmei@eccn.com