변환

2016-06-04 3 views
0

나는 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 (인스턴스 및 프로세스 탭에서 선택).

제 질문은 왜 1 대신에 0을 얻습니까?

편집 : 0 또는 1이다 '0', '1', 'L''h', 그리고 다른 값으로 변환 할 수 있습니다 0

+1

신호 할당 문의 오른쪽에 expression에 row_id 및 col_id가 있고 해당 신호가 프로세스 감도 목록에 없습니다. row_id 또는 col_id가 갱신되고 마지막 프로세스 문이 내재 된 암시 적 wait 문이 발생한 후에 프로세스가 시뮬레이션을 재개하지 않습니다. 일반적으로 합성 결과가 올바르게 작동 할 것으로 기대할 수 있습니다 (논리 루프가없는 경우). 민감도 목록은 대부분 무시됩니다. – user1155120

답변

1

std_logic 값을 반환 감지 metavalue : NUMERIC_STD.TO_INTEGER : 나는 또한 경고를 시뮬레이션 할 때 'U', 'X', 'Z', 'W', '-' 등이 있으며, 이들은 메타 패턴이라 불린다.

to_integer으로 변환 된 std_logic_vector에 이러한 메타 값이있는 경우 표시되는 경고와 함께 0이 반환됩니다.

프로세스가 ab에만 민감하지만, 읽혀지는 모든 신호를 포함해야하는 등의 문제도 있습니다. 또한을 사용하여 중간 신호 중 하나가 변경 될 때 프로세스를 다시 실행합니다. 따라서 프로세스에서 읽은 모든 신호를 감도 목록에 추가하거나 VHDL-2008을 사용하려면 process (all)을 사용하십시오.

+0

나는 잠시 동안 col_id가 정의되지 않았다고 생각하지만 마침내 0x01이지만 c_temp는 여전히 0입니다. – azet52

+0

전체 엔터티로 업데이트 한 후 확인을 더 많은 정보로 업데이트했습니다. –

+0

감수성 문제였습니다. 고마워요! – azet52