verilog中的阻塞赋值和非阻塞赋值

教材中对于这个内容有一个举例,想请问一下,这个begin-end语句块执行所需要的时间单元是12个还是9个,有点纠结。
如下:
begin
y1 = #5 A^B;
y2 <= #3 A|B;
y3 <= #2 A&B;
y4 = #4 (~B);
end

该回答内容部分引用GPT,GPT_Pro更好的解决问题
begin-end语句块里面的每个赋值都会占用一个时间单元,所以这个begin-end语句块需要花费12个时间单元才能完成执行。
具体而言,第一个语句y1= #5A^B需要5个时间单元才能执行完,第二个语句y2<=#3AIB需要3个时间单元才能执行完,第三个语句y3<=#2A&B需要2个时间单元,最后一个语句y4= #4(-B)需要4个时间单元。加起来就是12个时间单元。
如果回答有帮助,望采纳。

该回答引用GPTᴼᴾᴱᴺᴬᴵ
在Verilog中,每个语句块(begin-end块)中的语句通常是按顺序执行的,因此执行时间取决于语句块中包含的所有语句所需的时间之和。

在您的例子中,假设A、B和y1到y4都是单比特信号,并且使用了一个时钟周期的非阻塞赋值(<=)和阻塞赋值(=)语句,那么每个语句的执行时间可以认为是一个时钟周期。因此,每个语句的执行时间为1个时钟周期。

因为begin-end块中包含4个语句,所以执行时间为4个时钟周期。如果假设每个时钟周期的时间单元为3,那么执行这个begin-end块所需的时间单元应该是12个(即4个时钟周期 x 每个时钟周期3个时间单元)。

总之,begin-end块执行所需要的时间单元应该是12个,而不是9个。