Vhdl 其他=>';1';Verilog中的语句

Vhdl 其他=>';1';Verilog中的语句,vhdl,verilog,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; 如果(

我一生都在使用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;
如果(数据轨道='1'),则
my_数组(MAX-1:MIN)'1';
其他的
my_数组(MAX-1:MIN)'0';
如果结束;
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}};
参数MAX=16;
分配高值=1'b1;
分配低值=1'b0;
如果(数据轨道==1'b1)

my_array[MAX-1:MIN]假设
数据_track
为一位宽,则可通过复制
数据_track
输入并将其分配给
my_array
将其折叠为一行:

assign my_array[MAX-1:MIN] = {(MAX-MIN){data_track}};

非常感谢,只做了一些小的修改就成功了。如果你不介意升级到系统verilog,那么你可以用
分配所有的,它不是VHDL。切片名称离散范围是一个范围属性或“简单表达式方向简单表达式”,其中方向是
。而
:“
是一个分隔符。我们可以看出my_数组是一种一维数组类型,其基类型由字符文字枚举组成。右侧表达式是聚合,其中所有元素值都是
'0'
'1'
。聚合的类型是从左侧派生的,在本例中,它被称为受约束的数组子类型。在这里使用切片名称可能是多余的。显示声明。VHDL中也没有
=
运算符。@BrianDrummond-并且if语句条件中的括号是多余的。尽管在编写伪代码而不是用于编译的VHDL时会出现一些小的语法问题,但他的问题是简单易懂的。这是一种罕见的情况,指出非关键语法问题是浪费时间,因为OP最终还是要用verilog编写,而不是VHDL。在VHDL
my_array(MAX-1 down to MIN)data_track中)