我一直使用VHDL并且只使用Verilog很短的时间,我必须在Verilog中为一个非常大的数组创建一个逻辑,并根据输入的条件将其分配给1或0。
这是我的VHDL代码
if (data_track == '1' ) then
my_array(MAX-1:MIN) <= (others=> '1');
else
my_array(MAX-1:MIN) <= (others=> '0');
end if;
MAX和MIN是块的参数,在合成期间根据我们访问的系统类型设置。
有没有办法轻松地在Verilog中执行此操作?
答案 0 :(得分:2)
参数与花括号的混合将有助于解析(内部花括号将充当复制运算符)
代码例如:
parameter MAX = 16;
assign high_val = 1'b1;
assign low_val = 1'b0;
if ( data_track ==1'b1)
my_array[MAX-1:MIN] <= {MAX{high_val}};
else
my_array[MAX-1:MIN] <= {MAX{low_val}};
在上面的代码中,带有花括号的if语句将MSB传递给带有1个值的LSB,导致我们的情况下16的所有1,然后结果将是16&#39; b1111111111111111,反之亦然为其他条件
答案 1 :(得分:2)
假设data_track
是一位宽,那么可以通过复制data_track
输入并将其分配给my_array
将其折叠为一行:
assign my_array[MAX-1:MIN] = {(MAX-MIN){data_track}};