如何将输入信号更改为systemverilog中的参数?

How to change input signal to parameter in systemverilog?

我有一个输入逻辑序列,我想将它转换成一个参数,以便将它添加到我的程序的其他地方。

例如,

module myModule(input logic[7:0] SW, output logic[7:0] LEDR);

     parameter shift = SW;
     assign LEDR = SW[shift + 1: shift];

endmodule

我知道这不是正确的语法,我只是想了解主要思想。

参数根据定义是编译时常量。这意味着您不能根据随时间变化的表达式更改它们的值。

您可以做的是更改建模方式,使其不需要参数。例如,您可以将代码写成

module myModule(input logic[7:0] SW, output logic[7:0] LEDR);
     assign LEDR = SW[SW +: 2];
endmodule

您不能将变量转换为参数。该参数的值将在细化后锁定。变量在模拟之前不会有值。

Part-select(有时称为范围切片)应该可以满足您的需求。看 Indexing vectors and arrays with +: 获取更多信息。

具有 SW 切片本身确实有意义,因为结果值始终为 0。这是更好的示例:

module myModule(input [8:0] IN, input [2:0] SW, output [1:0] LEDR);
     assign LEDR = IN[SW +: 2];
endmodule