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;
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
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
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