在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用SystemVerilog解決數組問題

芯片驗證工程師 ? 來源:芯片驗證工程師 ? 2023-03-08 14:06 ? 次閱讀

數獨是一種非常流行的游戲,數獨本質上也是一個約束問題,所以我們可以讓SystemVerilog的約束求解器來幫助我們解決。 約束求解器的精妙之處就是,我們只描述約束限制,繁重的數值生成工作由工具來幫我們完成。 你只需“既要...又要...”,其他的讓下人干吧~


我們將數獨網格表示為9x9整數數組,在名為sudoku_solver_base的類中定義所有屬性字段和約束。

class sudoku_solver_base;          
  rand int grid[9][9];          
            
  // ...          
endclass
我們的第一個約束是數組中的所有元素都必須是 1 到 9 之間的數字,這很容易:

constraint all_elements_1_to_9_c {          
  foreach (grid[i, j])          
    grid[i][j] inside { [1:9] };          
}
每行中的元素必須是唯一的,可以使用SystemVerilog中的unique語法結構來描述:

constraint unique_on_row_c {          
  foreach (grid[i])          
    unique { grid[i] };          
}
另外,每列上的所有元素也必須是唯一的。此時我們就需要構建一個輔助數組,將網格轉置。

local rand int grid_transposed[9][9];                  
constraint create_transposed_c {          
  foreach (grid[i, j])          
    grid_transposed[i][j] == grid[j][i];          
}
然后再加上類似的unique約束:

constraint unique_on_column_c {          
  foreach (grid_transposed[i])          
    unique { grid_transposed[i] };          
}
要解決一個數獨問題,僅有這3個約束遠遠是不夠的,因為還需要9 個子網格(3x3)都滿足相同的約束。 我們將9x9網格保存在四維數組中:


local  rand  int  sub_grids [ 3 ][ 3 ][ 3 ][ 3 ];
constraint  create_sub_grids_c  {           
  foreach  ( sub_grids [ i ,  j ,  k ,  l ])           
    sub_grids [ i ][ j ][ k ][ l ]  ==  grid [ i * 3  +  k ][ j * 3  +  l ];           
}

 在我們已經拿到所有對應的3x3網格后,我們類似地可以使用unique語法結構進行約束。 注意,這里需要將3x3的網格轉換成一個一維數組再約束。

local  rand  int  sub_grids_lin [ 3 ][ 3 ][ 9 ];                    
constraint  create_sub_grids_lin_c  {           
  foreach  ( sub_grids_lin [ i ,  j ,  k ])           
    sub_grids_lin [ i ][ j ][ k ]  ==  sub_grids [ i ][ j ][ k / 3 ][ k % 3 ];           
}
????

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Verilog
    +關注

    關注

    29

    文章

    1366

    瀏覽量

    111878
  • System
    +關注

    關注

    0

    文章

    166

    瀏覽量

    37584
  • 約束
    +關注

    關注

    0

    文章

    82

    瀏覽量

    12914
  • 數組
    +關注

    關注

    1

    文章

    419

    瀏覽量

    26379
  • 求解器
    +關注

    關注

    0

    文章

    79

    瀏覽量

    4710

原文標題:使用SystemVerilog解決數組問題

文章出處:【微信號:芯片驗證工程師,微信公眾號:芯片驗證工程師】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    轉一篇Systemverilog的一個牛人總結

    Systemverilog數據類型l 合并數組和非合并數組1)合并數組:存儲方式是連續的,中間沒有閑置空間。例如,32bit的寄存器,可以看成是4個8bit的數據,或者也可以看成是1個
    發表于 08-27 14:50

    SystemVerilog Assertion Handbo

    SystemVerilog Assertion Handbook1 ROLE OF SYSTEMVERILOG ASSERTIONSIN A VERIFICATION METHODOLOGY
    發表于 07-22 14:08 ?188次下載

    SystemVerilog的斷言手冊

    SystemVerilog Assertion Handbook1 ROLE OF SYSTEMVERILOG ASSERTIONSIN A VERIFICATION METHODOLOGY
    發表于 07-22 14:12 ?20次下載

    SystemVerilog語言介紹匯總

    作者:limanjihe ?https://blog.csdn.net/limanjihe/article/details/83005713 SystemVerilog是一種硬件描述和驗證語言
    的頭像 發表于 10-11 10:35 ?2630次閱讀

    SystemVerilog數組的賦值、索引和切片

    數組可以作為參數傳遞給子程序,當數組作為值傳遞給子程序時,會將這個數組復制一份傳遞給子程序。
    的頭像 發表于 10-20 10:13 ?5824次閱讀

    SystemVerilog動態數組的大小更改展示

    需要使用" new "操作符實例化一個動態數組,使用[]表示。在實例化過程中,會設置動態數組的大小。
    的頭像 發表于 10-21 09:43 ?1862次閱讀

    SystemVerilog中的操作方法

    SystemVerilog提供了幾個內置方法來支持數組搜索、排序等功能。
    的頭像 發表于 10-31 10:10 ?3413次閱讀

    SystemVerilog中的關聯數組

    關聯數組實際上是一種查找表,內存空間直到被使用時才會分配,每個數據項都會有一個特定的“鍵(索引)”,索引的類型不局限于整型。
    的頭像 發表于 10-31 10:12 ?4035次閱讀

    SystemVerilog中可以嵌套的數據結構

    SystemVerilog中除了數組、隊列和關聯數組等數據結構,這些數據結構還可以嵌套。
    的頭像 發表于 11-03 09:59 ?1907次閱讀

    FPGA學習-SystemVerilog語言簡介

    壓縮數組、 接口、斷言等等,這些都使得SystemVerilog在一個更高的抽象層次上提高了設計建模的能力。SystemVerilog由Accellera開發,它主要定位在芯片的實現和驗證流程上,并為
    的頭像 發表于 12-08 10:35 ?2547次閱讀

    網絡和變量的未壓縮數組

    SystemVerilog有兩種類型的數組:壓縮數組和非壓縮數組。壓縮數組是連續存儲的位的集合,通常稱為向量。非壓縮
    的頭像 發表于 02-09 14:50 ?877次閱讀
    網絡和變量的未壓縮<b class='flag-5'>數組</b>

    一些有趣的數組相關的SystemVerilog約束

    我們在工作中常常會針對數組施加各式的約束,下面列舉一下有趣的Systemverilog數組約束示例。
    的頭像 發表于 03-08 13:12 ?1217次閱讀

    列舉一下有趣的Systemverilog數組約束示例

    上面是最先想到的寫法,但是會報錯,因為SV約束語法不允許使用size()或任何其他隨機值作為索引。
    的頭像 發表于 05-04 17:35 ?1330次閱讀

    一些有趣的數組相關的SystemVerilog約束

    我們在工作中常常會針對數組施加各式的約束,下面列舉一下有趣的**Systemverilog數組約束**示例
    的頭像 發表于 05-30 11:13 ?1017次閱讀

    帶你了解SystemVerilog中的關聯數組

    SystemVerilog中,我們知道可以使用動態數組實現數組元素個數的動態分配,即隨用隨分
    的頭像 發表于 06-09 09:46 ?8202次閱讀
    帶你了解<b class='flag-5'>SystemVerilog</b>中的關聯<b class='flag-5'>數組</b>
    主站蜘蛛池模板: 九九涩 | 亚洲国产精品久久精品怡红院 | 播放毛片 | 一区三区三区不卡 | 天天视频一区二区三区 | 站长工具天天爽视频 | 午夜h视频| 三级成人影院 | 久久精品亚洲一级毛片 | 一区二区亚洲视频 | 神马午夜限制 | 狠狠干狠狠干狠狠干 | 中文天堂网在线www 中文天堂资源在线www | 成人性色生活影片 | 伊人久久大香线蕉综合电影 | 一级特黄性色生活片一区二区 | 国产网站黄色 | 天堂在线观看视频 | 午夜精品一区二区三区在线观看 | 精品一精品国产一级毛片 | 亚洲第一成年网 | av福利网址网站 | 98pao强力打造高清免费 | 久久久久久久国产视频 | 恐怖片大全恐怖片免费观看好看的恐怖片 | 米奇精品一区二区三区 | 天堂8资源在线官网资源 | 亚洲精品美女久久久aaa | 日韩欧美亚洲综合久久影院d3 | 一级黄色大全 | 日本黄色www| 免费看美女禁处爆涌视频 | 美女被猛男躁免费视频网站 | 欧美一区二区视频在线观看 | 国产午夜视频在线观看 | 午夜在线观看免费高清在线播放 | 日本xxxx色视频在线观看 | 特级毛片aaaaaa蜜桃 | 天天曰夜夜操 | 国模大胆一区二区三区 | 欧美日韩一日韩一线不卡 |