Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在VHDL中,是否可以创建std_逻辑_向量数组而不使用类型?_Vhdl - Fatal编程技术网

在VHDL中,是否可以创建std_逻辑_向量数组而不使用类型?

在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

在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_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是一种一维数组类型,具有一个索引,元素类型也是一维数组类型。无法对多维数组值进行切片。索引以线性方式选择元素,而索引以几何方式选择元素。