国产在线视频精品视频,国产亚洲精品久久久久久青梅 ,国产麻豆精品一区,国产真实乱对白精彩久久,国产精品视频一区二区三区四

您的位置:教育>正文

Foreach對Associative Array的constraint約束問題記錄分享

來源:驗證芯發(fā)現(xiàn)2023-08-21 18:11:30

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

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

[int/string] [int] Associative Array


(相關(guān)資料圖)

實踐的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]<13;}foreach(rd_dict_fix[i])rd_dict_fix[i]==13;foreach(rd_dict_str[i])rd_dict_str[i]==14;}functionnew();rd_dict_fix[9]=0;rd_dict_str["A"]=0;endfunction

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

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

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

添加適當?shù)臏y試打印代買,可以得到如下的仿真結(jié)果:

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

如果初始化了key元素,無論是int還是string類型的key,使用foreach時,可以對已初始化的key對應的value進行約束。

int/string->int[$] Associative Array

聯(lián)合數(shù)組的value是int隊列時,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]<13;}}foreach(rd_dict_fix[i]){rd_dict_fix[i].size==4;foreach(rd_dict_fix[i][j])rd_dict_fix[i][j]==13;}foreach(rd_dict_str[i]){rd_dict_str[i].size==4;foreach(rd_dict_str[i][j])rd_dict_str[i][j]==14;}}functionnew();rd_dict_fix[9]="{};rd_dict_str["A"]="{};endfunction

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

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

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

不出意外,上述的code編譯出錯:

...Expressionofthistypecannotbeusedtoindexthearray...

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

將上述string->int[$]的constraint注釋后,編譯可以通過,在仿真時會出錯:

Theconstraintsolverfailedwhenaccessinganullarrayrd_dict[0].Pleasemakesurearrayrd_dict[0]isallocatedproperly.

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

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

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

審核編輯:劉清

相關(guān)內(nèi)容