uvm driver怎么获得不同的包?求助
如果driver需要发送不同类型的包,在定义driver的时候怎么定义,在agent里该怎么连接?
class apb_master extends uvm_driver#(apb_rw);
看到后面的参数没,你改参数就行。
如果有多种类型的包呢?
你自己加几个通道就行,或者是一个通道,采用一个标志来区分。
1.那在定义driver的时候,参数里放上几种包的类型吗,class apb_master extends uvm_driver#(apb_rw,apb_rw2);?
2.连接的时候,怎么连呢?
drv.seq_item_port.conect(sqr.seq_item_export)连接的时候没指定这个通道是传递什么类型的包,还是driver拿什么类型的包是在get的时候指定就好了
drever参数只能指定一种类型,如下:class uvm_driver #(type REQ=uvm_sequence_item,
type RSP=REQ) extends uvm_component;
第一个参数是传进去的类型,第二个是传回来的类型。如果只用第一个参数的话,就是传进去和传回来都是同一类型。
如果你只用它自带的一个通道。你可以再建立一个类,里面包含不同种类的各种传输类型就行了。或者是你自己在建立几个通道,传进去。
Hi,
1. 如果是基于同一基类的不同包类型,只要指定 #(base_type)即可;
2. 如果是不同类型的包/协议,可以实现多个agent/driver,每个支持一种协议
谢谢你的回答!
怎么在一个driver里加通道?
谢谢!
你的意思说,如果包的类型是从同一个基类扩展来的,只要把基类放在参数里就可以了吗?
那在连接的时候,怎么连呢?基类和扩展类是放在同一个通道还是不同的通道?
同一通道即可
同一个通道, 一般driver是固定处理一种协议的,在收到sequence_item后,需要通过cast转换成对应的基类!
其实,我只是随便说一下思路,一般来说是不需要加通道的,顶多采用不同的driver进行传输即可。“加通道”这个方法我收回。(想了想,真这么做,应该很麻烦的)
我也觉得,应该不同的driver对应不同类型的包,然后用virtual seuqence启动,关于virtual sequence我有点不太理解,virtual sequence的启动是在哪里呢? 他没有driver那样的seq_item_port.get()机制去触发他(因为他是一个virtual sequence 不传输包的)