如何在 Verilog 中输出一个常数值?
How can you output a constant value in Verilog?
我正在尝试输出一个 1280 位的数组,每个 10 位长,数字为 0->128。
我听说 localparam 可能是最好的选择,但这似乎是一个奇怪的要求,所以我想知道是否有经验的人可以帮助我。
谢谢
您可以在初始或重置语句中使用 for 循环:
reg [0:1279] big_vector;
integer i;
// here you need an initial
// or a reset section
for (i=0; i<128; i=i+1)
big_vector[ i*128 +: 10] = i;
如果您不这样做 touch/change big_vector
综合工具会将其转换为常量。
您可以创建一个函数,为局部参数或任何其他信号提供常量值。
wire [1279:0] signal;
assign signal = pattern(0);
function [1279:0] pattern(input arg); // Verilog requires at least one argument to a function
integer i;
begin
for (i=0;i<128;i=i+1)
pattern[i*10 +:10] = i;
end
endfunction
SystemVerilog:
wire [1279:0] signal;
assign signal = pattern();
function bit [1279:0] pattern();
for (int i=0;i<128;i++)
pattern[i*10 +:10] = i;
endfunction
我正在尝试输出一个 1280 位的数组,每个 10 位长,数字为 0->128。
我听说 localparam 可能是最好的选择,但这似乎是一个奇怪的要求,所以我想知道是否有经验的人可以帮助我。
谢谢
您可以在初始或重置语句中使用 for 循环:
reg [0:1279] big_vector;
integer i;
// here you need an initial
// or a reset section
for (i=0; i<128; i=i+1)
big_vector[ i*128 +: 10] = i;
如果您不这样做 touch/change big_vector
综合工具会将其转换为常量。
您可以创建一个函数,为局部参数或任何其他信号提供常量值。
wire [1279:0] signal;
assign signal = pattern(0);
function [1279:0] pattern(input arg); // Verilog requires at least one argument to a function
integer i;
begin
for (i=0;i<128;i=i+1)
pattern[i*10 +:10] = i;
end
endfunction
SystemVerilog:
wire [1279:0] signal;
assign signal = pattern();
function bit [1279:0] pattern();
for (int i=0;i<128;i++)
pattern[i*10 +:10] = i;
endfunction