A sequencer generates data transactions as class objects and sends it to the Driver for execution. It is recommended to extend uvm_sequencer base class since it contains all of the functionality required to allow a sequence to communicate with a driver. The base class is parameterized by the request and response item types that can be handled by the sequencer.
Sequencer的工作是產生data object 傳送給Driver執行。通常Sequencer會繼承自 uvm_sequencer,就會繼承 uvm_sequencer所有可以與Driver通訊的相關功能。
Usage
預設情況下,request type和response type相同,如果request和reponse不同的話可以在產生instance的時候指定第二個參數。除非有其他額外的port要include進來,不然應該直接將其實例化作為uvm_sequencer所需要的參數帶入。
1 | // class uvm_sequencer #(type REQ=uvm_sequence_item, RSP=REQ) |
Sequencer生成的object在靈活性(flexibility)和可重用性(re-usability)方面有很大的限制。因此要使用UVM_sequence來克服這個限制。
Custom Sequencer
其實並不需要客製化sequencer來執行每個sequence或agent。但是我們一樣可以建立具有額外自己客製化功能的 UVM sequencer,並在整個testbench中建立它的instance。
1 | class my_sequencer extends uvm_sequencer; |