是否允许在系统 verilog 中的 always_comb 块内实例化模块?

Is it allowed to instantiate a module inside always_comb block in system verilog?

是否允许在 system verilog 中的 always_comb 块内实例化模块?

always_comb 
begin
   OR OR1 (.Y(A), .A(Z), 
end

首先,您的代码不完整。显然,一个双输入 或门需要三个连接。

在 verilog 中,当您实例化 一个模块时,这意味着您正在向电路板添加额外的硬件

必须在仿真开始(即编译时)之前添加此硬件。在这里,您不能 add/remove 每个时钟脉冲的硬件。

一旦实例化,模块将 executed/checked 用于 模拟的每个时间戳 ,直到结束。

因此,要执行任何模块,只需实例化它,为其提供所需的输入(并在必要时在子模块本身中添加 always 块)。

// Simply instantiate module
OR OR1 (.Y(A), .A(Z), .B(M));

无论哪种方式,您都可以将组合块添加到当前模块本身:

// Directly use ORing
always_comb begin
  A = Z | M;
end

更多关于实例化的信息可以从Verilog Module Instantiation, Instantiating Modules and Primitives, Structural Modelling链接获得。