VHDL中的多维信号数组

11

我有一个在VHDL中声明的信号,就像这样:

signal Temp_Key : std_logic_vector(79 downto 0);

这个Temp_Key会通过一个for循环被修改31次。我想将这31个不同的Temp_Key存储到一个数组中。

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

3个回答

28

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

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;

请参考此处


0

VHDL 有两个选项

选项1

signal X is array (range) of ArrayType;

选项2

signal Y is array (range1, range2) of Type;

我认为选项1得到了更好的工具支持。我还发现这两个选项与函数式编程之间存在相似性,它教导我们可以将一个多元函数(x,y)柯里化成一系列单参数函数f(x) -> f(y)。后者看起来像数组的数组


当使用选项2并将此信号传递给函数时,我如何再次获取range1和range2? - steffenmauch
你的意思是在31个不同的Temp_Keys中存储80位信号会有问题吗?这与问题和我的答案有什么关系呢?似乎很难迭代任意的2D数组。实际上这是一个很好的问题,比询问2D数组语法要好得多。这就是为什么你向我提问而不是去Stackoverflow的原因。 - Val

0
就像上面的帖子所说,您可以创建任何多维数组数据类型。 您需要注意的另一件事是,这段代码是否可综合化(即针对FPGA或ASIC,还是纯粹用于仿真)。您可以使用FSM /计数器或生成块从0迭代到31,具体取决于您的时间要求和愿意使用的面积。上面帖子中显示的多维数组实例肯定是可综合化的。

很遗憾,上面的帖子中没有包含多维数组类型。 "一个数组对象由索引数量(数组的维度)来描述; ...",IEEE Std 1076-2008 5.3.2 数组类型,5.3.2.1。所示的数组类型只有一个索引。元素类型恰好是一个数组类型。 - user1155120

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接