2013-03-04 75 views
2

我一直无法理解如何解引用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; 

所以,我怎么能正确地通过指针修改的值?

回答

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反映。

+0

ptr_b.all在这里表示什么? – Endeavour 2017-02-12 20:46:19

+0

'ptr_b.all'是你如何获得访问类型引用内容的方式。 – 2017-02-13 13:58:17

2

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

你在找什么是ptr_a := a'access;这是Ada通过指针访问全局或本地(堆栈)变量的方式:这只有在所述变量具有被声明为“aliased”,警告编译器可能存在多于一个视图的事实(并因此阻止一些不错的优化)。在C中,无论您是否需要,一切都是“别名”。

这是Ada没有通过简化过程转化为VHDL的一个方面:并且很难看到它的良好用途。所以在VHDL中没有确切的等价物。

Martin的答案刚刚弹出:他说,你可以有2个或更多的指针指向同一个堆对象。

另外,解释你试图达到这个目的;可能有VHDL替代方法。