AR# 54914

2012.4 Vivado シミュレーション - XSIM の波形ウィンドウにレコードが間違って表示される

説明

ポートにまとまったレコードを割り当てようとすると、この信号の値が波形ウィンドウに正しく表示されません。しかし、その値はオブジェクト ウィンドウに正しく表示されています。問題のコードの一部は次のようになっています。

type AXIS32_DAT_STRUCT is record
  TVALID : std_logic;
  TDATA  : std_logic_vector(31 downto 0); 
  TLAST  : std_logic; 
  TUSER  : std_logic_vector(3 downto 0);
end record;

type AXIS32_DAT_STRUCT_ARRAY is ARRAY (natural range <>) of AXIS32_DAT_STRUCT;

signal TEST_VECTOR: AXIS32_DAT_STRUCT_ARRAY(2 downto 0) := (
  0=>(
    TVALID=>'1',
    TDATA=>X"12345678",
    TLAST=>'1',
    TUSER=>"1111"),
  1=>(
    TVALID=>'1',
    TDATA=>X"12345678",
    TLAST=>'1',
    TUSER=>"1111"),
  2=>(
    TVALID=>'1',
    TDATA=>X"12345678",
    TLAST=>'1',
    TUSER=>"1111")
);
 
signal y: AXIS32_DAT_STRUCT_ARRAY(1 downto 0);
 
y<=TEST_VECTOR(1 downto 0);
 
FOO0: FOO PORT MAP(
  -- Input interface
  x=> TEST_VECTOR(1 downto 0)
);

end Behavioral;

信号 y もオブジェクト ウィンドウには表示されていません。これはなぜですか。

ソリューション

信号 y はデザインのどこにも使用されていないため、シミュレーション中に最適化されます。この最適化をオフにするには、シミュレーション設定の [more compilation options] で --O0 オプションを使用します。

上記のコードでは、信号「y.TDATA」は正しく表示されます (X'12345678 など) が、「x.TDATA」の値は波形ウィンドウで間違って (X'48d159e3) 表示されています。 この問題はほかのレコードでも同じです (x.TVALID、x.TLAST、x.TUSER など)。

上記のコードは ISIM で正しくシミュレートされます。ISIM および XSIM のスクリーンショット、およびコードは参照用としてこのアンサーに添付されています。

XSIM でこの問題を回避するには、中間信号にまとまったレコードを割り当て、そのあとこの信号を正式なポートに次のように接続します。

y <= TEST_VECTOR(1 downto 0);

FOO0: FOO PORT MAP(
  x => y 
);

end Behavioral;

添付ファイル

関連添付ファイル

タイトル サイズ ファイルタイプ
chFPGA.vhd 2 KB VHD
XSIM_record.png 72 KB PNG
ISIM_record_corectdisplay.png 137 KB PNG
AR# 54914
日付 04/18/2013
ステータス アクティブ
種類 一般
デバイス
ツール