我們在工作中常常會(huì)針對(duì)數(shù)組施加各式的約束,下面列舉一下有趣的Systemverilog數(shù)組約束示例:
1、如何約束動(dòng)態(tài)數(shù)組的最后一個(gè)元素為特定值。(事先不知道數(shù)組的大?。?/strong>
randintsome_dynamic_array[];
constraint last_elem_c {
some_dynamic_array[some_dynamic_array.size() - 1] == 5;
}
上面是最先想到的寫法,但是會(huì)報(bào)錯(cuò),因?yàn)?strong>SV約束語法不允許使用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à)于下面這段冗長的代碼:
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];
}
上面這段代碼雖然冗長,確是我們開發(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];
}
審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
Verilog
+關(guān)注
關(guān)注
30文章
1374瀏覽量
114530 -
System
+關(guān)注
關(guān)注
0文章
166瀏覽量
38684 -
代碼
+關(guān)注
關(guān)注
30文章
4968瀏覽量
73989 -
約束
+關(guān)注
關(guān)注
0文章
83瀏覽量
13179 -
數(shù)組
+關(guān)注
關(guān)注
1文章
420瀏覽量
27368
原文標(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)推薦
熱點(diǎn)推薦
Foreach對(duì)Associative Array的constraint約束問題記錄分享
systemverilog constraint中的foreach可以對(duì)數(shù)組進(jìn)行遍歷和約束,常用于普通數(shù)組,隊(duì)列或者動(dòng)態(tài)數(shù)組。
用幾個(gè)深度學(xué)習(xí)框架串起來這些年歷史上的一些有趣的插曲
清明節(jié)這幾天有些時(shí)間寫了這篇文章,從我的視角,用幾個(gè)深度學(xué)習(xí)框架串起來這些年歷史上的一些有趣的插曲,和技術(shù)背后的一些故事,免得寶貴的記憶隨著時(shí)間在腦中淡去。
一些有趣的稱重傳感器放大器電路
我發(fā)現(xiàn)了一些有趣的稱重傳感器放大器示意圖。眾所周知,稱重傳感器放大器非常昂貴,合理的價(jià)格范圍為100-300美元。您可以構(gòu)建自己的稱重傳感器放大器以獲得更低的成本。
一些有趣的NE555電路
NE555是一個(gè)非常常見的一個(gè)芯片,在很多的電器里都能看到它的身影,本文為大家總結(jié)了一些有趣的NE555電路。
簡述SystemVerilog的隨機(jī)約束方法
上一篇文章介紹了SystemVerilog的各種隨機(jī)化方法,本文將在其基礎(chǔ)上引入SystemVerilog的隨機(jī)約束方法(constraints)。通過使用隨機(jī)
使用SystemVerilog解決數(shù)組問題
數(shù)獨(dú)是一種非常流行的游戲,數(shù)獨(dú)本質(zhì)上也是一個(gè)約束問題,所以我們可以讓SystemVerilog的約束求解器來幫助我們解決。
SystemVerilog中“軟約束”與“硬約束”的應(yīng)用示例
示例中采用的是“硬約束”,因?yàn)槎x在類中的約束與隨機(jī)時(shí)指定的內(nèi)嵌約束“矛盾”,所以導(dǎo)致約束解析器解析隨機(jī)失敗,即“硬約束”要求所有
發(fā)表于 03-15 16:56
?7306次閱讀
列舉一下有趣的Systemverilog數(shù)組約束示例
上面是最先想到的寫法,但是會(huì)報(bào)錯(cuò),因?yàn)镾V約束語法不允許使用size()或任何其他隨機(jī)值作為索引。
一些有趣的數(shù)組相關(guān)的SystemVerilog約束
我們在工作中常常會(huì)針對(duì)數(shù)組施加各式的約束,下面列舉一下有趣的**Systemverilog數(shù)組約束
帶你了解SystemVerilog中的關(guān)聯(lián)數(shù)組
在SystemVerilog中,我們知道可以使用動(dòng)態(tài)數(shù)組實(shí)現(xiàn)數(shù)組元素個(gè)數(shù)的動(dòng)態(tài)分配,即隨用隨分
SystemVerilog的隨機(jī)約束方法
上一篇文章《暗藏玄機(jī)的SV隨機(jī)化》介紹了SystemVerilog的各種隨機(jī)化方法,本文將在其基礎(chǔ)上引入SystemVerilog的隨機(jī)約束方法(constraints)。通過使用隨機(jī)
一些有趣的數(shù)組相關(guān)的SystemVerilog約束
評(píng)論