
组合逻辑反馈.doc
5页10 月 16 日组合逻辑的反馈是大忌啊~ 下面是转来的读书笔记~ 写的不错,收藏了~在用 HDL 设计时,理解综合工具如何解释不同的 HDL 代码风格和预期结果 是非常重要的设计人员的代码风格会影响逻辑的利用率和时限性能本文讨 论一些基本的设计技术,确保 FPGA 最佳的综合结果,同时避免一些不可靠和 不稳定的因素设计人员应当认真设计组合逻辑以避免潜在的问题,同时应注 意时钟方案保证同步功能组合逻辑结构组合逻辑结构组合环路组合环路是数字逻辑设计中不稳定性和不可靠性最常见的原因之一在同步设 计中,所有的反馈环路都应该包括寄存器组合环路直接建立没有寄存器的反 馈,违反了同步设计的原则例如,当算术表达式的左边也出现在右边,就会 发生组合循环当把一个寄存器输出通过组合逻辑反馈给同一个寄存器的异步 管脚时,也会产生组合环路,见图 1图 1 通过异步控制管理的组合循环(略)组合环路是高风险的设计结构,这是因为: ● 组合环路的功能通常依靠环路逻辑的相对传播延迟正如所讨论的,传播延 迟可能改变,那么环路行为也可能发生改变● 在一些设计工具中,组合环路可能造成无尽的计算循环大部分的工具会打 断组合环路进行处理。
设计流程中所用的不同工具会以不同的方式打断同样的 环路,这样可能和设计初衷不一致 延迟链当两个以上连续的单输入单扇出节点引起延迟时,就会产生延迟链通常, 把 反相器连在一起增加延迟延迟链通常是由异步设计引入的,有时是用来解决 其它组合逻辑引起的竞争冒险FPGA 延迟会随每次布局布线的变化而改变 延迟链可能引起不同的设计问题,包括增加了设计对工作条件的敏感性,减小 了设计的可靠性,不利于移植到其它器件结构上在设计中要避免使用延迟链, 而应采用同步设计脉冲发生器和多频振荡器设计者有时用延迟链来产生单个脉冲(脉冲发生器)或一系列脉冲(多频振荡 器)脉冲生成有两种常见的方式,这些技术完全依靠异步逻辑,应该避免:● 触发信号送给一个两输入 AND 或 OR 门的输入,但给其中一个输入设计反相或延迟链脉冲的宽度取决于直接进入门和经过延迟进入门的这两个通道的 相对延迟输入发生变换,这同样在组合逻辑上产生毛刺这种技术可以用延 迟链,人为地增加脉冲信号的宽度● 寄存器的输出经过一个延迟链驱动同一个寄存器的异步复位信号本质上就 是寄存器在经过一定延迟之后异步复位自己这些设计的主要问题是综合和布局布线软件很难确定、设置或验证脉冲的宽度。
只有在布局布线之后,知道布线和传播延迟之后才能最后确定实际的脉冲宽度 所以,在编写 HDL 代码时,很难可靠地确定脉冲的宽度,也无法用 EDA 工具 来设置这个宽度在所有的 PVT 条件下,脉冲可能并不够宽如果移植到不同 的器件上,脉冲宽度就会改变另外,静态时限分析并不能用来验证脉冲宽度, 所以验证是非常困难的多频振荡器除了用组合环路,把电路变成振荡器外,还采用了“毛刺生成器“的 方式来产生脉冲因为它涉及到多个脉冲,所以这种结构所带来的问题比脉冲 生成器要多得多另外,当结构生成多个脉冲时,它们也会增加设计的频率当需要使用脉冲生成器时,应该按照图 2 的纯同步技术来实现 在本例设计中,脉冲宽度总是等于时钟周期这种脉冲生成器是可预测的,可 以用时限分析还验证,而且易于移植到其它体系、器件或速度等级图 2 推荐采用的脉冲生成技术(略) 图 3 推荐采用时钟生成技术(略)锁存器在数字逻辑中,锁存器保留一个信号的值直到赋予其一个新的值当设计者不 打算使用锁存器,HDL 代码也会暗指出锁存器来保存值FPGA 拥有大量的寄 存器,因此基于锁存器的设计比基于寄存器的设计要占用更多的逻辑,性能降 低锁存器会造成设计中的各种困难。
虽然锁存器是和寄存器类似的存储单元,但 是它们根本上是不同的当锁存器工作在“feed-through“模式下,就是数据输 入和输出的直接通路输入数据的毛刺也会传送到输出锁存器的时限本来就 很不明确例如在分析带有 D 锁存器的设计时,软件无法确定设计人员是否打 算在时钟的前沿或后沿把数据输出在一些情况下,只有最初的设计者才会知 道设计的全部考虑,因而另一个设计者不可能很容易地移植设计或重用代码在设计组合逻辑时,某些代码风格可能产生窃て诘乃?存器例如,当 CASE 或 IF 语句没有覆盖所有可能的输入条件时,如果没有赋于新的值,就可能产生 锁存器来保持输出结果在 IF 或 CASE 表达中遗漏最后一条 ELSE 语句或 WHEN OTHERS 语句也可能产生锁存器为了避免产生非预期的锁存器,必须将缺省 CASE 或最后的 ELSE 语句赋给一个“don't care“值时钟方案时钟方案内部生成的时钟避免使用内部生成的时钟,因为它们可能引起设计中的功能和时限问题由组 合逻辑产生的时钟会引入毛刺会造成功能问题,而引入的延迟则会导致时限问 题如果用组合逻辑的输出作为时钟信号或异步复位信号,那么在设计中就会出现 毛刺。
在同步设计中,寄存器输入数据的毛刺是很正常的,对设计没有什么影 响然而,时钟输入(或寄存器异步输入)上的毛刺或脉冲则会导致严重的后 果窄毛刺可能违反了寄存器的最小脉冲宽带要求如果当毛刺到达时钟输入 时寄存器的输入数据正在变化,那么也无法满足建立和保持时限要求即使设 计没有违反时限需求,寄存器输出可能意想不到地改变值,造成设计其它部分 的功能不正常 因为存在这些问题,所有在用组合逻辑输出作为时钟信号之前,必须加一级寄 存器(见图 3)这个寄存操作确保了组合逻辑生成的毛刺被阻挡在寄存器的 数据输入端口上用于生成内部时钟的组合逻辑也会增加时钟线的延迟在一些设计中,时钟线 上的逻辑延迟可能会造成时钟偏移大于两个寄存器之间的数据通道的长度如 果时钟偏移大于数据延迟,寄存器的时限参数将无法满足,设计也无法正确运 行为了减小时钟域上的时钟偏移,(如果可能的话)应把生成的时钟指定到 FPGA 中一个高扇出和低偏移的时钟树上使用低偏移时钟树如 Altera 的全局 信号,就可以帮助减小该信号的整个时钟偏移在 Altera 的 Quartus II 软件, 设计人员可以用 Assignment Editor 把一个节点指定为全局信号。
分频时钟一些设计要分频主时钟产生工作时钟一些 FPGA 为时钟分频提供专门的电路, 如 Altera 的锁相环(PLL)使用 PLL 电路会避免有异步时钟分频逻辑引入的 一些问题当使用逻辑分频主时钟时,总要使用同步计数器或状态机另外,在设计中总 是用寄存器直接产生分频时钟信号设计不再对计数器或状态机进行译码来产 生时钟信号这种实现通常会造成毛刺波纹计数器FPGA 设计者经常实现波纹计数器来对时钟进行二次幂分频,因为计数器易于 设计而且比同步计数器占用更少的逻辑门波纹计数器使用级联寄存器,每个寄存器的输出管脚进入下一级寄存器的时钟管脚因为寄存器在每级上建立了 波纹时钟,这种级联方式会造成一些问题这些波纹时钟必须和时限分析那样 处理,这可能很困难并在综合和布局步行工具中设置合适的时限需求设计人 员需要努力避免这些类型的结构,减轻验证压力复用时钟时钟复用可以用不同的时钟源来作同一个逻辑功能某些复用逻辑选择时钟源 例如,涉及多个频率标准的电信应用通常使用复用时钟 给时钟信号增加复用逻辑可能会出现一些问题,但是复用时钟的需求根据不同 的应用也大大不同如果满足下列条件,则可以采用时钟复用: ● 初始化配置之后时钟复用逻辑不会变化。
● 设计用复用逻辑选择时钟进行测试 ● 切换时钟之后总是进行复位 ● 时钟切换产生暂时不正确的响应对设计没有什么影响如果设计没有经过复位就匆忙地切换时钟,设计就无法容忍暂时不正确的响应 那么必须采用同步设计,这样才不会违反寄存器的时限,时钟信号也没有毛刺, 没有竞争冒险或其它逻辑问题门控时钟门控时钟用使能信号打开和关闭时钟信号,这个使能信号控制着某种门电路 当时钟关闭时,相应的时钟域被关闭,功能也暂停门控时钟是减小功耗的强 大技术当门控时钟时,时钟树和寄存器不再触发,不消耗切换能量门控时钟不是同步方案,因此在某些情况下它能够大大地增加设计实现和验证 工作,造成一些问题门控时钟会造成时钟偏移,不利于器件的移植这些时 钟对毛刺也很敏感,造成设计无法工作从功能方面考虑,设计人员可以用同步时钟使能在纯同步方式下关闭时钟域 然而,当使用同步时钟使能方案时,时钟树一直触发,每个寄存器的内部电路 仍在工作(虽然输出不改变值),它不减小功耗因此,设计人员应该在绝大 部分情况下使用下面归纳的同步方案要降低更多的功耗,见推荐的时钟门控 方案同步时钟使能要以同步方式关闭时钟域,褂猛?步时钟使能在绝大部分 FPGA 中,器件寄 存器上有时钟使能信号。
该方案不会降低功耗,因为时钟树和内部电路一直在 触发中,但是具有门控时钟同样的功能在每个寄存器的输入数据前插入一个 复用器,以载入新的数据或复制寄存器的输出(见图 4)推荐采用的时钟门控方式只有当目标应用需要大量地降低功耗才有必要使用门控时钟如果必须使用门 控时钟,可以使用图 5 所示的安全的时钟门控技术来实现 设计人员可以在时钟树的根部、叶或二者之间的某个位置门控一个时钟信号 因为时钟树在切换时会消耗能量,那么在根部生成时钟就可以关闭整个时钟树 而不是沿着时钟树在叶子上门控时钟 正如图 5 所示,一个寄存器生成使能信号确保其没有毛刺和窄脉冲设计在时 钟的无效沿上钟控着生成使能信号进行门控的寄存器(在图 5 中,当门控的时 钟是上升沿有效的情况下,门控寄存器要使用下降沿)这种实现方案,一次 开关时钟门只有一个输入会改变,这样就不会在输出上产生毛刺或窄脉冲使 用 AND 门门控上升沿有效的时钟对于下降沿有效的时钟,则使用 OR 门来 生成时钟,由正沿寄存器来存储使能信号图 4 同步时钟使能(略) 图 5 推荐采用的时钟门控技术(略)在采用这种方案的时候,应该注意时钟的占空比,因为只有准时的操作才能生 成有效的使能信号。
如果生成使能信号的逻辑特别复杂,或者时钟的占空比极 其不平衡,那么这种方案也可能会产生一些问题然而,占空比和其它门控时 钟方式相比,是一个微不足道的问题。
