ポートにまとまったレコードを割り当てようとすると、この信号の値が波形ウィンドウに正しく表示されません。しかし、その値はオブジェクト ウィンドウに正しく表示されています。問題のコードの一部は次のようになっています。
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 |
ステータス | アクティブ |
種類 | 一般 |
デバイス | |
ツール |