Arrays VHDL中的多维信号数组

Arrays VHDL中的多维信号数组,arrays,vhdl,Arrays,Vhdl,我用VHDL声明了一个信号,如下所示: signal Temp_Key : std_logic_vector(79 downto 0); 此Temp_键通过循环31次,并对其进行修改。我想将所有31个不同的Temp_键存储在一个数组中 是否可以在VHDL中使用多维数组来存储80位信号 是,首先需要声明一个类型: type YOUR_ARRAY_TYPE is array (0 to 30) of std_logic_vector(79 downto 0); 注意,您还可以将该类型声明为未定义

我用VHDL声明了一个信号,如下所示:

signal Temp_Key : std_logic_vector(79 downto 0);
Temp_键
通过
循环31次,并对其进行修改。我想将所有31个不同的
Temp_键
存储在一个数组中


是否可以在VHDL中使用多维数组来存储80位信号

是,首先需要声明一个类型:

type YOUR_ARRAY_TYPE is array (0 to 30) of std_logic_vector(79 downto 0);
注意,您还可以将该类型声明为未定义长度的类型,以便在声明信号时指定该类型有多少80位字。使用VHDL 2008,您还可以不指定slv的大小,也可以在创建信号时声明。例如:

type slv_array is array (natural range <>) of std_logic_vector;
型slv_数组是std_逻辑_向量的数组(自然范围);
然后使用它

signal MY_SIGNAL : YOUR_ARRAY_TYPE;
...
MY_SIGNAL(0) <= data;
...
MY_SIGNAL(1) <= data;
signal MY_signal:YOUR_ARRAY_类型;
...

MY_SIGNAL(0)正如上面的帖子所说,您可以创建任何多维数组数据类型。
您需要注意的另一件事是,此代码是否可合成(即,针对FPGA或ASIC,还是纯粹用于模拟)。您可以使用FSM/计数器或generate块从0迭代到31,具体取决于计时的关键程度和您愿意使用的区域。上图所示的多维数组实例当然是可以合成的。

在VHDL中有两种选择

选择1 选择2
我认为选项1更好地得到工具的支持。我还发现这两个选项和函数编程之间的相似性,函数编程告诉我们,我们总是可以将一个多变量函数(x,y)变成一个单参数函数链,f(x)->f(y)。后者看起来像数组的数组。

因此,当使用选项2并将此信号传递给函数时,如何再次获得range1和range2?您的意思是在31个不同的临时键中存储80位信号会有问题吗?它与问题和我的答案有什么关系。迭代任意2D数组似乎并不容易。其实这是个好问题。比要求使用2d数组语法要好得多。这就是为什么你问我它而不是stackoverflow。不幸的是,上面的帖子没有包含多维数组类型。“阵列对象的特征是索引的数量(阵列的维数);…”,IEEE Std 1076-2008 5.3.2阵列类型,5.3.2.1。显示的数组类型只有一个索引。元素类型恰好是数组类型。
signal X is array (range) of ArrayType;
signal Y is array (range1, range2) of Type;