《基於FPGA與RISC-V的嵌入式系統設計》是清華大學出版社於2020年2月1日出版的一本圖書,作者是顧長怡。
基本介紹
- 書名:基於FPGA與RISC-V的嵌入式系統設計
- 作者:顧長怡
- 出版社:清華大學出版社
- 出版時間:2020年2月1日
- 定價:118 元
- ISBN:9787302545385
內容簡介,圖書目錄,
內容簡介
本書詳細介紹了RISC-V指令集及其設計思想,並在此基礎上引入了一種稱為FARM的軟硬體 開發模式,將FPGA同RISC-V CPU軟核相結合,並利用Arduino與Make作為軟體快速開發工具, 有效地提高了開發效率,使系統設計具有更好的通用性和可移植性。除了上述有關軟硬體的討論之外,本書的作者還與國內小腳丫FPGA的團隊進行了合作,成 功地將書中的大部分內容移植到了小腳丫FPGA旗下的STEP CYC10開發板上,並將相關的技術細 節在書中做了詳細陳述,以方便讀者的動手實踐。
圖書目錄
第1章概述
1.1背景闡述
1.2FPGA
1.3RISC-V
1.4小腳丫FPGA開發平台
1.5C/C++,Make與工具鏈
1.6嵌入式作業系統
1.7Arduino集成開發環境
1.8模組授權方式
1.9PulseRainRTL庫
1.10資料來源
1.11代碼資源
第2章FPGA
2.1FPGA背景概述
2.2FPGA與數字晶片的異同
2.2.1FPGA與數字晶片在設計流程上的異同
2.2.2FPGA與數字晶片在功耗上的區別
2.2.3FPGA與數字晶片在性能上的區別
2.2.4邏輯設計規模的衡量單位
2.2.5避免使用鎖存器
2.3FPGA與CPLD的區別
2.4FPGA開發中硬體設計語言的選擇
2.4.1VHDL與SystemVerilog/Verilog
2.4.2HLS
2.4.3SystemC
2.4.4Chisel/SpinalHDL
2.5FPGA的片上記憶體
2.6用FPGA實現雙向同步SRAM接口
2.7FPGA的DSPBlock
2.8時鐘與復位
2.9時鐘域跨越
2.9.1單個電平信號的時鐘域跨越
2.9.2單個脈衝信號的時鐘域跨越
2.9.3多比特匯流排的時鐘域跨越
2.10有限狀態機的SystemVerilog模板
2.11高速IO與源同步匯流排(SourceSynchronousBus)
2.12FPGA在數位訊號處理中的套用
2.12.1數字濾波器
2.12.24倍頻採樣
2.12.3複數乘法
2.12.4補碼,值飽和,負值,絕對值,四捨五入
2.12.5除法
2.12.6正弦函式與餘弦函式
2.12.7CORDIC算法
2.13其他技巧
2.13.1暫存器重定時
2.13.2異或樹與多路復用器
2.13.3虛擬輸入輸出
2.13.4遷移路徑
2.14面積與性能的平衡
2.14.1流水線與並行
2.14.2小面積設計
2.14.3AT定律
2.15數字邏輯與處理器各自適用的領域
第3章RISC-V指令集
3.1RISC-V的歷史
3.28051的CISC指令集與RISC-V的比較
3.2.18051指令集簡介
3.2.28051指令集對處理器設計的負面影響
3.2.3RISC-V指令集對處理器設計的正面影響
3.3RISC-V與其他RISC指令集的比較
3.4RISC-V基礎指令集(RV32I與RV32E)
3.4.1RV32I與RV32E基礎指令集簡介
3.4.2RISC-V地址空間
3.4.3RV32I通用暫存器與函式調用約定
3.4.4RV32I指令格式
3.4.5RV32I算術與邏輯指令
3.4.6控制轉移指令
3.4.7記憶體載入與存儲指令
3.4.8RV32I記憶體同步指令
3.4.9控制與狀態暫存器指令
3.4.10環境調用與軟體斷點
3.4.11基礎指令集的面積最佳化方案
3.5RISC-V擴展指令集
3.5.1乘除法擴展(MExtension)
3.5.2壓縮指令集擴展
3.6RISC-V特權架構
3.6.1特權層級
3.6.2控制狀態暫存器
3.6.3定時器
3.6.4中斷與異常
3.6.5程式的調試
第4章設計基於RISC-V指令集的Soft—CPU
4.12018RISC-VSoftCPUContest獲獎作品:PulseRainReindeer
4.2適合於FPGA的設計目標
4.3PulseRainReindeer的設計策略
4.4PulseRainReindeer的RTL設計
4.4.1與FPGA平台相關部分
4.4.2獨立於FPGA平台部分
4.4.3通用暫存器的設計
4.4.4CSR暫存器的實現
4.4.5時鐘定時器的實現
4.4.6流水線的設計
4.5處理器驗證的方式
4.5.1黑盒(BlackBox)測試與白盒(WhiteBox)測試
4.5.2用Verilator做處理器核心的黑盒驗證
4.5.3用Modelsim做處理器的白盒驗證
第5章外圍設備接口
5.1UART
5.2I2C和SMBus
5.3SPI
5.4PWM
5.5microSD存儲卡
5.6PS/2接口
5.7旋轉編碼器
5.87段數碼管顯示器
5.9USB
5.10乙太網
第6章嵌入式軟體開發基礎
6.1目標檔案格式
6.2LinkScript(編譯用連結腳本)
6.3工具鏈
6.3.1readelf
6.3.2objdump
6.3.3objcopy
6.4嵌入式系統中高級程式語言的選擇
6.5C語言在嵌入式系統中的套用
6.5.1C語言的模組封裝
6.5.2C語言的記憶體對齊訪問
6.5.3C語言的靜態編譯檢查
6.5.4volatile與const
6.6C++語言在嵌入式系統中的套用
6.6.1C++語言的口水仗
6.6.2C++語言對C的改進
6.6.3C++語言引入的新概念和新方法
6.7MAKE
6.7.1支持增量編譯的Makefile(MakefileforIncrementalBuild)
6.7.2支持核心配置語言的Makefile
第7章嵌入式作業系統的移植
7.1嵌入式作業系統的分類
7.1.1裸金屬系統
7.1.2實時作業系統
7.1.3通用作業系統
7.2Zephyr作業系統的RISC-V移植
7.2.1Zephyr作業系統簡介
7.2.2串列口的支持
7.2.3定時器的支持
7.2.4中斷的設定
7.2.5修改編譯連結選項
7.2.6樣本應用程式
第8章Arduino開發系統
8.1Arduino的歷史
8.2Arduino的技術貢獻
8.3Arduino開發板
8.4ArduinoIDE集成開發環境和ArduinoLanguage
8.4.1ArduinoIDE集成開發環境的工作原理
8.4.2ArduinoLanguage
8.5ArduinoIDE集成開發環境下第三方開發包的使用和製作
8.5.1ArduinoIDE第三方開發包的使用
8.5.2ArduinoIDE第三方開發包的製作
8.6ArduinoIDE集成開發環境下第三方支持庫的使用和製作
8.6.1ArduinoIDE第三方支持庫的使用
8.6.2ArduinoIDE第三方支持庫的製作
第9章綜合實驗平台:小腳丫STEPFPGA開發板
9.1STEPCYC10開發板簡介
9.2RISC-VforStepFPGA
9.3動態記憶體的訪問與時序約束
9.3.1動態記憶體的仿真
9.3.2動態記憶體的時鐘設定
9.3.3動態記憶體的時序約束
9.3.4動態記憶體的讀寫測試
9.4處理器仿真
9.4.1用Verilator做仿真
9.4.2用Modelsim做仿真
9.5外圍設備與中斷
9.5.1外圍設備(RTL模組)與物理設備
9.5.2中斷映射
9.5.3中斷處理程式
9.6外圍設備暫存器地址列表
9.7串列口
9.8GPIO
9.95向按鍵
9.107段管顯示器
9.11三軸加速度感測器(ADXL345)
9.12開發板示範Sketch
第10章智慧財產權保護
10.1智慧財產權保護的方式
10.2計算機指令集的智慧財產權保護
10.3逆向工程
10.4協定授權
10.4.1GPL
10.4.2LGPL
10.4.3Apache
10.4.4知識共享
10.4.5雙授權協定