精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Python中的迭代器介紹 迭代器在scoreboard中的應用有哪些?

rfdqdzdg ? 來源:IC Verification Club ? 2023-08-08 09:41 ? 次閱讀

迭代器模式

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

大部分編程語言都提供了多種遍歷集合的方式,比如for循環,foreach循環等。對于簡單的遍歷,可以利用語言提供的迭代方式完成遍歷操作,對于復雜條件的集合遍歷,比如支持廣度優先和深度優先遍歷的樹結構,用戶需要自己創建迭代器。

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

Python中的迭代器

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

引用Python Documentation

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

內置的 iter() 函數接受任意對象并試圖返回一個迭代器來輸出對象的內容或元素,并會在對象不支持迭代的時候拋出 TypeError 異常。Python 有幾種內置數據類型支持迭代,最常見的就是列表和字典。如果一個對象能生成迭代器,那么它就會被稱作 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 表達式。在表達式 for X in Y,Y 要么自身是一個迭代器,要么能夠由 iter() 創建一個迭代器。以下兩種表達是等價的nonedisplay: none;'>

生成器表達式和列表推導式

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

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

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

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

SV數組內建方法

和數組定位相關的,SV提供了6種方式:

39e6530a-3521-11ee-9e74-dac502259ad0.png

如何實現是關鍵,如何維護游標,如何判斷返回元素滿足條件,這些需要根據實際業務具體實現。

迭代器在scoreboard中的應用

scoreboard一邊接收dut transaction放入容器actual_array, 一邊接收golden transaction放入容器golden_array。如果是保序的,則可以直接按先后順序對比,如果不是保序的,則需要按照相應規則遍歷容器篩選出transaction。

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

ication Environment Based on Software Design Patterns 中將迭代器模式應用到scoreboard中。

常見的scoreboard的構建方式:OVM/UVM Scoreboards - Fundamental Architectures





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • UVM
    UVM
    +關注

    關注

    0

    文章

    181

    瀏覽量

    19139
  • 生成器
    +關注

    關注

    7

    文章

    313

    瀏覽量

    20977
  • python
    +關注

    關注

    56

    文章

    4782

    瀏覽量

    84453
  • for循環
    +關注

    關注

    0

    文章

    61

    瀏覽量

    2493
  • 迭代器
    +關注

    關注

    0

    文章

    43

    瀏覽量

    4302

原文標題:UVM設計模式 ( 五 ) 迭代器模式、Python/SV中的迭代器、callback_iter、scoreboard中的迭代器

文章出處:【微信號:數字芯片設計工程師,微信公眾號:數字芯片設計工程師】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    談談Python 迭代模式

    年,Design Patterns - Elements of Reusable Object-Oriented Software),它提出了23種設計模式。迭代模式就是其中的一種,
    發表于 11-23 13:10 ?777次閱讀
    談談<b class='flag-5'>Python</b> <b class='flag-5'>中</b>的<b class='flag-5'>迭代</b><b class='flag-5'>器</b>模式

    Python高級特性:迭代切片的應用

    Python 獨特的一種高級特性,而切片也是一種高級特性,兩者相結合,會產生什么樣的結果呢? 1、迭代迭代 首先,
    發表于 11-29 10:11 ?655次閱讀

    淺談python迭代

      說道python迭代之前,不得不提到的就是遠古時期的C語言的時代,如果想要對一個數組進行遍歷,只能使用for循環。
    發表于 11-24 17:01 ?306次閱讀
    淺談<b class='flag-5'>python</b><b class='flag-5'>中</b>的<b class='flag-5'>迭代</b><b class='flag-5'>器</b>

    js迭代異步介紹

    js 迭代 異步 介紹 (Introduction)It’s been a long while coming and I feel it’s high time I made a post
    發表于 09-06 09:26

    python迭代

    的,哪些是不可迭代的。但是對新手來說,可能需要借助一些函數來判別,比如 Python 內置的 collections.abc 模塊,這個模塊只有 Python
    發表于 02-24 15:42

    OpenHarmony的HDF單鏈表及其迭代

    迭代。直觀上看,除了第一個節點,其它節點都可以通過next訪問到,第一個節點通過root訪問到。那實際上會不會就是這么簡單呢?其實不然,因為需要考慮到節點刪除的因素。如下圖,鏈表迭代
    發表于 08-30 10:31

    OpenHarmony的HDF單鏈表及其迭代

    節點的地址。因為單鏈表只支持往一個方向查找,不支持往回查找,如上面的錯誤范例。如果root記錄的是第二個節點地址,則第一個節點變得不可訪問。迭代簡介迭代是伴隨集合概念產生的,意思是
    發表于 09-05 11:38

    了解Python數據結構迭代對象、迭代、生成器的概念

    了解Python的數據結構時,容器(container)、可迭代對象(iterable)、迭代(iterator)、生成器(genera
    發表于 11-15 17:34 ?787次閱讀
    了解<b class='flag-5'>Python</b>數據結構<b class='flag-5'>迭代</b>對象、<b class='flag-5'>迭代</b><b class='flag-5'>器</b>、生成器的概念

    Python學習點:為什么 range() 不生成迭代

    迭代是 23 種設計模式中最常用的一種(之一), Python 隨處可見它的身影,我們經常用到它,但是卻不一定意識到它的存在。
    發表于 11-23 13:50 ?769次閱讀
    <b class='flag-5'>Python</b>學習點:為什么 range() 不生成<b class='flag-5'>迭代</b><b class='flag-5'>器</b>

    python迭代詳解

    python迭代 1. 可迭代對象 可以利用 for 循環的對象,都叫可迭代對象。 列表、元組、字典、字符串等都是可
    的頭像 發表于 02-24 15:42 ?1319次閱讀

    python迭代調用內置函數計時比較(下)

    python迭代工具自動調用迭代對象next方法,對迭代對象進行遍歷。 python的for循環、列表解析、map方法、生成器表達式、
    的頭像 發表于 02-21 14:56 ?513次閱讀

    簡單介紹C++迭代

    之前的兩篇文章我們主要了解了vector和string的相關知識,從中我們知道可以通過下標來訪問vector的元素或者string的字符,但是除了這種方式還有一種更為通用的方式獲取元素,那就是迭代,這篇文章就會簡單介紹
    的頭像 發表于 03-17 14:03 ?488次閱讀

    網絡工程師學Python-迭代

    迭代Python 中非常重要的概念之一,它是一種對象,可以代碼按順序訪問一組值。
    的頭像 發表于 04-20 16:58 ?891次閱讀

    迭代模式UVM的應用哪些

    行為型設計模式數量較多,上一篇介紹了模板模式和策略模式,下面對迭代模式進行介紹,挖掘其UVM的應用。
    的頭像 發表于 08-14 17:15 ?584次閱讀
    <b class='flag-5'>迭代</b>模式<b class='flag-5'>在</b>UVM<b class='flag-5'>中</b>的應用<b class='flag-5'>有</b>哪些

    計算數學的函數迭代介紹

    函數迭代是數學中一個非常重要和有趣的主題,它在不同的領域有著不同的應用和著眼點。動力系統,函數迭代可以揭示復雜系統的演化規律和混沌現象;
    的頭像 發表于 08-30 10:11 ?1278次閱讀
    計算數學<b class='flag-5'>中</b>的函數<b class='flag-5'>迭代</b><b class='flag-5'>介紹</b>