Verilog 阻塞赋值和非阻塞赋值

1. 阻塞赋值

使用一般使用的=进行赋值

always@(clk) begin
	b = a;
	c = b;
end
  • 在前面的a赋值给b的语句没有完成之前,后面的赋值语句不进行操作,就像被阻塞了一样,称为阻塞赋值
  • 以上代码会产生的电路结构:
    阻塞赋值
2. 非阻塞赋值

使用一般使用的<=进行赋值

always@(clk) begin
	b <= a;
	c <= b;
end
  • 非阻塞赋值是每条赋值语句的结果在always结尾才能看到,在整个always块结束时才完成一次赋值操作
  • 以上代码会产生的电路结构:
    非阻塞赋值
  • 根据非阻塞赋值的特点,c的值要落后b一个时钟周期,因此会多一个D触发器
  • 注意: always块中所有非阻塞赋值语句如果需要计算求得所赋的值,则用于计算的每个变量的值是进入always块时各个变量已经具有的值
发布了145 篇原创文章 · 获赞 21 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_43826242/article/details/103839201