Vhdl 其他=>';1';Verilog中的语句
我一生都在使用VHDL,只在很短的时间内使用了Verilog,我必须在Verilog中为一个非常大的数组创建一个逻辑,并根据输入的条件将其分配到1或0 这是我的VHDL代码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; 如果(
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。在VHDLmy_array(MAX-1 down to MIN)data_track中)代码>