我有以下声明:
signal count:STD_LOGIC_VECTOR (3 downto 0);
signal txbuff:STD_LOGIC_VECTOR (7 downto 0);
std_logic
输出IEEE.NUMERIC_STD.ALL
; 我想使用向量计数作为txbuff的索引。我尝试过的很多事情如下:
count<=std_logic_vector(unsigned(count)-1);
dout<=txbuff(unsigned(count));
但是我收到以下错误:
第99行.txbuff的索引类型错误。
答案 0 :(得分:4)
您需要一个整数作为索引类型。 (或者与其他数组一样,您可以使用任何离散类型,例如枚举)。
其他答案向您展示了如何使用类型转换函数到达那里:我会问,为什么不将“count”作为整数,例如natural range 0 to 15
?它将合成相同的内容,并使代码更简洁。
答案 1 :(得分:1)
我们实际上希望将数字转换为integer
,而不是unsigned
或signed
。
为此,我们可以使用to_integer
中定义的numeric_std
。这是一个例子:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
entity conv_test is Port (
data_in : in std_logic_vector(7 downto 0);
data_sel : in std_logic_vector(2 downto 0);
data_out : out std_logic
);
end conv_test;
architecture Behavioral of conv_test is
begin
data_out <= data_out(to_integer(unsigned(data_sel)));
end Behavioral;
答案 2 :(得分:0)
您需要使用to_integer函数转换为整数。检查参数化的MUX:
architecture RTL of MUX is
begin
-----------------------------------------------------------------------
-- MUX_RTL
-----------------------------------------------------------------------
-- Implements a multiplexer
-----------------------------------------------------------------------
MUX_RTL: process(DATA_IN, ADDR_IN)
variable ADDR_IN_INT : integer range 0 to 2**ADDR_WIDTH-1; -- holds the integer value of the address
begin
ADDR_IN_INT := to_integer(unsigned(ADDR_IN));
DATA_OUT <= DATA_IN(ADDR_IN_INT);
end process MUX_RTL;
end architecture RTL;