衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

迭代模式在UVM中的應(yīng)用有哪些

ruikundianzi ? 來源:IC Verification Club ? 2023-08-14 17:15 ? 次閱讀

行為型設(shè)計(jì)模式數(shù)量較多,上一篇介紹了模板模式和策略模式,下面對迭代模式進(jìn)行介紹,挖掘其在UVM中的應(yīng)用。

迭代器模式

Iterator Design Pattern: 對容器 (聚合類,集合數(shù)據(jù)等) 的遍歷操作從容器中拆分出來,放到迭代器中,實(shí)現(xiàn)迭代操作的解耦。

大部分編程語言都提供了多種遍歷集合的方式,比如for循環(huán),foreach循環(huán)等。對于簡單的遍歷,可以利用語言提供的迭代方式完成遍歷操作,對于復(fù)雜條件的集合遍歷,比如支持廣度優(yōu)先和深度優(yōu)先遍歷的樹結(jié)構(gòu),用戶需要自己創(chuàng)建迭代器。

迭代器模式的結(jié)構(gòu)分為迭代器接口和迭代器實(shí)現(xiàn)類,容器接口和容器實(shí)現(xiàn)類。接口類是為了面向接口編程。迭代器中一般包含next()函數(shù)用于返回容器中的元素,布爾型變量hasNext判斷是否結(jié)束循環(huán)。

Python中的迭代器

Systemverilog對聚合類型數(shù)據(jù)(Aggregate data types)的操作并沒有把迭代器 “暴露” 出來,先從Python開始了解。Python允許用戶自定義類對迭代的支持。

引用Python Documentation

迭代器是一個(gè)表示數(shù)據(jù)流的對象;這個(gè)對象每次只返回一個(gè)元素。Python 迭代器必須支持 __next__() 方法;這個(gè)方法不接受參數(shù),并總是返回?cái)?shù)據(jù)流中的下一個(gè)元素。如果數(shù)據(jù)流中沒有元素,__next__() 會(huì)拋出 StopIteration 異常。

內(nèi)置的 iter() 函數(shù)接受任意對象并試圖返回一個(gè)迭代器來輸出對象的內(nèi)容或元素,并會(huì)在對象不支持迭代的時(shí)候拋出 TypeError 異常。Python 有幾種內(nèi)置數(shù)據(jù)類型支持迭代,最常見的就是列表和字典。如果一個(gè)對象能生成迭代器,那么它就會(huì)被稱作 iterable。

>>> L = [1, 2, 3]
>>> it = iter(L)
>>> it  
<...iterator object at ...>
>>> it.__next__()  # same as next(it)
1
>>> next(it)
2
>>> next(it)
3
>>> next(it)
Traceback (most recent call last):
  File "", line 1, in 
StopIteration
>>>

Python 有不少要求使用可迭代的對象的地方,其中最重要的就是 for 表達(dá)式。在表達(dá)式 for X in Y,Y 要么自身是一個(gè)迭代器,要么能夠由 iter() 創(chuàng)建一個(gè)迭代器。以下兩種表達(dá)是等價(jià)的nonedisplay: none;'>

生成器表達(dá)式和列表推導(dǎo)式

迭代器的輸出有兩個(gè)很常見的使用方式,1) 對每一個(gè)元素執(zhí)行操作,2) 選擇一個(gè)符合條件的元素子集。比如,給定一個(gè)字符串列表,你可能想去掉每個(gè)字符串尾部的空白字符,或是選出所有包含給定子串的字符串。

列表推導(dǎo)式和生成器表達(dá)時(shí)(簡寫:"listcomps" 和 "genexps")讓這些操作更加簡明,這個(gè)形式借鑒自函數(shù)式程序語言 Haskell(Haskell Language)。你可以用以下代碼去掉一個(gè)字符串流中的所有空白字符nonedisplay: none;'>

通過列表推導(dǎo)式,你會(huì)獲得一個(gè) Python 列表;stripped_list 就是一個(gè)包含所有結(jié)果行的列表,并不是迭代器。生成器表達(dá)式會(huì)返回一個(gè)迭代器,它在必要的時(shí)候計(jì)算結(jié)果,避免一次性生成所有的值。這意味著,如果迭代器返回一個(gè)無限數(shù)據(jù)流或者大量的數(shù)據(jù),列表推導(dǎo)式就不太好用了。這種情況下生成器表達(dá)式會(huì)更受青睞。

生成器表達(dá)式兩邊使用圓括號 (" ( ) ") ,而列表推導(dǎo)式則使用方括號 (" [ ] ")。

SV數(shù)組內(nèi)建方法

和數(shù)組定位相關(guān)的,SV提供了6種方式:

0a13436a-3a83-11ee-9e74-dac502259ad0.png

如何實(shí)現(xiàn)是關(guān)鍵,如何維護(hù)游標(biāo),如何判斷返回元素滿足條件,這些需要根據(jù)實(shí)際業(yè)務(wù)具體實(shí)現(xiàn)。

迭代器在scoreboard中的應(yīng)用

scoreboard一邊接收dut transaction放入容器actual_array, 一邊接收golden transaction放入容器golden_array。如果是保序的,則可以直接按先后順序?qū)Ρ龋绻皇潜P虻模瑒t需要按照相應(yīng)規(guī)則遍歷容器篩選出transaction。

如果規(guī)則是Packet不是保序的,但是addr保持不變,則可以通過SV內(nèi)建方法 find_index() with (item.addr == addr)在容器中篩選出待比較的Packet。find_index() with (expression) 中內(nèi)建了迭代器,根據(jù)所給的expression條件“吐出”符合的元素。

ication Environment Based on Software Design Patterns 中將迭代器模式應(yīng)用到scoreboard中。

常見的scoreboard的構(gòu)建方式:OVM/UVM Scoreboards - Fundamental Architectures






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • UVM
    UVM
    +關(guān)注

    關(guān)注

    0

    文章

    182

    瀏覽量

    19227
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4807

    瀏覽量

    85037
  • DUT
    DUT
    +關(guān)注

    關(guān)注

    0

    文章

    189

    瀏覽量

    12490
  • for循環(huán)
    +關(guān)注

    關(guān)注

    0

    文章

    61

    瀏覽量

    2537
  • 迭代器
    +關(guān)注

    關(guān)注

    0

    文章

    44

    瀏覽量

    4344

原文標(biāo)題:UVM設(shè)計(jì)模式:迭代器模式、Python/SV中的迭代器、callback_iter、scoreboard中的迭代器

文章出處:【微信號:IP與SoC設(shè)計(jì),微信公眾號:IP與SoC設(shè)計(jì)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    談?wù)凱ython 迭代模式

    年,Design Patterns - Elements of Reusable Object-Oriented Software),它提出了23種設(shè)計(jì)模式迭代模式就是其中的一種
    發(fā)表于 11-23 13:10 ?820次閱讀
    談?wù)凱ython <b class='flag-5'>中</b>的<b class='flag-5'>迭代</b>器<b class='flag-5'>模式</b>

    UVM的field automation機(jī)制哪些用途

    不知道UVM的field automation機(jī)制怎么翻譯,不管了,反正就是**機(jī)制,理解它能干啥就行了。
    的頭像 發(fā)表于 07-19 09:45 ?2148次閱讀

    數(shù)字IC驗(yàn)證之“什么是UVM”“UVM的特點(diǎn)”“UVM提供哪些資源”(2)連載...

    原文鏈接:https://zhuanlan.zhihu.com/p/345775995大家好,我是一哥,上章內(nèi)容主要講述兩個(gè)內(nèi)容,芯片驗(yàn)證以及驗(yàn)證計(jì)劃。那本章我們主要講述的內(nèi)容介紹什么是uvm
    發(fā)表于 01-21 16:00

    數(shù)字IC驗(yàn)證之“典型的UVM平臺結(jié)構(gòu)”(3)連載...

    應(yīng)用的過程,將uvm的組件封裝起來,可以將這些封裝的組件呢作為一個(gè)整體進(jìn)行重用,進(jìn)行芯片級或者是系統(tǒng)級驗(yàn)證的時(shí)候,往往會(huì)出現(xiàn)多個(gè)模塊的驗(yàn)證。  此時(shí),測試平臺的結(jié)構(gòu)會(huì)發(fā)生變化,圖中的測試平臺實(shí)現(xiàn)了
    發(fā)表于 01-22 15:32

    數(shù)字IC驗(yàn)證之“構(gòu)成uvm測試平臺的主要組件”(4)連載...

    的agent為agent的passive模式。  scoreboard積分板,它將會(huì)從兩個(gè)地方獲取數(shù)據(jù),一個(gè)是參考模型發(fā)來的期望值,另一個(gè)是從slave agent發(fā)來的dut的輸出值。積分板對這兩個(gè)
    發(fā)表于 01-22 15:33

    什么是uvmuvm的特點(diǎn)哪些呢

    直觀的印象,就是uvm驗(yàn)證平臺,它是分層的結(jié)構(gòu)。圖中的每一個(gè)巨型框都代表著平臺的一個(gè)構(gòu)成元素。這些元素呢,我們稱為平臺組建,下面來簡單的分析一下。從最底層上來看,agent 包含了driver,monitor和sequencer,其中driver ,monitor
    發(fā)表于 02-14 06:46

    請問一下UVM的UVMsequences是什么意思啊

    UVM方法學(xué),UVMsequences 是壽命有限的對象。UVM sequences從uvm_sequence_item基類擴(kuò)展得到,
    發(fā)表于 04-11 16:43

    談?wù)?b class='flag-5'>UVMuvm_info打印

    上有\(zhòng)`uvm_file和\`uvm_line的傳參,它們定義如下:  `define uvm_file `__FILE__  `define uvm_line `__LINE__  
    發(fā)表于 03-17 16:41

    UVMseq.start()和default_sequence執(zhí)行順序

    下src/base/uvm_task_phase.svh文件。為方便分析,我截圖如下。uvm_task_phase類里execute(xxx)函數(shù)的第148行和150行確定了seq1和seq2的執(zhí)行
    發(fā)表于 04-04 17:15

    UVM類的例化用new還是create

    UVM類的例化用new和create什么不同?什么時(shí)候可以用new?什么時(shí)候該用create? new是OOP自帶屬性,create是UVM override屬性,可以理解成
    的頭像 發(fā)表于 03-21 11:26 ?1434次閱讀

    UVMuvm_config_db機(jī)制背后的大功臣

    本次講一下UVMuvm_config_db,UVM中提供了一個(gè)內(nèi)部數(shù)據(jù)庫,可以在其中存儲(chǔ)給定名稱下的值,之后可以由其它TB組件去檢索。
    的頭像 發(fā)表于 06-20 17:28 ?1521次閱讀

    UVMuvm_config_db機(jī)制背后的大功臣

    本次講一下UVMuvm_config_db,UVM中提供了一個(gè)內(nèi)部數(shù)據(jù)庫,可以在其中存儲(chǔ)給定名稱下的值,之后可以由其它TB組件去檢索。
    的頭像 發(fā)表于 06-29 16:57 ?1386次閱讀

    一文詳解UVM設(shè)計(jì)模式

    本篇是對UVM設(shè)計(jì)模式 ( 二 ) 參數(shù)化類、靜態(tài)變量/方法/類、單例模式UVM_ROOT、工廠模式
    的頭像 發(fā)表于 08-06 10:38 ?2079次閱讀
    一文詳解<b class='flag-5'>UVM</b>設(shè)計(jì)<b class='flag-5'>模式</b>

    行為型設(shè)計(jì)模式UVM的應(yīng)用

    接下來介紹行為型設(shè)計(jì)模式UVM的應(yīng)用。
    的頭像 發(fā)表于 08-09 14:01 ?753次閱讀
    行為型設(shè)計(jì)<b class='flag-5'>模式</b><b class='flag-5'>在</b><b class='flag-5'>UVM</b><b class='flag-5'>中</b>的應(yīng)用

    UVM設(shè)計(jì)的sequence啟動(dòng)方式哪幾種呢?

    本篇介紹UVM的sequence,這是UVM中最基礎(chǔ)的部分。對于前面介紹的uvm_callback, uvm_visitor等,很少被使用
    的頭像 發(fā)表于 08-17 10:07 ?4701次閱讀
    <b class='flag-5'>UVM</b>設(shè)計(jì)<b class='flag-5'>中</b>的sequence啟動(dòng)方式<b class='flag-5'>有</b>哪幾種呢?
    济州岛百家乐官网的玩法技巧和规则 | 在线百家乐官网技巧| 伯爵百家乐官网娱乐网| 真人百家乐视频| 敦化市| 卢克索百家乐官网的玩法技巧和规则 | 太阳城管理网| 百家乐官网透视牌靴哪里有| 欧凯百家乐的玩法技巧和规则| 嘉兴市| 百家乐投注必胜法| 抚州市| 百家乐平注法攻略| 真钱百家乐官网注册送| 百家乐计划| 百家乐官网足球投注网哪个平台网址测速最好 | 百家乐斗牛稳赚| 环澳娱乐| 澳门百家乐官网网络游戏信誉怎么样| 威尼斯人娱乐平台注册| 伯爵百家乐官网娱乐场| 大发888投注技巧| 没费用百家乐官网分析器| 木星百家乐的玩法技巧和规则 | 网上百家乐内| 百家乐官网如何看| 太阳城百家乐官网筹码租| 爱赢百家乐的玩法技巧和规则 | 墨尔本百家乐的玩法技巧和规则| 百家乐官网导航网| 大发888 casino| 百家乐官网和怎么算输赢| 澳盈88投注| 百家乐电子路单下载| 百家乐官网视频游戏网站| 威尼斯人娱乐场 五星| 金域百家乐官网的玩法技巧和规则| 皇冠正网| 百家乐英皇娱乐网| 百家乐官网二号博彩正网| 百家乐模拟投注器|