在用HDL设计时,理解综合工具如何解释不同的HDL代码风格和预期结果是非常重要的。设计人员的代码风格会影响逻辑的利用率和时限性能。本文讨论一些基本的设计技术,确保FPGA最佳的综合结果,同时避免一些不可靠和不稳定的因素。设计人员应当认真设计组合逻辑以避免潜在的问题,同时应注意时钟方案保证同步功能。
组合逻辑结构
组合环路
组合环路是数字逻辑设计中不稳定性和不可靠性最常见的原因之一。在同步设计中,所有的反馈环路都应该包括寄存器。组合环路直接建立没有寄存器的反馈,违反了同步设计的原则。例如,当算术表达式的左边也出现在右边,就会发生组合循环。当把一个寄存器输出通过组合逻辑反馈给同一个寄存器的异步管脚时,也会产生组合环路,见图1。
图1 通过异步控制管理的组合循环(略)
组合环路是高风险的设计结构,这是因为:
● 组合环路的功能通常依靠环路逻辑的相对传播延迟。正如所讨论的,传播延迟可能改变,那么环路行为也可能发生改变。
● 在一些设计工具中,组合环路可能造成无尽的计算循环。大部分的工具会打断组合环路进行处理。设计流程中所用的不同工具会以不同的方式打断同样的环路,这样可能和设计初衷不一致。
延迟链
当两个以上连续的单输入单扇出节点引起延迟时,就会产生延迟链。通常, 把反相器连在一起增加延迟。延迟链通常是由异步设计引入的,有时是用来解决其它组合逻辑引起的竞争冒险。FPGA延迟会随每次布局布线的变化而改变。延迟链可能引起不同的设计问题,包括增加了设计对工作条件的敏感性,减小了设计的可靠性,不利于移植到其它器件结构上。在设计中要避免使用延迟链,而应采用同步设计。
脉冲发生器和多频振荡器
设计者有时用延迟链来产生单个脉冲(脉冲发生器)或一系列脉冲(多频振荡器)。脉冲生成有两种常见的方式,这些技术完全依靠异步逻辑,应该避免:
组合逻辑结构
组合环路
组合环路是数字逻辑设计中不稳定性和不可靠性最常见的原因之一。在同步设计中,所有的反馈环路都应该包括寄存器。组合环路直接建立没有寄存器的反馈,违反了同步设计的原则。例如,当算术表达式的左边也出现在右边,就会发生组合循环。当把一个寄存器输出通过组合逻辑反馈给同一个寄存器的异步管脚时,也会产生组合环路,见图1。
图1 通过异步控制管理的组合循环(略)
组合环路是高风险的设计结构,这是因为:
● 组合环路的功能通常依靠环路逻辑的相对传播延迟。正如所讨论的,传播延迟可能改变,那么环路行为也可能发生改变。
● 在一些设计工具中,组合环路可能造成无尽的计算循环。大部分的工具会打断组合环路进行处理。设计流程中所用的不同工具会以不同的方式打断同样的环路,这样可能和设计初衷不一致。
延迟链
当两个以上连续的单输入单扇出节点引起延迟时,就会产生延迟链。通常, 把反相器连在一起增加延迟。延迟链通常是由异步设计引入的,有时是用来解决其它组合逻辑引起的竞争冒险。FPGA延迟会随每次布局布线的变化而改变。延迟链可能引起不同的设计问题,包括增加了设计对工作条件的敏感性,减小了设计的可靠性,不利于移植到其它器件结构上。在设计中要避免使用延迟链,而应采用同步设计。
脉冲发生器和多频振荡器
设计者有时用延迟链来产生单个脉冲(脉冲发生器)或一系列脉冲(多频振荡器)。脉冲生成有两种常见的方式,这些技术完全依靠异步逻辑,应该避免: