我們在工作中常常會針對數(shù)組施加各式的約束,下面列舉一下有趣的Systemverilog數(shù)組約束示例:
1、如何約束動態(tài)數(shù)組的最后一個元素為特定值。(事先不知道數(shù)組的大?。?/strong>
randintsome_dynamic_array[]; constraint last_elem_c { some_dynamic_array[some_dynamic_array.size() - 1] == 5; }上面是最先想到的寫法,但是會報錯,因為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ù)組中必須包含一個特定的值2。
constraint contains_c { 2 inside { some_dynamic_array }; }相反,如果我們約束數(shù)組中不包含值2呢?
constraint not_contains_c { !(2 inside { some_dynamic_array }); }3、約束數(shù)組中每個值都是唯一的。
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]; }上面這段代碼雖然冗長,確是我們開發(fā)數(shù)組約束的一個通用框架。 4、約束2個數(shù)組相等。如果數(shù)組是packed可以直接使用==,如果數(shù)組是unpacked,則不行。 packed array約束:
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; }unpacked array約束:
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ī)問題,請聯(lián)系本站處理。
舉報投訴
-
Verilog語言
+關(guān)注
關(guān)注
0文章
113瀏覽量
8206
原文標(biāo)題:一些有趣的數(shù)組相關(guān)的SystemVerilog 約束
文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
Foreach對Associative Array的constraint約束問題記錄分享
systemverilog constraint中的foreach可以對數(shù)組進(jìn)行遍歷和約束,常用于普通數(shù)組,隊列或者動態(tài)數(shù)組。
請問一下有關(guān)壓電超聲換能器的問題
請問一下有關(guān)壓電超聲換能器有一個是接收。。一個是發(fā)射!他們的 安裝的順序有要求嗎?怎么來區(qū)分哪一個是發(fā)射·
發(fā)表于 03-22 18:20
能幫忙看一下有什么問題么 數(shù)組拆分合并的
按照教程把excel的內(nèi)容創(chuàng)建成了數(shù)組,現(xiàn)在想把數(shù)組的前兩行拆成一個數(shù)組,所以用了索引數(shù)組,索引出兩行,也就是兩個
發(fā)表于 11-12 10:57
請教一下有哪些ARM的DMA電路呢
請教一下有哪些arm的DMA電路,現(xiàn)在看到的是DMA330,用的bus好像是AXI的,有沒有AHB bus的DMA(ARM設(shè)計),謝謝
發(fā)表于 06-02 09:33
電磁爐加熱一下就停一下什么原因及解決辦法
電磁爐有時會出現(xiàn)加熱故障,現(xiàn)象是熱一下停一下在熱一下又停一下,基本隔一秒一熱
發(fā)表于 03-18 09:02
?27.3w次閱讀
Systemverilog event的示例
event是SystemVerilog語言中的一個強(qiáng)大特性,可以支持多個并發(fā)進(jìn)程之間的同步。
簡述SystemVerilog的隨機(jī)約束方法
上一篇文章介紹了SystemVerilog的各種隨機(jī)化方法,本文將在其基礎(chǔ)上引入SystemVerilog的隨機(jī)約束方法(constraints)。通過使用隨機(jī)
使用SystemVerilog解決數(shù)組問題
數(shù)獨(dú)是一種非常流行的游戲,數(shù)獨(dú)本質(zhì)上也是一個約束問題,所以我們可以讓SystemVerilog的約束求解器來幫助我們解決。
一些有趣的數(shù)組相關(guān)的SystemVerilog約束
我們在工作中常常會針對數(shù)組施加各式的約束,下面列舉一下有趣的Systemverilog數(shù)組
SystemVerilog中“軟約束”與“硬約束”的應(yīng)用示例
示例中采用的是“硬約束”,因為定義在類中的約束與隨機(jī)時指定的內(nèi)嵌約束“矛盾”,所以導(dǎo)致約束解析器解析隨機(jī)失敗,即“硬
發(fā)表于 03-15 16:56
?4502次閱讀
一些有趣的數(shù)組相關(guān)的SystemVerilog約束
我們在工作中常常會針對數(shù)組施加各式的約束,下面列舉一下有趣的**Systemverilog數(shù)組
帶你了解SystemVerilog中的關(guān)聯(lián)數(shù)組
在SystemVerilog中,我們知道可以使用動態(tài)數(shù)組實(shí)現(xiàn)數(shù)組元素個數(shù)的動態(tài)分配,即隨用隨分
SystemVerilog里的regions以及events的調(diào)度
本文講一下SystemVerilog的time slot里的regions以及events的調(diào)度。SystemVerilog語言是根據(jù)離散事件執(zhí)行模型定義的,由events驅(qū)動。
SystemVerilog的隨機(jī)約束方法
上一篇文章《暗藏玄機(jī)的SV隨機(jī)化》介紹了SystemVerilog的各種隨機(jī)化方法,本文將在其基礎(chǔ)上引入SystemVerilog的隨機(jī)約束方法(constraints)。通過使用隨機(jī)
評論