//源自微信公众号 “数字芯片实验室”
本文介绍了一些代码中可能存在的可综合 “陷阱”。
只有输入,没有输出的模块将会综合成什么?
仅有输入且无输出的模块将会被综合成没有逻辑的模块。
为什么在综合出的逻辑中看到锁存器?
有很多原因会导致在综合出的逻辑中存在锁存器。通常在综合工具的日志中都有详细的说明。
1、always语句块中的if-else子句没有最终的else子句,并且没有初始值。
2、case语句块中没有default子句,并且在进入case语句块中没有被赋初始默认值。
什么是“组合时序环(combinatorial timing loops)”?为什么要避免?
combinatorial timing loops是指一个门或者很长的组合逻辑输出被反馈作为其中一个门的输入。这些路径通常是由于大的组合逻辑块中一个信号驱动同一个组合逻辑块中的另一个信号。
这些组合反馈回路是不被需要的:
1、由于组合反馈回路中没有时钟来打断路径,所以组合逻辑环将无限振荡
,其占空比取决于组合路径上的延迟。例如,以下代码是组合逻辑环:
assign out1 = out1 & in1 ;
这将导致out1作为其中一个组合逻辑输入。
这些循环会导致可测试性的问题。
可以通过以下手段在早期发现组合逻辑环:
1、在使用HDL语言设计过程