2016-10-12 5 views
-1

경고 : NUMERIC_STD "< =": 코드를 실행할 때 메타 데이터가 Modelsim에서 감지되었습니다.경고 : NUMERIC_STD. "<=": 메타 데이터가 감지되었습니다. FALSE가 반환됩니다. ModelSim에서 오류가 발생했습니다.

오류는 reg_go 및 reg_n 레지스터를 사용할 때만 발생합니다. 레지스터를 사용하지 않으면 코드가 정상적으로 작동합니다.

library ieee; 
use ieee.std_logic_1164.all; 
use ieee.numeric_std.all; 

use work.config_pkg.all; 
use work.user_pkg.all; 

entity memory_map is 
port (
    clk  : in std_logic; 
    rst  : in std_logic; 
    wr_en : in std_logic; 
    wr_addr : in std_logic_vector(MMAP_ADDR_RANGE); 
    wr_data : in std_logic_vector(MMAP_DATA_RANGE); 
    rd_en : in std_logic; 
    rd_addr : in std_logic_vector(MMAP_ADDR_RANGE); 
    rd_data : out std_logic_vector(MMAP_DATA_RANGE); 

    -- application-specific I/O 
    go  : out std_logic; 
    n  : out std_logic_vector(31 downto 0); 
    result : in std_logic_vector(31 downto 0); 
    done : in std_logic 
    ); 
end memory_map; 

architecture BHV of memory_map is 
signal reg_go, reg_go1  : std_logic; 
signal reg_n  : std_logic_vector(31 downto 0); 
begin 

process(clk,rst) 

begin 


    if(rst = '1') then 
     reg_go <= '0'; 
     reg_go <= '0'; 
     reg_n <= (others => '0'); 
     rd_data <= (others => '0'); 

    elsif(clk'event and clk = '1') then 

     if(wr_en='1') then 

      if(wr_addr=std_logic_vector(to_unsigned(C_GO_ADDR,C_MMAP_ADDR_WIDTH))) then 

        reg_go <= wr_data(0); 
        reg_go1 <= '1'; 

      elsif(wr_addr=std_logic_vector(to_unsigned(C_N_ADDR,C_MMAP_ADDR_WIDTH))) then 
        reg_n <=wr_data; 


      end if; 
     end if; 

     reg_go1 <= '0'; 

     if(rd_en='1') then 
      if(rd_addr=std_logic_vector(to_unsigned(C_RESULT_ADDR,C_MMAP_ADDR_WIDTH))) then 
       rd_data <= result; 
      elsif(rd_addr=std_logic_vector(to_unsigned(C_DONE_ADDR,C_MMAP_ADDR_WIDTH))) then 

       rd_data(0) <= done; 

      end if; 
     end if; 
    end if; 

end process; 



go <= reg_go and reg_go1; 
n <= reg_n; 





end BHV; 
+0

언제부터 경고가 나옵니까? 당신은 코드 예제가 [Minimal Complete and Verifiable example] (http://stackoverflow.com/help/mcve)가 아니므로 경고 메시지는 MMAP_ADDR_RANGE, MMAP_DATA_RANGE, C_GO_ADDR, C_MMAP_ADDR_WIDTH, C_N_ADDR에 대한 선언이 누락되어 중복 될 수 없습니다 , C_RESULT_ADDR 및 C_DONE_ADDR (아마도 config_pkg 및/또는 user_pkg 패키지 중 하나). 더 나아가 경고는 "<="함수에서 가져온 것으로, 공유하기로 선택한 코드에는 사용되지 않습니다. (당신은 조건에 나타나기 위해 '보다 작거나 같음'을 기대합니다). 뭔가 어딘가에 알려진 값으로 초기화되지 않았습니다. – user1155120

+0

오류를 시뮬레이트 할 때와 마찬가지로 완전히 잘못되었습니다. 간단히 언급했듯이 오류는 reg_n과 reg_go 때문입니다. 나는 코드를 제거하고 코드를 테스트 했으므로 제대로 작동했다. 귀하의 의견을 주셔서 감사합니다 – aish

+0

통보 ouputs 가서 reg_n 및 reg_go에 따라 달라집니다. 그들은 어디에 사용됩니까? 표시된 코드에서 numeric_std "<="연산자를 사용하지 않고 있습니다. – user1155120

답변

0

나는 내가 경고를주는 의심 할 제공된 코드에 reg_go 또는 reg_n에 대한 <= 비교 찾을 수 없습니다 "NUMERIC_STD." < = ": 메타 코드가 감지되었으므로 거짓을 반환합니다."

그러나 메타 값은 '0' 및 이 아닌 std_logic의 추가 값입니다 (예 : 'X'). 따라서 경고가 의미하는 것은 <=의 인수 중 하나에 예를 들어 'X' 또는 'U'이 포함되어 있으므로 의미있는 비교가 수행되지 않으며 따라서 함수는 FALSE을 반환합니다.

경고가보고 된 시점에 시뮬레이터를 살펴보고 관련 인수의 값을 확인한 다음 인수 값을 확인하십시오.