【问题标题】:List of VHDL external name in package包中的 VHDL 外部名称列表
【发布时间】:2013-12-13 12:09:34
【问题描述】:

我正在尝试编写一个 VHDL 包来创建一个外部名称列表,以便在我的测试台中使用它们。我不确定是否可以在包中声明外部名称,但编译器不会抛出错误。

但是,如果我尝试使用 ModelSim 10.0b 模拟我的测试台,我会在加载设计时遇到错误:

在详细说明之前无法引用信号。

虽然编译顺序是正确的,但我猜在模拟启动过程中加载顺序有问题。在加载设计之前加载所有包。以后有没有机会强制ModelSim加载外部名称包?

@user3099274 的代码从注释中插入以提高可读性:

package external_name_package is
  alias signal1 is << signal .tb_top_cfg.TB_TOP_E_INST.DUT.signal1 : std_logic >>;
  alias signal2 is << signal .tb_top_cfg.TB_TOP_E_INST.DUT.signal2 : std_logic >>;
end package external_name_package;

【问题讨论】:

  • “外部名称列表”是什么意思?这是您正在创建的新type 吗?你是在创建一个实际的signal吗?
  • 您能否展示一个small 示例来说明您目前所拥有的东西?我认为我们不明白你想问什么......
  • 你好,这里是一个包的例子。我想通过使用这个包来使用不同实体中的别名 package external_name_package is alias signal1 is >;别名 signal2 是 >;结束包 external_name_package;

标签: package external vhdl modelsim


【解决方案1】:

VHDL 设计处理分多个步骤完成,首先是分析,然后是 阐述。分析检查所有单独的语法和语义 设计单位。精心设计通过结合不同的 根据层次结构将单元设计成一个大型设计。

在细化过程中,外部名称具有层次结构 参考,检查并连接到参考信号等 VHDL 的 细化规则指定设计是在深度优先的 自上而下的顺序。在细化过程中遇到外部名称时 步骤,必须可以确定位置,这要求 外部名称引用的位置已经详细说明。

如果你尝试用信号制作一个包,那么在 包在测试台模块开始时详细说明,因此在 DUT 是精心设计的,因此无法解决外部问题 当时的名字,就是错误信息的内容:

错误“在详细说明之前无法引用信号。”

因此解决方案是将外部名称引用放置在进程或块中 在 DUT 实例化之后。

您还可以找到相关讨论 here.

【讨论】:

  • 为了澄清(来自链接的讨论),“块”专门指 VHDL block 声明声明区域。在详细说明之前,您必须非常小心不要以任何方式引用外部信号。比如这里不能使用aliases(但是可以在block中本地声明信号,并在block正文中分配外部信号,这在很多情况下是可以接受的)。
【解决方案2】:

图书馆ieee; 使用 ieee.std_logic_1164.all;

我在 vhdl 2008 中有类似的工作,除了我将分层信号别名放在包体中定义的过程中。然后在程序内部驱动其中一个别名信号时,我使用了“强制输入”,例如:

package pkgx is
  procedure write( addr : inout std_logic_Vector(7 downto 0);
end package;

package body pkgx is

  procedure write( addr : inout std_logic_Vector(7 downto 0) is
    alias tap is <<signal .tb.signal3 : std_logic>>;
  begin


    tap <= force in '1';
    wait for 0 ns;
  end procedure;

end package body;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-23
    • 1970-01-01
    • 2017-09-19
    • 2020-12-09
    相关资源
    最近更新 更多