1.假设产生CRC错误包的sequence 如下:

UVM:6.4.1 嵌套的sequence_9


2.长包sequence 如下:

UVM:6.4.1 嵌套的sequence_9_02


3.新写一个sequence,交替产生上面两种包。可以这么写:

UVM:6.4.1 嵌套的sequence_9_03

1)相当于两个transaction。

2)这样很麻烦。


4.sequence 的body 中,除了可以使用uvm_do 产生transaction外,还可以启动其他sequence,即一个sequence 内启动另外一个sequence:

UVM:6.4.1 嵌套的sequence_9_04

1)实现sequence 的重用。

2)m_sequencer是 case0_sequence 启动后使用的sequencer 的指针。

3)this.m_sequencer 也一样。


5.不用上面那么麻烦,使用uvm_do 宏完成:

UVM:6.4.1 嵌套的sequence_9_05

1)uvm_do 第一个参数还可以是sequence 指针。

2)当第一个是transaction 时,调用start_item 和finish_item。

3)当第一个是sequence 时,调用此sequence 的start 任务。

UVM:6.4.1 嵌套的sequence_9_06


6.除了uvm_do 宏外,uvm_send宏,uvm_rand_send 宏,uvm_create 宏,第一个参数都可以是sequence 的指针,唯一例外是start_item 和finish_item,这两个任务参数必须是transaction 指针。