uvmʵս-ѧϰ±Ê¼Ç ÏÂÔØ±¾ÎÄ

6.4 sequence½ø½×Ó¦ÓÃ

Ç°ÃæÌáµ½ÁËuvm_doϵÁкê¼È¿ÉÒÔÓÃÔÚuvm_sequence_itemÉÏÒ²¿ÉÒÔÓÃÓÚuvm_sequence£¬ËùÒÔsequence¿ÉÒÔǶÌס£

sequenceÖпÉÒÔÓÐrand³ÉÔ±£¬²¢ÇÒ¿ÉÒÔ°Ñrand³ÉÔ±ºÍtransactionµÄrand³ÉÔ±Ô¼ÊøÆðÀ´¡£

ͨ¹ýÉÏÃæµÄÔ¼Êø£¬ÉϲãsequenceÀï¿ÉÒÔÔ¼ÊøÏ²ãsequenceÀïtransactionµÄ³ÉÔ±£º

sequenceµÄ²ÎÊý´ú±íÁËËüµÄreqºÍrspµÄuvm_sequence_itemÅÉÉúÀàµÄÀàÃû¡£Èç¹ûÐèÒª·¢ËͲ»Í¬uvm_sequence_itemÅÉÉúÀàµÄ¶ÔÏó£¬ÄÇôÐèÒª°Ñsequence¡¢sequencerºÍdriver²ÎÊýÉùÃ÷³É»ùÀàuvm_sequence_item¡£ÓÉÓÚÊÇ»ùÀ࣬ËùÒÔÔÚdriverÖÐseq_item_port.get_next_item(req)µÄʱºòÒª×ö$castת»». ÒòΪsequenceĬÈϲÎÊý¾ÍÊÇuvm_sequence_item£¬ËùÒÔ²»ÓÃд¡£ 6.4.3ʾÀý´úÂ룺

driverÖеÄcast²Ù×÷

ʵ¼ÊµÄtestbenchÖУ¬ºÜ¿ÉÄÜ»áÔÚsequencerÀï¼ÓÈëһЩ³ÉÔ±±äÁ¿£¬Ò»°ãÕâÖÖÇé¿öÏÂÒªdeclare p_sequencerÕâ¸öÖ¸Õë¡£ÓÃmacro ¨C uvm_declare_p_sequencer(sequencerÀàÃû) ÔÚsequenceÖпÉÒÔʵÏÖ£º 6.4.4Õ½ÚʾÀý

ÎÊÌ⣺ p_sequencerµÄÉùÃ÷macro ÊDz»ÊÇÒ»Ö±¼Ó×Å ----Ö±½ÓдÔÚbase_sequenceÀï±È½ÏºÃ¡£

¿ÉÒÔ×öÒ»¸öbase_sequence,ÐèÒªp_sequencerµÄÉùÃ÷µÄ»°£¬Ð´ÔÚbase_sequenceÀÕâÑù¾Í²»ÓÃÿ¸ösequence¶¼ÉùÃ÷p_sequencerÖ¸ÕëÁË¡£

6.5 virtual sequence

virtual sequence (virtual sequencer)ÊÇÌØÉ«¡£ ÈçÏÂͼËùʾ: ϵͳ¼¶»·¾³Àï¿ÉÄÜÓжà¸öenv£¬´øÀ´Á˶à¸ösequencer/sequence£¬ ÕâÑùÔÚcaseÀï²»ºÃά»¤¡£ÊµÏÖÒ»¸övirtual sequencer£¬ÀïÃæ°üÀ¨Ö¸Ïò¸÷¸ösequencerµÄÖ¸Õ룻¶øvirtual sequence¾ÍÏñÇ°Ãæ½éÉܵġ°sequenceǶÌס±Ò»ÑùʵÏÖ¡£

ÓÉÓÚvirtual sequencerÀïÓÐʵ¼ÊsequencerµÄÖ¸Õ룬ËùÒԿ϶¨²»ÄÜÓá°typedef uvm_sequncer¡­.¡±À´ÊµÏÖ¡£ ͬʱ£¬ÓÉÓÚvirtual sequencerÓгÉÔ±ÁË£¬ËùÒÔÔÚvirtual sequenceÀïÒªdeclare p_sequencer,²¢ÇÒÖ¸Ïòvirtual sequencer.

base_testµÄconnect_phaseº¯ÊýÖУ¬Òª°Ñvirtual sequencerÀïµÄ³ÉÔ±¸³Öµµ½¸÷¸öenvµÄsqrÉÏ¡£---- ËùÒÔvirtual sequencerºÍ¸÷¸öenvÊÇͬ¼¶µÄ

Ëùν¡°virtual¡±ÊÇ˵Ëü±¾Éí²»»á·¢ËÍtransaction£¬ËùÒÔvirtual sequencerºÍvirtual sequence¶¼²»ÓÃдtransactionµÄ²ÎÊý£¨ÓÃÁËĬÈϵIJÎÊý£©¡£ 6.5.3Õ½ÚʾÀý´úÂë

virtual sequence£º ÉùÃ÷p_sequencerÖ¸Õ룬עÒâuvm_do_onµÄsequencer²ÎÊý

virtual sequencer ÉùÃ÷Ö¸Õë

base_test ÔÚconnect_phaseÖÐÁ¬½Ósequencer

case£ºÉèÖÃvirtual sequencerµÄmain_phaseµÄdefault_sequenceΪvirtual sequence.

Ç°ÃæÌáµ½ÁËobjectionµÄ¿ØÖÆÔÚsequenceµÄbody taskÖÐʵÏÖ¡£ÏÖÔÚÒýÈëÁËvirtual sequenceÒÔºó£¬objectionµÄ¿ØÖƾÍÒÆµ½¶¥²ãvirtual sequenceµÄbody taskÖС£

sequenceÖо¡Á¿²»ÒªÓÃfork join_none£¬±ÜÃâÖ´Ðе½endtask

ËäÈ»sequence²»ÊÇcomponent£¬µ«ÊÇÒ²¿ÉÒÔÔÚsequenceÖÐʹÓÃuvm_config_db (ÀàËÆÓÚtp_tbÖÐʹÓÃ)¡£

ÔÚcaseÖжÔsequenceµÄ³ÉÔ±ÓÃuvm_config_db#(ÀàÐÍ)::set()µÄʱºòҪעÒ⣺ sequenceÓÉÓÚÊÇÒ»¸öobject£¬ËüµÄÃû×Ö¿ÉÄܲ»È·¶¨£¬ËùÒÔÕâÀïÒ»°ãÓÃͨÅä·û¡£¶øÔÚsequenceÖÐgetµÄʱºò£¬ÔòʹÓÃuvm_root::get()/»òÕßnullºÍget_full_name()£¬×÷ΪǰÁ½¸ö²ÎÊý¡£