组合逻辑环路(Combinational Loop)是指不经过任何时序逻辑(寄存器等),而直接将组合逻辑电路的输出信号反馈到其输入节点而形成的环路。
组合逻辑环路是FPGA设计中的大忌,任何情况下,都应避免,具体原因如下:
1、组合逻辑环路违反了同步设计原则,很容易产生振荡,毛刺和时序违规,从而使整个系统变得极不稳定。
2、组合逻辑环路实现的逻辑功能完全依赖于环路上的逻辑门延迟和布线延迟,如果这些延迟发生变化,原来的逻辑功能将会发生彻底的改变,而且改变后的功能很难预测,所以这种设计基本没有可移植性。
3、组合逻辑环路会使设计软件进入无尽的环路计算中,为了完成计算,一些EDA工具会将环路割断,而不同的EDA软件对环路割断处理的过程是不尽相同的,这种过程不但使电路的实现偏离了最初的设计意图,而且使电路的实现呈现不确定性。另外,还有一些EDA工具都会将组合逻辑环路定义为一种设计错误,如果设计中存在这种逻辑,编译过程会报错,强制用户进行修改。
产生组合逻辑环路的原因有两个,一个是将组合逻辑电路的输出端又通过组合逻辑反馈到输入端,另一个是将寄存器的输出端通过组合逻辑反馈到同一个寄存器的异步端(异步复位或异步置位)。代码1是VHDL引入组合逻辑环路的代码,代码2是Verilog-HDL引入组合逻辑环路的代码,在设计中应坚决避免出现这种编码。
代码1. VHDL中引入组合逻辑环路的代码
代码1. Verilog-HDL中引入组合逻辑环路的代码