verilog和/或系统verilog中的非阻塞语句和fork连接

verilog和/或系统verilog中的非阻塞语句和fork连接,verilog,system-verilog,Verilog,System Verilog,谁能告诉我程序块中的非阻塞开始-结束和fork连接之间的区别。我的一个朋友告诉我,后者是不可合成的,只用于测试台。这是真的吗?还有其他区别吗?在Verilog/SystemVerilog中没有非阻塞开始/结束结构。begin/end块以串行顺序执行每条语句,在前一条语句完成之前阻止下一条语句的执行。在最后一个语句完成后到达块的末尾。fork/join同时执行每个语句,并且在所有语句完成后到达块的连接 如果每种类型的块中只有一条语句,那么这两条语句之间没有行为上的差异,但是基本的合成工具将不接受f

谁能告诉我程序块中的非阻塞开始-结束和fork连接之间的区别。我的一个朋友告诉我,后者是不可合成的,只用于测试台。这是真的吗?还有其他区别吗?

在Verilog/SystemVerilog中没有非阻塞开始/结束结构。begin/end块以串行顺序执行每条语句,在前一条语句完成之前阻止下一条语句的执行。在最后一个语句完成后到达块的末尾。fork/join同时执行每个语句,并且在所有语句完成后到达块的连接


如果每种类型的块中只有一条语句,那么这两条语句之间没有行为上的差异,但是基本的合成工具将不接受fork/join构造。还有许多其他使用fork/join的方法,您可以编写这些方法,它们在行为上等同于只在多个始终块中使用begin/end编写相同的内容,但不被认为是可合成的。这是因为合成工具依赖于识别编码样式的模板,并且支持多种编码样式的资源有限

在Verilog/SystemVerilog中没有非阻塞开始/结束结构。begin/end块以串行顺序执行每条语句,在前一条语句完成之前阻止下一条语句的执行。在最后一个语句完成后到达块的末尾。fork/join同时执行每个语句,并且在所有语句完成后到达块的连接


如果每种类型的块中只有一条语句,那么这两条语句之间没有行为上的差异,但是基本的合成工具将不接受fork/join构造。还有许多其他使用fork/join的方法,您可以编写这些方法,它们在行为上等同于只在多个始终块中使用begin/end编写相同的内容,但不被认为是可合成的。这是因为合成工具依赖于识别编码样式的模板,并且支持多种编码样式的资源有限

是的,你的朋友说的是实话。Fork连接块不可合成,而begin-end块可合成

这两个街区之间也有区别。让我们编写两段代码

initial
begin
    begin 
        A <= 0;
        A <= #5 1;
        A <= #10 2;
    end
    $display($time);
end
在第一个代码块中,开始-结束块在时间0执行并完成,显示功能将显示0。但是,A将在时间5和15改变

在第二个代码块中,fork-join块在时间10完成,而display函数这次将显示10


有相似之处,但由于阻塞和非阻塞作业的性质,它们并不等同。

是的,你的朋友说的是实话。Fork连接块不可合成,而begin-end块可合成

这两个街区之间也有区别。让我们编写两段代码

initial
begin
    begin 
        A <= 0;
        A <= #5 1;
        A <= #10 2;
    end
    $display($time);
end
在第一个代码块中,开始-结束块在时间0执行并完成,显示功能将显示0。但是,A将在时间5和15改变

在第二个代码块中,fork-join块在时间10完成,而display函数这次将显示10


虽然有相似之处,但由于阻塞和非阻塞分配的性质,它们并不等同。

你能举例说明你想用fork-join表示什么样的硬件吗?这将有助于指导答案。在交叉发布方面提前做好准备是一个很好的做法。你能举一个例子说明你想用fork-join表示什么样的硬件吗?这将有助于引导答案。在交叉发帖时,提前做好准备是很好的做法。但是当我写always@(posedge clk)开始一个Now时,你把非阻塞赋值(NBA)语句的动作和ben/end块的执行方式搞混了。NBA语句仍按顺序执行,即按顺序计算右侧(RHS)表达式,但对左侧(LHS)的更新将在稍后安排。请注意,模拟语义(代码如何执行)和合成语义(硬件如何生成)之间存在差异。但是,当我编写always@(posedge clk)开始一个Now时,您会混淆非阻塞分配(NBA)语句的动作和ben/end块的执行方式。NBA语句仍按顺序执行,即按顺序计算右侧(RHS)表达式,但对左侧(LHS)的更新将在稍后安排。请注意,模拟语义(代码如何执行)和合成语义(硬件如何生成)之间存在差异。