內容簡介
本書立足於工程實踐經驗,首先介紹FPGA的原理、語法、設計技巧,然後詳細介紹了7項常用技術的實現。每項技術從以下幾方面介紹:相關技術介紹、FPGA方案框圖設計、子模組設計、仿真和測試、項目開發過程中遇到的問題、定位和解決措施,其中插入了大量的狀態機轉換圖和關鍵代碼,方便讀者學習。
目錄
第1章 FPGA介紹 1
1.1 FPGA的優勢 1
1.2 FPGA典型結構圖 2
1.3 LUT原理 6
1.4 FPGA上電配置過程時序圖 7
1.5 FPGA基本開發流程 10
第2章 Verilog語法介紹 13
2.1 Verilog HDL語言簡介 13
2.1.1 什麼是Verilog HDL 13
2.1.2 Verilog HLC的歷史 13
2.2 Verilog HDL和VHDL語言比較 14
2.3 Verilog語法介紹 15
2.3.1 模組 15
2.3.2 常量 16
2.3.3 parameter與define的區別 18
2.3.4 reg和wire 19
2.3.5 操作符 21
2.3.6 assign和always語句 21
2.3.7 if和case語句 23
2.3.8 循環語句 25
2.3.9 模組實例化 25
2.3.10 預處理指令 26
2.3.11 系統任務 26
2.3.12 task和function語句的區別 29
2.3.13 檔案操作 30
第3章 FPGA開發必要的技術積累 33
3.1 鎖存器、觸發器 33
3.2 時序的基本概念 34
3.2.1 建立和保持時間 34
3.2.2 同步系統中時序分析 34
3.3 異步時鐘域和亞穩態 37
3.3.1 什麼是亞穩態 37
3.3.2 亞穩態發生場合 37
3.3.3 亞穩態危害 38
3.3.4 怎么減少亞穩態的發生 38
3.3.5 案例:亞穩態導致通信異常 39
3.4 狀態機的設計 39
3.5 復位信號 40
3.5.1 同步復位和異步復位比較 40
3.5.2 案例:和復位信號相關的項目 41
3.6 串並轉換和並串轉換 42
3.7 流水技術 42
3.7.1 流水技術原理 42
3.7.2 案例:NAND FLASH流水實現高速存儲 43
3.8 桌球操作 44
3.9 雙向連線埠使用 45
3.9.1 數據匯流排的設計 45
3.9.2 程式設計 45
3.9.3 案例:MCU接口程式 46
3.10 Xilinx原語介紹 49
3.10.1 時鐘組件 49
3.10.2 吉比特收發器組件 50
3.10.3 I/O連線埠組件 50
3.10.4 IBUFDS 51
3.10.5 IDELAY 52
3.10.6 OBUFDS 53
3.11 DCM原理 54
3.12 RAM核的使用 56
3.13 FPGA時序約束 60
3.13.1 FPGA約束介紹 60
3.13.2 案例:500MSPS的A/D轉換器 63
3.14 生成IP核 70
3.14.1 生成IP核的方法 70
3.14.2 案例:生成IP核的具體操作過程 71
3.15 保持層次關係 73
3.16 Chipscope ICON和ILA 75
3.16.1 Chipscope介紹 75
3.16.2 案例:以DSP接口程式為例介紹使用流程 77
3.17 Verilog編碼風格注意事項總結 79
3.18 FPGA學習步驟 80
3.19 FPGA工作方式 81
第4章 FIFO控制器設計 83
4.1 FIFO相關的概念 83
4.2 設計指標 84
4.3 同步FIFO設計 84
4.3.1 雙連線埠RAM介紹 84
4.3.2 同步FIFO設計 85
4.4 異步FIFO設計 88
4.4.1 空/滿標誌的產生 88
4.4.2 亞穩態問題 88
4.4.3 格雷碼 89
4.4.4 異步FIFO設計及結果 90
第5章 串口通信模組設計 95
5.1 串口通信概述 95
5.1.1 串口介紹 95
5.1.2 串口幀格式 96
5.2 設計指標 97
5.3 串口通信模組方案 97
5.3.1 原理框圖 97
5.3.2 FPGA方案 98
5.4 串口通信各個模組設計 99
5.4.1 MCU配置模組設計 99
5.4.2 傳送模組設計 106
5.4.3 接收模組設計 114
5.4.4 頂層模組 123
5.5 串口通信模組調試注意事項 126
第6章 數/模及模/數轉換控制模組設計 127
6.1 相關技術介紹 127
6.1.1 數/模轉換器(DAC)介紹 127
6.1.2 模/數轉換器(ADC)介紹 129
6.1.3 數/模轉換晶片AD5641介紹 131
6.1.4 模/數轉換晶片ADS7230介紹 132
6.2 技術指標要求 135
6.3 D/A模組設計 136
6.4 AD模組設計 141
6.5 遇到的問題、排查及定位 148
第7章 HDLC匯流排控制器設計 149
7.1 HDLC協定介紹 149
7.2 CRC校驗 150
7.3 設計技術指標 150
7.4 HDLC電路圖 150
7.5 HDLC匯流排控制器模組劃分 151
7.6 HDLC匯流排控制器各個模組設計 152
7.6.1 CRC模組設計 152
7.6.2 傳送編碼設計及結果 152
7.6.3 接收解碼設計及結果 163
7.7 遇到的問題及解決辦法 174
第8章 SDRAM控制器設計 175
8.1 SDRAM簡介 175
8.2 SDRAM晶片介紹 176
8.3 SDRAM設計方案 178
8.3.1 刷新周期的問題 180
8.3.2 初始化模組 183
8.3.3 定時刷新請求信號產生模組 184
8.3.4 讀/寫請求產生模組 185
8.3.5 讀/寫狀態機 187
第9章 NAND FLASH控制器設計 195
9.1 NAND FLASH介紹 195
9.1.1 NAND FLASH信號功能介紹 195
9.1.2 晶片存儲陣列結構和地址定址 196
9.1.3 NAND FLASH時序圖介紹 197
9.2 設計技術指標 201
9.3 原理圖介紹 202
9.4 NAND FLASH控制器方案 202
9.5 NAND FLASH各個模組設計 203
9.5.1 MCU接口模組 203
9.5.2 FLASH管理模組 205
9.5.3 NAND FLASH壞塊表查找模組設計 209
9.5.4 NAND FLASH頁查找模組設計 210
9.5.5 NAND FLASH讀模組設計 211
9.5.6 NAND FLASH寫模組設計 212
9.5.7 NAND FLASH塊擦除模組設計 214
9.6 遇到的問題及解決辦法 217
9.6.1 對FLASH的讀/寫不能完成 217
9.6.2 讀/寫不穩定 217
第10章 1553B匯流排控制器設計 218
10.1 1553B匯流排介紹 218
10.1.1 匯流排拓撲結構 219
10.1.2 編碼方式 220
10.1.3 1553B數據格式 220
10.1.4 匯流排數據傳輸過程說明 223
10.2 設計技術指標 224
10.3 原理圖介紹 224
10.4 收發器晶片介紹 224
10.5 1553B匯流排控制器方案 225
10.6 1553B匯流排控制器各個模組設計 226
10.6.1 曼徹斯特編碼模組設計 226
10.6.2 曼徹斯特解碼模組設計 230
10.6.3 協定處理模組設計 231
10.6.4 RT接收模組設計 238
10.6.5 RT傳送模組設計 242
10.6.6 RT-RT模組設計 243
10.6.7 Broadcast模組設計 243
10.7 測試結果 245
10.8 遇到的問題及解決辦法 246
參考文獻 247
後記 248