【问题标题】:VHDL-2008 hierarchical signal access to arrayVHDL-2008 分层信号访问阵列
【发布时间】:2018-04-25 07:50:08
【问题描述】:

我正在尝试通过 VHDL-2008 分层名称访问数组。我可以访问整个数组,但是当我尝试访问单个数组元素时,出现编译错误:

ACOM: Error: COMP96_0015: tb.vhd : (13, 43): ':' expected.

是否可以访问单个数组元素?正确的语法是什么?

这是我的代码:

待测物

library ieee;
use ieee.std_logic_1164.all;

entity dut is
end entity dut;

architecture rtl of dut is
    type t_data is array (natural range <>) of std_logic_vector(7 downto 0);
    signal s_data   : t_data(0 to 15)   := (others=>(others=>'1'));
begin
    --don't care
end architecture rtl;

TB

library ieee;
use ieee.std_logic_1164.all;

entity tb is
end entity tb;

architecture sim of tb is    
    signal s_data_0 : std_logic_vector(7 downto 0);
begin
    s_data_0    <=  << signal i_dut.s_data(0) : std_logic_vector(7 downto 0) >>;

    i_dut : entity work.dut;
end architecture sim;

【问题讨论】:

    标签: vhdl


    【解决方案1】:

    另一个模拟器的错误信息解释了问题:

    ** 错误:external_index.vhd(23): (vcom-1307) 外部名称必须表示整个对象,而不是对象的切片或索引名称。

    【讨论】:

    • verror 讲述了一个精彩的故事:"vcom 消息 #1307:外部名称必须表示整个目标对象。在形成外部对象的切片名称或索引名称时,离散范围或索引表达式必须出现在结束表示该对象的外部名称的“>>”之后。[DOC:IEEE Std 1076-2008 VHDL LRM - 8.7 外部名称]“。在这种情况下,索引名称 (8.4) 的前缀 (8.1) 是可以包括外部名称 (8.7) 的名称 (8.1)。切片名称的前缀相同(8.5)。这给出了两个 OP 问题的答案。
    • 是否可以访问单个数组元素? 可以。正确的语法是什么? 从外部路径名中删除索引,修复外部名称中的类型(包括对类型 t_data 声明的可见性)并将索引表达式 (0) 放在 >> 之后。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多