如何索引到vhdl标准逻辑向量?

如何索引到vhdl标准逻辑向量?,vhdl,Vhdl,我有以下声明: signal count:STD_LOGIC_VECTOR (3 downto 0); signal txbuff:STD_LOGIC_VECTOR (7 downto 0); dout是一种std_逻辑输出 我使用的是IEEE.NUMERIC_STD.ALL 我想使用向量计数作为txbuff的索引。在我尝试过的许多事情中,有以下几点: count<=std_logic_vector(unsigned(count)-1); dout<=txbuff(unsigned

我有以下声明:

signal count:STD_LOGIC_VECTOR (3 downto 0);
signal txbuff:STD_LOGIC_VECTOR (7 downto 0);
  • dout是一种
    std_逻辑
    输出
  • 我使用的是IEEE.NUMERIC_STD.ALL 我想使用向量计数作为txbuff的索引。在我尝试过的许多事情中,有以下几点:

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

    count我们实际上希望将数字转换为
    整数,而不是
    无符号
    有符号

    要做到这一点,我们可以使用
    To_integer
    ,如
    numeric\u 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;
    
    ieee库;
    使用ieee.std_logic_1164.ALL;
    使用ieee.numeric_std.ALL;
    实体conv_测试是端口(
    数据输入:标准逻辑向量(7到0);
    数据选择:标准逻辑向量(2到0);
    数据输出:输出标准逻辑
    );
    结束conv_试验;
    conv_测试的架构是
    开始
    
    data\u out您需要使用to\u 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;
    
    MUX的RTL架构是 开始 ----------------------------------------------------------------------- --多路复用器 ----------------------------------------------------------------------- --实现多路复用器 ----------------------------------------------------------------------- MUX\U RTL:进程(数据输入,地址输入) 变量ADDR_IN_INT:整数范围0到2**ADDR_WIDTH-1;--保存地址的整数值 开始 ADDR_IN_INT:=to_整数(无符号(ADDR_IN));
    DATA\u OUT您需要一个整数作为索引类型。(或者对于其他数组,可以使用任何离散类型,例如枚举)


    其他答案已经向您展示了如何使用类型转换函数实现这一点:我要问的是,为什么不将“count”设置为整数,比如
    自然范围0到15
    ?它将合成同样的内容,并使代码更简洁。

    注意count的长度为4,可以索引2**4个元素,而txbuff的长度仅为8(8个元素)。使用较大的整数索引可能会导致切片名
    dout