在vhdl

时间:2016-06-04 15:35:02

标签: type-conversion vhdl

我尝试使用numeric_std将一个信号转换为另一种类型:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity ftable is
GENERIC(      c : integer := 3;
              m : integer := 4;
              n : integer := 8;
              d : integer := 16; 
              stored_data : unsigned := x"000000010002010001010102");           
    Port ( 
              a : in unsigned (7 downto 0);
              b : in unsigned (7 downto 0);
           f_one : out  unsigned (15 downto 0);                 
           f_two : out  unsigned (15 downto 0));
end ftable;

architecture behavioral of ftable is

    signal row_id : unsigned (7 downto 0); 
    signal col_id : unsigned (7 downto 0); 
    signal r_temp : integer;
    signal c_temp : integer;

begin

    process (a, b) 
        variable addr: integer;     
    begin

        row_id <= "00000000";
        col_id <= "00000000";
        r_temp <= 0;
        c_temp <= 2;

        row_id(m  downto 0) <= b((n - 1) downto (n - (m + 1)));
        col_id(m  downto 0) <= a((n - 1) downto (n - (m + 1)));

        r_temp <= to_integer(row_id);
        c_temp <= to_integer(col_id);

        addr := d * (c * to_integer(row_id) + to_integer(col_id)) + r_temp + c_temp;
        f_one <= stored_data(addr to addr + d - 1);
        f_two <= stored_data(addr + d to addr + d + d - 1);
    end process;

end behavioral;

代码合成很好,当我用iSim模拟时,我得到col_id = 00000001和c_temp = 0(在实例和进程选项卡中检查)。

我的问题是为什么我得到0而不是1?

编辑:模拟时我也收到警告:NUMERIC_STD.TO_INTEGER:检测到元数据,返回0

1 个答案:

答案 0 :(得分:1)

可转换为0或1的std_logic值为'0''1''L''h',其他值为{{ 1}},'U''X''Z''W'称为元值。

如果'-'中的任何一个元数据都在std_logic_vector中转换,则会返回0以及您看到的警告。

问题还在于该过程仅对to_integera敏感,但应包括所有被读取的信号,例如还b以便在任何中间信号改变时重新执行该过程。因此,将过程中读取的所有信号添加到灵敏度列表中,或者将VHDL-2008用于col_id