Verilog中单if语句、多if语句和case语句与优先级的关系 |
您所在的位置:网站首页 › if语句加括号和不加括号的区别在哪儿 › Verilog中单if语句、多if语句和case语句与优先级的关系 |
1、 if-else if-else 单if语句
单if语句(if-elseif-…elseif-else)综合出来的电路有优先级,从电路的角度来说,单if语句综合出来的电路类似于数据选择器,else路选通的条件是前面所有的if条件都不满足。 always@(*) begin z = 0; if(sel1) z = a; else if(sel2) z = b; else if(sel3) z = c; end应该生成的电路为: 单if语句综合出来的电路也是有优先级的,越靠后的if对电路的输出起决定性作用最大。若if条件不互斥,即使前面的if条件满足,若最后一级if满足,也将选择最后一级if的内容输出。 always@(*) begin z = 0; if(sel1) z = a; if(sel2) z = b; if(sel3) z = c; end在quartus中生成的电路为: case语句一般生成无优先级的判断结构,与if语句的区别是,它的判断条件一般互斥,多用于译码电路。 在组合电路中,如果所有分支没有列出,且不使用default,则会生成latch。 当case语句的条件分支不互斥,即: always@(sel) begin {int2, int1, int0} = 3'b0; casez(sel) //synopsys parallel_case 3'b1??: int2 = 1'b1; 3'b?1?: int1 = 1'b1; 3'b??1: int0 = 1'b1; endcase end这时会生成有优先级的判断结构,加上synopsis paralle_case原语后,则是告诉综合器,所有的条件互斥,为并行结构无优先级。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |