维持阻塞赋值和阻塞赋值的区别
阻塞赋值语句
阻塞赋值用符号“=”表示。阻塞赋值表示在当前的赋值完成前阻塞其他的赋值任务。即在赋值时,先计算“=”右边的值,此时赋值语句不允许任何别的赋值任务的干扰,直到现行的赋值完成时,才允许别的赋值语句的执行。也就是说,在同一个块语句中,
其后面的赋值语句是在前一句赋值语句结束后再开始赋值的。
如下面的程序:
initial
begin
a=0; //阻塞赋值语句S1
a=1; //阻塞赋值语句S2
end
其中包含了两条阻塞赋值语句S1和S2,我们假设initial 块是在仿真时刻0得到执行的。由于S1和S2都是阻塞赋值语 句,所以在执行S1时,S2被“阻塞”而不能得到执行;只有 在S1执行完毕,a被赋值为0之后,S2才开始执行。而S2的执行将使变量a重新被赋值为1。
非阻塞赋值语句
非阻塞赋值用符号“<=”表示。非阻塞赋值表示在当前的赋值未完成前不阻塞其他的赋值任务。即在赋值操作开始时计算“<=”右边的表达式,在赋值操作结束时更新“<=”左边的变量,并且在赋值操作的过程中,允许其他赋值 语句同时执行。也就是说,在同
一个块语句中,其后面的赋值语句是在前一句非阻塞赋值语句开始时,同时开始赋值的,并且是在块语句结束时,同时更新左边的变量后一起结束。
如下面的程序:
initial
begin
A<=1; //非阻塞赋值语句 S3
B<=1; //非阻塞赋值语句 S4
end
其中包含了两条非阻塞赋值语句S3和S4,我们假设initial 块是在仿真时刻0得到执行的。语句S3首先得到执行,但是对 被赋值对象A的赋值操作要等到当前时间步结束时(initial块 结束时)才执行,同时因为S3是一条非阻塞赋值语句,所以 S3不会阻塞S4的
执行,于是S4也随即开始执行,但对被赋值 变量B的赋值操作也要等到当前时间步结束时(initial块结束 时)才执行。所以,在当前时间步结束时(initial块结束时) 被赋值变量A和B同时被赋值为1。

浙公网安备 33010602011771号