Vhdl 错误:索引名称不是整数

Vhdl 错误:索引名称不是整数,vhdl,fpga,Vhdl,Fpga,我在综合我的项目时出错了。我在这行有一个错误: axi_rdata <= patternCount(axi_awaddr(ADDR_LSB+OPT_MEM_ADDR_BITS downto ADDR_LSB)); axi_rdata您已经声明了一种数组类型: type PatternCount_memory is array (31 to 0) of std_logic_vector(4 downto 0); signal patternCount : PatternCount_memo

我在综合我的项目时出错了。我在这行有一个错误:

axi_rdata <= patternCount(axi_awaddr(ADDR_LSB+OPT_MEM_ADDR_BITS downto ADDR_LSB));

axi_rdata您已经声明了一种数组类型:

type PatternCount_memory is array (31 to 0) of std_logic_vector(4 downto 0);
signal patternCount : PatternCount_memory;
您通常会访问此数组中的元素,如下所示:

a <= patternCount(3);
b <= patternCount(0);
那么,使用以下方法直接为数组编制索引是错误的:

a <= patternCount(bit_field);  -- Error, indexed name is not an integer

a您需要为此代码段中使用的对象添加声明。基本问题是,您试图通过取自
axi\u awaddr
的位字段对
patternCount
进行索引,这可能是某种数组。只能使用整数为数组编制索引。如果你澄清了问题中的对象类型,我可以回答。@谢谢你的回答,这是
patternCount
的类型:
type patternCount\u内存是std\u逻辑向量(4到0)的数组(31到0);信号模式计数:模式计数\u存储器@trandry\u jeff-你把索引位置和值混为一谈了。考虑使用枚举类型作为索引范围。参见IEEE标准1076-2008 5.2.2枚举类型、5.3.2.2索引约束和离散范围。您只能使用整数进行索引和数组不准确。@jeff
实体foo是结束实体;foo的架构fum是类型enum_index is(零、一、二、三);类型array_type是整数的数组(enum_index'左到enum_index'右);信号枚举数组:数组类型;开始枚举数组(一)非常感谢,它已经解决了,真的很有帮助
a <= patternCount(bit_field);  -- Error, indexed name is not an integer
a <= patternCount(to_integer(unsigned(bit_field)));  -- OK, we have converted our bitfield