|
发表于 2011-10-12 13:19:06
|
显示全部楼层
callback: 就是一个很简单的原理, 包装了很多概念的外衣.
你的SV代码, 最后多变成顺序执行的C代码, 那么在testbench写好后, 我想在一个task里面添点东西怎么办? 前面添点, 后面添点?
解决方法就是在写testbench时, 就预留几个virtual的task在你想添程序的地方, 然后在case里再实现这些virtualtask, 还是看例子:
DRV_callback : cb[$]; // 例化一个类的队列, 用来做callback, 这个类里有一个虚方法pre_tx();
task run() begin
foreach (cb[i]) cb[i].pre_tx(); // 预留着执行这个虚方法.
...
end
在你想在run()里填东西的时候, 你可以继承DRV_callback, 重载里面的pre_tx(), 然后再test的initial里push到cb里去.就实现callback了. 因为是一个队列, 所以你可以不停地添东西.
假如你添一个scoreboard, 那就实现了用callback收集数据到scoreboard的功能.
三言两语说不清楚, 建议新手先看System Verilog for Verification这本书, 亚马逊有英文原版卖, 如果没钱, 可以到当当买中文正版, 很便宜. 一定要支持正版哦. |
|