在VHDL中,是否可以创建std_逻辑_向量数组而不使用类型?
在SystemVerilog中,我可以创建一个多维数组,如下所示:在VHDL中,是否可以创建std_逻辑_向量数组而不使用类型?,vhdl,Vhdl,在SystemVerilog中,我可以创建一个多维数组,如下所示: reg [31:0] mem[0:127]; 然而,在VHDL中,VHDL手册中所有在线创建类似多维数组的示例都表明,在创建数组之前,我必须先创建一个类型。例如: type mem_t is array(0 to 127) of std_logic_vector(31 downto 0); signal mem :mem_t; signal mem :array(0 to 127) of std_logic_vecto
reg [31:0] mem[0:127];
然而,在VHDL中,VHDL手册中所有在线创建类似多维数组的示例都表明,在创建数组之前,我必须先创建一个类型。例如:
type mem_t is array(0 to 127) of std_logic_vector(31 downto 0);
signal mem :mem_t;
signal mem :array(0 to 127) of std_logic_vector(31 downto 0);
--syntax error:GHDL: Type mark expected in a subtype indication
--syntax error:vsim: near "array": (vcom-1576) expecting STRING or IDENTIFIER or << or '('
是否可以像在verilog中一样,在VHDL中一步完成这一切,而不首先为数组创建类型?例如:
signal mem :array(0 to 127) of std_logic_vector(31 downto 0);
--syntax error:GHDL: Type mark expected in a subtype indication
--syntax error:vsim: near "array": (vcom-1576) expecting STRING or IDENTIFIER or << or '('
signal mem:std_逻辑_向量的数组(0到127)(31到0);
--语法错误:GHDL:子类型指示中应有类型标记
--语法错误:vsim:near“array”:(vcom-1576)需要字符串或标识符,或者No。它不是
可以用VHDL创建真正的多维数组,但仍然需要创建一种新类型。这就是VHDL的方式。所以,你仍然需要你的包裹
这是一个多维约束数组:
这是一个多维无约束数组:
在VHDL-2002中,要么两个维度都必须受约束,要么两个维度都必须不受约束。在VHDL-2008中,一个受约束,一个不受约束:
type mem_t_2008 is array (natural range <>, 31 downto 0) of std_logic;
type mem_t_2008是标准_逻辑的数组(自然范围,31到0);
不,不是
可以用VHDL创建真正的多维数组,但仍然需要创建一种新类型。这就是VHDL的方式。所以,你仍然需要你的包裹
这是一个多维约束数组:
这是一个多维无约束数组:
在VHDL-2002中,要么两个维度都必须受约束,要么两个维度都必须不受约束。在VHDL-2008中,一个受约束,一个不受约束:
type mem_t_2008 is array (natural range <>, 31 downto 0) of std_logic;
type mem_t_2008是标准_逻辑的数组(自然范围,31到0);
您创建的是一个数组中的一个数组-这通常是您想要的。@Matthew Taylor创建的是一个多维数组
使用VHDL-2008,组合元素可以不受约束,因此,您可以创建:
type std_logic_aoa is array (natural range <>) of std_logic_vector;
这里需要数组中的数组的原因是它允许您执行以下操作:
signal Data : std_logic_vector(31 downto 0) ;
. . .
Data <= mem(15) ;
信号数据:标准逻辑向量(31到0);
. . .
Data您创建的是一个数组中的一个数组-这通常是您想要的。@Matthew Taylor创建的是一个多维数组
使用VHDL-2008,组合元素可以不受约束,因此,您可以创建:
type std_logic_aoa is array (natural range <>) of std_logic_vector;
这里需要数组中的数组的原因是它允许您执行以下操作:
signal Data : std_logic_vector(31 downto 0) ;
. . .
Data <= mem(15) ;
信号数据:标准逻辑向量(31到0);
. . .
数据哦,好吧…我想SystemVerilog在动态创建匿名数组方面更好。。。我只需要习惯在vhdl中使用包…vhdl是强类型的,类型是声明的,vhdl中的每个声明都是唯一的。这需要直接或通过选择使类型声明可见。哦,好吧……我想SystemVerilog在动态创建匿名数组方面更好。。。我只需要习惯在vhdl中使用包…vhdl是强类型的,类型是声明的,vhdl中的每个声明都是唯一的。这要求类型声明可以直接显示,也可以通过选择显示。类型mem_t是一种一维数组类型,具有单个索引,元素类型也是一维数组类型。无法对多维数组值进行切片。索引以线性方式选择一个元素,而索引以几何方式选择一个元素。类型mem\t是一种一维数组类型,具有一个索引,元素类型也是一维数组类型。无法对多维数组值进行切片。索引以线性方式选择元素,而索引以几何方式选择元素。