[FPGA 学习记录] 阻塞赋值与非阻塞赋值

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


本小节我们来理解一下阻塞赋值与非阻塞赋值。那么阻塞赋值与非阻塞赋值的相关概念解析,在 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 原来等于 2b1 之后等于 3,那么执行完 a = b+1; 这条语句之后 a 就等于 3 了;

接下来 b = a+2;,那么 a 现在已经等于 3 了,32 等于 5,那么 b 现在就等于 5

最后是 c = a - 1;a 已经是 3 了,a1 等于 22 的值就给了 cc 就等于 2

这个串行块执行完成之后,三者的值就是这样了

阻塞赋值,一定要记住:每条语句执行完成之后,才能进行下一条语句的执行,而且在 begin-end 串行块当中,各条语句是顺序执行。

以上就是阻塞赋值的概念解析

1.2 非阻塞赋值

接下来看一下非阻塞赋值,同样我们先编写一段代码

a = 1;
b = 2;
c = 3;

begin
    a <= b + 1;
    b <= 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值