本小节我们来理解一下阻塞赋值与非阻塞赋值。那么阻塞赋值与非阻塞赋值的相关概念解析,在 Verilog 基础语法当中我们已经说过了,这儿为什么要再讲解一遍呢?是因为阻塞赋值与非阻塞赋值的概念,一直是初学者比较头疼的一个问题。那么经过上次的了解,有的朋友可能还没有理解阻塞赋值与非阻塞赋值的概念,那么有的朋友可能理解了,但是他们不知道应该怎么使用,也就是说不知道什么时候使用阻塞赋值,什么时候使用非阻塞赋值。
在本小节当中,我们除了对概念进行深入的解析之外,还会结合我们的实验工程,通过仿真波形,进一步加深大家对阻塞赋值和非阻塞赋值的理解。
本小节主要内容分为两个部分:一部分就是理论学习,就是阻塞赋值与非阻塞赋值的概念解析;然后就是实战演练,就是结合我们的实验工程,深入理解阻塞赋值与非阻塞赋值。
首先是理论学习
1 理论学习
1.1 阻塞赋值
先来看一下阻塞赋值。
在开始学习阻塞赋值的概念之前,我们先编写一段 RTL 代码
a = 1;
b = 2;
c = 3;
begin
a = b + 1;
b = a + 2;
c = a - 1;
end
接下来我们就结合这段 RTL 代码,进行阻塞赋值的概念解析。
阻塞赋值的赋值号使用等号 = 来表示,对应的电路结构往往与触发沿没有关系,只与输入电平的变化有关系,它的操作认为只有一个步骤的操作就是:计算赋值号右边的语句,更新赋值号左边的语句。什么意思呢?就像 a = b + 1; 这条语句计算 b+1 然后更新 a 的值;b = a + 2; 这条语句就是计算 a+2 更新 b 的值;此时不允许来自任何其他 Verilog 语句的干扰,直到现行的赋值完成,才允许下一条赋值语句的执行。这句话怎么理解呢?比如说 a = b+1; 这条语句在执行赋值的过程中,其他语句是不能执行的,如果说要执行 b = a+2; 必须等到 a = b+1; 执行完成之后才能执行 b = a+2; 这条语句。
那么串行块中就是 begin-end 中,我们的 begin-end 中,各条阻塞赋值语句将以它们在顺序块中的排列顺序依次执行,也就是说 begin-end 当中的语句是顺序执行的。a = b+1; 这条语句执行完成之后才能执行 b = a+2; 才能执行 c = a-1;。如果说 c = a-1; 排列在 a = b+1; 之后,也就是说 b = a + 2; 和 c = a - 1; 它俩的位置调换一下,那么这三条语句怎么执行呢?就是 a = b+1; 然后是 c = a-1; 然后是 b = a+2;,它们执行的顺序是依照排列顺序而来的,而且每条语句执行完成之后才能执行下一条语句。
那么这三条语句执行完阻塞赋值之后 a b c 它们的值分别是什么呢?我们来依次看一下。
那么首先是 a = b+1;,b+1 先进行运算,b 原来等于 2,b 加 1 之后等于 3,那么执行完 a = b+1; 这条语句之后 a 就等于 3 了;
接下来 b = a+2;,那么 a 现在已经等于 3 了,3 加 2 等于 5,那么 b 现在就等于 5;
最后是 c = a - 1;,a 已经是 3 了,a 减 1 等于 2,2 的值就给了 c,c 就等于 2。
这个串行块执行完成之后,三者的值就是这样了
阻塞赋值,一定要记住:每条语句执行完成之后,才能进行下一条语句的执行,而且在 begin-end 串行块当中,各条语句是顺序执行。
以上就是阻塞赋值的概念解析
1.2 非阻塞赋值
接下来看一下非阻塞赋值,同样我们先编写一段代码
a = 1;
b = 2;
c = 3;
begin
a <= b + 1;
b <=

本文详细解析了Verilog中的阻塞赋值与非阻塞赋值概念,通过理论学习和实战演练,结合实例代码和仿真波形,帮助读者掌握两者在赋值操作中的区别、使用场景和正确运用方法。
最低0.47元/天 解锁文章
3743

被折叠的 条评论
为什么被折叠?



