如何将输入信号更改为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
我有一个输入逻辑序列,我想将它转换成一个参数,以便将它添加到我的程序的其他地方。
例如,
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