VHDL中的指针解引用

时间:2013-03-04 12:53:11

标签: 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 : 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;

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

2 个答案:

答案 0 :(得分:4)

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

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

ptr_a     := new integer'(a);

它创建一个与a具有相同值的数据对象,并设置ptr_a以引用它。

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

variable ptr_b : ptr_integer;

并将其设置为指向ptr_a

ptr_b := ptr_a;

然后对ptr_b.all的更改将反映在ptr_a.all

答案 1 :(得分:2)

“new”相当于(C ++而不是C)“new”操作;调用构造函数在堆上分配一个整数并将其初始化为“a”。 (当然,你可以在完成后“解除分配”)

你正在寻找的是ptr_a := a'access;这是通过指针访问全局或本地(堆栈)变量的Ada方式:只有当所述变量被声明为“别名”警告编译器时才这是合法的事实上可能有不止一个视图(因此,阻止了一些很好的优化)。在C中,无论你是否愿意,一切都是“别名”。

这是Ada的一个方面,它没有通过简化过程进入VHDL:并且很难看到它的良好用途。所以在VHDL中没有完全相同的东西。

马丁的回答刚刚出现:正如他所说,你可以拥有2个或更多指向同一个堆对象的指针。

或者,解释一下你想要以这种方式实现的目标;可能有VHDL替代方法。