在写callback那篇文章之后,继续这篇,因为CDNS VIP知识点散且杂,我们实际应用其实也只是冰山一角,【实话实说,UG及相关文档也有点杂、无序,尤其对新手不友好】,所以我也很难将一个topic总结详细到位,后面看时间和遇到的问题类型,根据自己的实际情况和理解不定时不定期更新不同topic吧。【PCIe】CDNS PCIe VIP 杂记 -- Callback-CSDN博客
这篇更新一下packet class类,类特别多,只写我自己频繁用到的和我的理解点。后面有新的理解也会不定时回头再更新。
顾名思义,packet class就是用来define不同种类的packet的。
这是所有packet的基类(base class),它是一个虚类(virtual class),[注:UG里是这么写的,可是从code里看并不是virtual的],继承于uvm_sequence_item类。
接下来介绍TL层的packet类。
该类是所有TLP type的基类,它扩展出denaliPcieTlpReqPacket, denaliPcieTlpMsgPacket, denaliPcieTlpCplPacket.
该类描述TLP message packet。
该类描述TLP completion包。
该类是Memory, I/O和configuration read/write包的基类。
该类描述TLP memory读写包。在requestTLP的基础上多了地址信息。
该类描述I/O TLP读写包。
接下来介绍Data Layer 的packet包。
Although all DLLP including Ack/Nak, FC-Update packets are automatically generated by the BFM, you can also generate your own packets and add it to the user queue.
尽管所有的DLLP包括Ack/Nak, FC包都可以被BFM自动产生,但是你也可以自己来产生并将其加入到user queue里。【注:也就是说这部分描述的类就是用作user自己干预的包】
【denaliPcieRawDlpPacket类定义在下面Raw Packet Classes章节说明。】
该类被DL packet包用。一个DLP可以理解为一个TLP加上sequence number(序列号)和LCRC,它被用作表示到达DLL(Data Link Layer)后的TLP包。
【注:这里由上面两个类也更好的理解了Spec中对于TLP和DLLP的理解了。
1. DLLP在Data Link层生成,到达对端Data Link层结束;
2. TLP在TL层生成,到底对端TL层结束;到达DL层就叫DLP。】
This class serves as the base class for the PLP and the PLLP types.
接下来介绍物理层包:Physical Layer Packets.
【注:由上面两个类可以看出,Plp对应Dlp,及TLP到达DL层后到达PL层后的呈现; PLLP对应的是DLLP,及产生于DL层的包DLLP到达PL层的呈现。】
接下来介绍Raw packet。
The pktType field is one of the four possible types – RawDllp, RawDlp, RawTlp, or RawData。
This class is used to describe the RawDLP packet and serves as a base class for the DLP.
The following section describes the classes associated with generating ordered sets
该类描述了各种order set,包括FTS, SKP, IDLE,是PcieTrainingSet类的基类。