gpt4 book ai didi

arrays - 在vhdl中获取数组子类型的范围属性

转载 作者:行者123 更新时间:2023-12-02 11:57:25 24 4
gpt4 key购买 nike

给定数组类型:

type enc is array (integer 0 to 1) of std_logic_vector(3 downto 0);

是否可以访问数组子类型(std_logic_vector)的属性?

我本以为这样的事情是可能的:enc(0)'range -> 3 downto 0(取元素号0的范围)这是我的模拟器中的一个错误。

查看 LRM(14.1),数组元素有一个范围属性:

A'RANGE [(N)]

该属性似乎只能返回数组维度的范围,即“0 到 10”,而不能返回子类型。

一种解决方案可能是创建该类型的常量:

constant tmp : enc :=(
0 => "0000",
1 => "0001"
)

并取该常数的范围:

tmp(0)'range

这是可行的,但是我觉得单独使用该类型应该是可能的,因为它受到完全约束。

最佳答案

您的问题是您尝试在类型上使用属性。但是,范围仅为数组定义(因此原型(prototype)中的 A)。

这意味着,即使您的数组类型受到限制,您也需要使用实际的数组。

-- Declarations

-- Constrained Array Type
type enc is array (integer 0 to 1) of std_logic_vector(3 downto 0);
-- Unconstrained Array Type (pre-VHDL 2008)
type enc_alt is array (integer range <>) of std_logic_vector(3 downto 0);
-- Unconstrained Array Type with Unconstrained Element Type (VHDL 2008)
type enc2008 is array (integer range <>) of std_logic_vector;
subtype enc2008_sub is enc2008(open)(3 downto 0);

signal test0 : enc;
signal test1 : enc_alt(0 to 1);
signal test2 : enc2008(0 to 1)(3 downto 0);

-- Array Attributes (VHDL 2002 and prior)
test0(0)'range -- get element 0 and check its range
test1(0)'range
test2(0)'range

-- Array Attributes (VHDL 2008 only)
test0'element'range -- get element type and check its range
test1'element'range
test2'element'range

-- Type Attributes (VHDL 2008 only)
enc'element'range
enc_alt'element'range
enc2008'element'range
enc2008_sub'element'range

您必须检查模拟器和综合工具是否支持 VHDL 2008 属性“元素和无约束数组元素类型”。

我相信,Xilinx ISE 不支持 VHDL-2008,而且 Modelsim 最近才在 10.1a 中启动。据说 Alterra 在他们的 Quartus Suite 中对 VHDL-2008 有很好的支持,尽管我最近没有使用过它。

关于arrays - 在vhdl中获取数组子类型的范围属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21907520/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com