微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > Modifying Objects in Flight

Modifying Objects in Flight

时间:10-02 整理:3721RD 点击:
请教为什么第一段程序是错误的?
Sample 5.26 Bad generator creates only one object
task generator_bad(int n);
Transaction t;
t = new(); // Create one new object
repeat (n) begin
t.addr = $random(); // Initialize variables
$display("Sending addr=%h", t.addr);
transmit(t); // Send it into the DUT
end
endtask
Sample 5.27 Good generator creates many objects
task generator_good(int n);
Transaction t;
repeat (n) begin
t = new(); // Create one new object
t.addr = $random(); // Initialize variables
$display("Sending addr=%h", t.addr);
transmit(t); // Send it into the DUT
end
endtask

前一个循环的时候使用的Transaction总是同一个句柄的,而后者不是,每次循环的时候new()了

没有啊,第一段程序是在循环外new的啊,第一段程序只是每次循环后对类中的非静态变量赋值。

正因为在循环外new()的,所以循环使用的object是同一句柄的,这根是不是静态变量没关系。你再看看我上面的回复是什么意思,我觉得你理解和我想表达的似乎有偏差。书上也写的很清楚:The code above creates only one Transaction, so every time through the loop, generator_badchanges the object at the same time it is being transmitted. When you run this, the $display shows many addrvalues, but all transmitted Transactionobjects have the same value of addr.

不好意思啊,第一次学OOP,有些不太适应。我知道是同一个句柄,但我想不通display为什么可以反映出addr的变化,但是把句柄t传送到transmit后就不行了。我觉得句柄generator.t和transmit.t对应的都是同一个对象,对象中的变量值已经被修改了。难道t.addr = $random()只能初始化,不能对对象中的变量addr赋值嘛?求指教

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

网站地图

Top