阵列的VHDL硬件表示

阵列的VHDL硬件表示,vhdl,Vhdl,使用VHDL,我希望有一些寄存器,在每个寄存器中存储16位。 所以我发现VHDL有一个内置数组,我想用它在iy中的每个元素中存储16位,所以我想知道VHDL是否将这个数组映射到实际寄存器?简短的回答是否-数组类型没有映射到寄存器 答案很长: VHDL中的数组类型只是相同类型元素的索引集合。在您的例子中,您可能会使用数组作为寄存器库的输出 假设你有一组8个寄存器,每个寄存器都有16位。该组的输出将是一个16位向量的数组(大小为8)。此注册库的组件声明如下所示: component reg8x16

使用VHDL,我希望有一些寄存器,在每个寄存器中存储16位。
所以我发现VHDL有一个内置数组,我想用它在iy中的每个元素中存储16位,所以我想知道VHDL是否将这个数组映射到实际寄存器?

简短的回答是否-数组类型没有映射到寄存器

答案很长:

VHDL中的数组类型只是相同类型元素的索引集合。在您的例子中,您可能会使用数组作为寄存器库的输出

假设你有一组8个寄存器,每个寄存器都有16位。该组的输出将是一个16位向量的数组(大小为8)。此注册库的组件声明如下所示:

component reg8x16 port( clock: in std_logic; reset: in std_logic; enable: in std_logic; rout : out r_array(0 to 7) ); end component; 组件reg8x16 港口( 时钟:标准逻辑; 复位:在标准逻辑中; 启用:在std_逻辑中; 路由:输出r_阵列(0到7) ); 端部元件;
rout
是来自注册库的注册输出数组。因此,您可以使用
rout(0)
(类型为
std\u logic\u vector(15向下至0)
)从库中取消对寄存器0的输出的引用

另外,不要忘记在某个地方声明数组类型(通常在包文件中)。它看起来像:

类型r_数组是std_逻辑_向量(15到0)的数组(整数范围)

(整数范围)
语句是数组索引范围的一种占位符-稍后使用数组类型时将填充它(例如在上面的组件声明中)


我不确定这是否回答了你的问题。我不会详细介绍如何创建reg8x16组件。基本上,您只需创建一个16位寄存器,其输出类型为
std_logic_vector(15到0)(您可以在线查看如何执行此操作…这是非常基本的VHDL)。然后,您只需实例化其中的8个寄存器,并将它们放入名为
reg8x16

的组件中,数组就像任何其他变量或信号:如果您描述的行为意味着它必须记住从一个时钟滴答到另一个时钟滴答的状态,那么触发器(或内存块,如果条件正确)将由合成器推断。

任何具有有效范围的数组都将映射到生成的网络列表中的导线。这是相当明显的-硬件只包含门和电线。类似于(3到0)(1到0)的东西可以制作成4x2或8位大小的导线。现在,您可以将单个访问(如(3)(1)映射到此一维数组中的索引。所以a(3)(1)基本上是a(7)

检查页面,同时检查vhdl

基本上,它是一个具有所需长度的std_逻辑_向量数组