根據對randc的了解和思考,分享一種基于testcase顆粒度的"周期性"隨機控制思路(off-line cyclic random)。并從編碼實現上,驗證了該思路的可行性。
randc背景
在systemverilog中,隨機循環變量(randc),在一次仿真中多次調用randomize,會隨機循環遍歷其聲明范圍的所有值。隨機序列中的值都被取到后,產生一個新的隨機序列。
randc修飾的變量存在一些限制,如對變量類型的限制,不能參與solve before。而且randc只能是在一次仿真中具有“周期性”隨機的特性,此前用例的隨機結果不會影響當前仿真的周期性取值序列。也可以認為randc是一種on-line的周期性隨機。
off-line cyclic random
驗證用例集中的testcase多次仿真時,當前testcase的隨機過程無法知道此前用例的隨機狀態和結果。因此有一定概率會出現隨機變量在多次仿真時取到相同的值。
和randc類似,有沒有可能off-line的周期性隨機:隨機變量在testcase的多次仿真之間具有周期性。
off-line cyclic random:隨機變量的隨機取值不會和已有用例的隨機結果重復,并能夠"周期性"取值。已有的隨機結果可以是已有用例的隨機結果,也可以是預指定的取值集合。
編碼實踐
為驗證上述思路的可行性,并且還要降低對已有的隨機激勵結構的影響,開發一個randc_plugin的package。使用時需要兩步驟適配:
已有的隨機激勵class繼承base_randc_plugin;
使用參數宏添加隨機參數;
一個簡單的demo如下:
參數宏randc_int_registry表示注冊一個需要randc based testcase的int型變量,適用于systemverilog中的int,bit和enum類型。數組和其他復雜類型的注冊宏待后續補充完整。
on-line multi randomize
即使是使用rand修飾的隨機變量,使用randc_int_registry注冊后,仍具有randc的性質,而且還可以參與solve before,并且原有的constraint不受影響。
測試函數如下:
匯總得到的隨機結果如下:
off-linemulti randomize
測試函數如下:
將用例仿真10次后,匯總的隨機結果如下:
由于每個領域的驗證各具特色,這里僅提供一種隨機控制的思路和編碼實現嘗試,randc_plugin還在持續完善中。
審核編輯:劉清
-
編碼器
+關注
關注
45文章
3597瀏覽量
134176
原文標題:參數隨機策略:從 randc 到 off-line cyclic random
文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論