【发布时间】:2020-09-23 09:07:14
【问题描述】:
我们知道阻塞语句和非阻塞语句的区别在于:阻塞语句是顺序执行的(下一条语句的执行被阻塞,直到当前一条语句完成),用于组合电路中执行。
例子:
always@(*) begin
c = A & B;
D = C/A;
end
这里所有的语句都是按顺序执行的(阻塞语句)
而非阻塞语句并行执行(下一条语句的执行不被阻塞)并用于在顺序电路中执行。
示例:以移位寄存器为例
always@posedge(clk) begin
A<=B;
B<=C;
C<=D;
end
这里所有的语句都是并行执行的,因为它是非阻塞的,我们使用了posedge clk
现在,如果您看到begin end 和fork join 之间的区别,区别在于:在begin end 中,语句按照它们列出的顺序(即顺序)执行,而在fork join 中,语句被执行并行。
我的问题是,在上面的非阻塞语句示例中,我们使用了begin end,但是这些语句是并行执行的,而不是顺序执行的,但是如果您看到begin end和fork join之间的区别就知道了说begin end一个接一个地执行语句。
有人能解释清楚吗?
【问题讨论】:
-
了解可综合代码和不可综合代码的区别。如果您打算真正构建一些东西,请编写可综合的代码。
标签: verilog system-verilog fork-join vlsi