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

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

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

3天內不再提示

簡述SystemVerilog的各種隨機化方法

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

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

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

偽隨機數(shù)的產(chǎn)生

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

圖片

1. Probabilistic Distribution System Functions

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

2. Object and Scope Randomization Method

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

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

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

3. Random Number System Function

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

隨機穩(wěn)定性(Random stability)

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

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

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

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

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

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

編程示例

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

圖片

仿真結果如下圖所示:

圖片

參考文獻

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

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

    關注

    456

    文章

    51192

    瀏覽量

    427324
  • Verilog
    +關注

    關注

    28

    文章

    1351

    瀏覽量

    110400
  • System
    +關注

    關注

    0

    文章

    165

    瀏覽量

    37078
收藏 人收藏

    評論

    相關推薦

    求教!!LabVIEW怎樣數(shù)據(jù)的隨機化

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

    高速ADC的數(shù)字輸出隨機化

    ADC輸出頻譜中引起不良的音調。通過在將數(shù)字輸出傳輸?shù)叫酒庵皩?shù)字輸出進行隨機化,我們可以避免最麻煩的數(shù)字輸出轉換-即在中檔輸入電壓下發(fā)生的從全1到全零的轉換。通過在LSB和所有其他數(shù)據(jù)輸出位之間
    發(fā)表于 11-11 10:07

    緩沖區(qū)溢出的危害及避免緩沖區(qū)溢出的三種方法

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

    新的隨機化廣播加密方案

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

    SystemVerilog中的隨機化激勵

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

    System Verilog中的隨機化激勵

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

    基于System Verilog中的隨機化激勵

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

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

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

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

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

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

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

    固態(tài)硬盤的順序讀寫和隨機讀寫有何區(qū)別

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

    簡述SystemVerilog隨機約束方法

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

    UVM中的uvm_do宏簡析

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

    SystemVerilog隨機約束方法

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

    SV約束隨機化總結

    constraint 約束隨機化類中的變量 在main_phase 之前就已經(jīng)提前產(chǎn)生一個變量的隨機值。 用法:一般在類中定義一個rand 類型的變量, 然后根據(jù)需求寫約束就可以
    的頭像 發(fā)表于 12-14 14:30 ?956次閱讀
    SV約束<b class='flag-5'>隨機化</b>總結
    大发888登陆| 香港六合彩彩图| 百家乐官网棋牌游| 保时捷娱乐城| 百家乐官网赌博玩法技巧| 棋牌下载| 巴比伦百家乐的玩法技巧和规则| 大发888备用网址大全| 百家乐mediacorp| 柬埔寨百家乐官网的玩法技巧和规则| 财神娱乐城怎么样| 百家乐是娱乐场最不公平的游戏| 百家乐类游戏平台| 百家乐最新套路| 状元百家乐官网的玩法技巧和规则 | 正规棋牌游戏| 大发888东方鸿运| 网上百家乐娱乐场开户注册 | 如何看百家乐官网的路纸| 现金轮盘游戏| 蜀都棋牌游戏| 百家乐线路图分析| 新世纪百家乐娱乐城| 波音百家乐网上娱乐| 百家乐官网鞋| 王牌百家乐官网的玩法技巧和规则 | 现金网hg8568.com| 大发888娱乐城电脑版下载| 贵族百家乐的玩法技巧和规则 | 百家乐官网发牌规| 钱隆百家乐官网分析| 百家乐官网是不是有技巧| 乐宝百家乐官网娱乐城| 华亭县| k7娱乐| 百家乐官网大老娱乐| 莆田市| 都安| 获嘉县| 百家乐官网真人视屏游戏| 百家乐官网娱乐城反水|