最近在研究Cadence PCIe VIP,怎一个“惨淡”来描述。用的真是一言难尽啊,都是泪。
记录一些最近学习的觉得想记录的内容在此,仅供参考讨论学习哈。有不对之处请指出大家一起讨论。
本文记录最近正在研究学习的Callback,只针对Cadence PCIe VIP。
Callback可以在不进行polling的前提下,被TestBench用作来告知什么event被触发了。有以下几种用法:
Cadence PCIe VIP有两种类型的callback:
从上面这张图可以清楚的看出什么点有什么样的callback。个人觉得这张图是CDNS PCIe VIP Callback使用的精髓所在,有种犹如一张“神”图在脑,对“战况”了如指掌的感觉。(哈哈哈哈,夸张夸张哈,反正就是这张图真有用)
Along with details of packet callback, it is important to know about built-in queues in PCIe VIP.
Queues transport data from one layer to the other or represent a change in the contents of the packet.
Following the callback PCIE_CB_
Packets can be modified only at entry or start callback points, and not at exit or end callbacks. Exit and end callbacks can only be used for viewing and capturing packets for score-boarding,
synchronization, or coverage purposes.
The Above diagram shows packet queues which are present in PCIe VIP and can be viewed in the tracefile. Corresponding to all queues mentioned, there are callback function which can be used in user testbench.
这里要注意的就是,callback的打开是会影响仿真时间的。所以UG里建议只enable使用的。
【=======================下面是我自己真实仿真举例=========================】
【=======================上面是我自己真实仿真举例===========================】
即在tracefile里去搜如上关键字。
dentranscbkset后的第一个数字时instance ID号,第二个数字时transaction callback ID号。因此上面的结果时说VIP instance ID为0,有callback ID为11 和12两个被enable了。
用如下command来查看instance。
grep " i " trace_log
得到
0 i top.RC
2 i top.EP
另外,从$DENALI/ddvapi/sv/denaliPcieTypes.svh里可以找到denaliPcieCbReasonT各个callback 枚举变量的值。
这时UG里这么写的,实际我在应用过程中,我是在cdnPcieUvmUserMonitor里重载的function。从目前版本的VIP code里看, 我的理解最终的实现还是在monitor里,感觉这里和上面的UG有些出入。
update更新:【CDNS VIP版本也是不断再更新的,具体实现也是不断更新的】
新版本的CDNS PCIe VIP callback使用方法如我上面所说,实际是在monitor实现的。
新的doc 描述:
这里首先讲了callback function是在 class denaliPcieInstance里定义的;其次讲了一个callback一个function,且当callback 被enable以及event触发时,function会执行;最后以DefaultCbF为例,说了DefualtCbF function的具体实现。
每一个PCIe VIP的transaction callback都有一个UVM analysis port和UVM event。
[注]:这里是uvm_event,和SV中的event区分开来。
未完待续......