关于05-02这个例子,结合05-01,初步感受到了TLM验证的好处,05-02的架构如下:
其中, mem_master, hfpb_mem和mem都可以复用05-01的程序。
在hfpb_slave的实现中,有一个技巧, 在内部申明了一个tlm_transport_channel, 将和hfpb_mem的slave_export的接口和内部transport port应用巧妙结合。之前的hierary port连接的知识在这里得到了好的应用。
另外, ovm_analysis_port仅仅是申明了一下,用了write()函数,但是实际上并没有subscriber进行后处理分析。估计后面的例子会详细介绍,在这里先买下伏笔。
通过simulation结果,有几点可以改善。
1. 对于write transaction, 没有必要输出rdata; 对于read transaction, 没有必要输出wdata.
2. transaction.do_sprint()函数的格式化采用%05s, 会造成输出read transaction显示为WREAD. 改成%s,显示为READ, 比较正常。
在结合timing处理的时候,应该使用try_get()和try_put()以免造成对时序的影响。
其实这个例子在实际中,想验证memory, 这个memory应该直接接到hfpb_if上,也就是真实的DUT,直接取代hfpb_slave以及后面的hpfb_mem(包含mem)。
基本上对05-02有了整体的了解,之后还需要多多练习才能够熟练掌握。想想自己项目中是否能够用到吧。
再接再厉!按计划继续学习OVM.