通过 SystemVerilog 中的端口映射将总线传递到另一个模块

Passing bus to another module via port mapping in SystemVerilog

我在 SV 模块中有以下代码,我在其中实例化另一个 SV 模块并将 5 位总线传递给它以检查 X 和 Z,代码如下:

  input  [4:0] analdo_trim; 
  cds_XZ_checker XZ_check_analdo_trim (.in(analdo_trim),.in_ok(analdo_trim_ok));

这是 cds_XZ_checker 的模块定义:

module cds_XZ_checker(in,in_ok);
input in;
output bit in_ok;

always_comb  begin              //Asynchronous assertion check block
      asynch_XZ_check: assert (!($isunknown(in))) in_ok=1'b1; 
        else begin 
            $warning ("WARNING (%M) digital signal in=%b is undefined at time %t",in,$time); 
            in_ok=1'b0;
        end//else
end

endmodule

问题是当我通过 in 端口读取上述模块中的 5 位 analdo_trim 时,它只读取 analdo_trim 的 LSB。知道为什么没有使用上述语法传递整个 5 位数组吗?

您将模块输入声明为 1 位宽。您需要将其声明为 5 位宽。变化:

input in;

至:

input [4:0] in; 

现在将通过 5 位总线检查 X 和 Z。你的是声明中的一个小错误

module cds_XZ_checker(in,in_ok);
input [4:0] in; 
output bit in_ok;

always_comb  begin              //Asynchronous assertion check block
      asynch_XZ_check: assert (!($isunknown(in))) in_ok=1'b1; 
        else begin 
            $warning ("WARNING (%M) digital signal in=%b is undefined at time %t",in,$time); 
            in_ok=1'b0;
        end//else
end

endmodule