描述
当我尝试将一组记录分配给一个端口时,该信号的值在波形窗口中没有正确显示。但是,它的值在对象窗口中可以正确显示。以下是相关代码的一部分:
类型AXIS32_DAT_STRUCT是记录
TVALID:std_logic;
TDATA:std_logic_vector(31 downto 0);
TLAST:std_logic;
TUSER:std_logic_vector(3 downto 0);
结束记录;
类型AXIS32_DAT_STRUCT_ARRAY是AXIS32_DAT_STRUCT的ARRAY(自然范围<>);
信号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”)
);
信号y:AXIS32_DAT_STRUCT_ARRAY(1 downto 0);
y <= TEST_VECTOR(1 downto 0);
FOO0:FOO PORT MAP(
– 输入界面
x => TEST_VECTOR(1 downto 0)
);
结束行为;
信号’y’在对象窗口中也不可见。这是什么原因?
解
信号’y’不用于设计的任何部分,因此在仿真期间进行优化。要禁用此优化,请在仿真设置的“更多编译选项”中写入开关–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
);
结束行为;
附件
相关附件
名称 | 文件大小 | 文件类型 |
---|---|---|
chFPGA.vhd | 2 KB | VHD |
XSIM_record.png | 72 KB | PNG |
ISIM_record_corectdisplay.png | 137 KB | PNG |
没有回复内容