verilog 中if语句和case语句综合成的电路

先做一句话总结,if语句和组合逻辑下的case语句,他们的条件是有优先级的,从上到下优先级递减,每多一个条件就会多消耗一个二选一多路器,很浪费资源;

优先级:if else 结构if的优先级最高;多if 结构最后一个if优先级最高如:

always@(posedge clk)
if(flag==2'b00)
	begin
		outb=0;
	end
else
	begin
		if(d==1)
			begin
				outb=b;
			end
		if(e==1)
			begin
				outb=c;
			end
		if(g)
			begin
				outb=a;
			end
	end

verilog 中if语句和case语句综合成的电路_第1张图片

 

而对于时序语句中的case,会被综合成n选一多路器,条件没有优先级,占用的资源更少。

always_comb
    if(sel=2'b11)
        d=a;
    else if(sel=2'b10)
        d=b;
    else
       d=c;
    endcase  



always_comb
    case(sel)
        2'b11:d=a;
        2'b10:d=b;
        default:d=c;
    endcase  

上面的组合逻辑代码综合的电路如下图:

verilog 中if语句和case语句综合成的电路_第2张图片

always_ff
    case(sel)
        2'b11:d=a;
        2'b10:d=b;
        default:d=c;
    endcase

上面的代码综合的电路如下:

verilog 中if语句和case语句综合成的电路_第3张图片

很明显时序case占用的逻辑资源更少。

你可能感兴趣的:(verilog随记,verilog,面试)