
截止到目前我了解到的UVM類只有uvm_sequence/uvm_sequencer_param/uvm_driver是帶有參數(shù)化的類型的。
uvm_driver#(REQ,RSP)

- 默認(rèn)的情況下REQ=RSP
- 默認(rèn)的類型是uvm_sequence_item
- TLM端口uvm_seq_item_pull_port
my_driver extends uvm_driver(my_transaction)
seq_item_port.get_next_item(req) - 其中req的類型默認(rèn)是my_transaction,如果沒有聲明,那默認(rèn)就是uvm_sequence_item的類型。
- 規(guī)范來講的話,這里要寫成my_transaction
uvm_sequencer_param#(REQ,RSP)


- 默認(rèn)RSP=REQ
- 默認(rèn)的類型為uvm_sequence_item
- uvm_tlm_fifo就是sqr和driver的item的FIFO。
- rerandomize=1的時候的randomize,一定要用my_ransaction
- 這個類對用戶的可見度比較低。
uvm_sequencer#(REQ,RSP)

uvm_sequencer extends uvm_sequencer_param_base- 通過tlm端口我們知道,driver里面的seq_item_port.get_next_item就是對應(yīng)的調(diào)用的uvm_sequencer的,所以這里面有一個隱形的規(guī)定,uvm_sequencer和uvm_driver的參數(shù)應(yīng)該保持一致。
小結(jié):要保證uvm_sequencer/uvm_sequence以及uvm_driver的參數(shù)一致性。
如果一個seq要發(fā)送不同的item,item之間并沒有繼承關(guān)系。可以參看張強(qiáng)的6.4.3.
多說一句有關(guān)于這里的兩個cast:

- req實際上是從seq那一側(cè)的item例化的,指向的是my_transaction和you_transaction。
- cast是同類型對象的轉(zhuǎn)換,driver的req一定要是seq那邊過來的,所以這里不能自己new一個item,如果那樣的話,這就不是UVM的框架了?。?!