我目前在两个版本的VHDL模拟器之间存在错误
我的代码(触发错误的简单版本)
library ieee;
use ieee.std_logic_1164.all;
entity test is
end;
architecture test of test is
constant mpc_ibif_data_width : integer := 16;
subtype t_mpc_ibif_data is std_logic_vector (mpc_ibif_data_width - 1 downto 0);
type t_device_2_mpc_ibif is
record
rd_data : t_mpc_ibif_data; --
rd_data_en : std_logic; -- '1': rd_data must be driven to the CPU
berr_n : std_logic; --
end record;
type t_device_2_mpc_ibif_array is array (natural range <>) of t_device_2_mpc_ibif;
signal flash_cnt_2_mpc_o : t_device_2_mpc_ibif;
begin
process
begin
wait for 10 ns;
assert flash_cnt_2_mpc_o.rd_data = t_device_2_mpc_ibif.rd_data'(others => '0') report"flash_cnt_2_mpc_o.rd_data should have been deasserted" severity error;
wait;
end process;
end;
在第一个版本中,以下是合法的
assert flash_cnt_2_mpc_o.rd_data = t_device_2_mpc_ibif.rd_data'(others => '0') report"flash_cnt_2_mpc_o.rd_data should have been deasserted" severity error;
然而,在新版本中,我在同一行上收到“类型错误”。特别是
t_device_2_mpc_ibif.rd_data'(others => '0')
我在供应商处创建了一个错误,告诉我使用下面的代码:
assert flash_cnt_2_mpc_o.rd_data = t_mpc_ibif_data'(others => '0') report"flash_cnt_2_mpc_o.rd_data should have been deasserted" severity error;
基于这些论点
在此上下文中,预计不会选择类型。
根据我的理解,有类型和子类型。子类型继承自类型
所以当你创建一个信号时
signal NameOfSignal : std_logic_vector(1 downto 0)
此信号现在继承了std_logic_vector及其相关的IE,它是std_logic_vector类型的“子类型”。
而且无论信号是否在记录中都不应该改变这一事实。
我问了这个并得到了以下答案:
t_device_2_mpc_ibif.rd_data typetype既不是subtype_name,也不是选定的名称(记录的元素名称)。
但在我的世界中,这应该无关紧要,因为信号(元素)继承了所有类型的方法。
请纠正我,因为我明显误解了一些事情
编辑:我使用的是VHDL2008
此致 安德斯