2016-10-12 1 views
-1

Ich erhalte den folgenden Fehler: Warnung: NUMERIC_STD. "< =": Metavalue erkannt, Rückgabe FALSCH, in Modelsim, wenn ich meinen Code ausführen.Warnung: NUMERIC_STD. "<=": Metavalue erkannt, Rückgabe FALSE Fehler in Modelmsim

Der Fehler tritt nur auf, wenn ich Register reg_go und reg_n verwende. Wenn Sie die Register nicht verwenden, funktioniert der Code einwandfrei.

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

Seit wann ist eine Warnung ein Fehler? Ihr Codebeispiel ist kein [minimales vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve), die Warnmeldungen können nicht mit fehlenden Deklarationen für MMAP_ADDR_RANGE, MMAP_DATA_RANGE, C_GO_ADDR, C_MMAP_ADDR_WIDTH, C_N_ADDR dupliziert werden , C_RESULT_ADDR und C_DONE_ADDR (vermutlich von den Paketen config_pkg und/oder user_pkg). Außerdem ist Ihre Warnung von der Funktion "<=", die nicht in dem Code verwendet wird, den Sie freigegeben haben. (Sie würden erwarten, dass "weniger als oder gleich" in einer Bedingung angezeigt wird). Etwas ist nicht irgendwo auf einen bekannten Wert initialisiert. – user1155120

+0

Fehler wie in, wenn ich es simuliere, ist es völlig falsch. Wie ich im Brief erwähnte, liegt der Fehler am reg_n und reg_go. Ich entfernte sie und testete den Code und es funktionierte gut. Vielen Dank für Ihre Eingabe – aish

+0

Beachten Sie, dass die Ausgaben go und n von reg_n und reg_go abhängen. Wo werden sie benutzt? Sie verwenden einfach keinen numeric_std "<=" Operator in dem Code, den Sie angezeigt haben. – user1155120

Antwort

0

Ich kann keinen Vergleich <= für reg_go oder reg_n in dem bereitgestellten Code, den ich vermute, würde die Warnung geben „NUMERIC_STD.“ < = ": Metavalue erkannt, Rückgabe FALSE".

jedoch ein Meta-Wert ist diese zusätzlichen Werte in std_logic, die nicht '0' und '1' darstellt, wie zum Beispiel 'X'. Was die Warnung bedeutet, ist also, dass es einen Vergleich <= gibt, wo eines der Argumente zum Beispiel 'X' oder 'U' enthält, wodurch ein sinnvoller Vergleich nicht gemacht werden kann und die Funktion somit FALSE zurückgibt.

Schauen Sie im Simulator zu dem Zeitpunkt, an dem die Warnung gemeldet wird, und überprüfen Sie den Wert der relevanten Argumente, überprüfen Sie den Wert der Argumente.

Verwandte Themen