《fpga嵌入式係統設計原理與實踐》
第1章 簡介 1
1.1 嵌入式係統 3
1.1.1 嵌入式係統和通用計算機 4
1.1.2 硬件、軟件和fpga 5
1.1.3 執行模型 5
1.2 設計的挑戰 8
1.2.1 設計生命周期 8
1.2.2 成功的度量 9
1.2.3 成本 12
1.3 平颱fpga 15
1.a 光譜儀示例 17
1.a.1 場景 18
1.a.2 兩種解決方案 18
1.a.3 討論 19
1.b 平颱fpga工具鏈簡介 20
1.b.1 xilinx platform studio入門 21
1.b.2 使用xilinx平颱工作室 22
習題 32
參考文獻 33
.第2章 目標 35
2.1 cmos晶體管 36
2.2 可編程邏輯器件 38
2.3 現場可編程門陣列 40
2.3.1 函數發生器 40
2.3.2 存儲元件 41
2.3.3 邏輯單元 42
2.3.4 邏輯塊 42
2.3.5 輸入/輸齣塊 42
2.3.6 特殊用途功能塊 43
2.4 硬件描述語言 46
2.4.1 vhdl 46
2.4.2 verilog 54
2.4.3 其他高級hdl 59
2.5 從hdl到配置位流 59
2.a xilinx virtex 5 64
2.a.1 查找錶 65
2.a.2 slice 65
2.a.3 可配置邏輯塊 66
2.a.4 塊ram 67
2.a.5 dsp slice 67
2.a.6 選擇i/o 68
2.a.7 高速串口收發器 69
2.a.8 時鍾 69
2.a.9 powerpc 440 70
2.b xilinx集成軟件環境 71
2.c 創建和生成自定義ip 77
2.c.1 xilinx核生成器 77
2.c.2 創建/導入外設嚮導 81
2.c.3 硬核項目目錄 87
習題 89
參考文獻 90
第3章 係統設計 93
3.1 係統設計的準則 94
3.1.1 設計質量 94
3.1.2 模塊和接口 96
3.1.3 抽象和狀態 99
3.1.4 內聚和耦閤 100
3.1.5 設計可重用元件 102
3.2 控製流圖 103
3.3 硬件設計 105
3.3.1 平颱fpga的起源 105
3.3.2 平颱fpga元件 107
3.3.3 完善平颱fpga係統 112
3.3.4 裝配自定義計算核 114
3.4 軟件設計 120
3.4.1 係統軟件選項 120
3.4.2 根文件係統 122
3.4.3 交叉開發工具 123
3.4.4 監視器和引導程序 123
3.a 平颱fpga架構設計 126
3.a.1 關聯xilinx edk
和ibm核 126
3.a.2 構建基本係統 130
3.a.3 增強基本係統 130
3.a.4 xps項目文件 131
3.a.5 實踐示例:浮點加法器 133
3.a.6 基本係統 133
3.a.7 創建和導入外設嚮導 133
3.a.8 核發生器 134
3.a.9 用戶邏輯 135
3.a.10 修改硬核項目文件 139
3.a.11 基本係統的硬核連接 140
3.a.12 測試係統 140
3.b 嵌入式gnu/linux係統 142
3.b.1 unix文件係統的組織
結構 142
3.b.2 配置軟件和工具 144
3.b.3 交叉開發工具和庫 148
3.b.4 交叉編譯linux 151
3.b.5 建立根文件係統 154
3.b.6 在ml510開發闆上啓動
linux 156
習題 157
參考文獻 158
第4章 劃分 161
4.1 劃分問題概述 162
4.1.1 配置簡檔錶 163
4.1.2 性能分析 164
4.1.3 實際應用 164
4.2 劃分問題的分析法解決方案 164
4.2.1 基本定義 165
4.2.2 期望性能增益 167
4.2.3 資源的考慮 168
4.2.4 分析方法 169
4.3 通信 171
4.3.1 調用/協調 173
4.3.2 狀態轉移 176
4.4 實踐問題 180
4.4.1 分析問題 180
4.4.2 數據結構 182
4.4.3 操作特徵大小 183
4.a 使用gprof調試 184
4.b linux內核 188
4.b.1 內核模塊 188
4.b.2 地址空間 190
4.b.3 應用程序視圖 192
4.b.4 字符型設備驅動器 193
4.b.5 總結 195
習題 195
參考文獻 198
第5章 空間設計 199
5.1 並行的原理 200
5.1.1 並行粒度 201
5.1.2 並行度 202
5.1.3 空間組織結構 203
5.2 確認並行性 207
5.2.1 排序 208
5.2.2 依賴性 208
5.2.3 一緻依賴嚮量 212
5.3 平颱fpga的空間並行 214
5.3.1 fpga硬核中的並行 215
5.3.2 fpga設計中的並行 219
5.a 有益於空間設計的vhdl
探討 220
5.a.1 常量和類屬 220
5.a.2 用戶定義類型 221
5.a.3 生成語句 223
5.a.4 設計約束 224
5.b 調試平颱fpga設計 225
5.b.1 仿真 225
5.b.2 軟件可訪問寄存器 228
5.b.3 xilinx chipscope 229
習題 235
參考文獻 236
第6章 帶寬管理 237
6.1 均衡帶寬 238
6.1.1 kahn處理網絡 239
6.1.2 同步設計 241
6.1.3 異步設計 241
6.2 平颱fpga帶寬技術 241
6.2.1 片上和片外存儲器 242
6.2.2 流式儀錶數據 250
6.2.3 實際問題 252
6.3 可擴展性設計 253
6.3.1 可擴展性約束 253
6.3.2 可擴展性解決方案 256
6.a 片上存儲器訪問 259
6.a.1 fifo 259
6.a.2 塊ram 260
6.a.3 本地鏈接接口 261
6.b 片外存儲器訪問 263
6.b.1 可編程i/o 263
6.b.2 中央dma控製器 263
6.b.3 總綫主控裝置 265
6.b.4 本地端口接口 270
習題 277
參考文獻 277
第7章 外圍世界 279
7.1 點對點通信 280
7.1.1 rs-232串口通信協議 280
7.1.2 其他低速通信 281
7.2 互聯網絡通信 281
7.2.1 概念 281
7.2.2 應用程序接口 284
7.2.3 高層協議 287
7.2.4 操作係統配置 290
7.a 高速串口通信 291
7.a.1 rocket io 291
7.a.2 aurora示例 292
7.a.3 本地鏈接接口 293
7.a.4 時鍾修正 293
7.a.5 誤差測試 294
7.a.6 環迴 294
7.b 低速通信 294
7.b.1 生成硬件基本係統 294
7.b.2 設計測試 299
習題 299
參考文獻 300
術語錶 301
前言
Xilinx公司在1984年推齣瞭一款高級的可編程邏輯器件,現場可編程門陣列(Field- Programmable Gate Array,FPGA)。現在FPGA已經形成瞭數十億的市場規模,開發的産品種類繁多,從數碼相機、汽車,到驅動因特網的網絡交換機;FPGA甚至飛嚮瞭火星(Ratter, 2004)。
幾乎從FPGA推齣之始,人們就認識到瞭使用這些器件構建自定義的計算架構的潛力,但是迄今為止市場上的絕大多數器件是“膠閤邏輯”和原型機。不過,技術的進步已經使得現代FPGA芯片具有非常大的容量以及各種各樣的特性。這些特性的匯集—— 包括多個處理器、大量存儲器、數百個乘法器以及高速I/O—— 已經達到這樣一個臨界點:平颱FPGA比以往任何時候都有望在計算係統中發揮更為突齣的作用。
可在單個FPGA器件上部署復雜計算係統的能力,很有可能對嵌入式計算係統産生巨大的影響。雖然小型的(實際上是微型)8位或16位計算係統仍然並且將會在嵌入式係統市場上占據一席之地,但過去幾年的趨勢錶明嵌入式係統使用標準的現成的32位處理器也方興未艾。這些更為高端的嵌入式係統在更高層次進行瞭集成,通常在(固定和製造)的芯片上已經納入瞭嵌入式係統的相當一部分元件。該層次的集成益處眾多,但是其中一個顯著的缺點是有太多的係統架構被預先設定,這可能對於特定目標的應用程序來說並非是最優的。而替代方案,即在自定義的片上係統(System-on-a-Chip,SoC)中開發係統架構則過於昂貴,除非是用於大容量(百萬單元級)的産品。當應用程序與所提供的資源相匹配時,那麼一切安好。但事實往往並非如此:一些集成的資源被廢置,而需要增加額外零散的硬件以彌補其不足來實現應用程序。有瞭平颱FPGA,工程師們可以獲得集成所帶來的全部好處,同時也能夠根據每一個應用程序,靈活地開發一個均衡的係統架構。
平颱FPGA配置瞭多種總綫、各種直接通信鏈接、橋、I/O元件以及琳琅滿目的其他專用IP核,設計者可以隨時自定義係統架構。例如,設計者可以使用數百個分布式塊RAM來配置一個大型的可訪問存儲器,而將RAM作為獨立緩存分布於係統各處;或者也可以設計一些兩兩組閤的RAM;還可以設計專用功能模塊(即自定義硬核)。盡管專用集成電路(ASIC)的性能通常優於相同架構的FPGA實現,但是較之ASIC的製造,基於FPGA的解決方案避免瞭昂貴的資源、需要承擔的潛在風險以及上市的時間等問題。FPGA是一個虛擬的白闆,使得工程師在對物理器件進行製造、測試以及驗證之後,能夠分配資源以最佳匹配應用程序。這樣的靈活性提高瞭係統解決方案的效率,節省下來的每個離散元件都會降低成本,同時增加可靠性。
當然,這種硬件的強大靈活性也要付齣代價。除瞭瞭解編譯器、調試器以及其他用於基於處理器的嵌入式係統開發的傳統軟件工具以外,平颱FPGA設計者還必須熟練掌握對硬件設計、綜閤和係統集成工具的使用。以前,架構的選擇在很大程度上製約瞭設計者所能做齣的決定—— 例如,如何在硬件和軟件之間劃分應用程序—— 而現在卻有瞭充分的空間來提齣解決方案。在理解特定處理器係統總綫的特性之外,設計者還必須權衡多個通信機製之間的優勢和劣勢。對於熟悉在預先設定架構上工作的設計者來說,均衡片上元件組成的復雜網絡是一個新的挑戰。
這些挑戰在很多方麵體現瞭計算機工程的特點。然而直到平颱FPGA的齣現,這一挑戰帶來的實際問題(例如構建自定義芯片解決方案的代價問題)一直使得著手研究代價高昂。學生過去隻是從教科書和概念模型中瞭解計算機係統架構,因此徹底地瞭解開發自定義計算機係統的實踐環節則隻局限於少數專業人士。知識和實踐工具—— 例如,如何創建嵌入式係統的闆級支持包—— 隻是在用到的時候纔開始接觸。
本書的目的是嚮讀者介紹平颱FPGA的係統開發。它主要關注的是嵌入式係統,但是也可以作為構建自定義計算係統的通用指南。本書描述瞭指導平颱FPGA係統開發的硬件、軟件以及一係列設計原理的基本技術。其目標是錶明如何係統地和有創造性地應用這些原理構建專用的嵌入式係統架構。同時也特彆關注瞭免費開源軟件,以提高生産率。
本書每一章節的組織結構都包括兩部分:白色頁麵描述的是基本概念、原理以及常識;灰色頁麵則包括本章主要問題的技術實踐,並且展示瞭應用於實踐的概念,這包括對特定開發闆和工具集的逐步詳述,以便讀者能夠自己完成同樣的步驟。本書並不試圖在種類不同的開發闆和工具鏈上示範這些概念,而是通篇隻使用單個工具集(Xilinx Platform Studio、Linux和GNU)以及在示例中使用的開發闆(Xilinx ML-510)。相信對於讀者來說,完整地描述單個係統比部分地描述各種係統更有價值。
如何閱讀本書
本書的編寫是為瞭讓不同的讀者更快捷地找到所需要的信息。如果您是隻有軟件背景而沒有參加過任何電子方麵的課程的本科生,那麼第2章白色頁麵的開始部分介紹瞭晶體管和FPGA(一種固態器件)實現可編程硬件的基本知識。如果您是在嵌入式係統方麵經驗豐富而對FPGA缺乏瞭解的工程師,那麼隻需閱讀灰色頁麵,可以跳過理論部分而直接進入實踐層麵,在FPGA上構建基於Linux的係統。如果您是參加過高級設計課程的學生,那麼學習的重點可能是項目管理,您可能不會在此找到過多的資料,但是您會發現本書是完成項目的一個方便且實用的指南。另一方麵,如果您有一個涉及尖端技術的非常具體的項目,那麼本書可能沒有以足夠的深度涵蓋這一特定的主題。不過如果您想入門,需要縱覽一般性的概念,同時希望有足夠的逐步指導來實現一個真實的工作係統,那麼本書是您的最佳選擇!
給教師的建議
本書在不同的計算機課程中可以扮演不同的角色。在很多院係中,嵌入式係統課程是高年級學生的技術選修課。該課程的主要內容是花費一個學期的時間講述內容繁多的技術工程中的細節。本書是學習嵌入式係統內容的入門經典—— 因為它給學生提供瞭實現其項目所需的所有實踐資料—— 教師可以根據情況在課堂上選擇一些內容講授。對於介紹嵌入式係統特定領域的課程(包括多種技術類的選修課程)來說,本書可以用於可重構計算的課程。該課程是對深入理解嵌入式係統的一個補充,其內容全麵,包括小型係統以及實時問題的擴展描述。IEEE-CS/ACM聯閤工作組計算機課程分組(Ironman草案)將計算機工程基本元件作為“終極課程”。通常這在當今的課程中是作為高級設計或者畢業課程設計的。嚴格來說,該課程貫穿瞭上述課程計劃中要求的獨立的主題,有助於將學生的學術理論與職業生涯聯係起來。FPGA在該類課程中與其他技術相得益彰,並且經常被用到。其靈活地支持各種工程,同時這些工程中也必然包含軟件和硬件元件:這是計算機工程的精髓。因此,在本書中,許多教師會為“終極課程”的學生找到非常優秀的資源。
· · · · · · (
收起)