我在VHDL中有一个信号声明如下:
signal Temp_Key : std_logic_vector(79 downto 0);
这个 Temp_Key 通过 for 循环31次并被修改 . 我想将31个不同的 Temp_Keys 存储在一个数组中 .
Temp_Key
for
Temp_Keys
是否可以在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;
然后使用它
signal MY_SIGNAL : YOUR_ARRAY_TYPE; ... MY_SIGNAL(0) <= data; ... MY_SIGNAL(1) <= data;
有关参考,请参见here .
与上面的帖子一样,您可以创建任何多维数组数据类型 . 您需要注意的另一件事是此代码是否是可综合的(即针对FPGA或ASIC,还是纯粹用于模拟) . 您可以使用FSM /计数器或生成块从0到31进行迭代,具体取决于您的时间安排的重要程度以及您愿意使用的区域 . 上面帖子中显示的多维数组实例肯定是可合成的 .
在VHDL中有两种选择
signal X is array (range) of ArrayType;
signal Y is array (range1, range2) of Type;
我认为工具可以更好地支持选项1 . 我还发现这两个选项和函数式编程之间的相似性告诉我们,我们总是可以将多元函数(x,y)变成单个参数的链f(x) - > f(y) . 后者看起来像数组的数组 .
3 回答
是的,首先你需要声明一个类型:
注意,您也可以声明类型为未定义的长度 - 因此您可以指定声明信号时它具有多少80位字 . 使用VHDL 2008,您还可以保留未指定的slv的大小,也可以在创建信号时声明 . 例如:
然后使用它
有关参考,请参见here .
与上面的帖子一样,您可以创建任何多维数组数据类型 . 您需要注意的另一件事是此代码是否是可综合的(即针对FPGA或ASIC,还是纯粹用于模拟) . 您可以使用FSM /计数器或生成块从0到31进行迭代,具体取决于您的时间安排的重要程度以及您愿意使用的区域 . 上面帖子中显示的多维数组实例肯定是可合成的 .
在VHDL中有两种选择
选项1
选项2
我认为工具可以更好地支持选项1 . 我还发现这两个选项和函数式编程之间的相似性告诉我们,我们总是可以将多元函数(x,y)变成单个参数的链f(x) - > f(y) . 后者看起来像数组的数组 .