Verilog | if语句和case语句

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

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

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

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

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

Verilog | if语句和case语句_第1张图片

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

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

时序逻辑代码综合的电路如下:

Verilog | if语句和case语句_第2张图片

似乎在AISC中综合后,两者其实是没有区别的,最后的综合结果会以逻辑门的形式实现。(关于这一点还希望有经验的大佬能够指教)

从可阅读性来看,case语句的阅读性更好,修改时可能也会更加方便。

你可能感兴趣的:(Verilog,fpga开发)