I have not been able to understand how to dereference a pointer in VHDL.
What I have in mind is a C code like :
  int a;
  int* ptr_a;
  a = 42;
  ptr_a=&a;
  *ptr_a=451;// how can I do this ?
I tried to mimick this code in 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;
So how can I correctly modify a value through a pointer ?
You can't directly. Access types are not "just like pointers" - they are to at least some extent distinct types of data storage.
This line does not create a pointer to a:
ptr_a     := new integer'(a);
It creates a data object with the same value as a and sets up ptr_a to reference it.
If you were to create another access type variable :
variable ptr_b : ptr_integer;
and set it to to point to ptr_a:
ptr_b := ptr_a;
then changes to ptr_b.all will reflect in ptr_a.all.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With