其他 => Verilog 中的“1”语句
Others => '1' statement in Verilog
我一生都在使用 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 中轻松做到这一点?
参数与花括号的混合将有助于解析(内部花括号将充当复制运算符)
代码如:
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 传播到 LSB,其值为 1,在我们的例子 16 中结果全为 1,则结果将为 16'b1111111111111111,反之亦然,否则条件
假设 data_track
是一位宽,那么可以通过复制 data_track
输入并将其分配给 my_array
:
来将其折叠成一行
assign my_array[MAX-1:MIN] = {(MAX-MIN){data_track}};
我一生都在使用 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 中轻松做到这一点?
参数与花括号的混合将有助于解析(内部花括号将充当复制运算符)
代码如:
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 传播到 LSB,其值为 1,在我们的例子 16 中结果全为 1,则结果将为 16'b1111111111111111,反之亦然,否则条件
假设 data_track
是一位宽,那么可以通过复制 data_track
输入并将其分配给 my_array
:
assign my_array[MAX-1:MIN] = {(MAX-MIN){data_track}};