【问题标题】:In VHDL, Is it possible to reference a static variable using an access reference?在 VHDL 中,是否可以使用访问引用来引用静态变量?
【发布时间】:2021-12-29 17:17:02
【问题描述】:

在 VHDL 中,是否可以使用访问引用来引用静态变量?

我看到的大多数 VHDL 访问示例都涉及动态分配内存。我很好奇您是否还可以获得静态分配变量的访问句柄。就像我在特定架构中有一个静态分配的全局整数一样,我能否将对该变量的引用分配给整数的访问类型?

【问题讨论】:

  • Tricky 的回答是正确的,但是这不允许您将别名“重定向”到程序中其他地方的另一个变量。 Ada 确实允许 my_ptr : access all integer;my_var : aliased integer; 允许指针指向带有 my_ptr := my_var'access; 的变量,但没有人认为 VHDL 可用作系统编程语言,因此它没有继承它。您无法通过“新”进行分配。您能否更清楚地了解这些都不令人满意的用例?
  • 没有。不符合 IEEE Std 1076-2008 10.6.2 Simple variable assignments, 10.6.2.1 General “如果变量赋值语句的目标是名称,则名称应表示变量,表达式的类型右侧应与该名称表示的变量的基本类型相同。”获取访问类型值的唯一方法是通过分配(9.3.7 分配器)。没有办法进入内核空间(没有预定义的属性)来为声明为非访问类型的对象派生访问值。

标签: vhdl


【解决方案1】:

VHDL 中不存在这样的东西。对于 access 类型,您无法获得另一个变量的“句柄”。您只能将动态内存创建为 access 类型。

但是,VHDL 确实有别名。有了这些,您可以为任何可见的东西创建别名。并且使用外部名称(来自 VHDL 2008),您可以为任何不直接可见的对象创建别名。例如:

entity ent1
end entity ent1;

architecture arch of ent1 is
  constant SOME_CONST : integer := 7;

  alias my_alias : integer is SOME_CONST;
begin
  process
  begin
    report "ent1 alias = " & to_string(my_alias);
    wait;
  end process;
end architecture;

entity ent2 is
end entity ent2;

architecture arch of ent2 is
begin
  inst : entity work.ent1;

  process
    alias a is << constant inst.SOME_CONST : integer >>;
  begin
    report "ent2 alias = " & to_string(a);
    wait;
  end process;
end architecture;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-11
    • 2012-04-28
    • 2017-09-10
    • 2021-01-26
    • 1970-01-01
    • 2020-09-01
    相关资源
    最近更新 更多