uvmʵս-ѧϰ±Ê¼Ç

ÉÏÊöº¯Êý¶¼ÊÇÔÚconnect_phase¼°ºóÃæµÄphaseʹÓÃ

ÉèÖÃUVM_ERRORµ½´ïÒ»¶¨ÊýÁ¿½áÊø·ÂÕæ

set_report_max_quit_count(int) Éè³É0¾ÍÊÇÎÞÂÛ¶àÉÙerror¶¼²»Í˳ö

get_report_max_quit_count() ·µ»ØÈç¹ûÊÇ0£¬ËµÃ÷ÎÞÂÛ¶àÉÙerror¶¼²»Í˳ö ÉèÖÃÔÚmain_phaseǰµ÷Óá£

simv +UVM_MAX_QUIT_COUNT=10

3.4.4 3.4.5 3.4.6 3.4.7 ÎÒ¾õµÃÓ¦¸ÃÓò»´óµ½£¬¾Í²»×ö±Ê¼ÇÁË

3.5 config_db»úÖÆ

uvm_config_db#(ÀàÐÍ)::set/get(componentÖ¸Õë,¡±¡­¡±,¡±±äÁ¿Ãû×Ö¡±£¬para4) ¶¼ÊÇ4¸ö²ÎÊý£º

µÚÒ»¸ö²ÎÊýÊÇÒ»¸öcomponentÖ¸Õ룬Èç¹ûÊÇnullµÄ»°£¬Ï൱ÓÚuvm_root::get() µÚ¶þ¸ö²ÎÊýÊǸö·¾¶×Ö·û´®£¬ µÚÒ»ºÍµÚ¶þÁ½¸ö²ÎÊý×éºÍ³ÉÒ»¸öÍêÕûµÄ·¾¶ µÚÈý¸ö²ÎÊý¶ÔÓÚset¡¢getÒªÍêȫһÖ£¬ÊDZäÁ¿Ãû×Ö setµÄpara4ÊÇÊýÖµ£¬getµÄpara4ÊDZäÁ¿

componentÖеijÉÔ±±äÁ¿Èç¹û£º

1£© componentÓÃuvm_component_utilsºê×¢²á 2£© ±äÁ¿ÓÃfield-automationºê×¢²á

3£© componentµÄbuild_phaseº¯ÊýÀïÓÐsuper.build_phase(phase) ÄÇô¿ÉÒÔÊ¡ÂÔgetÓï¾ä

¿ç²ã´Î¶àÖØsetµÄʱºò£¬¿´setµÄµÚÒ»¸ö²ÎÊý£¬²ã¼¶Ô½¸ß£¬ÓÅÏȼ¶Ô½¸ß¡£ µ÷ÓÃsetµÄʱºò£¬µÚÒ»¸ö²ÎÊý¾¡Á¿Ê¹ÓÃthis ͬ²ã´ÎÉèÖõÄʱºòÊÇʱ¼äÓÅÏÈ

·ÇÖ±ÏßÉèÖõÄʱºò×¢Òâ µÚÒ»ºÍµÚ¶þ²ÎÊýµÄʹÓã¬Èç¹ûÐèÒªparentÖ¸Õ룬ÔòÒªÓÃthis.m_parent

config_db»úÖÆÖ§³ÖͨÅä·û£¬µ«ÊÇ×÷Õß²»ÍƼöʹÓÃͨÅä·û¡£ µ«ÊÇÔÚ¶ÔsequenceµÄ³ÉÔ±setµÄʱºòÐèÒªÓÃͨÅä·û£¨6.6.1Õ½ڣ©¡£ ʹÓÃÈçϺ¯Êýµ÷ÊÔ config_db

check_config_usage() print_config(1/0) ÕâÁ½¸öº¯ÊýÔÚconnect_phaseº¯ÊýÖе÷ simv +UVM_CONFIG_DB_TRACE

×¢Ò⣺µÚ¶þ¸ö²ÎÊýÉèÖôíÎ󲻻ᱨ´í£¡£¡------- config_db»úÖÆÎñ±ØÒª×¢Òâ²ÎÊýµÄÊéд¡£

µÚ4Õ UVMÖеÄTLM1.0ͨÐÅ

TLM ÊÇTransaction Level ModelingËõд

ÕâÕÂÒª¸ãÇå³þ port export imp fifoÒÔ¼°¼¸ÖÖ²Ù×÷function/task ºÍ¶ÔÓ¦componentÖÐҪʵÏÖµÄfunction/task

ÏÂÃæµÄ¼ýÍ··½Ïò¶¼ÊÇ¿ØÖÆÁ÷µÄ·½Ïò£¬²»ÊÇÊý¾ÝÁ÷·½Ïò¡£

ÎÒ¾õµÃ×÷Ϊһ¸öVMMÓû§»á¾õµÃTLMÓеãÄÑÀí½â£¬×ÜÏëÓÃVMM_CHANNELÈ¥Ì×£¬½á¹û°Ñ×Ô¼º¸ãÔΡ£ÏñportµÈÆäʵÊǵ÷impËùÔÚcomponentµÄtask/function.

ÎÒ¿´UVMÔ´´úÂëÀïÓÐÒ»¸öuvm_seq_item_pull_portµÄclass£¬ËüµÄ»ùÀàÊÇuvm_port_base. ÔÚuvm_driverµÄ³ÉÔ±seq_item_port¾ÍÊÇÕâ¸öÀàÐ͵ġ£ ÓëËü¶ÔÓ¦µÄÊÇuvm_seq_item_pull_imp£¬uvm_sequencerµÄ³ÉÔ±seq_item_export¾ÍÊÇÕâÖÖÀàÐÍ¡£ÔÚmy_agent.svÖлáconnectËüÃÇ¡£

4.2¶Ë¿Ú»¥Á¬

portÊǶ¯×÷µÄ·¢ÆðÕߣ¬exportÊǶ¯×÷½ÓÊÕÕߣ¬µ«ÊÇÐèÒªÒÔÒ»¸öimpÀ´½áÊø¡£ ¿ÉÒÔport?export?imp port?port?imp Ò²¿ÉÒÔport?imp export?imp

port?impÓõĽ϶࣬port?port?imp¿ÉÒÔÓÃportÖ¸Õ븳ֵÀ´ÊµÏÖport?port(4.3.2Õ½Ú)

²Ù×÷£º

put get/peek transport, transportÏ൱ÓÚÒ»´Îput+Ò»´Îget

peekºÍgetµÄ²»Í¬£¨4.3.4Õ½ڣ©: ʹÓÃuvm_tlm_analysis_fifoµÄʱºò£¬getÈÎÎñ»áʹfifoÖÐÉÙÒ»¸ötransaction£»¶øpeekÈÎÎñÊÇfifo°Ñtransaction¸´ÖÆÒ»·Ý·¢³ö£¬ÄÚ²¿»º´æÖеÄtransaction²»»á¼õÉÙ¡£----- Ò»°ãÇé¿öÏÂpeekÍêÒԺ󣬻¹µÃµ÷get¡£

ÉÏÊö²Ù×÷¶¼ÓÐ×èÈûºÍ·Ç×èÈûÖ®·Ö¡£ port export impµÄÀàÐÍÒ²ÓÐblockingºÍnonblockingÖ®·Ö¡£ port/export/impÀàÐÍ£º put/get/peek/get_peek/transport blocking/nonblocking/²»Çø·Öblocking-nonblockingÖ®·Ö

impÒª¶àÒ»¸ö²ÎÊý£¬³ýÁËÉùÃ÷transactionÀàÐÍ£¨»òÕßREQ RSPÀàÐÍ£©ÒÔÍ⣬»¹ÒªÉùÃ÷ʵÏÖÕâ¸ö½Ó¿ÚµÄcomponent

connectµÄÒ»¶¨ÊÇͬÀàÐ͵Äport/export/imp

TLMµÄ¹Ø¼üÔÚÓÚ¡°Óëimp¶ÔÓ¦µÄcomponentÖÐtask/functionµÄʵÏÖ¡±¡£ ¼ÙÉèA_port.connect(B_imp),ÄÇôÐèҪʵÏÖµÄtask/functionΪ£º

A_port nonblocking_put put blocking_transport nonblocking_transport transport get_peek B_imp nonblocking_put_imp put blocking_transport nonblocking_transport transport get_peek Task/function put transport transport get peek Function try_put can_put try_put can_put nb_transport nb_transport try_get can_get try_peek can_peek uvm_blocking_put_port uvm_blocking_put_imp put get/peek/get_peekºÍputÀàËÆ£¬ ÉÏÊötask»òfunction±ØÐëҪʵÏÖ£¬Èç¹ûÓò»µ½¾Íд¸ö¿Õº¯Êý£¨Õ½Ú4.2.9£©¡£

×¢Òâ ÉÏÊötask»òÕßfunctionµÄ²ÎÊý¡£ putÊÇÒ»¸ötransaction²ÎÊý£¬get/peekÊÇoutputµÄtransaction²ÎÊý£¬transportÊÇÒ»¸öreq²ÎÊýÒ»¸öoutputµÄrsq²ÎÊý¡£

Á¬½ÓÓÃconnectº¯ÊýʵÏÖ£¬´ÓÃû×־ͿÉÒÔ¿´³öÀ´£¬Õâ¸ö±ØÐëÔÚconnect_phaseÖе÷¡£

4.3ͨÐÅ·½Ê½

Õâ½ÚÓ¦¸ÃÊDZ¾ÕÂÖØµã¡£ ʵ¼ÊʹÓÃÖÐÓÃanalysis_port?analysis_imp »¹ÊÇ port?tlm_analysis_fifo?port ¿ÉÒÔ¸ù¾Ýʵ¼ÊÇé¿ö×Ô¼º¾ö¶¨¡£

analysis_port(analysis_export)¿ÉÒÔÁ¬½Ó¶à¸öimp£¨Ò»¶Ô¶àµÄͨÐÅ£© ?? putºÍgetϵÁж˿ÚÓëÏàÓ¦impµÄͨÐÅͨ³£ÊÇÒ»¶ÔÒ»µÄ£¨¿ÉÒÔÒ»¶Ô¶à£¬µ«ÊDZ¾ÊéûÓиø³öÒ»¶Ô¶àµÄÀý×Ó 4.2.1Õ½ÚÓнéÉÜ£©¡£ analysis_port(analysis_export)¸üÏñÊÇÒ»¸ö¹ã²¥

analysis_port(analysis_export)ûÓÐ×èÈûºÍ·Ç×èÈûµÄ¸ÅÄî¡£ËüÊÇÒ»¸ö¹ã²¥£¬²»µÈÓëËüÏàÁ¬µÄÆäËû¶Ë¿ÚµÄÏìÓ¦¡£

analysis_port£¨analysis_export£©±ØÐëÁ¬µÄimpÊÇanalysis_imp. analysis_impËùÔÚµÄcomponent±ØÐ붨Òå¸öwriteµÄfunction --------- ×¢Ò⣺ÊÇfunction

´úÂëʾÀý£º4.3.1ʾÀý´úÂëµÄanalysis_portÎļþ¼Ð

component CºÍBµÄ´úÂë»ù±¾Ò»Ö¡£ envµÄconnect_phaseº¯ÊýÀï×öconnect£º

componentÖÐÓжà¸öimpµÄʱºò£¬ÈçºÎʵÏÖwriteº¯Êý£¿

4.3.2¸øµÄÀý×ÓÖУ¬scoreboardÓÐÁ½¸öimp,·Ö±ð´Óoutput_agentºÍreference-modelµÄanalysis_port»ñÈ¡transaction£¬È»ºó×öcompare. Õâ¸öʱºòÐèÒªÓãº

`uvm_analysis_imp_decl(_±ê¼Ç) Õâ¸ömacro£¬È»ºó¡°write¡±º¯Êý±ä³É ¡°write_±ê¼Ç£¨£©¡±º¯Êý£¬analysis_portËùÔÚcomponent²»Óñ䣬»¹Êǵ÷write()º¯Êý¼´¿É¡£ ´úÂëʾÀýÈçÏ£º

ʹÓÃmacroÉùÃ÷

writeº¯Êý±äÃû×Ö

analysis_portËùÔÚcomponentʵÏÖ²»±ä¡£

ʹÓÃuvm_analysis_fifo£¨uvm_tlm_analysis_fifo£©, analysis_fifoµÄ±¾ÖÊÊÇÒ»¿é»º´æ+Á½¸öimp. ÓÃfifoÀ´ÊµÏÖ port?fifo?port

ʹÓÃfifo×îÖØÒªµÄÊÇ Ñ¡ºÃÁ½¶ËµÄportÀàÐÍ,È»ºó¸ù¾ÝÑ¡ºÃµÄÁ½¶ËportÀàÐÍ£¬À´Ñ¡ÔñfifoÉÏÒªÁ¬½ÓµÄimp/export fifo±¾ÉíʵÏÖÁËwrite() put() get() peek()µÈһϵÁеÄfunction/task£¬ÔÚÁ½¶ËportËùÔÚµÄcomponentÖÐÖ±½Óµ÷¾Í¿ÉÒÔ¡£

Á¬½ÓÔÚfifoÁ½¶ËµÄ¶¼ÊÇport£¬ËùÒÔconnectº¯ÊýµÄÆðµãÊÇÁ½¶Ë¡£ 4.3.3µÄʾÀý´úÂ룺

¿ÉÒÔ¿´µ½envÀïÉùÃ÷µÄ¼¸¸öfifo¶¼ÊÇconnect_phaseº¯ÊýÖÐconnectº¯ÊýÀ¨ºÅÀïµÄ²ÎÊý¡£

ÁªÏµ¿Í·þ£º779662525#qq.com(#Ìæ»»Îª@)