0

入力値をゼロと比較する必要があるVHDLプロセスを作成しています。入力にはメタ値(「U」、「X」、「L」、「H」など)が含まれる場合があります。その場合、ゼロをアサートしないでください。

残念ながら、ModelSimは比較ごとに警告を発行します。

# ** Warning: NUMERIC_STD."=": metavalue detected, returning FALSE
#    Time: 14 ns  Iteration: 1  Instance: /tb/uut

そのような警告を回避するために以下をコーディングする方法についてのアイデアはありますか?nude_std警告をグローバルにオフにすることはオプションではありません。

library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.NUMERIC_STD.all;

entity Test is
    port (
        clk               : in std_logic;
        reset             : in std_logic;

        i_in_data         : in unsigned(31 downto 0);

        o_out_zero        : out std_logic
    );
end Test;

architecture rtl of Test is
begin
    process(clk, reset) begin
        if(reset='1') then
            o_out_zero <= '0';
        elsif(rising_edge(clk)) then
            if(i_in_data = (i_in_data'range=>'0')) then
                o_out_zero <= '1';
            else
                o_out_zero <= '0';
            end if;
        end if;
    end process;
end architecture;
4

1 に答える 1

1

メタ値が存在する場合にの出力がo_out_zero重要でない場合はto_01、numeric_stdの便利な関数を使用して、比較式でメタ値を削除できます。同様の目的については、to_01xzなども参照してください。

交換

if(i_in_data = (i_in_data'range=>'0')) then

if to_01(i_in_data) = (i_in_data'range=>'0') then

そしてそれは良いはずです。

ifステートメントのブール式を括弧で囲む必要がないことをご存知ですか?VHDLがCのように見えることが少ないほど、優れています...

于 2012-11-27T15:59:48.807 に答える