版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、UVM實(shí)戰(zhàn)(卷1)學(xué)習(xí)筆記看了第 1/2/3/4/5/6/8/9.1這幾個(gè)章節(jié)。第一章是綜述,第二章是一個(gè)具體的例子,學(xué)習(xí)筆記從第三章相關(guān)內(nèi)容開(kāi)始。我個(gè)人覺(jué)得UVM 重要的部分(特點(diǎn)的部分):1) factory 機(jī)制( override config_db )2) TLM 傳遞3) phase 機(jī)制4) sequence-sequencer 以及 virtual seq/sqr內(nèi)容中的截圖基本來(lái)自于 UVM 源代碼、書自帶的例子和 uvm1.1 應(yīng)用指南及源代碼分析這個(gè) PDF里的。 需要結(jié)合書( UVM 實(shí)戰(zhàn)(卷 1)第 1 版)來(lái)看這個(gè)筆記。第3章 UVM基礎(chǔ)3.1 uvm_compon
2、ent和 uvm_object常用的類名字:這個(gè)圖是從作者張強(qiáng)的uvm1.1 應(yīng)用指南及源代碼分析里截得,不如書上uvm_sequencer 也是代碼里必須有的,所以我加了uvm_sequencer3.1.1 里的圖好。uvm_void 是一個(gè)空的虛類。在src/base/uvm_misc.svh 中定義:紅框的是我們搭testbench 的時(shí)候用的比較多的基類。常用的 uvm_object 派生類:sequencer 給 driver 的 transaction 要 派 生 自 uvm_sequence_item , 不 要 派 生 自 uvm_transaction所有的 sequence
3、 要派生自 uvm_sequence 或者 uvm_sequence 的派生類,可以理解為 sequence 是 sequence_item 的組合(集合) 。 driver 向 sequencer 索要 item ,sequencer 檢查是否有 sequence 要發(fā)送 item ,當(dāng)發(fā)現(xiàn)有 item 待發(fā)送時(shí),就把這個(gè) item 發(fā)給 driver.常用的 uvm_component派生類:所有的 driver 要派生自u(píng)vm_driver.driver 用來(lái)把 sequence_item 中的信息驅(qū)動(dòng)到DUT 端口上,從transaction-level 向 signal-level
4、的轉(zhuǎn)換。uvm_driver 需要參數(shù)( REQ RSP),比uvm_component增 加 了 幾 個(gè) 成 員 。 重 要 的 是seq_item_port和req/rsp.( src/comps/uvm_driver.svh )monitor/scoreboard派生自u(píng)vm_monitor和 uvm_scoreboard , 但是uvm_monitor和uvm_scoreboard 并沒(méi)有在uvm_component基礎(chǔ)上做擴(kuò)展。src/comps/uvm_monitor.svhsequencer 要派生自 uvm_sequencer. sequencer 做了很多擴(kuò)展, 但是如果我們
5、自己寫的 sequencer 里沒(méi)有增加成員的話,可以直接寫如下代碼:typedef uvm_sequencer #( 傳遞的 sequence_item 類名 )sequencer 類名 ;因?yàn)閟equencer在agent中例化,所以一般寫在agent類文件里。reference_model派生自u(píng)vm_component.agent 要派生自u(píng)vm_agent. uvm_agent 里多了一個(gè)is_active 的成員。一般根據(jù)這個(gè)active來(lái)決定是否實(shí)例化driver 和 sequencer.is_active 變量的數(shù)值需要在env 的 build_phase置完成(可以直接設(shè)置,
6、也可以用uvm_config_db#(int):set )。里設(shè)env 要派生自 uvm_env. uvm_env 沒(méi)有對(duì) uvm_component 擴(kuò)展。src/comps/uvm_env.svh所有的 test 都要派生自 uvm_test 或者它的派生類。 uvm_test 也沒(méi)擴(kuò)展 src/comps/uvm_test.svhuvm_object 和 uvm_component的 macromacro非常重要,事關(guān)把這些類的對(duì)象注冊(cè)到factory機(jī)制中去。uvm_object macro1)對(duì)于 uvm_sequence_item 就統(tǒng)一用 (假設(shè)不用 parameter) :uv
7、m_object_utils_begin(item類名 ). field_automation uvm_object_utils_end2)對(duì)于 uvm_sequence ,要加上uvm_object_utils(sequence類名 )可能還需要 uvm_declare_p_sequencer(sequencer 類名 )的聲明uvm_component macro對(duì)于 driver monitor reference_model scoreboard sequencer case agent env這些uvm_component 派生類都要加上:uvm_component_utils( 類
8、名 )uvm_component 里的成員也可以像uvm_object 里成員一樣,用field_automation機(jī)制。field_automation機(jī)制:對(duì)于 uvm_object 派生類來(lái)說(shuō), field_automation機(jī)制讓對(duì)象自動(dòng)有的copy compare print packunpack 等函數(shù),簡(jiǎn)化了實(shí)現(xiàn)uvm_component 派生類里一些function/task的工作量對(duì)于 uvm_component 派生類來(lái)說(shuō), field_automation機(jī)制最重要的是可以在 build_phase 中自動(dòng)獲取uvm_config_db#():set() 的數(shù)值( 必
9、須加 super.build_phase(phase) )- 也就是不用寫 uvm_config_db#():get()注意:field_automation的 macro 的類型要和uvm_config_db 的參數(shù)類型一致:如下示例代碼,field_int vs uvm_config_db#(bit47:0)這個(gè)時(shí)候 super.build_phase() 是不起作用的。想要起作用的話,需要用clone = new + copy 源代碼中可以看到 clone 函數(shù)一上來(lái)會(huì)做一次 create,然后調(diào) copy 函數(shù) src/base/uvm_object.svh3.2 UVM 的樹(shù)形結(jié)構(gòu)u
10、vm_component 的 new/create 要注意第一個(gè)參數(shù)是名字,第二個(gè)參數(shù)是UVM 真正的樹(shù)根是“uvm_top ” . 根據(jù)上面這個(gè)樹(shù)結(jié)構(gòu),可以看出一個(gè)個(gè)parent 指針。component的 parent 是什么。 uvm_top 的 parent 是 null 。當(dāng)一個(gè) component 在實(shí)例化的時(shí)候,如果parent 參數(shù)設(shè)成null ,那么 parent 參數(shù)會(huì)被仿真器自動(dòng)設(shè)置成uvm_root 的實(shí)例 uvm_top.在 6.6.1 章節(jié)里也提到了, sequence 在 uvm_config_db# ():get()的時(shí)候,第一個(gè)參數(shù)設(shè)成“ null ”,實(shí)際就
11、是uvm_root:get()3.5.1 章節(jié)也提到了這個(gè)層次結(jié)構(gòu)函數(shù):get_parent()get_child(string name)這兩個(gè)分別獲取parent 指針和指定名字的child 指針。get_children(ref uvm_component children$) 獲取所有的 child 指針 get_num_children() 獲取 child 個(gè)數(shù)get_first_child(ref string name) get_next_child(ref string name) 獲取 child 的名字(反映到 string name 上),返回值是 0/1 兩種情況應(yīng)用
12、參考代碼如下(改動(dòng)的2.5.2 例子中的 my_agent.sv ):注意:上述代碼是在connet_phase 中實(shí)現(xiàn)的。上述代碼的打印結(jié)果如下:my_agents name is uvm_test_top.env.i_agt, parents full path is uvm_test_top.env, children numis3uvm_test_top.env.i_agt0 child: drv - full path:uvm_test_top.env.i_agt.drvuvm_test_top.env.i_agt1 child: mon - full path:uvm_test_t
13、op.env.i_agt.monuvm_test_top.env.i_agt2 child: sqr - full path:uvm_test_top.env.i_agt.sqrThis should be i_agt. my_agents name is uvm_test_top.env.i_agt uvm_test_top.env.i_agt first child name is drv uvm_test_top.env.i_agt next child name is mon uvm_test_top.env.i_agt next child name is sqrmy_agents
14、name is uvm_test_top.env.o_agt, parents full path is uvm_test_top.env, childrennum is1uvm_test_top.env.o_agt0 child: mon - full path:uvm_test_top.env.o_agt.monUVM_WARNING /tools/synopsys/vcs/G-2012.09/etc/uvm/src/base/uvm_component.svh(1846) 0: uvm_test_top.env.o_agt NOCHILD Component with name drv
15、is not a child of component uvm_test_top.env.o_agtThis should be o_agt. my_agents name is uvm_test_top.env.o_agt uvm_test_top.env.o_agt first child name is mon3.3 field automation機(jī)制注意數(shù)組類型的field macro比一般的要少real和event的macro.一般的對(duì)于enum類型有3 個(gè)參數(shù),而數(shù)組的只有2 個(gè)參數(shù)。聯(lián)合數(shù)組的macro比較多常用函數(shù)需要注意bit 個(gè)數(shù)。pack unpack pack_byt
16、es unpack_bytes pack_ints unpack_ints返回值都是field-automation標(biāo)記位17bit 中 bit0copy bit1no_copy bit2compare bit3no_compare bit4printbit5no_print bit6record bit7no_record bit8pack bit9no_packUVM_ALL_ON 是 b000000101010101UVM_ALL_ON|UVM_NO_PACK 這樣就會(huì)忽略掉pack bitfield-automation的 macro 可以和 if 結(jié)合起來(lái),參考3.3.4 的代碼uv
17、m_object_utils_begin(my_transaction)uvm_field_int(dmac, UVM_ALL_ON)uvm_field_int(smac, UVM_ALL_ON)if(is_vlan)beginuvm_field_int(vlan_info1, UVM_ALL_ON)uvm_field_int(vlan_info2, UVM_ALL_ON)uvm_field_int(vlan_info3, UVM_ALL_ON)uvm_field_int(vlan_info4, UVM_ALL_ON)enduvm_field_int(ether_type, UVM_ALL_O
18、N)uvm_field_array_int(pload, UVM_ALL_ON)uvm_field_int(crc, UVM_ALL_ON | UVM_NOPACK)uvm_field_int( is_vlan, UVM_ALL_ON | UVM_NOPACK)uvm_object_utils_end這個(gè) is_vlan 變量可以在sequence 里約束成0 或 1,來(lái)實(shí)現(xiàn)vlan 或非 vlanps: 我覺(jué)得這個(gè)地方代碼其實(shí)寫成像 3.3.3 里的有一個(gè) crc_error 的 rand bit 的更合理一些。然后 crc_error 是 UVM_ALL_ON|UVM_NOPACK,而 c
19、rc 是 UVM_ALL_ON3.4 UVM 打印信息控制get_report_verbosity_level()set_report_verbosity_level(UVM_HIGH)只對(duì)當(dāng)前調(diào)用的component 起作用set_report_verbosity_level_hier(UVM_HIGH)對(duì)當(dāng)前及下面所有的component 起作用simv +UVM_VERBOSITY=UVM_HIGH命令行方式-我覺(jué)得用這個(gè)就可以了重載打印信息:set_report_severity_override(UVM_WARNING,UVM_ERROR); 上述函數(shù)都是在 connect_phas
20、e 及后面的 phase 使用設(shè)置UVM_ERROR到達(dá)一定數(shù)量結(jié)束仿真set_report_max_quit_count(int)get_report_max_quit_count()設(shè)成 0 就是無(wú)論多少error返回如果是0,說(shuō)明無(wú)論多少都不退出error 都不退出設(shè)置在main_phase前調(diào)用。simv +UVM_MAX_QUIT_COUNT=103.4.43.4.53.4.63.4.7 我覺(jué)得應(yīng)該用不大到,就不做筆記了3.5 config_db 機(jī)制uvm_config_db#( 類型 ):set/get(component指針 ,”,變量名字 ”,para4)都是 4 個(gè)參數(shù):第
21、一個(gè)參數(shù)是一個(gè)component 指針,如果是 null 的話,相當(dāng)于 uvm_root:get()第二個(gè)參數(shù)是個(gè)路徑字符串,第一和第二兩個(gè)參數(shù)組和成一個(gè)完整的路徑第三個(gè)參數(shù)對(duì)于set、 get 要完全一致,是變量名字set 的 para4 是數(shù)值, get 的 para4 是變量component 中的成員變量如果:1) component用 uvm_component_utils 宏注冊(cè)2) 變量用 field-automation宏注冊(cè)3) component的 build_phase 函數(shù)里有 super.build_phase(phase)那么可以省略get 語(yǔ)句跨層次多重 set
22、的時(shí)候,看 set 的第一個(gè)參數(shù),層級(jí)越高,優(yōu)先級(jí)越高。調(diào)用 set 的時(shí)候,第一個(gè)參數(shù)盡量使用this同層次設(shè)置的時(shí)候是時(shí)間優(yōu)先非直線設(shè)置的時(shí)候注意第一和第二參數(shù)的使用, 如果需要 parent 指針,則要用 this.m_parentconfig_db 機(jī)制支持通配符,但是作者不推薦使用通配符。 但是在對(duì) sequence 的成員 set的時(shí)候需要用通配符(6.6.1章節(jié))。使用如下函數(shù)調(diào)試config_dbcheck_config_usage() print_config(1/0)這兩個(gè)函數(shù)在 connect_phase 函數(shù)中調(diào)simv +UVM_CONFIG_DB_TRACE注意:第
23、二個(gè)參數(shù)設(shè)置錯(cuò)誤不會(huì)報(bào)錯(cuò)! - config_db 機(jī)制務(wù)必要注意參數(shù)的書寫。第 4 章 UVM 中的 TLM1.0 通信TLM 是 Transaction Level Modeling 縮寫這章要搞清楚port export imp fifo 以及幾種操作function/task和對(duì)應(yīng) component 中要實(shí)現(xiàn)的 function/task下面的箭頭方向都是控制流的方向,不是數(shù)據(jù)流方向。我覺(jué)得作為一個(gè)VMM 用戶會(huì)覺(jué)得TLM 有點(diǎn)難理解,總想用VMM_CHANNEL 去套,結(jié)果把自己搞暈。像port 等其實(shí)是調(diào)imp 所在 component 的 task/function.我看 UV
24、M 源代碼里有一個(gè)uvm_seq_item_pull_port的 class,它的基類是uvm_port_base.在uvm_driver 的成員 seq_item_port 就是這個(gè)類型的。與它對(duì)應(yīng)的是uvm_seq_item_pull_imp ,uvm_sequencer 的成員 seq_item_export 就是這種類型。在my_agent.sv 中會(huì) connect 它們。4.2 端口互連port可以是動(dòng)作的發(fā)起者,exportportexportimpport是動(dòng)作接收者,但是需要以一個(gè)impportimp 也可以 portimp export來(lái)結(jié)束。impportimp用的較多,
25、portportimp可以用port指針賦值來(lái)實(shí)現(xiàn)portport(4.3.2章節(jié) )操作:put get/peek transport, transport相當(dāng)于一次put+ 一次 getpeek 和 get 的不同( 4.3.4 章節(jié)) : 使用 uvm_tlm_analysis_fifo的時(shí)候,get任務(wù)會(huì)使fifo中少一個(gè) transaction ;而 peek 任務(wù)是 fifo 把 transaction 復(fù)制一份發(fā)出, 內(nèi)部緩存中的 transaction 不會(huì)減少。 - 一般情況下 peek 完以后,還得調(diào) get。上述操作都有阻塞和非阻塞之分。port export imp的類
26、型也有blocking 和 nonblocking之分。port/export/imp類 型 :blocking-nonblocking 之分put/get/peek/get_peek/transportblocking/nonblocking/不 區(qū) 分imp要多一個(gè)參數(shù),除了聲明transaction類型(或者REQ RSP類型)以外,還要聲明實(shí)現(xiàn)這個(gè)接口的componentconnect 的一定是同類型的port/export/impTLM 的關(guān)鍵在于“與imp對(duì)應(yīng)的component中task/function的實(shí)現(xiàn)”。假設(shè) A_port.connect(B_imp), 那么需要實(shí)現(xiàn)的
27、task/function為:A_portB_impTask/functionFunctionuvm_blocking_put_portuvm_blocking_put_imp putnonblocking_putnonblocking_put_imptry_put can_putputputputtry_put can_putblocking_transportblocking_transporttransportnonblocking_transportnonblocking_transportnb_transporttransporttransporttransportnb_transp
28、ortget_peekget_peekget peektry_getcan_gettry_peek can_peekget/peek/get_peek 和 put 類似, 上述 task 或 function 必須要實(shí)現(xiàn),如果用不到就寫個(gè)空函數(shù)(章節(jié) 4.2.9 )。注意 上述 task 或者 function 的參數(shù)。 put 是一個(gè) transaction參數(shù), get/peek是 output的transaction 參數(shù), transport 是一個(gè) req 參數(shù)一個(gè) output 的 rsq 參數(shù)。連接用 connect 函數(shù)實(shí)現(xiàn),從名字就可以看出來(lái),這個(gè)必須在connect_pha
29、se 中調(diào)。4.3 通信方式這 節(jié) 應(yīng) 該 是 本 章 重 點(diǎn) 。 實(shí) 際 使 用 中 用 analysis_port analysis_imp 還 是 port tlm_analysis_fifo port 可以根據(jù)實(shí)際情況自己決定。analysis_port(analysis_export) 可以連接多個(gè)imp (一對(duì)多的通信)put 和 get 系列端口與相應(yīng)imp 的通信通常是一對(duì)一的 (可以一對(duì)多, 但是本書沒(méi)有給出一對(duì)多的例子4.2.1章節(jié)有介紹) 。analysis_port(analysis_export) 更像是一個(gè)廣播analysis_port(analysis_expor
30、t) 沒(méi)有阻塞和非阻塞的概念。它是一個(gè)廣播,不等與它相連的其他端口的響應(yīng)。analysis_port ( analysis_export )必須連的imp是 analysis_imp.analysis_imp 所在的component 必須定義個(gè)write 的 function -注意:是function代碼示例: 4.3.1 示例代碼的analysis_port 文件夾component C 和 B 的代碼基本一致。env 的 connect_phase 函數(shù)里做connect :component 中有多個(gè)imp 的時(shí)候,如何實(shí)現(xiàn)write 函數(shù)?4.3.2 給的例子中,scoreboar
31、d 有兩個(gè)imp, 分別從output_agent和analysis_port 獲取 transaction ,然后做 compare. 這個(gè)時(shí)候需要用:uvm_analysis_imp_decl(_ 標(biāo)記 ) 這個(gè) macro ,然后“ write ”函數(shù)變成函數(shù), analysis_port 所在 component 不用變,還是調(diào)write() 函數(shù)即可。使用 macro 聲明reference-model的“write_ 標(biāo)記()”代碼示例如下:write 函數(shù)變名字analysis_port 所在 component 實(shí)現(xiàn)不變。使用 uvm_analysis_fifo(uvm_tlm
32、_analysis_fifo ), analysis_fifo 的本質(zhì)是一塊緩存+兩個(gè) imp.用fifo來(lái)實(shí)現(xiàn)portfifoport使用 fifo 最重要的是選好兩端的port 類型 ,然后根據(jù)選好的兩端port 類型,來(lái)選擇 fifo上要連接的imp/exportfifo 本身實(shí)現(xiàn)了write() put() get() peek()等一系列的function/task ,在兩端 port 所在的 component 中直接調(diào)就可以。連接在 fifo 兩端的都是port ,所以 connect 函數(shù)的起點(diǎn)是兩端。4.3.3 的示例代碼:可以看到 env 里聲明的幾個(gè)fifo 都是 con
33、nect_phase 函數(shù)中 connect 函數(shù)括號(hào)里的參數(shù)。i_agt.ap、 o_agt.ap 和 mdl.ap 是 analysis_portmdl.port 、 scb.exp_port 和 scb.act_port 都是 blocking_get_portfifo 上有很多export ,但是這些export 實(shí)際都是impsrc/tlm1/uvm_tlm_fifo_base.svh上面連接的agt_mdl_fifo.analysis_export也是一個(gè)analysis_imp: 源代碼中實(shí)現(xiàn)如下:src/tlm1/uvm_tlm_fifos.svhuvm_analysis_im
34、p #(T, uvm_tlm_analysis_fifo #(T) analysis_export;fifo 是一個(gè) component ,可以調(diào)一些函數(shù)來(lái)debug:used() is_empty() is_full() flush()fifo 里緩存深度可以在new 的時(shí)候用第三個(gè)參數(shù)設(shè)置。問(wèn)題: fifo 的兩端是不是一般就是analysis_port和blocking_get_port ? -感覺(jué)4.3.5 章節(jié)開(kāi)始一段文字描述是這個(gè)意思。使用fifo還是imp自己來(lái)把握。各有各的好處。imp 可以使用uvm_analysis_imp_decl(_ 標(biāo)記 )的 macro,有時(shí)候會(huì)很方
35、便。而 analysis_fifo 可以用 for 循環(huán)來(lái)操作fifo 數(shù)組,也可以帶來(lái)代碼的簡(jiǎn)潔。imp不能在connect和new的時(shí)候用for循環(huán)。第 5 章 UVM 驗(yàn)證平臺(tái)的運(yùn)行5.1 phase 機(jī)制所有的 phase 如下圖:中間綠色的是task phase,兩頭青色的是function phasecomponent 的實(shí)例化是在build_phase 中完成, object 的實(shí)例化可以在任何phase 完成。function phase 中除了 build_phase 都是“自下而上” 的執(zhí)行- 這里的上下是指的樹(shù)結(jié)構(gòu)中的上下。 - build_phase 是“自上而下”同層
36、次的兄弟關(guān)系的component , build phase 執(zhí)行順序是根據(jù)new時(shí)候name的字典序5.1.3 章節(jié)對(duì)于叔侄關(guān)系的component ,build phase執(zhí)行順序是深度優(yōu)先。例如前面UVM 樹(shù)中,“ scb”和“ i_agt.drv ”,因?yàn)?i_agt 在 scb 前面,會(huì)執(zhí)行完i_agt,然后 drvmonsqr ,然后 o_agt,然后mon ,然后才是scb。所有 component 的同一個(gè) run time phase的上一個(gè)phase 結(jié)束才開(kāi)始當(dāng)前phase。是同時(shí)開(kāi)始的。- 也就是說(shuō)會(huì)等其他componentsuper.build_phase(phase
37、) 一定要加,其他phase 的super.可以不用加.phase 之間可以跳轉(zhuǎn)。例如在正常工作的時(shí)候,發(fā)生了的轉(zhuǎn)到 reset_phase. 例如: 5.1.7 章節(jié)的示例代碼reset,那么應(yīng)該是main_phase跳jump導(dǎo)致main_phase的objection沒(méi)有被drop.- 仿真發(fā)現(xiàn)這里會(huì)有一個(gè)UVMWARINGING報(bào)出來(lái), 這個(gè)問(wèn)題如何解決呢?simv +UVM_PHASE_TRACE可以調(diào)試phase-應(yīng)該不用管它超時(shí)退出機(jī)制:1) 在 test 的 build_phase 里加上uvm_top.set_timeout(500ns,0);2) define UVM_DE
38、FAULT_TIMEOUT 500ns3) simv +UVM_TIMEOUT=”500ns,YES”控制 objection 的時(shí)機(jī):推薦在 sequence 里的 body () task 中實(shí)現(xiàn)控制 objection 5.2.2 章節(jié)示例代碼:注意用starting_phase 的判斷。給 main_phase 設(shè)置 drain_time 。所謂 drain_time ,就是 main_phase 結(jié)束之后經(jīng)過(guò) drain_time 時(shí)間以后再進(jìn)入 post_main_phase 。在 test 的 main_phase task 中使用 set_drain_time 函數(shù):objec
39、tion 的調(diào)試simv +UVM_OBJECTION_TRACE5.3 章節(jié)介紹了domain ,我覺(jué)得基本不會(huì)用這個(gè)吧?第 6 章 UVM 中的 sequencesequencer 將 sequence 傳遞給 driver. 引入 sequence,帶來(lái)的變化:1) uvm_transaction 的派生類變成uvm_sequence_item 的派生類2) 需要 sequencer3) driver main_phase 有變化4) 啟動(dòng) sequence(一般在case 的 build_phase 中)上述變化反映到代碼中,如圖6.1.2 章節(jié)的示例代碼下圖中有兩種方法實(shí)現(xiàn)my_se
40、quencersequence 的啟動(dòng)方式 (3 種 ):1)在 case 的 main_phase 中:注意要設(shè)置cseq 的 staring_phase 。 我覺(jué)得書上6-5 代碼清單里有兩個(gè)地方寫的不合理,一個(gè)是start的參數(shù)應(yīng)該是sqr 的路徑,另外是少了設(shè)置starting_phase2)注意在case的 build_phase 中3)更推薦用下面這種方式:sequence 被啟動(dòng)后,會(huì)自動(dòng)執(zhí)行sequence 的 body task(以及pre_body mid_body post_body )在 同 一 個(gè)sequencer上 可 以 啟 動(dòng) 多 個(gè)sequence , 因 為
41、 啟 動(dòng) 了 多 個(gè) , 所 以 不 能 設(shè) 置default_sequnce 了,需要用上面第一種方法來(lái)啟動(dòng)sequence. - 但是 sequence 的嵌套可以解決這個(gè)問(wèn)題(上層sequence 做 default_sequence 6.4 章節(jié))sequence 可以用 uvm_do_pri uvm_do_pri_with 等 macro 來(lái)設(shè)置優(yōu)先級(jí) priority, 當(dāng)一個(gè) sequencer 上有多個(gè) sequence 的時(shí)候,這個(gè)優(yōu)先級(jí)就有意義了。優(yōu)先級(jí)就帶來(lái)sequencer 的仲裁算法。默認(rèn)的仲裁算法是SEQ_ARB_FIFO(楊哥遵循陷入先出順序,不考慮優(yōu)先級(jí)),所以
42、設(shè)置優(yōu)先級(jí)以后,需要改變仲裁算法。在 case 的 main_phase 中調(diào)函數(shù)set_arbitration()前面提到的“嵌套sequence”也可以像上面這樣來(lái)設(shè)置仲裁算法。sequencer 的操作:lock()grab()獲取獨(dú)占權(quán)。unlock() ungrab()釋放獨(dú)占權(quán)is_relevant()設(shè)置 sequence 有效和無(wú)效。返回值1 有效,返回值wait_for_relevant()當(dāng)sequencer 發(fā)現(xiàn)啟動(dòng)的所有sequencewat_for_relevant() task 。 在 wait_for_relevant() task中,必須使0 無(wú)效都無(wú)效的時(shí)候,會(huì)自動(dòng)調(diào)sequence 無(wú)效的條
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版礦區(qū)作業(yè)承包合同版
- 2024芒果園果樹(shù)病蟲(chóng)害防治產(chǎn)品供應(yīng)與技術(shù)服務(wù)合同3篇
- 2024煤炭供需長(zhǎng)期合作協(xié)議
- 2025年度智能物流設(shè)備代理商合作協(xié)議(全新發(fā)布)4篇
- 2024-2030年中國(guó)城市地下綜合管廊建設(shè)市場(chǎng)現(xiàn)狀研究分析與發(fā)展趨勢(shì)預(yù)測(cè)報(bào)告
- 單晶氮化鋁項(xiàng)目商業(yè)計(jì)劃書
- 2025年度個(gè)人二手房買賣合同房屋租賃權(quán)轉(zhuǎn)讓與限制4篇
- 2025年度個(gè)人留置車輛借款合同(二手車市場(chǎng)交易版)3篇
- 2025年環(huán)保項(xiàng)目合作協(xié)議范本(含碳排放權(quán)交易)3篇
- 2025年度個(gè)人教育培訓(xùn)機(jī)構(gòu)連帶擔(dān)保協(xié)議4篇
- 電商運(yùn)營(yíng)管理制度
- 二零二五年度一手房購(gòu)房協(xié)議書(共有產(chǎn)權(quán)房購(gòu)房協(xié)議)3篇
- 2025年上半年上半年重慶三峽融資擔(dān)保集團(tuán)股份限公司招聘6人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 城市公共交通運(yùn)營(yíng)協(xié)議
- 內(nèi)燃副司機(jī)晉升司機(jī)理論知識(shí)考試題及答案
- 2024北京東城初二(上)期末語(yǔ)文試卷及答案
- 2024設(shè)計(jì)院與職工勞動(dòng)合同書樣本
- 2024年貴州公務(wù)員考試申論試題(B卷)
- 電工高級(jí)工練習(xí)題庫(kù)(附參考答案)
- 村里干零工協(xié)議書
- 2024年高考八省聯(lián)考地理適應(yīng)性試卷附答案解析
評(píng)論
0/150
提交評(píng)論