2016-10-12 15 views
-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; 
+0

警告がいつエラーになるのですか?あなたはコード例が[最小完全で検証可能な例](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

通知は、reg_nとreg_goに依存しています。それらはどこで使用されていますか?表示したコードでは、単にnumeric_std "<="演算子を使用していません。 – user1155120

答えて

0

私は警告を与え疑うだろう提供されているコードでreg_goまたはreg_nため<=を比較見つけることができません「NUMERIC_STD。」 < = "":メタベルが検出され、FALSEを返す "。

ただし、のように'0''1'を表さない余分な値はstd_logicです。したがって、警告の意味は、引数の1つに'X'または'U'が含まれる比較<=があり、それによって意味のある比較が行われないため、関数はFALSEを返します。

警告が報告された時点でシミュレータを調べ、関連する引数の値を確認し、引数の値を確認します。

関連する問題