1. 程式人生 > >第六章:隨機化(續2)

第六章:隨機化(續2)

重要 之間 ilog -o bbbb 動態 調試 即使 不同

6.10 隨機化句柄數組

如果想要產生多個隨機對象,那麽你可能需要建立隨機句柄數組,和整數數組不同,隨機求解器不會創建對象,所以你需要在隨機化前分配所有的元素。
動態數組可以按照需要分配最大數量的元素,然後按照約束再逐步減小數組的大小。在隨機化時,動態句柄數組的大小可以保持不變或減小,但是不能增加。
技術分享圖片

6.11 產生原子激勵和場景

每次只產生一個事務,這些產生一個隨機總線事務、一個網絡包、一條處理器指令都是原子隨機事務。

6.11.1 隨機序列

產生事務序列的另一種方法是使用SystemVerilog的randsequence結構。
技術分享圖片

  • 給出權重分布
  • 程序性代碼可以調試($display),不像randomize()函數要麽成功,要麽失敗。
  • 產生序列的代碼與序列使用的包是分開的,風格也完全不同。

    6.11.2 隨機控制
    之前的介紹能夠使我們很隨意的產生隨機序列,但是如果設計只是偶爾才需要隨機決策,你就會認為上面的方法是一件很麻煩的事情。程序員更喜歡用程序性的語句,這樣就可以使用調試工具逐條運行。
  • 使用randcase和$urandom_range的隨機控制。

技術分享圖片

  • 使用randomize()函數的隨機控制。
    技術分享圖片

    6.11.3 用randcase建立決策樹

    通過下列兩級代碼,便可以清楚知道決策樹是怎麽建立的。
    技術分享圖片

    6.12 隨機數發生器

    6.12.1 偽隨機數發生器

    Verilog使用了一種簡單的PRNG(偽隨機數發生器),通過$random函數訪問,這個發生器有一個內部狀態,可以通過$random的種子來設置。
    SystemVerilog通過randomize()和randcase來調用PRNG。

    6.12.2 隨機穩定性---多個隨機發生器

    Verilog在整個仿真中使用一個PRNG。
    SystemVerilog中,每個對象和線程都有一個獨立的PRNG。

    6.12.3 隨機穩定性和層次化種子

    SystemVerilog的每個對象都有自己的PRNG和獨立的種子。在仿真開始時,一個種子可以產生可以產生多個隨機激勵流,它們之間又是相互獨立的。
    當調試測試平臺的時候,如果修改代碼的話,即使是具備隨機穩定性,代碼的變化也會使測試平臺產生不同的隨機值。特別是當調試DUT的故障時,測試平臺卻不能再現相同的激勵。把新增的對象和線程放在現有對象和線程之後,可以減小修改代碼帶來的影響。

    6.12.4 隨機器件配置

    測試DUT的一個重要工作是測試DUT內部設置和環繞DUT的系統配置。測試應該隨機化環境,這樣才能保證盡可能測試足夠多的模式。

第六章:隨機化(續2)