構建高性能嵌入式系統 Architecting High-Performance Embedded Systems: Design and build high-performance real-time digital systems based on FPGAs and custom circuits

[美]吉姆·萊丁 著 陳會翔 譯

  • 構建高性能嵌入式系統-preview-1
  • 構建高性能嵌入式系統-preview-2
  • 構建高性能嵌入式系統-preview-3
構建高性能嵌入式系統-preview-1

買這商品的人也買了...

商品描述

《構建高性能嵌入式系統》本書詳細闡述了與構建高性能嵌入式系統相關的基本解決方案,主要包括構建高性能嵌入式系統、傳感器、實時操作、FPGA項目、KiCad設計電路、構建高性能數字電路、固件開發、測試和調試嵌入式系統等內容。此外,本書還提供了相應的示例、代碼,以幫助讀者進一步理解相關方案的實現過程。

目錄大綱

目    錄

第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  FPGA的元素 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  元件佈局示例 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  添加AXI總線接口 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