了解类型和子类型与信号的关系

时间:2015-10-08 13:12:42

标签: vhdl

我目前在两个版本的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

此致 安德斯

0 个答案:

没有答案