AR# 7994

2.1i XDW モジュール COMP_LT_UBIN_x で VHDL シミュレーションを実行すると不正な結果が生成される。

説明

キーワード:VHDL, simulation, XDW, Synopsys, DesignWare, Compiler, シミュレーション, コンパイラ

重要度 :標準

概要:
Alliance 2.1i の XDW モジュール COMP_LT_UBIN_x を使用して VHDL シミュレーションを実行すると、不正な結果が生成される。最初の結果が 1 であった場合、その後シミュレーションの結果は 1 から変化しない。

ソリューション

この問題は、XDW ライブラリの変数初期化が正しくないために発生します。この問題を解決するには、XDW ソース ファイルに直接アクセスし編集する必要があります。

エディタで $XILINX/synopsys/libraries/sim/xdw/src/xdw_VITAL.vhd を開きます。コンパレータの記述は次のようになります。

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

entity COMP_LT_UBIN_4 is
port (
Z : out STD_ULOGIC;
A : in STD_LOGIC_VECTOR (3 downto 0);
B : in STD_LOGIC_VECTOR (3 downto 0));

end COMP_LT_UBIN_4;

architecture COMP_LT_UBIN_4_V of COMP_LT_UBIN_4 is

begin

VITALBehavior : process (A, B)

VARIABLE O_zd : STD_ULOGIC := '0';

begin
-------------------------
-- Functionality Section
-------------------------
for I in 3 downto 0 loop
if (((NOT A(I)) AND B(I)) = '1') then
O_zd := '1';
exit;
elsif ((A(I) AND (NOT B(I))) = '1') then
exit;
end if;
end loop;
Z <= O_zd after 0.1 ns;
end process;

end COMP_LT_UBIN_4_V;
...
変数の初期化を修正するには、以下を挿入します。

O_zd := '0',

これはプロセスの文頭に追加します。

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

entity COMP_LT_UBIN_4 is
port (
Z : out STD_ULOGIC;
A : in STD_LOGIC_VECTOR (3 downto 0);
B : in STD_LOGIC_VECTOR (3 downto 0));

end COMP_LT_UBIN_4;

architecture COMP_LT_UBIN_4_V of COMP_LT_UBIN_4 is

begin

VITALBehavior : process (A, B)

VARIABLE O_zd : STD_ULOGIC := '0';

begin

O_zd := '0', -- THIS LINE MUST BE ADDED !!!

-------------------------
-- Functionality Section
-------------------------
for I in 3 downto 0 loop
if (((NOT A(I)) AND B(I)) = '1') then
...
...
ライブラリを再分析し、 正しい結果が生成されているか確認してください。

この問題は、Allianceソフトウェアの次のバージョンで修正される予定です。
AR# 7994
日付 06/13/2002
ステータス アーカイブ
種類 一般