色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

簡述SystemVerilog的各種隨機化方法

jf_78858299 ? 來源:芯片學堂 ? 作者:JKZHAN ? 2023-01-21 16:59 ? 次閱讀

我習慣將驗證空間理解為:驗證中原則上需要覆蓋的芯片所有有可能出現的工作狀態的集合。為了探索這片廣袤的驗證空間,驗證的時候搞出了帶有約束的隨機測試(constrainted-random testing),并搞了覆蓋率(coverage)作為評估機制。這也是一套成熟可信的工程學方法。

因為約束和隨機化可以講的干貨太多,于是我做了拆分。本文要介紹的內容就僅涉及SV的隨機化處理,包括偽隨機數的產生、隨機穩定性和編程示例。

偽隨機數的產生

SystemVerilog提供了很多生成偽隨機數的方法,比如產生隨機數的內建函數**random, **urandom, $urandom_range,對象隨機方法object.randomize(),標準庫隨機函數std::randomize()等等。這些函數的用法在很多教程中都會提到,而本文要做的,是要挖一挖這些函數的“玄機”。

圖片

1. Probabilistic Distribution System Functions

第一類隨機函數是概率分布系統函數(probabilistic distribution system funtions),這類函數在LRM中明確包括**random, **dist_uniform, **dist_normal, **dist_exponential, $dist_poisson等可以產生滿足不同概率分布的隨機數的函數,并且在附錄N中用C代碼給出了這些函數的實現算法。這就意味著,使用相同的種子,這些函數在不同的仿真軟件中產生出來的隨機數序列應該是一致的。這也是這類函數跟其他類函數的主要區別。

2. Object and Scope Randomization Method

再來看對象隨機方法object.randomize(),這個函數在LRM中被稱為“the object and scope randomization method”。顧名思義,它專門被用來隨機化對象。它是所有SV類中都會默認存在的內置虛函數(原型是virtual function int randomize()),但是它不能被覆蓋(overridden)。當你使用object.randomize() 來對對象進行隨機化的時候,注意它只會隨機化類中有rand關鍵詞修飾的成員變量,并且在成功隨機化之后會返回1,失敗則返回0。除此之外,每個類中還有randomize的兩個回調函數pre_randomize()和post_randomize(),這兩個函數分別會在執行randomize()的前后自動被調用。注意,這兩個函數并不是虛函數(其函數原型沒有virtual關鍵字),但他們是由虛函數randomize()來自動調用的,因此也表現為虛函數的多態行為。

這套使用類來描述和控制隨機數據及其約束的機制相當強大。之所以這么說,一方面是因為有了類的繼承特性的加持,隨機變量可以方便地繼承和擴展;另一方面是因為SV還提供了約束的覆蓋、擴展、使能和禁用等功能。但這里有一個問題,就是object.randomize()還是只能隨機化類的成員變量,不能隨機化局部變量。為了解決這個問題,SV又搞來了一個可用于當前范圍內,且不限于對象成員的隨機化函數std::randomize(),它在LRM中的定性是scope randomize function。

Std lib下的std::randomize()的適用性比object.randomize()要好,不過它不能自動隨機對象中的rand成員變量,也沒有pre和post函數可以調用,畢竟魚和熊掌不可兼得呀。std::randomize()在某些場景下前面的“std::”是可以省略的,但還是建議使用的時候加上比較好,能與上面講的object.randomize()做出區分。除了可以隨機化當前范圍內變量,std::randomize()使用的時候可以將需要隨機化的多個變量同時放到參數列表中一起做隨機,且能適配這些變量的位寬。該函數返回結果跟object.randomize()一樣,成功返回1,失敗返回0。

3. Random Number System Function

最后要將講的是SV中比較古老的隨機函數和方法urandom()和urandom_range()。后者只是在前者的基礎上增加了范圍限制。**urandom的函數原型是function int unsigned **urandom [(int seed)]。可以看出來,這兩個函數的返回值都是32bit的無符號數。如果初始隨機種子一樣,則相同工具的每一次仿真跑出來的隨機數是一致的,這是涉及到下小節要講的一個重要的特性:隨機穩定性。

隨機穩定性(Random stability)

在SV中,不同線程(thread)或對象(object)在隨機化時使用的隨機數產生器(RNG)是相互獨立的。另一方面,相同線程或相同對象在相同隨機種子的情況下,每一次仿真中產生的隨機數序列是一樣的。這個屬性就叫random stability。

隨機穩定性之所以重要,是因為在芯片驗證中,隨機驗證方法是很重要的一部分,在用例回歸之后,那些Failed的測試用例通常需要使用觸發錯誤的隨機種子來重現,比如把波形Dump出來。因此,有必要了解線程和對象的隨機化機制。下面從三個層面看這套機制是怎么運作的。

**Initialization RNG:**初始化RNG是產生隨機數的開始,用來給RNG初始化隨機種子。每一個模塊實例(module instance)、接口實例(interface instance)、程序塊(program)和包(package)實例都有屬于自己的初始化RNG,在不指定隨機種子的情況下,默認的隨機種子根據不同編譯器的實現決定的。上小節講的每一種偽隨機數的產生方法都有自己指定隨機種子的函數

**Hierarchy seeding:**分層分配隨機種子是隨機穩定性的重要機制。在創建新的線程或者實例化對象的時候,父線程使用的RNG的下一個隨機值會作為這個新線程或者新對象的RNG的隨機狀態,即作為新的種子傳遞下去。

**Thread and Object Stability:**SV中將程序(program)、模塊(module)、接口(interface)、函數(function)、任務(task)等這些獨立的塊叫Process。每個Process都有自己的RNG。每個RNG都有自己的隨機狀態(random state)。我們可以通過process::self()這個靜態方法獲取當前Process的RNG句柄,在通過句柄調用get_randstate()方法來獲得隨機狀態。不同的仿真工具返回來的隨機狀態的值的表現方式可能會不一樣,但基本都是一段看起來沒有規律的字符串,這個字符串表示下一個要產生的隨機數的值。

SV的這套隨機穩定性機制,盡管通常不需要我們去做什么,但是要知道:在我們要復現一個執行失敗的測試用例的時候,不要改動之前布下的種子,也不要改變程序中線程和對象創建的順序,避免更改了分層隨機種子的順序。

編程示例

下面的例程和仿真結果展示了以上介紹到的隨機函數和特性,代碼中也附有必要的注釋。如果需要源碼,可以在公眾號中直接回復"SV隨機"獲得下載鏈接。

圖片

仿真結果如下圖所示:

圖片

參考文獻

[1] IEEE Standard Association. "IEEE Standard for SystemVerilog-Unified Hardware Design, Specification, and Verification Language." (2013).

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

    關注

    455

    文章

    50851

    瀏覽量

    423907
  • Verilog
    +關注

    關注

    28

    文章

    1351

    瀏覽量

    110122
  • System
    +關注

    關注

    0

    文章

    165

    瀏覽量

    36965
收藏 人收藏

    評論

    相關推薦

    求教!!LabVIEW怎樣數據的隨機化

    數據的隨機化是通過偽隨機二進制序列生成器作用于輸入數據來實現的,其中隨機器的生成多項式為:1+X^15+X^14,請問怎樣用LabVIEW實現這個過程呢?謝謝各位的幫助!!
    發表于 02-18 20:32

    高速ADC的數字輸出隨機化

    ADC輸出頻譜中引起不良的音調。通過在將數字輸出傳輸到芯片外之前對數字輸出進行隨機化,我們可以避免最麻煩的數字輸出轉換-即在中檔輸入電壓下發生的從全1到全零的轉換。通過在LSB和所有其他數據輸出位之間
    發表于 11-11 10:07

    緩沖區溢出的危害及避免緩沖區溢出的三種方法

    1. 蠕蟲病毒簡介2. 緩沖區溢出3. 緩沖區溢出舉例4. 緩沖區溢出的危害5. 內存在計算機中的排布方式6. 計算機中越界訪問的后果7. 避免緩沖區溢出的三種方法7.1 棧隨機化7.2 ...
    發表于 03-30 14:01

    新的隨機化廣播加密方案

    提出一種新的隨機化廣播加密方案,通過構建隨機函數族為用戶分配密鑰,可以使合法用戶以概率1 獲取解密密鑰,而用戶的密鑰存儲僅為(l +1) 個,與其他基于二叉樹結構的方案相
    發表于 03-24 09:40 ?10次下載

    SystemVerilog中的隨機化激勵

    隨著集成電路的驗證工作日漸復雜,對驗證的可靠性提出了越來越高的要求。傳統的驗證工作中也使用隨機化激勵以便減輕測試代碼編寫的工作量,以提升驗證的可靠性。在SystemV
    發表于 12-14 10:55 ?14次下載

    System Verilog中的隨機化激勵

    在SystemVeri log更強調了利用隨機化激勵函數以提高驗證代碼的效率和驗證可靠性的重要性。本文以VMM庫為例,闡述了如何在SystemVeri 1og中使用隨機化函數來編寫高效率的測試代碼,重點介
    發表于 04-01 15:03 ?30次下載
    System Verilog中的<b class='flag-5'>隨機化</b>激勵

    基于System Verilog中的隨機化激勵

    基于System Verilog中的隨機化激勵
    發表于 10-31 09:25 ?9次下載
    基于System Verilog中的<b class='flag-5'>隨機化</b>激勵

    一種隨機化的軟件模型生成方法

    .提出一種隨機化的模型生成方法,該方法能夠根據元模型的定義以及用戶輸入的約束條件隨機且正確地生成模型文件.實驗結果表明:該方法與其他
    發表于 12-30 12:06 ?0次下載
    一種<b class='flag-5'>隨機化</b>的軟件模型生成<b class='flag-5'>方法</b>

    華為手機已經開啟了MAC地址隨機化功能可以有效的防范WiFi探針

    華為EMUI官方微信稱,華為手機EMUI 8.0以上版本已經默認開啟了MAC地址隨機化功能,MAC地址隨機化是指手機WiFi開啟后,每次在掃描周圍WiFi熱點時攜帶的MAC地址都是隨機生成的,就算被WiFi探針獲取也無法做正確的
    發表于 03-18 09:43 ?1.4w次閱讀

    華為手機EMUI 8.0及以上版本已經默認開啟了MAC地址隨機化功能

    華為EMUI官方微信稱,華為手機EMUI 8.0及以上版本已經默認開啟了MAC地址隨機化功能,MAC地址隨機化是指手機WiFi開啟后,每次在掃描周圍WiFi熱點時攜帶的MAC地址都是隨機生成的,就算被WiFi探針獲取也無法做正確
    發表于 03-20 08:56 ?8345次閱讀

    固態硬盤的順序讀寫和隨機讀寫有何區別

    順序與隨機指的是每次數據存取請求對應的地址是否連續。Windows系統采取“見縫插針”的策略進行數據寫入,多任務系統下各進程對硬盤位置的讀寫請求也變得更為隨機化
    發表于 09-28 06:34 ?2.3w次閱讀

    簡述SystemVerilog隨機約束方法

    上一篇文章介紹了SystemVerilog各種隨機化方法,本文將在其基礎上引入SystemVerilog
    的頭像 發表于 01-21 17:03 ?2113次閱讀

    UVM中的uvm_do宏簡析

    uvm_do宏及其變體提供了創建、隨機化和發送transaction items或者sequence的方法
    的頭像 發表于 06-09 09:36 ?5026次閱讀
    UVM中的uvm_do宏簡析

    SystemVerilog隨機約束方法

    上一篇文章《暗藏玄機的SV隨機化》介紹了SystemVerilog各種隨機化方法,本文將在其基礎上引入
    的頭像 發表于 09-24 12:15 ?1745次閱讀

    SV約束隨機化總結

    constraint 約束隨機化類中的變量 在main_phase 之前就已經提前產生一個變量的隨機值。 用法:一般在類中定義一個rand 類型的變量, 然后根據需求寫約束就可以
    的頭像 發表于 12-14 14:30 ?906次閱讀
    SV約束<b class='flag-5'>隨機化</b>總結
    主站蜘蛛池模板: 性色少妇AV蜜臀人妻无码| 美女乱草鲍高清照片| 蜜桃久久久亚洲精品成人| 亚洲zooz人禽交xxxx| 办公室里呻吟的丰满老师电影| 久久精品视频15人人爱在线直播| 无码天堂亚洲国产AV久久| 成人精品综合免费视频| 免费成人小视频| 伊人久久大香线蕉综合影| 国产人妻系列无码专区97SS| 日日射日日操| silk118中文字幕无删减| 妹妹好色网| 中文字幕一区二区视频| 精品国产乱码久久久久久夜深人妻| 我的家庭女教师| 成人在线免费视频| 欧美猛男gaygayxxgv| 91香蕉福利一区二区三区| 久久热精品18国产| 亚洲欧美中文字幕先锋| 国产老头与老太hd| 偷拍亚洲色自拍| 国产成人无码视频一区二区三区| 日本妈妈在线观看中文字幕| 99热精品在线视频观看| 乱叫抽搐流白浆免费视频| 伊人影院综合在线| 精品国产乱码久久久久久软件 | blacked黑人战小美女| 久拍国产在线观看| 一级做a爰片久久毛片免费| 国内精品日本久久久久影院| 午夜宅宅伦电影网| 国产精品一国产精品免费| 日本美女bb| 俄罗斯美幼| 日韩精品一区二区中文| 被强J高H纯肉公交车啊| 美女脱了内裤张开腿让男人爽|