繁体   English   中英

VHDL-2008 转换阵列宽度

[英]VHDL-2008 Convert Array Width

假设我有以下内容:

  type slv1_array is array (natural range <>) of std_logic_vector(0 downto 0);
  type slv2_array is array (natural range <>) of std_logic_vector(1 downto 0);
  type slv3_array is array (natural range <>) of std_logic_vector(2 downto 0);
  type slv4_array is array (natural range <>) of std_logic_vector(3 downto 0);
  type slv5_array is array (natural range <>) of std_logic_vector(4 downto 0);
  type slv6_array is array (natural range <>) of std_logic_vector(5 downto 0);
  type slv7_array is array (natural range <>) of std_logic_vector(6 downto 0);
  type slv8_array is array (natural range <>) of std_logic_vector(7 downto 0);
  type slv9_array is array (natural range <>) of std_logic_vector(8 downto 0);
  ...

VHDL-2008 中是否有一种通用方法来指定任何这些类型之间的转换,而无需为每种可能的排列定义转换函数?

不,那里没有。 您创建的每个数组都是特定类型,因此长度都不匹配,因此“通用方法”不合适 - 例如,您如何将 4 位向量分配给 5 位向量?

但是 VHDL-2008 确实支持不受约束的 arrays。必须有这么多类型的具有不同长度元素的 arrays 是令人沮丧的。 所以,为什么不直接声明:

type slv_array_t is array(natural range <>) of std_logic_vector;  -- element unconstrained, allowed in 2008

那么当你声明一个 object 时,你可以约束两个维度:

signal slv8_8   : slv_array_t(0 to 7)(7 downto 0);
signal slv16_16 : slv_array_t(15 downto 0)(15 downto 0);

现在 slv8_8 和 slv16_16 具有相同的基类型,这在测试台中很有用,比如访问类型。

type slv_array_ptr_t is access slv_array_t;

variable v1 : slv_array_ptr_t;

...

v1 := new slv_array_t'(slv8_8);
v1 := new slv_array_t'(slv16_16);

在 1993 年这样做是不可能的,每个类型都需要访问类型,因此需要单独的变量对象来存储它们。 VHDL 2008 允许更容易的传输。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM