如何索引到vhdl std_logic_vector?

时间:2015-04-15 20:46:23

标签: vhdl

我有以下声明:

signal count:STD_LOGIC_VECTOR (3 downto 0);
signal txbuff:STD_LOGIC_VECTOR (7 downto 0);
  1. dout是std_logic输出
  2. 我正在使用IEEE.NUMERIC_STD.ALL;
  3. 我想使用向量计数作为txbuff的索引。我尝试过的很多事情如下:

    count<=std_logic_vector(unsigned(count)-1);
    dout<=txbuff(unsigned(count));
    

    但是我收到以下错误:

      

    第99行.txbuff的索引类型错误。

3 个答案:

答案 0 :(得分:4)

您需要一个整数作为索引类型。 (或者与其他数组一样,您可以使用任何离散类型,例如枚举)。

其他答案向您展示了如何使用类型转换函数到达那里:我会问,为什么不将“count”作为整数,例如natural range 0 to 15?它将合成相同的内容,并使代码更简洁。

答案 1 :(得分:1)

我们实际上希望将数字转换为integer,而不是unsignedsigned

为此,我们可以使用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;