目 錄
第1篇 高性能嵌入式繫統的基礎知識
第1章 高性能嵌入式繫統... 3
1.1 技術要求... 3
1.2 嵌入式素... 3
1.2.1 電源... 5
1.2.2 時基... 5
1.2.3 數字處理... 6
1.2.4 內存... 6
1.2.5 軟件和固件... 6
1.2.6 專用集成電路... 7
1.2.7 來自環境的輸入... 7
1.2.8 輸出到環境... 8
1.2.9 網絡通信... 8
1.3 嵌入式繫統架構設計... 8
1.4 物聯網... 9
1.5 實時運行... 10
1.5.1 周期性操作... 10
1.5.2 事件驅動操作... 12
1.5.3 實時操作繫統... 13
1.6 嵌入式繫統中的 FPGA.. 14
1.6.1 數字邏輯門... 15
1.6.2 觸發器... 17
1.7 FP素... 18
1.7.1 查找表... 18
1.7.2 觸發器... 19
1.7.3 塊RAM.. 19
1.7.4 DSP切片... 19
1.7.5 其件... 20
1.8 FPGA綜合... 20
1.8.1 硬件設計語言... 20
1.8.2 在嵌入式繫統設計中使用FPGA的好處... 22
1.8.3 賽靈思FPGA和開發工具... 23
1.9 小結... 24
第2章 感知世界... 25
2.1 技術要求... 25
2.2 無源、有源和智能傳感器介紹... 25
2.3 應用模數轉換器... 27
2.4 嵌入式繫統中使用的傳感器類型... 30
2.4.1 光... 30
2.4.2 溫度... 31
2.4.3 壓力... 31
2.4.4 濕度... 32
2.4.5 流體流量... 32
2.4.6 力... 32
2.4.7 超聲波... 33
2.4.8 音頻... 33
2.4.9 磁... 33
2.4.10 化學... 34
2.4.11 電離輻射... 34
2.4.12 雷達... 35
2.4.13 激光雷達... 35
2.4.14 視頻和紅外線... 35
2.4.15 慣性... 36
2.4.16 全球定位繫統... 36
2.5 與傳感器通信... 37
2.5.1 通用輸入/輸出接口... 37
2.5.2 模擬電壓... 41
2.5.3 I2C. 42
2.5.4 SPI 44
2.5.5 CAN總線... 45
2.5.6 無線... 46
2.6 處理傳感器數據... 47
2.7 小結... 48
第3章 實時操作... 49
3.1 技術要求... 49
3.2 實時的概念... 49
3.3 實時嵌入式繫統的屬性... 50
3.3.1 執行多項任務... 51
3.3.2 速率單調調度... 58
3.4 了解關鍵的RTOS功能和挑戰... 60
3.4.1 互斥鎖... 60
3.4.2 信號量... 61
3.4.3 隊列... 62
3.4.4 事件標志... 62
3.4.5 定時器... 63
3.4.6 動態內存分配... 63
3.4.7 內存洩漏... 64
3.4.8 堆碎片... 64
3.4.9 死鎖... 65
3.4.10 優先級反轉... 66
3.5 流行的實時操作繫統... 70
3.5.1 實時操作繫統的關鍵技術屬性... 70
3.5.2 實時操作繫統的非技術屬性... 71
3.5.3 embOS. 72
3.5.4 FreeRTOS. 72
3.5.5 INTEGRITY.. 73
3.5.6 Neutrino. 73
3.5.7 µc/OS-III 74
3.5.8 VxWorks 74
3.6 小結... 75
第2篇 設計和構建高性能嵌入式繫統
第4章 開發你的個FPGA項目... 79
4.1 技術要求... 79
4.2 在實時嵌入式繫統設計中使用FPGA.. 79
4.2.1 塊RAM和分布式RAM.. 80
4.2.2 FPGA I/O引腳和相關功能... 82
4.2.3 專用硬件資源... 83
4.2.4 處理器核心... 84
4.3 FPGA實現語言... 84
4.3.1 VHDL. 84
4.3.2 Verilog. 86
4.3.3 原理圖... 86
4.3.4 C/C . 88
4.4 FPGA開發過程... 88
4.4.1 定義繫統需求... 88
4.4.2 將功能分配給FPGA.. 89
4.4.3 確定所需的FPGA功能... 89
4.4.4 實現FPGA設計... 90
4.4.5 設計入口... 90
4.4.6 輸入/輸出規劃... 91
4.4.7 綜合... 91
4.4.8 布局和布線... 91
4.4.9 比特流生成... 92
4.4.10 測試實現... 92
4.5 開發個FPGA項目... 93
4.5.1 項目描述... 93
4.5.2 安裝Vivado工具... 93
4.5.3 創建項目... 96
4.5.4 創建VHDL源文件... 99
4.5.5 測試邏輯行為... 105
4.5.6 定義I/O信號... 112
4.5.7 創建VHDL文件... 113
4.5.8 綜合和實現FPGA比特流... 115
4.5.9 將比特流下載到板上... 117
4.5.10 將比特流編程到板載閃存... 118
4.6 小結... 122
第5章 使用FPGA實現繫統... 123
5.1 技術要求... 123
5.2 FPGA編譯過程... 123
5.2.1 設計輸入... 124
5.2.2 邏輯綜合... 128
5.2.3 設計優化... 129
5.2.4 高級綜合... 132
5.2.5 優化和約束... 138
5.3 適合FPGA實現的算法類型... 140
5.3.1 處理高速數據流的算法... 140
5.3.2 並行算法... 140
5.3.3 使用非標準數據大小的算法... 141
5.4 示波器FPGA項目... 141
5.4.1 項目描述... 142
5.4.2 基準Vivado項目... 142
5.4.3 原理圖設計... 143
5.4.4 定義時鐘... 147
5.4.5 生成比特流... 148
5.4.6 創建並運行TCP回顯服務器... 148
5.4.7 調試程序... 151
5.5 小結... 154
第6章 使用KiCad設計電路... 155
6.1 技術要求... 155
6.2 關於KiCad. 155
6.3 KiCad設計基礎... 157
6.3.1 放置和連件... 158
6.3.2 添加穩壓器... 162
6.3.3 KiCad原理圖編輯器應用技巧... 163
6.3.4 件符號... 164
6.4 開發項目原理圖... 169
6.4.1 添加文本注釋... 170
6.4.2 添加信號標簽... 171
6.4.3 添加全局標簽... 171
6.4.4 創建差分信號對... 171
6.4.5 創建板外連接... 172
6.4.6 符號注釋和電氣規則檢查... 172
6.5 印刷電路板布局... 173
6.5.1 件分配封裝... 173
6.5.2 構建PCB布局... 174
6.5.3 布局規則... 176
6.5.4&nbs件布局示例... 177
6.5.5 定義板層集... 178
6.5.6 創建填充區域... 179
6.5.7 繪制電路走線... 179
6.5.8 查看電路板的3D圖像... 180
6.6 電路板原型制作... 182
6.7 小結... 183
第7章 構建高性能數字電路... 185
7.1 技術要求... 185
7.2 電路板組裝工具和過程... 185
7.2.1 光學放大鏡... 186
7.2.2 鑷子... 187
7.2.3 助焊劑... 187
7.2.4 焊料... 188
7.2.5 靜電放電保護... 190
7.2.6 手工焊接方式... 190
7.2.7 吸錫線... 192
7.2.8 焊膏應用... 193
7.2.9 回流焊接工藝... 196
7.2.10 焊接安全提示... 198
7.3 準備組裝和放置零部件... 199
7.4 回流焊接和手工焊接... 201
7.4.1 回流焊接... 201
7.4.2 手工焊接... 202
7.4.3 回流焊接後的修復... 202
7.4.4 安件... 203
7.5 組裝之後的電路板的清潔和檢查... 204
7.5.1 助焊劑殘留物需要清洗的原因... 204
7.5.2 助焊劑殘留物去除... 204
7.5.3 組裝後的目視檢查... 205
7.5.4 電氣短路檢查... 206
7.6 小結... 207
第3篇 實現和測試實時固件
第8章 首次給電路板通電... 211
8.1 技術要求... 211
8.2 為電路板通電做準備... 211
8.2.1 謹慎操作... 212
8.2.2 為電路板供電... 212
8.3 檢查電路的基本功能... 213
8.3.1 測試電路板電源... 214
8.3.2 故障排除... 216
8.3.3 測試模擬放大器... 216
8.3.4 測試ADC. 219
8.3.5 配置ADC. 221
8.4 出現問題時調整電路... 226
8.4.1 切割PCB走線... 227
8.4.2 安裝焊料跳線... 227
8.4.3 件... 228
8.4.4 件... 229
8.5 添加FPGA邏輯並檢查I/O信號... 229
8.5.1 生成ADC編碼器時鐘和1kHz校準信號... 229
8.5.2 檢查I/O信號... 232
8.6 小結... 234
第9章 固件開發過程... 235
9.1 技術要求... 235
9.2 FPGA算法的設計與實現... 235
9.2.1 數字示波器繫統概述... 236
9.2.2 添加解串器... 238
9.2.3 添加FIFO緩衝區... 242
9.2.4 添加 總線接口... 245
9.3 添加MQTT協議... 247
9.3.1 關於MQTT協議... 247
9.3.2 在添加MQTT協議時要解決的問題... 248
9.3.3 調用MQTT API 249
9.4 編碼風格... 252
9.4.1 命名規則... 252
9.4.2 代碼中的注釋... 253
9.4.3 避免文字數值... 253
9.4.4 花括號、縮進和垂直間距... 253
9.4.5 優先考慮可讀性和正確性... 254
9.4.6 避免過早優化... 255
9.4.7 避免由實現定義的行為... 255
9.4.8 避免無條件跳轉... 256
9.4.9 小化標識符的作用域... 256
9.4.10 將不變的事物指定為常量... 257
9.4.11 自動代碼格式化程序... 257
9.5 靜態源代碼分析... 257
9.5.1 關於靜態代碼分析... 258
9.5.2 靜態代碼分析工具... 258
9.5.3 高效使用靜態代碼分析... 259
9.5.4 使用現有代碼... 259
9.5.5 從僅顯示嚴重的錯誤消息開始... 261
9.5.6 解析分析器輸出消息... 262
9.5.7 常見的源代碼分析器消息... 262
9.6 源代碼版本控制... 263
9.7 測試驅動開發... 264
9.8 小結... 265
第10章 測試和調試嵌入式繫統... 267
10.1 技術要求... 267
10.2 設計繫統級測試... 267
10.2.1 需求驅動的測試... 268
10.2.2 在標稱和非標稱條件下進行測試... 270
10.2.3 測試與功能測試... 271
10.2.4 負面測試和滲透測試... 273
10.2.5 在模擬環境中測試... 273
10.2.6 獲得可重復的測試結果... 274
10.2.7 制訂測試計劃... 274
10.3 進行測試並記錄結果... 275
10.3.1 確定要收集的數據... 275
10.3.2 配置被測繫統... 276
10.3.3 執行測試程序... 277
10.3.4 測試結果的快速評估... 277
10.3.5 必要時重復測試... 277
10.4 對現有代碼進行回歸測試... 278
10.5 確保全面的測試覆蓋率... 279
10.5.1 需求可追溯性矩陣... 279
10.5.2 跟蹤代碼覆蓋率... 282
10.5.3 建立充分測試的標準... 283
10.6 有效調試技術... 284
10.6.1 處理語法和編譯錯誤... 284
10.6.2 使用靜態代碼分測試... 285
10.6.3 清楚地定義問題並嘗試重現它... 286
10.6.4 判斷輸入是否正確... 286
10.6.5 尋找獲得繫統可見性的方法... 287
10.6.6 使用二分搜索調試過程... 288
10.6.7 暫時刪除部分功能... 289
10.6.8 制作演示問題的小程序... 289
10.7 高性能嵌入式繫統開發的實踐總結... 290
10.7.1 測試設計... 290
10.7.2 留出成長空間... 290
10.7.3 設計硬件時考慮未來功能... 291
10.7.4 僅開發你現在需要的代碼... 292
10.7.5 保持嚴格的版本控制... 292
10.7.6 在開發代碼的同時測試... 293
10.7.7 及時開始繫統級測試... 293
10.8 小結... 294