VHDL中的指针解引用
我无法理解如何在VHDL中解引用指针 我心目中的C代码如下: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
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
是获取访问类型所引用内容的方式。