本書立足于工程實踐經驗,首先介紹FPGA的原理、語法、設計技巧,然后詳細介紹了7項常用技術的實現。每項技術從以下幾方面介紹:相關技術介紹、FPGA方案框圖設計、子模塊設計、仿真和測試、項目開發過程中遇到的問題、定位和解決措施,其中插入了大量的狀態機轉換圖和關鍵代碼,方便讀者學習。
本書立足于讓讀者真正能掌握FPGA的開發技巧,以中等難度的項目為例,詳細介紹開發中的每個環節,讀者讀完后,可以親自動手完成一個中等難度的項目,真正學會FPGA開發。
本書涉及的所有技術點都是筆者在項目設計中親自完成的。從易到難介紹了7個開發項目,模塊化形式的內容講述:相關技術、FPGA方案設計、子模塊設計、仿真和測試、項目開發過程中遇到的問題、定位和解決措施,便于讀者學習和歸納。在編寫過程中,插入了大量的狀態機轉換圖、仿真結果和關鍵代碼,方便讀者學習,同時還加上了筆者在開發過程中遇到的實際問題及解決問題的手段、機理分析。
本書的讀者群是FPGA初學者,或者對FPGA設計有一定經驗,但對復雜的項目經常感到束手無策的開發人員,以及想進一步提高的朋友。
李憲強,就職于中科院,長期從事FPGA方面一線科研工作,積累了豐富的實踐經驗。
第1章 FPGA介紹
1.1 FPGA的優勢
1.2 FPGA典型結構圖
1.3 LUT原理
1.4 FPGA上電配置過程時序圖
1.5 FPGA基本開發流程
第2章 Verilog語法介紹
2.1 VerilogHDL語言簡介
2.1.1 什么是VerilogHDL
2.1.2 VerilogHLC的歷史
2.2 VerilogHDL和VHDL語言比較
2.3 Verilog語法介紹
2.3.1 模塊
2.3.2 常量
2.3.3 parameter與define的區別
2.3.4 reg和wire
2.3.5 操作符
2.3.6 assign和always語句
2.3.7 if和case語句
2.3.8 循環語句
2.3.9 模塊實例化
2.3.10 預處理指令
2.3.11 系統任務
2.3.12 task和function語句的區別
2.3.13 文件操作
第3章 FPGA開發必要的技術積累
3.1 鎖存器、觸發器
3.2 時序的基本概念
3.2.1 建立和保持時間
3.2.2 同步系統中時序分析
3.3 異步時鐘域和亞穩態
3.3.1 什么是亞穩態
3.3.2 亞穩態發生場合
3.3.3 亞穩態危害
3.3.4 怎么減少亞穩態的發生
3.3.5 案例:亞穩態導致通信異常
3.4 狀態機的設計
3.5 復位信號
3.5.1 同步復位和異步復位比較
3.5.2 案例:和復位信號相關的項目
3.6 串并轉換和并串轉換
3.7 流水技術
3.7.1 流水技術原理
3.7.2 案例:NANDFLASH流水實現高速存儲
3.8 乒乓操作
3.9 雙向端口使用
3.9.1 數據總線的設計
3.9.2 程序設計
3.9.3 案例:MCU接口程序
3.10 Xilinx原語介紹
3.10.1 時鐘組件
3.10.2 吉比特收發器組件
3.10.3 I/O端口組件
3.10.4 IBUFDS
3.10.5 IDELAY
3.10.6 OBUFDS
3.11 DCM原理
3.12 RAM核的使用
3.13 FPGA時序約束
3.13.1 FPGA約束介紹
3.13.2 案例:500MSPS的A/D轉換器
3.14 生成IP核
3.14.1 生成IP核的方法
3.14.2 案例:生成IP核的具體操作過程
3.15 保持層次關系
3.16 ChipscopeICON和ILA
3.16.1 Chipscope介紹
3.16.2 案例:以DSP接口程序為例介紹使用流程
3.17 Verilog編碼風格注意事項總結
3.18 FPGA學習步驟
3.19 FPGA工作方式
第4章 FIFO控制器設計
4.1 FIFO相關的概念
4.2 設計指標
4.3 同步FIFO設計
4.3.1 雙端口RAM介紹
4.3.2 同步FIFO設計
4.4 異步FIFO設計
4.4.1 空/滿標志的產生
4.4.2 亞穩態問題
4.4.3 格雷碼
4.4.4 異步FIFO設計及結果
第5章 串口通信模塊設計
5.1 串口通信概述
5.1.1 串口介紹
5.1.2 串口幀格式
5.2 設計指標
5.3 串口通信模塊方案
5.3.1 原理框圖
5.3.2 FPGA方案
5.4 串口通信各個模塊設計
5.4.1 MCU配置模塊設計
5.4.2 發送模塊設計
5.4.3 接收模塊設計
5.4.4 頂層模塊
5.5 串口通信模塊調試注意事項
第6章 數/模及模/數轉換控制模塊設計
6.1 相關技術介紹
6.1.1 數/模轉換器(DAC)介紹
6.1.2 模/數轉換器(ADC)介紹
6.1.3 數/模轉換芯片AD5641介紹
6.1.4 模/數轉換芯片ADS7230介紹
6.2 技術指標要求
6.3 D/A模塊設計
6.4 AD模塊設計
6.5 遇到的問題、排查及定位
第7章 HDLC總線控制器設計
7.1 HDLC協議介紹
7.2 CRC校驗
7.3 設計技術指標
7.4 HDLC電路圖
7.5 HDLC總線控制器模塊劃分
7.6 HDLC總線控制器各個模塊設計
7.6.1 CRC模塊設計
7.6.2 發送編碼設計及結果
7.6.3 接收解碼設計及結果
7.7 遇到的問題及解決辦法
第8章 SDRAM控制器設計
8.1 SDRAM簡介
8.2 SDRAM芯片介紹
8.3 SDRAM設計方案
8.3.1 刷新周期的問題
8.3.2 初始化模塊
8.3.3 定時刷新請求信號產生模塊
8.3.4 讀/寫請求產生模塊
8.3.5 讀/寫狀態機
第9章 NANDFLASH控制器設計
9.1 NANDFLASH介紹
9.1.1 NANDFLASH信號功能介紹
9.1.2 芯片存儲陣列結構和地址尋址
9.1.3 NANDFLASH時序圖介紹
9.2 設計技術指標
9.3 原理圖介紹
9.4 NANDFLASH控制器方案
9.5 NANDFLASH各個模塊設計
9.5.1 MCU接口模塊
9.5.2 FLASH管理模塊
9.5.3 NANDFLASH壞塊表查找模塊設計
9.5.4 NANDFLASH頁查找模塊設計
9.5.5 NANDFLASH讀模塊設計
9.5.6 NANDFLASH寫模塊設計
9.5.7 NANDFLASH塊擦除模塊設計
9.6 遇到的問題及解決辦法
9.6.1 對FLASH的讀/寫不能完成
9.6.2 讀/寫不穩定
第10章 1553B總線控制器設計
10.1 1553B總線介紹
10.1.1 總線拓撲結構
10.1.2 編碼方式
10.1.3 1553B數據格式
10.1.4 總線數據傳輸過程說明
10.2 設計技術指標
10.3 原理圖介紹
10.4 收發器芯片介紹
10.5 1553B總線控制器方案
10.6 1553B總線控制器各個模塊設計
10.6.1 曼徹斯特編碼模塊設計
10.6.2 曼徹斯特解碼模塊設計
10.6.3 協議處理模塊設計
10.6.4 RT接收模塊設計
10.6.5 RT發送模塊設計
10.6.6 RT-RT模塊設計
10.6.7 Broadcast模塊設計
10.7 測試結果
10.8 遇到的問題及解決辦法
參考文獻
后記