www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > ZLG致遠(yuǎn)電子
[導(dǎo)讀]就我個(gè)人而言,我覺得編寫sequence是在驗(yàn)證任何IP時(shí)最具挑戰(zhàn)性的部分。首先需要仔細(xì)構(gòu)想場(chǎng)景,然后coding。如果沒有任何程度的復(fù)用,我們需要從頭為每個(gè)場(chǎng)景編寫一個(gè)sequence,這使得sequence難以維護(hù)和調(diào)試。sequence的編寫和調(diào)試是非常體現(xiàn)驗(yàn)證工程師編碼能...

就我個(gè)人而言,我覺得編寫sequence是在驗(yàn)證任何IP時(shí)最具挑戰(zhàn)性的部分。首先需要仔細(xì)構(gòu)想場(chǎng)景,然后coding。如果沒有任何程度的復(fù)用,我們需要從頭為每個(gè)場(chǎng)景編寫一個(gè)sequence,這使得sequence難以維護(hù)和調(diào)試。


sequence的編寫和調(diào)試是非常體現(xiàn)驗(yàn)證工程師編碼能力的地方之一,如果每一個(gè)sequnce都有著完全不同的工作模式,那么維護(hù)起來非常痛苦。


網(wǎng)絡(luò)上有一個(gè)段子,程序員最討厭4件事情:

1、寫文檔

2、別人不寫文檔

3、寫注釋

4、別人不寫注釋


想象一下,如果你驗(yàn)證同事離職,交接給你上百個(gè)定向且詭異的測(cè)試用例或者sequence?你會(huì)不會(huì)立馬想去重構(gòu)。


sequences 由多個(gè)事務(wù)激勵(lì)組成,在UVM中其繼承自參數(shù)化類uvm_sequence。通過這些事務(wù)觸發(fā)一些驗(yàn)證工程師希望觸及的場(chǎng)景,而sequence的分層會(huì)創(chuàng)建一些更加復(fù)雜的場(chǎng)景激勵(lì)。驗(yàn)證空間隨著設(shè)計(jì)規(guī)模指數(shù)級(jí)上升,驗(yàn)證激勵(lì)自然也會(huì)越來越復(fù)雜。

class usb_simple_sequence extends uvm_sequence #(usb_transfer);rand int unsigned sequence_length;constraint reasonable_seq_len { sequence_length < 10 };//Constructorfunction new(string name=”usb_simple_bulk_sequence”);super.new(name);endfunction//Register with factory`uvm_object_utils(usb_simple_bulk_sequence)//the body() task is the actual logic of the sequencevirtual task body();repeat(sequence_length)`uvm_do_with(req, {//Setting the device_id to 2req.device_id == 8’d2;//Setting transfer type to BULKreq.type == usb_transfer::BULK_TRANSFER;})endtask : bodyendclass

在上面的sequence 中,我們?cè)噲D將發(fā)送多次id為2的事務(wù),在uvm_test中將該sequence指定為default sequence即可。

class usb_simple_bulk_test extends uvm_test;virtual function void build_phase(uvm_phase phase );uvm_config_db#(uvm_object_wrapper)::set(this, "sequencer_obj.main_phase","default_sequence", usb_simple_sequence::type_id::get());endfunction : build_phaseendclass
到目前為止,sequence看起來既簡(jiǎn)單又直接。但是直接的代碼往往意味著麻煩的堆疊。為了確保sequence在更復(fù)雜的場(chǎng)景中重用,我們必須遵循一些準(zhǔn)則或者說代碼規(guī)范。


1、只在base sequence 類中的pre_start和post_start任務(wù)中raising objections和 dropping objections來管理測(cè)試用例的開始和結(jié)束。通過這種方式,能夠減少每一個(gè)sequence子類中的相關(guān)phase控制代碼。

task pre_start()if(starting_phase != null)starting_phase.raise_objection(this);endtask : pre_starttask post_start()if(starting_phase != null)starting_phase.drop_objection(this);endtask : post_start

需要注意的是,只有被定義為default sequence才會(huì)自動(dòng)執(zhí)行starting_phase,否則就需要手動(dòng)調(diào)用了。

class usb_simple_bulk_test extends uvm_test;usb_simple_sequence seq;virtual function void main_phase(uvm_phase phase );//User need to set the starting_phase as sequence start methodis explicitly called to invoke the sequenceseq.starting_phase = phase;seq.start();endfunction : main_phaseendclass

2、使用UVM configurations 機(jī)制從測(cè)試用例中獲取值。在上面的示例中,沒有給出控制sequence的按鈕,一些都靠sequence自身的隨機(jī),這對(duì)于擴(kuò)展用例非常不友好。我們可以對(duì)sequence做如下的修改,以提供更加精確的激勵(lì)控制。

class usb_simple_sequence extends uvm_sequence #(usb_transfer);rand int unsigned sequence_length;constraint reasonable_seq_len { sequence_length < 10 };virtual task body();usb_transfer::type_enum local_type;bit[7:0] local_device_id;//Get the values for the variables in case toplevel//test/sequence sets it.uvm_config_db#(int unsigned)::get(null, get_full_name(),“sequence_length”, sequence_length);uvm_config_db#(usb_transfer::type_enum)::get(null,get_full_name(), “l(fā)ocal_type”, local_type);uvm_config_db#(bit[7:0])::get(null, get_full_name(),?“l(fā)ocal_device_id”, local_device_id);repeat(sequence_length)`uvm_do_with(req, {req.device_id == local_device_id;req.type == local_type;})endtask : bodyendclass

通過上述修改,我們對(duì)測(cè)試用例進(jìn)行了控制,以配置device_id、sequence_length和type。

這里需要注意的是:

uvm_config_db#()::set中使用的參數(shù)類型和字符串(第三個(gè)參數(shù))應(yīng)該與

uvm_config_db#()::get中使用的類型相匹配,否則將無法正確配置。這個(gè)地方如果出錯(cuò)會(huì)非常痛苦,但好在不需要經(jīng)常修改,痛苦一次就好。另外,這幾個(gè)配置項(xiàng)是隨機(jī)類型,相應(yīng)的配置值也需要滿足約束范圍。


3、在創(chuàng)建復(fù)雜sequence的時(shí)候盡量去復(fù)用簡(jiǎn)單的sequence。例如,在下面的sequence 中順序發(fā)送不同的sequnce(層次化和模塊化,永遠(yuǎn)是編碼規(guī)范之一):

class usb_complex_sequence extends uvm_sequence #(usb_transfer);//Object of simple sequence used for sending bulk transferusb_simple_sequence simp_seq_bulk;//Object of simple sequence used for sending interrupt transferusb_simple_sequence simp_seq_int;virtual task body();//Variable for getting device_id for bulk transferbit[7:0] local_device_id_bulk;//Variable for getting device_id for interrupt transferbit[7:0] local_device_id_int;//Variable for getting sequence length for bulkint unsigned local_seq_len_bulk;//Variable for getting sequence length for interruptint unsigned local_seq_len_int;//Get the values for the variables in case top level//test/sequence sets it.uvm_config_db#(int unsigned)::get(null, get_full_name(),“l(fā)ocal_seq_len_bulk”,local_seq_len_bulk);uvm_config_db#(int unsigned)::get(null, get_full_name(),“l(fā)ocal_seq_len_int”,local_seq_len_int);uvm_config_db#(bit[7:0])::get(null, get_full_name(),“l(fā)ocal_device_id_bulk”,local_device_id_bulk);uvm_config_db#(bit[7:0])::get(null, get_full_name(),“l(fā)ocal_device_id_int”,local_device_id_int);//Set the values for the variables to the lowerlevel//sequence/sequence item, which we got from//above uvm_config_db::get.//Setting the values for bulk sequenceuvm_config_db#(int unsigned)::set(null, {get_full_name(),”.”,”simp_seq_bulk”}, “sequence_length”,local_seq_len_bulk);uvm_config_db#(usb_transfer::type_enum)::set(null, {get_full_name(),“.”,“simp_seq_bulk”} , “l(fā)ocal_type”,usb_transfer::BULK_TRANSFER);uvm_config_db#(bit[7:0])::set(null, {get_full_name(), “.”,”simp_seq_bulk”}, “l(fā)ocal_device_id”,local_device_id_bulk);//Setting the values for interrupt sequenceuvm_config_db#(int unsigned)::set(null, {get_full_name(),”.”,”simp_seq_int”}, “sequence_length”,local_ seq_len_int);uvm_config_db#(usb_transfer::type_enum)::set(null, {get_full_name(),“.”,“simp_seq_int”} , “l(fā)ocal_type”,usb_transfer::INT_TRANSFER);uvm_config_db#(bit[7:0])::set(null,{get_full_name(),“.”,”simp_seq_bulk”},“l(fā)ocal_device_id”,local_device_id_int);`uvm_do(simp_seq_bulk)simp_seq_bulk.get_response();`uvm_send(simp_seq_int)simp_seq_int.get_response();endtask : bodyendclass

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

印度海得拉巴和馬薩諸塞州波士頓2022年4月20日 /美通社/ -- 全球領(lǐng)先的生命科學(xué)組織數(shù)據(jù)和分析提供商Excelra宣布,對(duì)價(jià)值和證據(jù)領(lǐng)域快速發(fā)展的年輕技術(shù)公...

關(guān)鍵字: ce

北京2022年4月11日 /美通社/ -- 亞馬遜云科技助力數(shù)據(jù)服務(wù)和管理平臺(tái)提供商Kyligence構(gòu)建企業(yè)級(jí)云原生大數(shù)據(jù)OLAP解決方案,使其云上交付速度提升30%。同時(shí),通過加入“ISV(獨(dú)立軟件供應(yīng)商)加速贏計(jì)劃...

關(guān)鍵字: ce ge 進(jìn)程

(全球TMT2022年4月11日訊)亞馬遜云科技助力數(shù)據(jù)服務(wù)和管理平臺(tái)提供商Kyligence構(gòu)建企業(yè)級(jí)云原生大數(shù)據(jù)OLAP解決方案,使其云上交付速度提升30%。同時(shí),通過加入“ISV(獨(dú)立軟件供應(yīng)商)加速贏計(jì)劃”,K...

關(guān)鍵字: 亞馬遜 ge ce

(全球TMT2022年4月7日訊)為Microsoft Dynamics 365和Salesforce提供云端配置、價(jià)格、報(bào)價(jià)(CPQ)和文檔自動(dòng)化軟件的供應(yīng)商Experlogix宣布與Microsoft Dynami...

關(guān)鍵字: ce Dynamics logix

價(jià)值9.02億美元的OpenSpace在建筑和房地產(chǎn)領(lǐng)域繼續(xù)得到對(duì)其技術(shù)的廣泛采用,現(xiàn)已獲取了1萬多個(gè)工地現(xiàn)場(chǎng)超過6.5億平米面積的影像...

關(guān)鍵字: pen ce

(全球TMT2022年2月21日訊)愛立信IoT Accelerator推出一款可靠、安全的蜂窩物聯(lián)網(wǎng)平臺(tái),使全球電信運(yùn)營(yíng)商(CSP)和企業(yè)能夠在數(shù)千萬臺(tái)設(shè)備上拓展其物聯(lián)網(wǎng)業(yè)務(wù)。愛立信發(fā)布IoT Accelerator...

關(guān)鍵字: ce 蜂窩物聯(lián)網(wǎng) 物聯(lián)網(wǎng)平臺(tái)

(全球TMT2022年2月22日訊)穆巴達(dá)拉投資公司(Mubadala Investment Company,簡(jiǎn)稱“穆巴達(dá)拉”)以領(lǐng)投方身份完成了對(duì)總部位于新加坡的數(shù)據(jù)中心提供商Princeton Digital Gr...

關(guān)鍵字: Digital Group ce

英國(guó)倫敦和印度海得拉巴2022年2月10日 /美通社/ -- 數(shù)據(jù)科學(xué)和分析領(lǐng)導(dǎo)者Excelra 與人工智能先驅(qū)X-Chem之間的全新合作將加速臨床前藥物發(fā)現(xiàn),幫助...

關(guān)鍵字: ce

靈活工作安排和“大辭職”潮無意間提高網(wǎng)絡(luò)風(fēng)險(xiǎn),值此之際,人工智能將加強(qiáng)安全團(tuán)隊(duì) 英國(guó)劍橋2022年1月28日 /美通社/ -- 網(wǎng)絡(luò)安全人工智...

關(guān)鍵字: ce

(全球TMT2022年1月29日訊)網(wǎng)絡(luò)安全人工智能領(lǐng)域的全球領(lǐng)導(dǎo)者Darktrace宣布,其自主響應(yīng)技術(shù)現(xiàn)將在端點(diǎn)上采取行動(dòng) -- 完善Darktrace Antigena產(chǎn)品系列,該產(chǎn)品系列已覆蓋SaaS應(yīng)用程序、...

關(guān)鍵字: 人工智能 網(wǎng)絡(luò)安全 ce

ZLG致遠(yuǎn)電子

103 篇文章

關(guān)注

發(fā)布文章

編輯精選

技術(shù)子站

關(guān)閉