VHDL中数组的硬件表示

ahm*_*ury 5 vhdl

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

小智 3

简短的回答是否定的 - 数组类型不映射到寄存器。

长答案:

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

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

组件 reg8x16
  港口(
   时钟:在 std_logic 中;
   重置:在 std_logic 中;
   启用:在 std_logic 中;
   rout : 输出 r_array(0 到 7)
   );
 终端组件;

rout是寄存器组中已注册输出的数组。rout(0)因此,您可以使用类型为 的存储体取消引用寄存器 0 的输出std_logic_vector(15 downto 0)

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

type r_array is array (integer range <>) of std_logic_vector(15 downto 0);

(integer range <>)语句是数组索引范围的一种占位符 - 稍后当使用数组类型时(例如上面的组件声明中),它将被填充。

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