-1
警告:NUMERIC_STD "< =":コードを実行するとモデルが検出され、FALSEを返します。警告: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;
警告がいつエラーになるのですか?あなたはコード例が[最小完全で検証可能な例](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
通知は、reg_nとreg_goに依存しています。それらはどこで使用されていますか?表示したコードでは、単にnumeric_std "<="演算子を使用していません。 – user1155120