【verilog】单/多if语句优先级
有点迷糊单if和多if语句综合出来的优先级情况,记录一下,参考:https://zhuanlan.zhihu.com/p/560453318
单if语句
单if语句(if-else if-else)通常会被逻辑综合成多个二选一的选择器组合而成,其具有隐含的优先级,优先级由上往下,只能在initial和always语句中使用。
故对于if-else语句结构都是通过二选一的数据选择器搭建而来
always@(a or b or c or d or sel0 or sel1 or sel2 or sel3)beginif(sel3)z = d;else if(sel2)z = c;else if(sel1)z = b;else if(sel0)z = a;elsez = 0;end
以上述代码为例,其描述的电路为
其中d具由最高优先级依次递减,a的优先级最低。
vivado综合出来的电路如下图所示
多if语句
多if语句(if...if...if)与单if语句类似,具有优先级,且消耗二选一组合逻辑器件。与单if语句不同的是其最高优先级给到最迟到达的信号。以下述代码为例
always@(a or b or c or d or sel0 or sel1 or sel2 or sel3)beginz = 0; //当所有条件不符时z=0;不加则会生成latchif(sel0)z = a;if(sel1)z = b;if(sel2)z = c;if(sel3)z = d;end
alwsys
语句中描述组合逻辑电路使用阻塞赋值,其内部语句顺序执行,故其最高优先级是sel3
决定的d
,最低优先级是sel0
决定的a
。故而可以画出此段代码描述的电路,因调整了优先级顺序,故于上文中单if语句的电路一致。
与vivado综合电路一致