微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > VMM SV 队列使用方法求助

VMM SV 队列使用方法求助

时间:10-02 整理:3721RD 点击:
HI :     各位大神,小弟在学习SV队列的过程中遇到如下问题。
`timescale 1ns/100ps
program test_q();
vmm_data p_put,p_get;
vmm_data arr[$];
initial begin
  p_put = new();
  p_get = new();
  arr   =  {};
  begin
    p_put.data_id = 10;
    $display("the id= %d @%t",p_put.data_id,$time);
    arr.push_back(p_put);
    p_get=arr.pop_front();
    $display("the id= %d @%t",p_get.data_id,$time);
    p_get.data_id = 20;
    $display("the id= %d @%t",p_put.data_id,$time);
    $display("the id= %d @%t",p_get.data_id,$time);
  end
end

结果是这样的:

the id=         10 @                   0
the id=          10 @                   0
the id=          20 @                   0
the id=          20 @                   0


我觉得p_get=arr.pop_front();之后再改变p_get.data_id的值不会影响p_put.data_id的值才对,但是结果是影响了,但是原因不明确,感觉是p_get&p_put
还是指向同一块内存的的样子。求大侠解释一下。

看来大神都下班了

求解释

额,好高级,没这么用过

sv里只是淡化了数据和指针的概念。
在学习时一定要心里知道,哪些是数据,哪些是指针。
类的一切例化都是指针。p_put、p_get和arr都是指针。
p_put = new();     //p_put指向实例1
p_get = new();     //p_get指向实例2
p_put.data_id = 10;     //p_put指向实例1,其data_id=10。
$display("the id= %d @%t",p_put.data_id,$time);    //输出10
arr.push_back(p_put);    //arr[0]指向p_put所指的对象,也就是实例1。
p_get=arr.pop_front();   //p_get指向arr[0]所指的对象,也就是实例1。这时已经没任何指针指向实例2了,它会被注销。由于arr被pop,所以arr[0]指针不再存在。
至此为止,p_put和p_get都指向了实例1。



   大神就是牛啊

arr.push_back(p_put);    //arr[0]指向p_put所指的对象,也就是实例1
个人一直觉得这个队列里面保存的就是p_put 的数据而不是指针,看来理解错误

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top