【问题标题】:How to constrain dimension in uncosntrained array when 1st is already constrained?当第一个已经受到约束时,如何约束无约束数组中的维度?
【发布时间】:2020-10-13 22:38:41
【问题描述】:

使用 VHDL 2008,您可以定义不受约束的类型/子类型。例如:

slv_array_t is array(natural range <>) of std_logic_vector;

然后您可以创建子类型,其中一个或多个维度保持打开状态以供以后限制。

subtype slv32_array_t is slv_array_t(open)(31 downto 0);
signal some_object  : slv32_array_t(7 downto 0);

open 维度是第一个维度时,这很好。但是,如果不受约束的维度不是第一个维度,我该如何约束子类型?下面给出维度已经被约束的错误inn ActiveHDL。

Index constraint cannot be applied to constrained type.

subtype slv_array8_t is slv_array_t(7 downto 0)(open);  -- legal
signal some_object : slv_array8_t(31 downto 0);

以下也有同样的错误:

signal some_object : slv_array8_t(7 downto 0)(31 downto 0);

那么,实际上有没有一种方法可以使用 VHDL 2008 将这种类型限制在对象中?它甚至进入了 VHDL 2019 吗?

【问题讨论】:

  • signal some_object: slv_array8_t(open)(31 downto 0); 5.3.2 数组类型,5.3.2.1 通用,变量声明末尾有一个例子。语义在 5.3.2.2 索引约束和离散范围中描述。

标签: vhdl


【解决方案1】:

您只需要使用(open) 来“跳过”受约束的维度,就像使用subtype 一样:

signal some_object : slv_array8_t(open)(31 downto 0);

library IEEE;
use IEEE.std_logic_1164.all;

entity E is
end entity E;

architecture A of E is
  type slv_array_t is array(natural range <>) of std_logic_vector;
  subtype slv32_array_t is slv_array_t(open)(31 downto 0);
  signal some_object  : slv32_array_t(7 downto 0);
  subtype slv_array8_t is slv_array_t(7 downto 0)(open);  -- legal
  signal some_object2 : slv_array8_t(open)(31 downto 0);
begin
end architecture A;

https://www.edaplayground.com/x/reNU

【讨论】:

  • 我调用了实体tricky,架构no_mcve并使用了ghdl。
  • 在 6.3 子类型声明“子类型指示定义类型标记的基类型的子类型”中可以找到“跳过”的授权机制。
  • 我为什么不试试这个? @user1155120 我什至打开了 LRM 的那个页面:facepalm
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 2023-02-01
  • 1970-01-01
相关资源
最近更新 更多