14.10-其他阻塞和非阻塞混合使用的原则

其他阻塞和非阻塞混合使用的原则

      • 1,同时使用阻塞和非阻塞赋值
      • 2,对同一变量既阻塞赋值又非阻塞赋值,综合出错

原则5:不要在同一个always块中同时使用阻塞和非阻塞赋值。

1,同时使用阻塞和非阻塞赋值

Verilog语法并没有禁止将阻塞和非阻塞赋值自由地组合在一个always块里。虽然Verilog语法是允许这种写法,但不建议在可综合模块的编写中采用这种风格。

下面这种情况,严禁使用!

module	ba_nba2(q, a, b, clk, rst_n);
output		q;
input		a, b, rst_n;
input		clk;
reg			q;

always@(posedge clk or negedge rst_n)	begin:ff
	reg	tmp;
	if(!rst_n)
		q	<= 1'b0;
	else	begin
		tmp	=  a & b;
		q	<= tmp;
		end
end

endmodule

其,可以得到正确的仿真和综合结果,因为阻塞赋值和非阻塞赋值操作的不是同一个变量。虽然这种方法是可行的,但不建议使用。

2,对同一变量既阻塞赋值又非阻塞赋值,综合出错

module	ba_nba6(q, a, b, clk, rst_n);
output		q;
input		a, b, rst_n;
input		clk;
reg			q, tmp;

always@(posedge clk or negedge rst_n)
	if(!rst_n)
		q	= 1'b0;		//	阻塞赋值
	else	begin
		tmp	=  a & b;
		q	<= tmp;		//	非阻塞赋值
		end

endmodule

其,仿真时结果通常是正确的,但是综合时会出错,因为对同一变量既进行阻塞赋值,又进行了非阻塞赋值。
因此,必须将其改写为可综合模型。

你可能感兴趣的:(Verilog语法)