基於Nios II的嵌入式SoPC系統設計與Verilog開發實例

基於Nios II的嵌入式SoPC系統設計與Verilog開發實例

本書利用Altera FPGA開發板和Nios II軟核處理器,揭示了基於FPGA的嵌入式系統特有的硬體可程式性,採用“做中學”的模式,介紹了基於Verilog的嵌入式SoPC設計的基本概念和技術。

本書通過許多實例說明軟、硬體的設計和開發過程,並給出了完整的代碼和豐富的實驗題目。

圖書內容

本書利用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.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.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

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

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.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.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

熱門詞條

聯絡我們