2013-03-04 43 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替代方法。