0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Foreach對(duì)Associative Array的constraint約束問(wèn)題記錄分享

sanyue7758 ? 來(lái)源:驗(yàn)證芯發(fā)現(xiàn) ? 2023-08-21 09:31 ? 次閱讀

systemverilog constraint中的foreach可以對(duì)數(shù)組進(jìn)行遍歷和約束,常用于普通數(shù)組,隊(duì)列或者動(dòng)態(tài)數(shù)組。而當(dāng)對(duì)associative array(聯(lián)合數(shù)組/字典)應(yīng)用foreach時(shí),遇到一些問(wèn)題,記錄分享如下。

聯(lián)合數(shù)組含有key和value兩個(gè)元素,在這里key的類型以int和string為例,value元素以int和int[$]隊(duì)列為例。

[int/string] [int] Associative Array

實(shí)踐的demo代碼如下:

classtest;
randbit[3:0]rd_dict[int];
randbit[3:0]rd_dict_fix[int];
randbit[3:0]rd_dict_str[string];

constraintc_rand{
rd_dict.size==7;
foreach(rd_dict[i]){
rd_dict[i]

rd_dict沒(méi)有進(jìn)行初始化,使用constraint的size進(jìn)行約束聯(lián)合數(shù)組key的個(gè)數(shù)和value取值約束

rd_dict_fix在new函數(shù)中進(jìn)行初始化,包含一個(gè)int key元素,在constraint中對(duì)value進(jìn)行約束

rd_dict_str在new函數(shù)進(jìn)行初始化,包含一個(gè)string key元素,在constraint中對(duì)value進(jìn)行約束

添加適當(dāng)?shù)臏y(cè)試打印代買(mǎi),可以得到如下的仿真結(jié)果:

5910deaa-3f6a-11ee-ac96-dac502259ad0.png

可以看出,普通的聯(lián)合數(shù)組,如果沒(méi)有初始化key元素,可以在constraint中使用size約束key的個(gè)數(shù),但key是順序遞增的,0~size-1。

如果初始化了key元素,無(wú)論是int還是string類型的key,使用foreach時(shí),可以對(duì)已初始化的key對(duì)應(yīng)的value進(jìn)行約束。

int/string->int[$] Associative Array

聯(lián)合數(shù)組的value是int隊(duì)列時(shí),demo代碼如下:

classtest;
randbit[3:0]rd_dict[int][$];
randbit[3:0]rd_dict_fix[int][$];
randbit[3:0]rd_dict_str[string][$];

constraintc_rand{
rd_dict.size==7;
foreach(rd_dict[i]){
rd_dict[i].size==3;
foreach(rd_dict[i][j]){
rd_dict[i][j]

rd_dict的key是int類型,value是int[$]隊(duì)列類型的value,size和value值都進(jìn)行了約束。

rd_dict_fix類型和rd_dict相同,區(qū)別在于new函數(shù)中進(jìn)行key初始化,僅包含一個(gè)key。

rd_dict_str的key類型是string類型,其他和rd_dict_fix相同。

不出意外,上述的code編譯出錯(cuò):

...
Expressionofthistypecannotbeusedtoindexthearray
...

錯(cuò)誤在于key是string類型,value是int[$]隊(duì)列的字典,constraint中不能使用foreach操作。

將上述string->int[$]的constraint注釋后,編譯可以通過(guò),在仿真時(shí)會(huì)出錯(cuò):

Theconstraintsolverfailedwhenaccessinganullarrayrd_dict[0].
Pleasemakesurearrayrd_dict[0]isallocatedproperly.

由于rd_dict[int][$]并沒(méi)有在new函數(shù)中進(jìn)行初始化,即使在constraint中使用了size約束大小,也沒(méi)有達(dá)到預(yù)期的效果,這點(diǎn)和[int/string] [int] Associative Array例子中不同。

上述問(wèn)題解決后,可得到最后的仿真結(jié)果:

59200d6c-3f6a-11ee-ac96-dac502259ad0.png

從上述的結(jié)果來(lái)看,如果聯(lián)合數(shù)組的value是隊(duì)列時(shí),則需要先進(jìn)行key的初始化,才可在constraint中進(jìn)行對(duì)value隊(duì)列的約束。key是string類型時(shí),似乎沒(méi)辦法使用foreach進(jìn)行約束。





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 仿真器
    +關(guān)注

    關(guān)注

    14

    文章

    1014

    瀏覽量

    83591
  • Verilog語(yǔ)言
    +關(guān)注

    關(guān)注

    0

    文章

    113

    瀏覽量

    8204

原文標(biāo)題:Foreach對(duì)Associative Array的constraint約束

文章出處:【微信號(hào):處芯積律,微信公眾號(hào):處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何編寫(xiě)高級(jí)時(shí)序約束

    如何編寫(xiě)高級(jí)時(shí)序約束?我使用提前一詞,因?yàn)槲抑廊绾卧趗cf文件中約束的基本知識(shí)?;緝?nèi)容包括將引腳分配給相應(yīng)的輸出和頂部模塊的輸入,并配置時(shí)鐘引腳周期。但是除了LOC和PERIOD之外,還有很多
    發(fā)表于 03-27 09:58

    設(shè)計(jì)中的關(guān)鍵路徑如何約束

    喜我對(duì)我的設(shè)計(jì)中的關(guān)鍵路徑以及如何約束它們有疑問(wèn)。我正在使用ISE 14.1進(jìn)行實(shí)施。我有一個(gè)設(shè)計(jì),其中關(guān)鍵路徑(從源FD到目的地FD)給出-3.3ns的松弛(周期約束為10ns)?,F(xiàn)在有沒(méi)有其他
    發(fā)表于 04-08 08:58

    OFFSET約束問(wèn)題

    嗨,大家好,據(jù)我所知,OFFSET約束強(qiáng)加于所有輸入PAD。在我的設(shè)計(jì)中,使用了兩個(gè)時(shí)鐘輸入。因此,PAD上的輸入信號(hào)應(yīng)分組為:1.需要OFFSET約束時(shí)間值#1,參考時(shí)鐘輸入#12.需要
    發(fā)表于 05-29 13:51

    一個(gè)約束驅(qū)動(dòng)(constraint-driven)的綜合工具

    Design Compiler時(shí)一個(gè)約束驅(qū)動(dòng)(constraint-driven)的綜合工具,它的結(jié)果與設(shè)計(jì)者施加的約束條件密切相關(guān)。
    發(fā)表于 07-29 07:56

    編程遇到的問(wèn)題記錄

    編程遇到的問(wèn)題記錄warning C318: can't open file 'commom.h'//文件路徑?jīng)]有錯(cuò)誤的情況下#include "commom.h"寫(xiě)錯(cuò)頭文件名字,應(yīng)該是common
    發(fā)表于 11-30 07:08

    STC89C52RC單片機(jī)奇葩問(wèn)題記錄

    防止自己好了傷疤,忘了痛!所以開(kāi)始把一些問(wèn)題記錄下來(lái)!版本:KEIL C51 uVision4.00a工程:STC89C52RC單片機(jī)奇葩問(wèn)題1:寫(xiě)一個(gè)P33口的中斷程序時(shí),剛開(kāi)始確實(shí)有錯(cuò),后來(lái)改了
    發(fā)表于 12-08 06:26

    使用STM32的MCU開(kāi)發(fā)問(wèn)題記錄

    的 MCU,特此把遇到的問(wèn)題記錄一下!注意,如果沒(méi)有特殊說(shuō)明,默認(rèn)的開(kāi)發(fā)環(huán)境為Win10 Pro 20H2 ,Keil uVision5 5.32!STM32F103 在 KEIL 調(diào)試時(shí)部分寄存器不顯示數(shù)據(jù)現(xiàn)象進(jìn)入調(diào)試狀態(tài),觀察某些外設(shè)的寄存器,發(fā)現(xiàn)有些寄存器不顯示配置的值,而是始終顯示 0。如下圖:為
    發(fā)表于 01-05 06:17

    華大MCU的應(yīng)用中的問(wèn)題記錄

    華大MCU的應(yīng)用中的問(wèn)題記錄
    發(fā)表于 02-24 08:03

    HarmonyOS/OpenHarmony應(yīng)用開(kāi)發(fā)-ArkTS語(yǔ)言渲染控制ForEach循環(huán)渲染

    Array場(chǎng)景下,因?yàn)閳?zhí)行過(guò)程中很容易添加重復(fù)的數(shù)字。 4.ForEach的嵌套使用 允許將ForEach嵌套在同一組件中的另一個(gè)ForEach中,但更推薦將組件拆分為兩個(gè),每個(gè)構(gòu)造函
    發(fā)表于 08-18 10:50

    時(shí)序約束爆炸的原因研究分析

    這個(gè)Xilinx Quick Take Video我們將討論Constraint Explosion。 在本次會(huì)議中,我們將研究導(dǎo)致時(shí)序約束爆炸的原因,然后是如何調(diào)試和修復(fù)異常約束問(wèn)題。
    的頭像 發(fā)表于 11-20 06:23 ?2143次閱讀

    Java的iterator和foreach遍歷集合源代碼

    Java的iterator和foreach遍歷集合源代碼
    發(fā)表于 03-17 09:16 ?9次下載
    Java的iterator和<b class='flag-5'>foreach</b>遍歷集合源代碼

    PHP教程:foreach使用引用注意的問(wèn)題

    PHP教程:foreach使用引用注意的問(wèn)題(電源技術(shù)期刊查詢)-該文檔為PHP教程:foreach使用引用注意的問(wèn)題總結(jié)文檔,是一份不錯(cuò)的參考資料,感興趣的可以下載看看,,,,,,,,,,,,,,,,,
    發(fā)表于 09-22 12:28 ?9次下載
    PHP教程:<b class='flag-5'>foreach</b>使用引用注意的問(wèn)題

    AD學(xué)習(xí)問(wèn)題記錄(二):pcb設(shè)計(jì)規(guī)則檢查報(bào)錯(cuò)Silk To Solder Mask Clearance Constraint

    AD pcb設(shè)計(jì)規(guī)則檢查報(bào)錯(cuò)Silk To Solder Mask Clearance Constraint報(bào)錯(cuò)原因處理方法一:改變規(guī)則中的最小間距:方法二:直接取消這一項(xiàng)的檢查:結(jié)果軟件版
    發(fā)表于 12-04 15:21 ?26次下載
    AD學(xué)習(xí)問(wèn)<b class='flag-5'>題記錄</b>(二):pcb設(shè)計(jì)規(guī)則檢查報(bào)錯(cuò)Silk To Solder Mask Clearance <b class='flag-5'>Constraint</b>

    for循環(huán)和forEach的差異

    for循環(huán)是js提出時(shí)就有的循環(huán)方法。forEach是ES5提出的,掛載在可迭代對(duì)象原型上的方法,例如Array Set Map。forEach是一個(gè)迭代器,負(fù)責(zé)遍歷可迭代對(duì)象。那么遍歷 ,迭代 ,可迭代對(duì)象 分別是什么呢。
    的頭像 發(fā)表于 10-11 11:10 ?1277次閱讀

    SV約束隨機(jī)化總結(jié)

    constraint 約束隨機(jī)化類中的變量 在main_phase 之前就已經(jīng)提前產(chǎn)生一個(gè)變量的隨機(jī)值。 用法:一般在類中定義一個(gè)rand 類型的變量, 然后根據(jù)需求寫(xiě)約束就可以
    的頭像 發(fā)表于 12-14 14:30 ?773次閱讀
    SV<b class='flag-5'>約束</b>隨機(jī)化總結(jié)