我們在工作中常常會針對數組施加各式的約束,下面列舉一下有趣的Systemverilog數組約束示例:
1、如何約束動態數組的最后一個元素為特定值。(事先不知道數組的大小)
randintsome_dynamic_array[]; constraint last_elem_c { some_dynamic_array[some_dynamic_array.size() - 1] == 5; }上面是最先想到的寫法,但是會報錯,因為SV約束語法不允許使用size()或任何其他隨機值作為索引。所以只能修改代碼:
constraint last_elem_c { foreach(some_dynamic_array[i]) if (i == some_dynamic_array.size() - 1) some_dynamic_array[i] == 5; }2、約束數組中必須包含一個特定的值2。
constraint contains_c { 2 inside { some_dynamic_array }; }相反,如果我們約束數組中不包含值2呢?
constraint not_contains_c { !(2 inside { some_dynamic_array }); }3、約束數組中每個值都是唯一的。
constraint all_elems_unique_c { unique { some_dynamic_array }; }這個約束非常簡短高效,等價于下面這段冗長的代碼:
constraint all_elems_unique_c { foreach (some_dynamic_array[i]) foreach (some_dynamic_array[j]) if (i != j) some_dynamic_array[i] != some_dynamic_array[j]; }上面這段代碼雖然冗長,確是我們開發數組約束的一個通用框架。 4、約束2個數組相等。如果數組是packed可以直接使用==,如果數組是unpacked,則不行。 packedarray約束:
rand bit[9:0][3:0] some_packed_array, some_other_packed_array; constraint packed_arrays_equal_c { some_packed_array == some_other_packed_array; }unpackedarray約束:
rand bit[3:0] some_unpacked_array[10], some_other_unpacked_array[10]; constraint unpacked_arrays_equal_c { foreach (some_other_unpacked_array[i]) some_other_unpacked_array[i] == some_unpacked_array[i]; }
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
Verilog
+關注
關注
28文章
1343瀏覽量
109985 -
System
+關注
關注
0文章
165瀏覽量
36885 -
代碼
+關注
關注
30文章
4747瀏覽量
68349 -
約束
+關注
關注
0文章
82瀏覽量
12718 -
數組
+關注
關注
1文章
415瀏覽量
25908
原文標題:一些有趣的數組相關的SystemVerilog 約束
文章出處:【微信號:芯片驗證工程師,微信公眾號:芯片驗證工程師】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
Foreach對Associative Array的constraint約束問題記錄分享
systemverilog constraint中的foreach可以對數組進行遍歷和約束,常用于普通數組,隊列或者動態數組。
用幾個深度學習框架串起來這些年歷史上的一些有趣的插曲
清明節這幾天有些時間寫了這篇文章,從我的視角,用幾個深度學習框架串起來這些年歷史上的一些有趣的插曲,和技術背后的一些故事,免得寶貴的記憶隨著時間在腦中淡去。
簡述SystemVerilog的隨機約束方法
上一篇文章介紹了SystemVerilog的各種隨機化方法,本文將在其基礎上引入SystemVerilog的隨機約束方法(constraints)。通過使用隨機
使用SystemVerilog解決數組問題
數獨是一種非常流行的游戲,數獨本質上也是一個約束問題,所以我們可以讓SystemVerilog的約束求解器來幫助我們解決。
SystemVerilog中“軟約束”與“硬約束”的應用示例
示例中采用的是“硬約束”,因為定義在類中的約束與隨機時指定的內嵌約束“矛盾”,所以導致約束解析器解析隨機失敗,即“硬約束”要求所有
發表于 03-15 16:56
?4578次閱讀
列舉一下有趣的Systemverilog數組約束示例
上面是最先想到的寫法,但是會報錯,因為SV約束語法不允許使用size()或任何其他隨機值作為索引。
SystemVerilog的隨機約束方法
上一篇文章《暗藏玄機的SV隨機化》介紹了SystemVerilog的各種隨機化方法,本文將在其基礎上引入SystemVerilog的隨機約束方法(constraints)。通過使用隨機
評論