敏捷硬件開發語言Chisel與數字系統設計(第2版)

梁峰 等

  • 出版商: 電子工業
  • 出版日期: 2026-05-01
  • 售價: $414
  • 語言: 簡體中文
  • 頁數: 280
  • ISBN: 712152628X
  • ISBN-13: 9787121526282
  • 相關分類: 邏輯設計 Logic-design
  • 下單後立即進貨 (約4週~6週)

相關主題

商品描述

集成電路設計復雜度的攀升使傳統硬件描述語言的局限凸顯,Chisel憑借高層次抽象與敏捷特性成為產業的核心支撐。本書緊跟Chisel 7.x與CIRCT編譯框架進展,優化內容體系、強化工程實踐,契合芯片自主創新需求,為讀者提供從理論到工業級設計的完整指引。全書共13章,形成了知識閉環:第1章奠定Chisel和Scala認知與環境基礎;第2~3章詳解Scala語法、Chisel 7.3配置及數據類型;第4~6章覆蓋硬件類型使用、控制結構適配及標準庫原語調用;第7~9章闡述Verilog生成、黑盒銜接、多時鐘域設計及代碼復用技巧;第10章解決命名管理、版本遷移等實踐痛點;第11~13章通過處理器設計、流控體系及工業案例,呈現復雜系統設計全流程。本書提供配套的電子課件PPT、課後練習參考答案、教學大綱、程序源代碼及相關工程案例源碼等。

目錄大綱

目 錄
第1章 新型敏捷硬件開發語言——Chisel和Scala 1
1.1 最好的宿主——什麼是Scala 1
1.2 敏捷開發——什麼是Chisel 1
1.3 Scala入門——讓你的代碼跑起來 3
1.3.1 Scala的安裝方法 3
1.3.2 使用Scala解釋器 4
1.3.3 運行Scala腳本 4
1.3.4 編譯非腳本文件 5
1.3.5 使用IDEA開發Scala項目 5
1.3.6 總結 7
1.4 章節安排 7
1.5 芯片自主創新:歷史傳承、產業實踐與技術路徑 8
1.5.1 古代工程技術中的系統思維 8
1.5.2 芯片產業技術實踐的多維觀察 8
1.5.3 Chisel學習與工程實踐方法 9
1.6 參考文獻 9
1.7 課後練習 9
第2章 Chisel入門與Scala變量函數基礎 11
2.1 Scala變量定義與基本類型 11
2.1.1 變量定義的本質與規則 11
2.1.2 Scala的基本類型體系 13
2.1.3 函數及其多種形態 15
2.2 Chisel 7.3開發環境搭建 22
2.2.1 環境要求與軟件版本 22
2.2.2 安裝步驟 23
2.2.3 項目結構與配置 24
2.2.4 開發環境測試 25
2.3 Chisel 7.3的核心特性與編譯流程 26
2.3.1 Chisel 7.3的包結構 26
2.3.2 編譯流程詳解 26
2.3.3 為什麼使用SystemVerilog 27
2.3.4 編譯API詳解 28
2.3.5 多時鐘域處理 28
2.3.6 常見問題與解決方案 29
2.4 CIRCT後端與編譯優化 30
2.4.1 CIRCT後端簡介 30
2.4.2 firtool工具詳解 31
2.4.3 與傳統Chisel 3.x流程的對比 31
2.5 總結 32
2.6 課後練習 33
第3章 Chisel數據類型與Scala集合應用 35
3.1 Chisel數據類型概述 35
3.2 Chisel數據類型層次結構 35
3.3 基本數據類型 36
3.3.1 Bits抽象類型 36
3.3.2 UInt與SInt 37
3.3.3 Bool類型 37
3.3.4 Clock和Reset 38
3.4 復合數據類型 39
3.4.1 Bundle 39
3.4.2 Vec 40
3.4.3 MixedVec 41
3.5 類型轉換 41
3.5.1 UInt與SInt的相互轉換 41
3.5.2 Bool與UInt的相互轉換 42
3.5.3 類型轉換時的寬度處理 42
3.6 操作符 42
3.7 寬度推斷 45
3.7.1 寬度推斷規則詳解 45
3.7.2 強制指定寬度 46
3.7.3 寬度控制的最佳實踐 46
3.7.4 DontCare的使用 46
3.8 Scala集合在Chisel中的應用 46
3.8.1 數組與數組緩沖 47
3.8.2 列表與列表緩沖 48
3.8.3 元組 49
3.8.4 映射與集合 49
3.8.5 Scala集合與Chisel Vec的對比 50
3.9 總結 51
3.10 課後練習 51
第4章 Chisel硬件設計中的操作、控制與分層 53
4.1 基礎硬件操作:構建電路的“原子部件” 53
4.1.1 硬件類型體系與核心特性 53
4.1.2 硬件賦值的核心規則 59
4.2 Scala控制結構:組織硬件邏輯的“工具” 59
4.2.1 條件控制結構:硬件的“分支邏輯” 60
4.2.2 循環控制結構:硬件的“重復邏輯” 62
4.2.3 異常與作用域控制:硬件的“安全性保障” 65
4.3 Layers概念:復雜電路的“分層抽象” 67
4.3.1 Layers的核心思想與原則 67
4.3.2 Layers的分層模型與實現步驟 68
4.3.3 Layers的核心優勢與最佳實踐 71
4.3.4 Layers的實際應用場景 72
4.4 總結 78
4.5 課後練習 78
第5章 Chisel中的面向對象設計與類型系統解析 81
5.1 Scala面向對象編程基礎 81
5.1.1 類與對象的定義 81
5.1.2 構造方法:主構造與輔助構造 83
5.1.3 繼承與多態 84
5.1.4 單例對象與伴生對象 86
5.2 Scala類型系統核心:參數化與抽象成員 87
5.2.1 類型參數化(泛型) 87
5.2.2 型變註解:協變、逆變與不變 89
5.2.3 抽象成員 91
5.3 從Scala到Chisel:面向對象硬件設計實踐 94
5.3.1 Chisel模塊的類封裝 94
5.3.2 硬件接口的Bundle封裝 96
5.3.3 泛型在Chisel中的應用:參數化硬件 98
5.3.4 繼承與特質:硬件功能復用 101
5.4 總結 103
5.5 課後練習 103
第6章 Chisel硬件設計原語與高級生成器 106
6.1 多路選擇器:組合邏輯的核心 106
6.1.1 基本二選一:Mux 106
6.1.2 多條件與查找表:MuxCase與MuxLookup 106
6.1.3 獨熱碼與優先級:Mux1H與PriorityMux 108
6.2 優先編碼器:從多路信號到編碼索引 109
6.2.1 PriorityEncoder:輸出二進制索引 109
6.2.2 PriorityEncoderOH:輸出獨熱碼 109
6.3 仲裁器:多個生產者共享一個通道 110
6.3.1 Decoupled 接口與 ready/valid 握手 110
6.3.2 Arbiter:固定優先級仲裁 111
6.3.3 RRArbiter:輪詢公平仲裁 111
6.4 隊列 Queue:基於ready/valid的同步FIFO 112
6.4.1 Queue 的構造與接口 112
6.4.2 工廠方法:一行接好FIFO 113
6.5 ROM與RAM:構造可綜合存儲器 113
6.5.1 VecInit構造組合ROM 113
6.5.2 Mem:組合讀、同步寫 114
6.5.3 SyncReadMem:同步讀、同步寫 115
6.6 常用位操作與寄存器小工具 115
6.6.1 PopCount與Reverse:統計與翻轉 115
6.6.2 UIntToOH與OHToUInt:編碼轉換 116
6.6.3 RegEnable與ShiftRegister:條件更新與時序對齊 116
6.7 高級生成器:Counter、LFSR與ChiselEnum 116
6.7.1 Counter:參數化計數器生成器 117
6.7.2 LFSR:線性反饋移位寄存器 117
6.7.3 ChiselEnum:類型安全的狀態機枚舉 118
6.8 總結 119
6.9 課後練習 119
第7章 Chisel設計的生成、測試與優化 121
7.1 生成Verilog HDL代碼 121
7.1.1 核心生成工具:CIRCT Stage 121
7.1.2 基礎生成示例:全加器 122
7.1.3 靈活配置生成選項 124
7.1.4 命令行動態傳參 124
7.2 參數化設計與生成 125
7.2.1 參數化設計:n位加法器 125
7.2.2 參數化模塊的Verilog生成 126
7.3 現代測試框架:ChiselSim 127
7.3.1 環境配置 127
7.3.2 核心API介紹 128
7.3.3 基礎測試用例:n位加法器測試 128
7.3.4 運行測試 130
7.3.5 可重用的刺激模式 130
7.4 波形生成與可視化 132
7.4.1 生成VCD波形文件 132
7.4.2 查看波形文件 133
7.4.3 其他波形格式支持 133
7.5 高級測試技術 134
7.5.1 參數化測試 134
7.5.2 自定義命令行選項 135
7.5.3 模擬器後端選擇 137
7.6 形式化驗證入門 138
7.6.1 形式化驗證基礎概念 138
7.6.2 Chisel中的斷言使用 138
7.6.3 assume和cover的使用 139
7.6.4 形式化驗證工具集成 141
7.7 FileCheck:直接檢查生成的代碼 141
7.7.1 FileCheck基礎 141
7.7.2 FileCheck API 141
7.7.3 生成代碼用於FileCheck 141
7.7.4 FileCheck測試示例 142
7.8 性能分析與優化 143
7.8.1 RTL代碼分析 143
7.8.2 性能瓶頸識別 144
7.8.3 常見優化技術 145
7.8.4 綜合工具集成與報告分析 147
7.9 優化生成與測試流程 148
7.9.1 代碼生成優化 148
7.9.2 測試效率優化 149
7.9.3 持續集成與自動化 149
7.10 總結 150
7.11 實踐建議與最佳實踐 150
7.11.1 項目組織建議 151
7.11.2 調試技巧 151
7.11.3 常見陷阱與解決方案 152
7.11.4 性能優化清單 153
7.11.5 工具鏈配置建議 153
7.11.6 文檔化建議 154
7.11.7 學習資源推薦 155
7.12 課後練習 156
第8章 黑盒與多時鐘域設計 158
8.1 黑盒 158
8.1.1 例化黑盒 158
8.1.2 導入Verilog文件 160
8.1.3 inout端口處理 162
8.2 多時鐘域設計 163
8.2.1 無隱式端口的模塊(RawModule) 163
8.2.2 定義時鐘域和復位域 163
8.2.3 復位類型 165
8.2.4 時鐘負沿與低有效復位 165
8.3 跨時鐘域信號同步 166
8.3.1 亞穩態問題 166
8.3.2 雙觸發器同步器 166
8.3.3 多位數據信號同步 167
8.3.4 握手協議同步器 167
8.3.5 異步FIFO深入分析 168
8.3.6 多時鐘域設計最佳實踐 169
8.4 綜合應用示例 169
8.5 總結 171
8.6 課後練習 171
第9章 Scala隱式機制與Chisel函數抽象 173
9.1 Scala隱式機制基礎 173
9.1.1 隱式機制的核心規則 173
9.1.2 隱式轉換的三種應用場景 173
9.1.3 隱式類:簡化富包裝類定義 174
9.1.4 上下文界定:簡化隱式參數聲明 175
9.2 Chisel中的函數抽象 175
9.2.1 組合邏輯抽象為函數 175
9.2.2 工廠方法簡化模塊例化 176
9.2.3 Scala高階函數簡化硬件生成 177
9.3 Chisel內置高級函數 178
9.3.1 位操作函數 178
9.3.2 計數與編碼函數 179
9.3.3 對數與查找表函數 179
9.3.4 打印函數:調試與驗證 180
9.4 隱式機制與函數抽象的高級應用 181
9.4.1 隱式類實現自定義硬件操作 181
9.4.2 遞歸函數實現參數化延時模塊 182
9.5 總結 183
9.6 課後練習 183
第10章 Chisel工程化開發規範與版本遷移 186
10.1 模塊與信號命名管理 186
10.1.1 模塊重命名(desiredName) 186
10.1.2 編譯器插件:信號命名優化 187
10.1.3 信號前綴與自定義命名 188
10.2 參數化Bundle設計 190
10.2.1 基本參數化Bundle 190
10.2.2 多配置Bundle與實例復用 191
10.3 定點數支持策略與Interval/FixedPoint說明 191
10.3.1 基於整數縮放的定點編碼 192
10.3.2 FixedPoint/Interval:實驗性與外部庫說明 193
10.4 斷言(assert) 193
10.4.1 斷言的用法 193
10.4.2 斷言觸發機制回顧 195
10.4.3 斷言的測試示例 195
10.5 從早期Chisel工程升級至Chisel 7.3完整操作指南 196
10.5.1 升級前的準備工作 196
10.5.2 代碼與構建配置的遷移 197
10.5.3 利用Chisel 7.3的工程化特性做“順手優化” 198
10.5.4 升級完成後的自檢 198
10.6 總結 198
10.7 課後練習 199
第11章 riscv-mini 201
11.1 riscv-mini簡介 201
11.2 數據通路 201
11.3 riscv-mini的子模塊 202
11.3.1 ALU模塊 202
11.3.2 BrCond模塊 203
11.3.3 Cache模塊 204
11.3.4 Control模塊 205
11.3.5 CSR模塊 206
11.3.6 Imm Gen模塊 207
11.3.7 Instructions模塊 207
11.3.8 RegFile模塊 208
11.3.9 Datapath模塊 208
11.3.10 Core模塊 209
11.4 riscv-mini參數化機制 209
11.4.1 Field[T]類 209
11.4.2 View類 210
11.4.3 Parameters類及其伴生對象 211
11.4.4 Config類 212
11.5 參數化機制的應用 212
11.6 總結 217
11.7 參考文獻 217
11.8 課後練習 218
第12章 Chisel標準庫深入與常用設計模式 219
12.1 Ready-Valid協議:流控的基石與語義分層 219
12.2 標準庫核心組件:從隊列到仲裁器 220
12.3 工程化流水線設計:模板、反壓與性能權衡 222
12.3.1 通用流水線階段模板 222
12.3.2 性能權衡:吞吐率和延遲 223
12.4 驗證:讓正確性可衡量 223
12.4.1 功能測試與隨機反壓 223
12.4.2 協議級斷言與覆蓋率 224
12.5 代碼風格與工程實踐 224
12.6 進階主題與延伸閱讀 225
12.7 總結 225
12.8 課後練習 225
第13章 Chisel 實踐與應用案例 227
13.1 基於Chisel的神經網絡加速器設計 227
13.1.1 設計目標與架構選型 227
13.1.2 輸入/輸出緩存設計 228
13.1.3 MAC陣列與激活函數實現 230
13.1.4 頂層模塊集成與狀態機控制 232
13.1.5 參數化配置與代碼復用 234
13.1.6 性能優化策略 235
13.1.7 Verilog生成與驗證 235
13.1.8 進階拓展方向 236
13.2 基於Verilator的混合語言仿真與驗證方法學 238
13.2.1 Chisel內置仿真框架與Verilator集成 238
13.2.2 Verilator直接驗證Chisel生成的Verilog 240
13.2.3 混合仿真:Chisel與Verilog模塊集成 243
13.2.4 高級驗證技術 245
13.3 Constellation:工業級片上網絡生成器 246
13.3.1 NoC技術背景與設計挑戰 246
13.3.2 Constellation項目定位與特點 247
13.3.3 工程結構與模塊組織 247
13.3.4 參數化配置體系 249
13.3.5 仿真與功能驗證 250
13.3.6 綜合與RISC-V生態集成 251
13.3.7 Constellation項目總結 252
13.4 系統級設計:香山Minjie與Chipyard Diplomacy 252
13.4.1 生成式結構建模 252
13.4.2 可配置架構生成 254
13.4.3 香山Minjie開發平臺 256
13.4.4 Chipyard Diplomacy機制 257
13.4.5 系統級設計方法總結 260
13.5 總結與展望 260
13.5.1 本章核心內容回顧 260
13.5.2 全書知識體系總結 261
13.5.3 Chisel學習建議與實踐路徑 262
13.5.4 Chisel的美好未來 263
參考文獻 266