我們?cè)诠ぷ髦谐3?huì)針對(duì)數(shù)組施加各式的約束,下面列舉一下有趣的Systemverilog數(shù)組約束示例:
1、如何約束動(dòng)態(tài)數(shù)組的最后一個(gè)元素為特定值。(事先不知道數(shù)組的大小)
randintsome_dynamic_array[]; constraint last_elem_c { some_dynamic_array[some_dynamic_array.size() - 1] == 5; }上面是最先想到的寫(xiě)法,但是會(huì)報(bào)錯(cuò),因?yàn)?strong>SV約束語(yǔ)法不允許使用size()或任何其他隨機(jī)值作為索引。所以只能修改代碼:
constraint last_elem_c { foreach(some_dynamic_array[i]) if (i == some_dynamic_array.size() - 1) some_dynamic_array[i] == 5; }2、約束數(shù)組中必須包含一個(gè)特定的值2。
constraint contains_c { 2 inside { some_dynamic_array }; }相反,如果我們約束數(shù)組中不包含值2呢?
constraint not_contains_c { !(2 inside { some_dynamic_array }); }3、約束數(shù)組中每個(gè)值都是唯一的。
constraint all_elems_unique_c { unique { some_dynamic_array }; }這個(gè)約束非常簡(jiǎn)短高效,等價(jià)于下面這段冗長(zhǎng)的代碼:
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]; }上面這段代碼雖然冗長(zhǎng),確是我們開(kāi)發(fā)數(shù)組約束的一個(gè)通用框架。 4、約束2個(gè)數(shù)組相等。如果數(shù)組是packed可以直接使用==,如果數(shù)組是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
+關(guān)注
關(guān)注
28文章
1351瀏覽量
110392 -
System
+關(guān)注
關(guān)注
0文章
165瀏覽量
37074 -
代碼
+關(guān)注
關(guān)注
30文章
4825瀏覽量
69047 -
約束
+關(guān)注
關(guān)注
0文章
82瀏覽量
12772 -
數(shù)組
+關(guān)注
關(guān)注
1文章
417瀏覽量
26028
原文標(biāo)題:一些有趣的數(shù)組相關(guān)的SystemVerilog 約束
文章出處:【微信號(hào):芯片驗(yàn)證工程師,微信公眾號(hào):芯片驗(yàn)證工程師】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論