VHDL中的指针解引用

VHDL中的指针解引用,vhdl,Vhdl,我无法理解如何在VHDL中解引用指针 我心目中的C代码如下: int a; int* ptr_a; a = 42; ptr_a=&a; *ptr_a=451;// how can I do this ? 我试图用VHDL模拟这段代码: ptr_test : process type ptr_integer is access integer; variable a : integer; variable ptr_a : pt

我无法理解如何在VHDL中解引用指针

我心目中的C代码如下:

  int a;
  int* ptr_a;

  a = 42;
  ptr_a=&a;
  *ptr_a=451;// how can I do this ?
我试图用VHDL模拟这段代码:

ptr_test : process
    type     ptr_integer is access integer;
    variable a     : integer;
    variable ptr_a : ptr_integer;
  begin
    a         := 42;
    ptr_a     := new integer'(a);
    report "ptr now points to a : ptr=" & str(ptr_a.all);
    ptr_a.all := 451;
    report "ptr modified        : ptr=" & str(ptr_a.all);
    report "a   is NOT modified : a  =" & str(a);
    wait;
  end process;

那么,如何通过指针正确修改值呢

你不能直接。访问类型不是“像指针一样”——它们至少在某种程度上是不同的数据存储类型

此行不创建指向
a
的指针:

ptr_a     := new integer'(a);
它创建一个与
a
值相同的数据对象,并设置
ptr_a
来引用它

如果要创建另一个访问类型变量:

variable ptr_b : ptr_integer;
并将其设置为指向
ptr\u a

ptr_b := ptr_a;
然后更改为
ptr\u b。所有
将反映在
ptr\u a中。所有
“new”等同于(C++而不是C)“new”操作;调用构造函数在堆上分配一个整数并将其初始化为“a”。(当然,完成后您可以“解除分配”它)

你要找的是
ptr_a:=a'access
这是Ada通过指针访问全局或局部(堆栈)变量的方式:只有当所述变量被声明为“别名”时,才合法,提醒编译器可能有多个视图(从而阻止了一些很好的优化)。在C语言中,无论您是否需要,所有内容都是“别名”

这是Ada的一个方面,它没有通过VHDL的简化过程:很难看到它的良好用途。因此,在VHDL中没有完全相同的语言

Martin的答案突然出现了:正如他所说,可以有两个或更多指向同一堆对象的指针


或者,解释你想通过这种方式实现什么;可能存在VHDL替代方法。

ptr_b.all在这里表示什么?
ptr_b。all
是获取访问类型所引用内容的方式。