【问题标题】:Hardware representation for arrays in VHDLVHDL 中数组的硬件表示
【发布时间】:2010-03-10 16:08:51
【问题描述】:

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

【问题讨论】:

    标签: vhdl


    【解决方案1】:

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

    长答案:

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

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

    组件 reg8x16 港口( 时钟:在 std_logic 中; 重置:在 std_logic 中; 启用:在 std_logic 中; 溃败:输出 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 位寄存器,其输出类型为 std_logic_vector(15 downto 0);(您可以在线查找如何执行此操作……这是非常基本的 VHDL)。然后你只需实例化其中的 8 个寄存器,并将它们放入名为 reg8x16 的组件中。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        任何具有有效范围的数组都会映射到生成的网表中的连线。这是相当明显的——硬件只包含门和电线。像 a(3 downto 0)(1 to 0) 这样的东西会变成 4x2 或 8 位大小的线。您现在将单个访问(如 a(3)(1))映射到此一维数组中的索引。所以a(3)(1) 基本上是a(7)。

        【讨论】:

          【解决方案4】:

          查看this页面,同时查看registervhdl

          基本上它是一个具有所需长度的 std_logic_vector 数组

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-04-26
            • 2023-03-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-07-22
            • 1970-01-01
            相关资源
            最近更新 更多