敏捷硬件開發語言 Chisel 與數字系統設計

梁峰 等

  • 出版商: 電子工業
  • 出版日期: 2022-06-01
  • 售價: $414
  • 貴賓價: 9.5$393
  • 語言: 簡體中文
  • 頁數: 268
  • ISBN: 7121434121
  • ISBN-13: 9787121434129
  • 相關分類: Agile Software
  • 立即出貨 (庫存 < 3)

買這商品的人也買了...

商品描述

從20世紀90年代開始,利用硬件描述語言和綜合技術設計實現復雜數字系統的方法已經在集成電路設計領域得到普及。隨著集成電路集成度的不斷提高,傳統硬件描述語言和設計方法的開發效率低下的問題越來越明顯。近年來逐漸嶄露頭角的敏捷化設計方法將把集成電路設計帶入一個新的階段。與此同時,集成電路設計也需要一種適應敏捷化設計方法的新型硬件開發語言。本書從實用性和先進性出發,較全面地介紹新型硬件開發語言Chisel和數字系統敏捷化設計方法。全書分兩篇。第一篇共10章,主要內容包括Chisel語言簡介、Chisel的數據類型、Chisel的模塊與硬件類型、Chisel常用的硬件原語、如何將Chisel代碼轉換生成Verilog HDL代碼及基本測試方法、Chisel的黑盒、用Chisel實現多時鐘域設計、Chisel的函數應用及其他議題等。第二篇共9章,介紹編寫Chisel需要掌握的Scala語言編程基礎知識。讀者可以根據自身情況,跳過第二篇Scala基礎部分,直接學習Chisel的硬件開發功能。本書提供配套的課後練習參考答案、模擬程序代碼等。本書可作為集成電路科學與工程、電子信息類、電腦類等相關專業的高年級本科生及研究生的教學用書,也可供從事集成電路設計的工程人員和EDA專業人員學習、參考。

目錄大綱

第一篇敏捷硬件開發語言Chisel
第1章新型敏捷硬件開發語言——Chisel和Scala 2
1.1 最好的宿主——什麼是Scala 2
1.2 敏捷開發——什麼是Chisel 2
1.3 Scala入門——讓你的代碼跑起來4
1.3.1 Scala的安裝方法4
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.6 課後練習8
第2章Chisel入門及數據類型9
2.1 Chisel開發環境的安裝步驟9
2.1.1 安裝步驟9
2.1.2 開發環境測試10
2.1.3 小結11
2.2 Chisel的常見問題11
2.3 Chisel的變量與數據類型12
2.3.1 數據字面量與數據類型13
2.3.2 數據寬度14
2.3.3 類型轉換14
2.3.4 向量15
2.3.5 混合向量16
2.3.6 包裹16
2.3.7 Chisel的內建操作符17
2.3.8 位寬推斷18
2.3.9 Chisel泛型19
2.4 總結19
2.5 課後練習19
第3章模塊與硬件類型20
3.1 Chisel是如何賦值的20
3.2 端口(IO) 21
3.2.1 定義端口列表21
3.2.2 翻轉端口列表的方向21
3.2.3 整體連接22
3.2.4 動態修改端口23
3.3 模塊24
3.3.1 模塊分類24
3.3.2 定義模塊26
3.3.3 例化模塊27
3.3.4 例化多個模塊28
3.4 線網28
3.4.1 Wire 28
3.4.2 WireDefault 29
3.4.3 未驅動的線網30
3.5 寄存器31
3.5.1 Reg 31
3.5.2 RegNext 32
3.5.3 RegInit 32
3.5.4 RegEnable 33
3.5.5 ShiftRegister 34
3.5.6 寄存器實例34
3.5.7 異步寄存器39
3.6 寄存器組41
3.7 用when給電路賦值42
3.8 總結44
3.9 參考文獻45
3.10 課後練習46
第4章Chisel常用的硬件原語47
4.1 多路選擇器47
4.2 優先編碼器48
4.3 仲裁器48
4.4 隊列51
4.5 ROM 54
4.6 RAM 55
4.7 帶寫掩碼的RAM 57
4.8 從文件讀取數據到RAM 58
4.9 計數器62
4.10 線性反饋移位寄存器66
4.11 狀態機70
4.12 總結73
4.13 參考文獻73
4.14 課後練習73
第5章生成Verilog HDL代碼與基本測試74
5.1 生成Verilog HDL代碼74
5.1.1 execute 74
5.1.2 emitVerilog 76
5.2 增加參數的方法77
5.2.1 Firrtl傳遞參數77
5.2.2 給主函數傳遞參數78
5.3 編寫chisel-iotesters測試79
5.4 運行chisel-iotesters測試81
5.5 使用chiseltest進行測試82
5.6 總結85
5.7 課後練習85
第6章黑盒86
6.1 例化黑盒86
6.2 複製Verilog文件88
6.3 內聯Verilog文件90
6.4 inout端口91
6.5 總結92
6.6 課後練習92
第7章多時鐘域設計94
7.1 沒有隱式端口的模塊94
7.2 定義一個時鐘域和復位域95
7.2.1 withClockAndReset 95
7.2.2 withClock和withReset 96
7.2.3 復位信號的三種類型103
7.3 使用時鐘負沿和低有效的複位信號103
7.4 示例:異步FIFO 105
7.5 總結108
7.6 參考文獻108
7.7 課後練習108
第8章函數的應用109
8.1 用函數抽象組合邏輯109
8.2 用工廠方法簡化模塊的例化110
8.3 用Scala的函數簡化代碼113
8.4 Chisel的打印函數114
8.4.1 Scala風格114
8.4.2 C風格116
8.5 使用打印函數實例116
8.6 Chisel的對數函數119
8.7 與硬件相關的函數119
8.8 隱式類的應用122
8.9 遞歸函數的應用123
8.10 總結125
8.11 參考文獻125
8.12 課後練習125
第9章其他議題126
9.1 重命名模塊名稱126
9.2 命名規則127
9.3 重命名模塊內信號名稱131
9.3.1 前綴131
9.3.2 suggestName 132
9.3.3 forceName 133
9.4 參數化的Bundle 135
9.5 FixedPoint 137
9.6 assert 138
9.7 總結140
9.8 參考文獻140
9.9 課後練習140
第10章riscv-mini 141
10.1 riscv-mini簡介141
10.2 數據通路141
10.3 riscv-mini的子模塊142
10.3.1 ALU模塊142
10.3.2 BrCond模塊143
10.3.3 Cache模塊144
10.3.4 Control模塊145
10.3.5 CSR模塊146
10.3.6 ImmGen模塊147
10.3.7 Instructions模塊147
10.3.8 RegFile模塊148
10.3.9 Datapath模塊148
10.3.10 Core模塊149
10.4 riscv-mini參數化機制149
10.4.1 Field[T]類149
10.4.2 View類150
10.4.3 Parameters類及其伴生對象151
10.4.4 Config類152
10.5 參數化機制的應用152
10.6 總結157
10.7 參考文獻157
10.8 課後練習158
第二篇Scala語言編程基礎知識
第11章Scala的變量及函數160
11.1 變量定義與基本類型160
11.1.1 定義一個變量160
11.1.2 Scala的基本類型161
11.1.3 小結164
11.2 函數及其幾種形式164
11.2.1 定義一個函數164
11.2.2 方法166
11.2.3 嵌套函數166
11.2.4 函數字面量166
11.2.5 部分應用函數167
11.2.6 閉包168
11.2.7 函數的特殊調用形式169
11.2.8 柯里化170
11.2.9 傳名參數170
11.2.10 小結172
11.3 參考文獻172
第12章Scala面向對象編程173
12.1 類和對象173
12.1.1 類173
12.1.2 類的構造方法174
12.1.3 重寫toString方法175
12.1.4 方法重載176
12.1.5 類參數176
12.1.6 單例對象與伴生對象176
12.1.7 工廠對象與工廠方法178
12.1.8 apply方法178
12.1.9 主函數179
12.1.10 小結180
12.2 操作符即方法180
12.2.1 操作符在Scala中的解釋180
12.2.2 三種操作符181
12.2.3 操作符的優先級和結合性183
12.2.4 預設操作符184
12.2.5 對象的相等性184
12.2.6 小結185
12.3 類繼承185
12.3.1 Scala的類繼承185
12.3.2 調用超類的構造方法186
12.3.3 重寫超類的成員187
12.3.4 子類型多態與動態綁定189
12.3.5 抽像類189
12.3.6 關於多重繼承190
12.3.7 Scala類的層次結構190
12.3.8 小結192
12.4 特質192
12.4.1 什麼是特質192
12.4.2 特質的層次193
12.4.3 混入特質的簡便方法194
12.4.4 特質的線性化疊加計算194
12.4.5 小結197
12.5 參考文獻197
第13章包和導入198
13.1 包198
13.2 包的層次和精確代碼訪問198
13.3 import導入201
13.4 自引用201
13.5 訪問修飾符202
13.6 包對象203
13.7 總結203
13.8 參考文獻203
第14章集合204
14.1 數組204
14.1.1 數組的定義204
14.1.2 數組的索引與元素修改204
14.2 列表205
14.2.1 列表的定義205
14.2.2 列表添加數據205
14.2.3 列表子對象Nil 206
14.3 數組緩衝與列表緩衝207
14.4 元組208
14.4.1 元組的定義208
14.4.2 元組的索引208
14.4.3 元組作為函數的入口參數209
14.4.4 元組的遍歷209
14.5 映射209
14.5.1 映射的定義209
14.5.2 映射的三種取值方式210
14.5.3 映射遍歷的四種方式210
14.6 集211
14.7 序列211
14.8 集合的常用方法211
14.8.1 map 211
14.8.2 foreach 211
14.8.3 zip 212
14.8.4 reduce 212
14.8.5 fold 212
14.8.6 scan 212
14.9 總結212
第15章內建控制結構213
15.1 if表達式213
15.2 while循環214
15.3 for表達式與for循環214
15.4 用try表達式處理異常216
15.4.1 拋出一個異常216
15.4.2 try-catch 217
15.4.3 finally 217
15.5 match表達式217
15.6 關於continue和break 218
15.7 關於變量的作用域219
15.8 總結220
15.9 參考文獻220
第16章模式匹配221
16.1 樣例類和對象221
16.2 模式匹配222
16.3 模式的種類222
16.3.1 通配模式222
16.3.2 常量模式223
16.3.3 變量模式223
16.3.4 構造方法模式224
16.3.5 序列模式225
16.3.6 元組模式225
16.3.7 帶類型的模式226
16.3.8 變量綁定模式226
16.4 模式守衛226
16.5 密封類227
16.6 可選值228
16.7 模式匹配的另類用法228
16.8 偏函數229
16.9 總結230
16.10 參考文獻230
第17章類型參數化231
17.1 var類型的字段231
17.2 類型構造器232
17.3 型變註解233
17.4 檢查型變註解233
17.5 類型構造器的繼承關係235
17.6 上界和下界235
17.7 方法的類型參數236
17.8 對象私有數據236
17.9 總結238
第18章抽象成員239
18.1 抽象成員239
18.2 初始化抽象val字段240
18.2.1 預初始化字段241
18.2.2 惰性的val字段242
18.3 抽像類型243
18.4 細化類型244
18.5 Scala的枚舉245
18.6 總結246
18.7 參考文獻246
第19章隱式轉換與隱式參數247
19.1 隱式定義的規則247
19.2 隱式地轉換到期望類型248
19.3 隱式地轉換接收端248
19.4 隱式類249
19.5 隱式參數250
19.6 含有隱式參數的主構造方法251
19.7 上下文界定252
19.8 多個匹配的隱式定義253
19.9 總結255
19.10 參考文獻255