本書利用Altera FPGA開發板和Nios II軟核處理器,揭示了基於FPGA的嵌入式系統特有的硬體可程式性,採用“做中學”的模式,介紹了基於Verilog的嵌入式SoPC設計的基本概念和技術。
本書通過許多實例說明軟、硬體的設計和開發過程,並給出了完整的代碼和豐富的實驗題目。
基本介紹
- 書名:基於Nios II的嵌入式SoPC系統設計與Verilog開發實例
- 作者:金明錄 門宏志
- ISBN:9787121257735
- 出版社:電子工業出版社
- 出版時間:2015-05-01
- 開本:16
圖書內容,目 錄,
圖書內容
本書利用Altera FPGA開發板和Nios II軟核處理器,揭示了基於FPGA的嵌入式系統特有的硬體可程式性,採用“做中學”的模式,介紹了基於Verilog的嵌入式SoPC設計的基本概念和技術。
本書通過許多實例說明軟、硬體的設計和開發過程,並給出了完整的代碼和豐富的實驗題目。
目 錄
第1章 嵌入式系統概述 1
1.1 引言 1
1.1.1 嵌入式系統定義 1
1.1.2 示例系統 1
1.2 系統設計需求 2
1.3 嵌入式SoPC系統 3
1.4 本書結構 6
1.5 文獻注釋 6
第1部分 基本數字電路開發
第2章 門級組合電路 8
2.1 引言 8
2.2 總則 8
2.3 基本詞法元素和數據類型 9
2.4 數據類型 10
2.4.1 四值系統 10
2.4.2 數據類型組 10
2.4.3 數字的表示方法 11
2.4.4 運算符 12
2.5 程式框架 12
2.5.1 連線埠聲明 12
2.5.2 程式主體 13
2.5.3 信號聲明 13
2.5.4 另一個實例 14
2.6 結構描述 14
2.7 測試平台 17
2.8 文獻注釋 19
2.9 推薦實驗 19
2.9.1 門級greater-than電路代碼 19
2.9.2 門級二進制解碼器代碼 19
第3章 FPGA和EDA軟體概述 20
3.1 FPGA 20
3.1.1 通用FPGA器件概述 20
3.1.2 Altera Cyclone II系列器件
概述 21
3.2 Altera DE1和DE2開發板概述 23
3.3 開發流程 25
3.4 Quartus II概述 26
3.5 Quartus II簡易教程 27
3.5.1 創建設計工程 29
3.5.2 建立測試平台進行RTL仿真 33
3.5.3 編譯工程 33
3.5.4 時序分析 34
3.5.5 編程FPGA器件 34
3.6 ModelSim HDL仿真器的簡易
教程 36
3.7 文獻注釋 39
3.8 推薦實驗 40
3.8.1 門級greater-than電路 40
3.8.2 門級二進制解碼器 40
第4章 RTL組合電路 41
4.1 運算符 41
4.1.1 算術運算符 42
4.1.2 移位運算符 42
4.1.3 關係運算符和等式運算符 43
4.1.4 位運算符、縮減運算符和
邏輯運算符 43
4.1.5 拼接運算符和複製運算符 44
4.1.6 條件運算符 44
4.1.7 運算符優先權 45
4.1.8 表達式位長調整 45
4.1.9 z和x的綜合 46
4.2 組合邏輯電路的always語句塊 47
4.2.1 基本語法和行為 48
4.2.2 進程賦值語句 48
4.2.3 變數數據類型 49
4.2.4 簡單實例 49
4.3 if語句 50
4.3.1 語法 50
4.3.2 實例 51
4.4 case語句 52
4.4.1 語法 52
4.4.2 實例 53
4.4.3 casez和casex語句 54
4.4.4 全case語句和並行case語句 55
4.5 條件控制結構的路由結構 56
4.5.1 優先權路由網路 56
4.5.2 多路選擇網路 57
4.6 always塊的一般編碼原則 58
4.6.1 組合邏輯電路代碼的常見
錯誤 58
4.6.2 指南 61
4.7 參數和常數 61
4.7.1 常數 61
4.7.2 參數62
4.7.3 Verilog-1995中參數的使用64
4.8 設計實例65
4.8.1 十六進制數的七段LED
解碼器65
4.8.2 符號幅值加法器67
4.8.3 桶形移位器68
4.8.4 簡易浮點數加法器70
4.9 文獻注釋73
4.10 推薦實驗73
4.10.1 多功能桶形移位器73
4.10.2 雙優先權編碼器74
4.10.3 BCD碼增量器74
4.10.4 浮點數greater-than電路74
4.10.5 浮點數和有符號整數間的
轉換電路74
4.7.3 Verilog-1995中參數的使用64
4.8 設計實例65
4.8.1 十六進制數的七段LED
解碼器65
4.8.2 符號幅值加法器67
4.8.3 桶形移位器68
4.8.4 簡易浮點數加法器70
4.9 文獻注釋73
4.10 推薦實驗73
4.10.1 多功能桶形移位器73
4.10.2 雙優先權編碼器74
4.10.3 BCD碼增量器74
4.10.4 浮點數greater-than電路74
4.10.5 浮點數和有符號整數間的
轉換電路74
4.10.6 加強的浮點數加法器75
第5章 常規時序電路76
5.1 引言76
5.1.1 D觸發器和暫存器76
5.1.2 同步系統77
5.1.3 代碼開發77
5.2 觸發器和暫存器的HDL代碼77
5.2.1 D觸發器78
5.2.2 暫存器80
5.2.3 暫存器檔案81
5.2.4 SRAM83
5.3 簡單的設計實例84
5.3.1 移位暫存器84
5.3.2 二進制計數器及其變形86
5.4 時序電路的測試平台89
5.5 時序分析92
5.5.1 時序參數92
5.5.2 Quartus II中的時序考慮93
5.6 案例研究94
5.6.1 秒表94
5.6.2 FIFO 快取器98
5.7 Cyclone II器件的嵌入式存儲器
模組102
第5章 常規時序電路76
5.1 引言76
5.1.1 D觸發器和暫存器76
5.1.2 同步系統77
5.1.3 代碼開發77
5.2 觸發器和暫存器的HDL代碼77
5.2.1 D觸發器78
5.2.2 暫存器80
5.2.3 暫存器檔案81
5.2.4 SRAM83
5.3 簡單的設計實例84
5.3.1 移位暫存器84
5.3.2 二進制計數器及其變形86
5.4 時序電路的測試平台89
5.5 時序分析92
5.5.1 時序參數92
5.5.2 Quartus II中的時序考慮93
5.6 案例研究94
5.6.1 秒表94
5.6.2 FIFO 快取器98
5.7 Cyclone II器件的嵌入式存儲器
模組102
5.7.1 DE1開發板上的存儲器
選項概述102
5.7.2 嵌入式M4K模組概述102
5.7.3 添加嵌入式存儲器模組的
方法103
5.7.4 導出同步單口RAM的HDL
模組105
5.7.5 導出同步簡單雙口RAM的
HDL模組106
5.7.6 導出同步真雙口RAM的
HDL模組108
5.7.7 導出同步ROM的HDL
模組109
5.7.8 指定RAM初始值的HDL
模組110
5.7.9 FIFO快取器的再仿真112
5.8 文獻注釋113
5.9 推薦實驗113
選項概述102
5.7.2 嵌入式M4K模組概述102
5.7.3 添加嵌入式存儲器模組的
方法103
5.7.4 導出同步單口RAM的HDL
模組105
5.7.5 導出同步簡單雙口RAM的
HDL模組106
5.7.6 導出同步真雙口RAM的
HDL模組108
5.7.7 導出同步ROM的HDL
模組109
5.7.8 指定RAM初始值的HDL
模組110
5.7.9 FIFO快取器的再仿真112
5.8 文獻注釋113
5.9 推薦實驗113
5.9.1 可程式方波發生器113
5.9.2 脈寬調製電路113
5.9.3 旋轉方塊電路113
5.9.4 心跳電路114
5.9.5 旋轉的LED標語電路114
5.9.6 增強型秒表114
5.9.7 數據寬度可變的FIFO114
5.9.8 堆疊115
5.9.9 基於ROM的符號幅值加
法器115
5.9.10 基於ROM的溫度轉換115
第6章 FSM116
6.1 簡介116
6.1.1 Mealy和Moore輸出116
6.1.2 FSM的表示方法116
6.2 FSM代碼開發118
6.3 設計實例120
6.3.1 上升沿檢測器120
6.3.2 去抖電路125
6.3.3 測試電路128
6.4 文獻注釋130
6.5 推薦實驗130
6.5.1 雙邊沿檢測器130
5.9.2 脈寬調製電路113
5.9.3 旋轉方塊電路113
5.9.4 心跳電路114
5.9.5 旋轉的LED標語電路114
5.9.6 增強型秒表114
5.9.7 數據寬度可變的FIFO114
5.9.8 堆疊115
5.9.9 基於ROM的符號幅值加
法器115
5.9.10 基於ROM的溫度轉換115
第6章 FSM116
6.1 簡介116
6.1.1 Mealy和Moore輸出116
6.1.2 FSM的表示方法116
6.2 FSM代碼開發118
6.3 設計實例120
6.3.1 上升沿檢測器120
6.3.2 去抖電路125
6.3.3 測試電路128
6.4 文獻注釋130
6.5 推薦實驗130
6.5.1 雙邊沿檢測器130
6.5.2 另一種去抖電路 130
6.5.3 停車場占用情況計數器 131
第7章 FSMD 132
7.1 引言 132
7.1.1 單一RT操作 132
7.1.2 ASMD圖 133
7.1.3 含暫存器的選擇框 134
7.2 FSMD代碼開發 135
7.2.1 基於RT方法的去抖電路 135
7.2.2 含顯示描述數據通路組件
的代碼 136
7.2.3 含隱式描述數據通路組件
的代碼 139
7.2.4 比較 141
7.3 設計實例 142
7.3.1 斐波那契數電路 142
7.3.2 除法電路 145
7.3.3 二進制—BCD碼轉換電路 148
7.3.4 周期計數器 151
7.3.5 精確的低頻計數器 154
7.4 文獻注釋 157
7.5 推薦實驗 157
7.5.1 另一種去抖電路 157
7.5.2 BCD—二進制碼轉換電路 158
7.5.3 含BCD I/O的斐波那契數
生成電路:設計方法1 158
7.5.4 含BCD I/O的斐波那契數
生成電路:設計方法2 158
7.5.5 自動進位制的低頻計數器 158
7.5.6 反應計時器 159
7.5.7 Babbage差分機模擬電路 160
第8章 Verilog精選主題 161
8.1 阻塞賦值語句和非阻塞賦值
語句 161
8.1.1 概述 161
8.1.2 組合電路 163
8.1.3 存儲器單元 164
8.1.4 混合阻塞和非阻塞兩種賦值
語句的時序電路 165
8.2 時序電路的另一種編碼方式 167
8.2.1 二進制計數器 167
8.2.2 FSM 170
8.2.3 FSMD 171
8.2.4 總結 173
8.3 有符號數據類型的使用 173
8.3.1 概述 173
8.3.2 Verilog-1995中的有符號數 174
8.3.3 Verilog-2001中的有符號數 175
8.4 綜合中函式的使用 175
8.4.1 概述 175
8.4.2 例子 176
8.5 附加的測試平台開發結構 178
8.5.1 always塊和initial塊 178
8.5.2 進程語句 178
8.5.3 時序控制 180
8.5.4 延時控制 180
8.5.5 事件控制 181
8.5.6 wait語句 181
8.5.7 timescale指令 181
8.5.8 系統函式和系統任務 182
8.5.9 用戶自定義的函式和任務 186
8.5.10 完備的測試平台的實例 187
8.6 文獻注釋 193
8.7 推薦實驗 193
8.7.1 使用阻塞賦值語句和非阻
塞賦值語句的移位暫存器 193
8.7.2 BCD計數器的另一種編碼
風格 194
8.7.3 FIFO快取器的另一種編碼
方式 194
8.7.4 斐波那契數生成電路的另一
種編碼方式 194
8.7.5 雙模式比較器 194
8.7.6 增強型二進制計數器的
監測器 194
8.7.7 FIFO快取器的測試平台 194
第2部分 基本Nios II軟體開發
第9章 Nios II處理器概述 196
9.1 引言 196
9.2 暫存器檔案和ALU 198
9.2.1 暫存器檔案 198
9.2.2 ALU 198
9.3 存儲器和I/O結構 198
9.3.1 Nios II的存儲器接口 198
9.3.2 存儲器層次結構概述 198
9.3.3 虛擬存儲器 199
9.3.4 存儲器保護 199
9.3.5 高速緩衝存儲器 199
9.3.6 緊密耦合存儲器 200
9.3.7 I/O結構 200
9.3.8 互連結構 200
9.4 異常和中斷處理 201
9.5 JTAG調試模組 201
9.6 文獻注釋 201
9.7 推薦實驗 201
9.7.1 Nios II和MIPS的比較 201
第10章 Nios II系統的引用和底層
訪問 202
10.1 開發流程的再介紹 202
10.1.1 硬體開發 202
10.1.2 軟體開發 202
10.1.3 閃爍LED系統 204
10.2 Nios II硬體生成教程 204
10.2.1 在Quartus II中創建一個
硬體工程 204
10.2.2 創建Nios II系統,生成
HDL代碼 204
10.2.3 創建頂層HDL檔案用於
實例化Nios II系統 209
10.2.4 編譯和下載程式 210
10.3 Nios II SBT GUI教程 210
10.3.1 創建BSP庫 210
10.3.2 使用BSP編輯器配置BSP 211
10.3.3 創建用戶套用目錄並添加
應用程式檔案 212
10.3.4 生成和運行軟體 212
10.3.5 檢查代碼大小 213
10.4 針對軟硬體一致性的系統
id核 213
10.5 底層I/O直接訪問 214
10.5.1 C語言指針的複習 215
10.5.2 I/O暫存器的C指針 215
10.6 魯棒的底層I/O訪問 216
10.6.1 system.h 216
10.6.2 alt_types.h 217
10.6.3 io.h 217
10.7 一些關於底層I/O操作的C語
言技巧 218
10.7.1 位處理 218
10.7.2 打包和拆包 219
10.8 軟體開發 219
10.8.1 基本的嵌入式程式框架 219
10.8.2 主程式和任務程式 220
10.9 文獻注釋 221
10.10 推薦實驗 221
10.10.1 追趕LED電路 221
10.10.2 碰撞LED電路 222
10.10.3 脈寬調製電路 222
10.10.4 旋轉方塊電路 222
10.10.5 心跳電路 222
10.11 完整程式清單 222
第11章 預先設計的Nios II I/O外設 224
11.1 概述 224
11.2 PIO核 224
11.2.1 配置 225
11.2.2 暫存器映射 227
11.2.3 用戶可見暫存器 227
11.3 JTAG UART 核 228
11.3.1 配置 228
11.3.2 暫存器映射 229
11.4 內部定時器核 229
11.4.1 配置 229
11.4.2 暫存器映射 230
11.5 增強型閃爍LED Nios II系統 231
11.5.1 SOPC設計 232
11.5.2 頂層HDL檔案 235
11.6 增強型閃爍LED系統軟體
開發 236
11.6.1 設備驅動介紹 236
11.6.2 增強型閃爍LED系統程式
結構 236
11.6.3 主程式 237
11.6.4 函式命名習慣 237
11.7 設備驅動程式 238
11.7.1 PIO外設驅動 238
11.7.2 JATA UART 240
11.7.3 定時器 241
11.8 任務程式 242
11.8.1 函式flashsys_init_v1( ) 242
11.8.2 函式sw_get_command_v1( ) 242
11.8.3 函式jtaguart_disp_msg_v1( ) 243
11.8.4 函式sseg_disp_msg_v1( ) 243
11.8.5 函式led_flash_v1( ) 244
11.9 軟體構建和測試 245
11.10 文獻注釋 245
11.11 推薦實驗 245
11.11.1 閃爍LED系統的
“Uptime”特性 245
11.11.2 不同定時器模式的計數 246
11.11.3 JTAG UART輸入 246
11.11.4 增強型衝撞LED電路 246
11.11.5 旋轉LED標語電路 246
11.11.6 改進的秒表 246
11.11.7 停車場占用情況計數器 246
11.11.8 帶按鈕開關控制的反應
時間定時器 247
11.11.9 帶鍵盤控制的反應時間
定時器 247
11.11.10 串列連線埠通信 247
11.12 完整程式清單 247
第12章 預先設計的Nios II I/O驅動和
HAL API 256
12.1 HAL概述 256
12.1.1 桌面式嵌入式系統和
準系統嵌入式系統 256
12.1.2 HAL範式 257
12.1.3 設備類別 258
12.1.4 遵從HAL的設備驅動 258
12.1.5 _regs.h檔案 259
12.1.6 基於HAL的初始化序列 260
12.2 BSP 260
12.2.1 概述 260
12.2.2 BSP檔案結構 261
12.2.3 BSP配置 262
12.3 基於HAL的閃爍LED程式 263
12.3.1 使用通用I/O設備的
函式 264
12.3.2 使用非通用I/O設備的
函式 266
12.3.3 初始化程式和主程式 266
12.3.4 軟體構建和測試 267
12.4 設備驅動程式考慮 268
12.4.1 I/O訪問法 268
12.4.2 比較 269
12.4.3 本書中的驅動程式 271
12.5 文獻注釋 271
12.6 推薦實驗 271
12.6.1 閃爍LED系統的
“Uptime”特性 271
12.6.2 改進的碰撞LED電路 271
12.6.3 停車場使用情況計數器 271
12.6.4 帶鍵盤控制的反應定時器 271
12.6.5 數字鬧鐘 271
12.7 完整程式清單 272
第13章 中斷及中斷服務程式 275
13.1 HAL框架中的中斷處理 275
13.1.1 概述 275
13.1.2 Nios II處理器的中斷
控制器 276
13.1.3 頂層異常處理程式 276
13.1.4 中斷服務程式 277
13.2 基於中斷的閃爍LED程式 277
13.2.1 定時器核的中斷 278
13.2.2 定時器核的驅動 278
13.2.3 中斷服務程式(版本1) 279
13.2.4 中斷服務程式(版本2) 281
13.3 中斷和調度 282
13.3.1 調度 282
13.3.2 性能 283
13.4 文獻注釋 284
13.5 推薦實驗 285
13.5.1 含按鈕開關ISR程式的
閃爍LED系統 285
13.5.2 ISR驅動的閃爍LED
系統 285
13.5.3 閃爍LED系統中的
“Uptime”特性 285
13.5.4 帶鍵盤控制的反應時間
定時器 285
13.5.5 數字鬧鐘 285
13.6 完整程式清單 285
第3部分 用戶I/O外設開發
第14章 帶PIO核的用戶I/O外設 292
14.1 引言 292
14.2 集成除法電路到Nios II
系統 292
14.2.1 PIO模組 292
14.2.2 集成 293
14.3 測試 293
14.4 推薦實驗 296
14.4.1 除法核的ISR 296
14.4.2 8位數據的除法核 296
14.4.3 64位數據的除法核 296
14.4.4 斐波那契數電路 297
14.4.5 周期計數器 297
第15章 Avalon互連與SOPC組件 298
15.1 引言 298
15.2 Avalon MM接口 300
15.2.1 Avalon MM從設備接口
信號 300
15.2.2 Avalon MM從設備接口
性質 301
15.2.3 Avalon MM從設備時序 301
15.3 Avalon接口的系統互連結構 304
15.4 SOPC I/O組件封裝電路 305
15.4.1 接口I/O快取器 306
15.4.2 記憶體對齊 308
15.4.3 Avalon MM主設備的
輸出解碼 308
15.4.4 Avalon MM主設備的
輸入多路選擇 310
15.4.5 實際考慮 311
15.5 SOPC組件構建指南 311
15.5.1 Avalon接口 312
15.5.2 暫存器映射 312
15.5.3 封裝的除法電路 313
15.5.4 SOPC組件創建 315
15.5.5 SOPC組件實例化 320
15.6 測試 320
15.7 文獻注釋 323
15.8 推薦實驗 323
15.8.1 除法核的ISR 323
15.8.2 除法核的另一種快取
方案 323
15.8.3 8位數據的除法核 323
15.8.4 64位數據的除法核 323
15.8.5 斐波那契數電路 323
15.8.6 周期計數器 323
第16章 SRAM和SDRAM控制器 324
16.1 DE1開發板存儲器資源 324
16.2 時序和時鐘管理的概述 324
16.2.1 時鐘分配網路 324
16.2.2 片外訪問的時序問題 325
16.2.3 PLL 326
16.3 SRAM概述 327
16.3.1 SRAM單元 327
16.3.2 基本結構 327
16.3.3 時序 328
16.3.4 IS61LV25616AL SRAM
晶片 329
16.4 SRAM控制器IP核 330
16.4.1 Avalon接口 331
16.4.2 控制器電路 332
16.4.3 SOPC組件的創建 333
16.5 DRAM概述 334
16.5.1 DRAM單元 334
16.5.2 基本的DRAM結構 335
16.5.3 DRAM時序 336
16.6 SDRAM概述 337
16.6.1 基本的SDRAM結構 337
16.6.2 SDRAM時序 338
16.6.3 ICSI IS42S16400 SDRAM
晶片 340
16.7 SDRAM控制器和PLL 340
16.7.1 基本的SDRAM控制器 340
16.7.2 SDRAM控制器IP核 341
16.7.3 SOPC PLL IP核 342
16.8 測試系統 344
16.8.1 測試硬體配置 344
16.8.2 測試軟體 346
16.9 文獻注釋 349
16.10 推薦實驗 349
16.10.1 沒有I/O暫存器的
SRAM控制器 349
16.10.2 SRAM控制器速度測試 349
16.10.3 帶Avalon MM三態接
口的SRAM控制器 349
16.10.4 SDRAM控制器時鐘
偏斜測試 349
16.10.5 存儲器性能比較 350
16.10.6 鎖存器的影響 350
16.10.7 從零構建SDRAM
控制器 350
16.11 完整程式清單 350
第17章 PS2鍵盤和滑鼠 352
17.1 引言 352
17.2 PS2接收子系統 352
17.2.1 PS2設備到主機的通信
協定 352
17.2.2 設計和代碼 353
17.3 PS2傳送子系統 356
17.3.1 主機到PS2設備的通信
協定 356
17.3.2 設計和代碼 357
17.4 完整的PS2系統 361
17.5 PS2控制器IP核開發 363
17.5.1 Avalon接口 363
17.5.2 暫存器映射 363
17.5.3 封裝的PS2系統 364
17.5.4 SOPC組件創建 365
17.6 PS2驅動 365
17.6.1 暫存器映射 366
17.6.2 寫操作程式 366
17.6.3 讀操作程式 366
17.7 鍵盤驅動 367
17.7.1 掃描碼概述 367
17.7.2 與主機的互動 368
17.7.3 驅動程式 369
17.8 滑鼠驅動 373
17.8.1 PS2滑鼠協定概述 373
17.8.2 與主機的互動 373
17.8.3 驅動程式 374
17.9 測試 376
17.10 書中用戶IP核的使用 379
17.10.1 檔案組織結構 379
17.10.2 SOPC庫集成 379
17.10.3 綜合的Nios II測試系統 380
17.11 文獻注釋 385
17.12 推薦實驗 385
17.12.1 帶看門狗定時器的PS2
17.12.2 軟體接收FIFO 385
17.12.3 軟體PS2控制器 385
17.12.4 鍵盤控制的LED閃爍
電路 385
17.12.5 增強型鍵盤驅動程式I 386
17.12.6 增強型鍵盤驅動程式II 386
17.12.7 遙控模式滑鼠驅動 386
17.12.8 滾輪滑鼠驅動 386
17.13 完整程式清單 386
第18章 VGA控制器 399
18.1 引言 399
18.1.1 CRT顯示器的基本操作 399
18.1.2 DE1板上的VGA連線埠 400
18.1.3 視頻控制器 400
18.2 VGA同步 402
18.2.1 水平同步 402
18.2.2 垂直同步 403
18.2.3 VGA同步信號時序計算 403
18.2.4 HDL實現 404
18.3 基於SRAM的視頻RAM
控制器 406
18.3.1 視頻存儲器概述 406
18.3.2 DE1開發板的存儲器
問題 407
18.3.3 Ad Hoc SRAM控制器 407
18.3.4 HDL代碼 411
18.4 調色板電路 414
18.5 視頻控制器IP核的開發 415
18.5.1 完整的視頻控制器 415
18.5.2 Avalon 接口 416
18.5.3 暫存器映射 416
18.5.4 封裝的視頻控制器 416
18.5.5 SOPC組件創建 418
18.6 視頻驅動 418
18.6.1 視頻記憶體訪問程式 418
18.6.2 幾何模型程式 419
18.6.3 點陣圖處理函式 421
18.6.4 位映射文本程式 423
18.7 滑鼠處理程式 426
18.8 測試程式 427
18.8.1 圖形繪製程式 429
18.8.2 通用繪圖程式 430
18.8.3 豎條交換程式 432
18.8.4 滑鼠演示程式 433
18.8.5 位映射文本程式 434
18.9 點陣圖檔案處理 434
18.9.1 BMP格式概述 435
18.9.2 BMP檔案的生成 435
18.9.3 基於子畫面的設計 436
18.9.4 BMP檔案訪問 437
18.9.5 基於主機的檔案系統 437
18.9.6 點陣圖檔案獲取程式 437
18.10 文獻注釋 441
18.11 推薦實驗 442
18.11.1 基於PLL的VGA控
制器 442
18.11.2 使用16位記憶體配置的
VGA控制器 442
18.11.3 三位色彩深度的VGA
控制器 442
18.11.4 一位顏色深度的VGA
控制器 442
18.11.5 帶雙快取的VGA控
制器 442
18.11.6 解析度為320 × 240的
VGA控制器 442
18.11.7 含垂直模式操作的VGA
控制器 442
18.11.8 幾何模型函式 442
18.11.9 點陣圖處理函式 443
18.11.10 模擬“神奇畫板”玩具 443
18.11.11 調色板查找表電路 443
18.11.12 虛擬LED閃爍系統
控制板 443
18.11.13 虛擬模擬掛鐘 443
18.12 推薦工程 443
18.12.1 可配置的VGA控制器 443
18.12.2 使用系統SDRAM的
VGA控制器 444
18.12.3 繪圖程式 444
18.12.4 視頻遊戲 444
18.13 完整程式清單 444
第19章 音頻編解碼控制器 469
19.1 引言 469
19.1.1 編解碼器概述 469
19.1.2 WM8731晶片簡介 469
19.1.3 WM8731晶片暫存器 470
19.2 I2C控制器 473
19.2.1 I2C接口概述 473
19.2.2 HDL實現474
19.3 編解碼器數據訪問控制器481
19.3.1 數字音頻接口概述481
19.3.2 HDL實現481
19.4 音頻編解碼控制器IP核
開發484
19.4.1 完整的音頻編解碼控
制器484
19.4.2 Avalon接口486
19.4.3 暫存器映射486
19.4.4 封裝的音頻編解碼控
制器487
19.4.5 SOPC組件創建489
19.5 編解碼驅動489
19.5.1 I2C命令程式490
19.5.2 數據源選擇程式490
19.5.3 晶片初始化程式491
19.5.4 音頻數據訪問程式491
19.6 測試程式492
19.7 音頻檔案處理496
19.7.1 WAV格式概述496
19.3 編解碼器數據訪問控制器481
19.3.1 數字音頻接口概述481
19.3.2 HDL實現481
19.4 音頻編解碼控制器IP核
開發484
19.4.1 完整的音頻編解碼控
制器484
19.4.2 Avalon接口486
19.4.3 暫存器映射486
19.4.4 封裝的音頻編解碼控
制器487
19.4.5 SOPC組件創建489
19.5 編解碼驅動489
19.5.1 I2C命令程式490
19.5.2 數據源選擇程式490
19.5.3 晶片初始化程式491
19.5.4 音頻數據訪問程式491
19.6 測試程式492
19.7 音頻檔案處理496
19.7.1 WAV格式概述496
19.7.2 音頻格式轉換程式497
19.7.3 音頻數據讀取程式497
19.8 文獻注釋499
19.9 推薦實驗500
19.9.1 軟體I2C控制器500
19.9.2 使用主設備時鐘模式設計
硬體數據訪問控制器500
19.9.3 使用從設備時鐘模式的
軟體數據訪問控制器500
19.9.4 使用主設備時鐘模式的
軟體數據訪問控制器500
19.9.5 可配置的數據訪問控
制器500
19.9.6 語音錄音機500
19.9.7 實時正弦波發生器501
19.9.8 實時音頻波形顯示501
19.9.9 回音效果501
19.10 推薦工程501
19.10.1 完整的I2C控制器501
19.10.2 數字均衡器501
19.10.3 數字音頻示波器502
19.7.3 音頻數據讀取程式497
19.8 文獻注釋499
19.9 推薦實驗500
19.9.1 軟體I2C控制器500
19.9.2 使用主設備時鐘模式設計
硬體數據訪問控制器500
19.9.3 使用從設備時鐘模式的
軟體數據訪問控制器500
19.9.4 使用主設備時鐘模式的
軟體數據訪問控制器500
19.9.5 可配置的數據訪問控
制器500
19.9.6 語音錄音機500
19.9.7 實時正弦波發生器501
19.9.8 實時音頻波形顯示501
19.9.9 回音效果501
19.10 推薦工程501
19.10.1 完整的I2C控制器501
19.10.2 數字均衡器501
19.10.3 數字音頻示波器502
19.11 完整程式清單 502
第20章 SD卡控制器 514
20.1 SD卡概述 514
20.2 SPI控制器 514
20.2.1 SPI接口概述 514
20.2.2 HDL實現 515
20.3 SPI控制器IP核開發 518
20.3.1 Avalon接口 518
20.3.2 暫存器映射 518
20.3.3 封裝的SPI控制器 519
20.3.4 SOPC組件創建 520
20.4 SD卡協定 520
20.4.1 SD卡的命令和回響格式 520
20.4.2 初始化和辨識過程 522
20.4.3 數據讀和寫過程 523
20.5 SPI與SD卡驅動程式 524
20.5.1 SPI驅動程式 524
20.5.2 SD卡驅動程式 525
20.6 檔案訪問 531
20.6.1 FAT16結構概述 531
20.6.2 唯讀FAT16檔案訪問
驅動程式 535
20.7 測試程式 543
20.8 SD卡的數據傳輸性能 547
20.9 文獻注釋 548
20.10 推薦實驗 548
20.10.1 SD卡的數據傳輸性能
測試 548
20.10.2 魯棒性強的SD卡驅動
程式 548
20.10.3 SD卡存取的專用處
理器 548
20.10.4 基於硬體的SD卡的讀寫
操作 548
20.10.5 SD卡信息讀取 549
20.10.6 MMC卡支持 549
20.10.7 多扇區讀寫操作 549
20.10.8 帶CRC校驗的SD卡
驅動程式 549
20.10.9 數字音樂播放器 549
20.10.10 數字相框 549
20.10.11 附加的FAT功能 549
20.11 推薦工程 550
20.11.1 HAL API檔案訪問集成 549
20.12 完整程式清單 550
第4部分 硬體加速器實例研究
第21章 GCD加速器 572
21.1 引言 572
21.2 軟體實現 573
21.3 硬體實現 573
21.3.1 ASMD圖 573
21.3.2 HDL實現 574
21.4 時間測量 576
21.4.1 HAL時間戳驅動 576
21.4.2 定製的硬體計數器 577
21.5 GCD加速器IP核開發 577
21.5.1 Avalon接口 577
21.5.2 暫存器映射 577
21.5.3 封裝的GCD加速器 578
21.6 測試程式 580
21.6.1 GCD程式 580
21.6.2 主程式 581
21.7 性能比較 582
21.8 文獻注釋 583
21.9 推薦實驗 583
21.9.1 使用其他處理器配置
的性能 583
21.9.2 最小規模的GCD加速器 583
21.9.3 帶後補零電路的GCD
加速器 583
21.9.4 64位數據的GCD加
速器 583
21.9.5 128位數據的GCD加
速器 583
21.9.6 歐拉算法的GCD 583
21.10 完整程式清單 583
第22章 Mandelbrot集合分形加速器 587
22.1 引言 587
22.1.1 Mandelbrot集合的概述 587
22.1.2 Mandelbrot集合點的
確定 588
22.1.3 配色方案 589
22.1.4 分形圖像的生成 589
22.2 定點運算 590
22.3 函式calc_frac_point( )的軟體
實現 591
22.4 函式calc_frac_point( )的硬體
實現 592
22.4.1 ASMD圖 592
22.4.2 HDL實現 592
22.5 Mandelbrot集合分形加速器
IP核開發 594
22.5.1 Avalon接口 594
22.5.2 暫存器映射 595
22.5.3 封裝的Mandelbrot集合
分形加速器 595
22.6 測試程式 596
22.6.1 分形圖形用戶接口 596
22.6.2 分形硬體加速器引擎控制
程式 598
22.6.3 分形繪圖程式 598
22.6.4 文本區顯示程式 599
22.6.5 滑鼠處理程式 601
22.6.6 主程式 603
22.7 討論 603
22.8 文獻注釋 604
22.9 推薦實驗 604
22.9.1 含一個乘法器的硬體
加速器 604
22.9.2 逃逸條件修改的硬體
加速器 604
22.9.3 使用Q4.12格式的硬體
加速器 604
22.9.4 多個分形引擎的硬體
加速器 604
22.9.5 “Burning-ship”分形 605
22.9.6 改進的測試程式 605
22.10 推薦工程 605
22.10.1 浮點硬體加速器 605
22.10.2 通用畫分形圖平台 605
22.11 完整程式清單 605
第23章 直接數字頻率合成 616
23.1 引言 616
23.2 設計和實現 616
23.2.1 數字波形的直接合成 616
23.2.2 未調製的模擬波形的直接
合成 617
23.2.3 調製的模擬波形的直接
合成 618
23.2.4 HDL實現 618
23.3 DDFS IP核開發 621
23.3.1 Avalon接口 621
23.3.2 暫存器映射 621
23.3.3 封裝的DDFS電路 622
23.3.4 編解碼器的DAC集成 623
23.4 DDFS驅動 623
23.4.1 配置程式 624
23.4.2 初始化程式 625
23.5 測試 625
23.5.1 音符的概括和合成 625
23.5.2 測試程式 626
23.6 文獻注釋 630
23.7 推薦實驗 630
23.7.1 正交相位載波生成 630
23.7.2 縮減的相位—幅度查找表 631
23.7.3 合成音樂播放器 631
23.7.4 鍵盤鋼琴 631
23.7.5 鍵盤記錄儀 631
23.7.6 硬體包絡發生器 631
23.7.7 諧波疊加合成器 631
23.7.8 採樣合成器 631
23.8 推薦工程 632
23.8.1 聲音發生器 632
23.8.2 函式發生器 632
23.8.3 完整的電子合成器 632
23.9 完整程式清單 632
參考文獻 640