경고 : 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;
언제부터 경고가 나옵니까? 당신은 코드 예제가 [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
오류를 시뮬레이트 할 때와 마찬가지로 완전히 잘못되었습니다. 간단히 언급했듯이 오류는 reg_n과 reg_go 때문입니다. 나는 코드를 제거하고 코드를 테스트 했으므로 제대로 작동했다. 귀하의 의견을 주셔서 감사합니다 – aish
통보 ouputs 가서 reg_n 및 reg_go에 따라 달라집니다. 그들은 어디에 사용됩니까? 표시된 코드에서 numeric_std "<="연산자를 사용하지 않고 있습니다. – user1155120