其他=> ' 1'在Verilog的声明

时间:2015-06-09 09:13:19

标签: vhdl 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中执行此操作?

2 个答案:

答案 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}};