在用verilog做设计时,经常会用到if-else语句,对于复杂逻辑采用该语句,经常嵌套很多if-else。if-else嵌套过深,会导致很多危害,其中之一就是两个D触发器之间的组合逻辑过多。导致时序的Tsu建立时间紧张。以下面的代码为例,我们看看过深的if-else,到底综合出了什么。
部分代码:
对于ModeSelect的条件判断,嵌套了4层if-else,我们看看综合出来了的东西。
综合RTL级:
分析:
ModeSelect的D触发器输出后,直接是3个比较器,分别和0、1、2进行比较,之后就是4个选择器,分别是TriggerSignal~0,TriggerSignal~1,TriggerSignal~2,TriggerSignal~3。if-else的第一个条件enable位于最后一个选择器TriggerSignal~3的上。ModeSelect==0的条件位于倒数第二个选择器TriggerSignal~2上。ModeSelect==1的条件位于倒数第三个选择器TriggerSignal~1上,ModeSelect==2的条件位于倒数第一个选择器TriggerSignal~0上。if嵌套越多,选择器级联越多。选择器的级联是组合逻辑,组合逻辑越多,输出传输所需要的时间就越多,留给时序建立的时间就越小,很容易造成时序不满足要求。
总结:
在时序代码的设计中,if-else的嵌套深度要求尽可能小。