《硬體/固件接口設計》是2011年清華大學出版社出版的圖書。
基本介紹
- 書名:硬體/固件接口設計
- ISBN:9787302267010
- 出版社:清華大學出版社
- 出版時間:2011-11-15
基本信息,目錄,譯者序,
基本信息
作者: (美) Gary Stringham 譯者: 張鼎 賀小川
叢書名: 移動與嵌入式開發技術
出版社:
ISBN:
上架時間:
出版日期:2011 年11月
開本:16開
頁碼:1
版次:1-1
目錄
《硬體/固件接口設計—提高嵌入式系統開發效率的最佳實踐》
第1章 引言 1
1.1 硬體/固件接口 2
1.1.1 硬體、晶片及組件 2
1.1.2 固件和設備驅動程式 5
1.2 最佳實踐 6
1.2.1 原則 7
1.2.2 原則和實踐帶來的好處 8
1.3 “一次成功”還意味著…… 8
1.3.1 更易於編程 9
1.3.2 更易於調試 9
1.3.3 更易於變通地解決缺陷 9
1.4 目標讀者 10
1.4.1 硬體工程師 10
1.4.2 固件工程師 10
1.4.3 本書在大學環境中的套用 11
1.5 項目的生命周期 11
1.6 案例研究 12
1.6.1 unity asic中的單色
視頻組件 12
.1.6.2 優秀示例的案例研究 13
1.7 小結 14
1.8 參考文獻 14
第2章 原則 15
2.1 硬體/固件接口設計的七項
原則 15
2.1.1 協同設計 15
2.1.2 確定並遵循標準 17
2.1.3 均衡負載 18
2.1.4 設計要考慮兼容性 20
2.1.5 預測影響 20
2.1.6 設計要考慮意外 21
2.1.7 事先計畫 23
2.2 小結 23
第3章 合作 25
3.1 第一步 25
3.1.1 角色 25
3.1.2 啟動會議 27
3.2 正式合作 28
3.2.1 例會 28
3.2.2 初期的固件支持 29
3.2.3 聯合開發技巧 30
3.2.4 後期的硬體支持 32
3.2.5 文檔 33
3.3 非正式合作 34
3.3.1 正式的組織結構 35
3.3.2 硬體工程師的主動性 35
3.3.3 固件工程師的主動性 36
3.3.4 合作解決問題 37
3.4 小結 38
3.5 參考文獻 38
第4章 計畫 39
4.1 行業標準 39
4.1.1 既有標準 39
4.1.2 實現標準 40
4.1.3 標準的擴展與創建 42
4.2 通用版本 43
4.3 兼容性 44
4.3.1 向後及向前兼容的範圍 44
4.3.2 新舊版本的組合 45
4.4 缺陷 46
4.4.1 歸檔缺陷 46
4.4.2 修復缺陷 47
4.4.3 查找缺陷的測試計畫 49
4.5 分析 49
4.5.1 共用引腳 49
4.5.2 緩衝區管理 50
4.5.3 硬體/固件互動 51
4.5.4 分析第三方的ip 52
4.6 事後檢查 53
4.7 小結 53
第5章 文檔 55
5.1 類型 55
5.1.1 文檔的級別和類型 56
5.1.2 晶片級文檔與組件級文檔 56
5.1.3 支持與不支持文檔 58
5.2 文檔管理 60
5.2.1 文檔標準 60
5.2.2 何時編寫文檔 60
5.2.3 準確性 61
5.3 審閱 62
5.3.1 何時審閱 62
5.3.2 跟蹤文檔變化 63
5.3.3 固件工程師應承擔的
審閱責任 64
5.4 內容 65
5.4.1 大體內容 65
5.4.2 模板文檔示例 66
5.4.3 歷史 66
5.4.4 功能與假設 68
5.4.5 參考和教程 69
5.4.6 術語表和勘誤表 70
5.5 暫存器 71
5.5.1 暫存器文檔 71
5.5.2 暫存器設計工具 72
5.5.3 暫存器表 75
5.5.4 暫存器的細節和描述 75
5.6 數據位 77
5.6.1 暫存器映射格式 77
5.6.2 數據位的位置、
類型及默認值 78
5.6.3 數據位的描述 80
5.6.4 中止的影響 80
5.6.5 測試及調試數據位 81
5.7 中斷 81
5.7.1 邊沿觸髮型中斷和電平觸
髮型中斷 81
5.7.2 中斷的使能與應答 82
5.7.3 中斷尚未完全完成 83
5.7.4 無介入的重複中斷 83
5.8 時間 84
5.8.1 時間範圍 84
5.8.2 時間單位 85
5.9 錯誤 86
5.9.1 兩種類型的錯誤 87
5.9.2 有關錯誤的豐富信息 87
5.9.3 發生錯誤後組件的狀態 88
5.9.4 固件恢復的步驟 89
5.10 信息 89
5.10.1 非法配置 89
5.10.2 狀態機 90
5.10.3 如何中止 90
5.11 小結 91
第6章 超級組件 93
6.1 超級組件的優點 93
6.1.1 組件的附屬資源 94
6.1.2 包含未使用邏輯的理由 94
6.1.3 反對包含未使用邏輯的
理由 97
6.2 聯合 99
6.2.1 設計超級組件 99
6.2.2 製作超級模組 100
6.2.3 改進設計 101
6.2.4 添加未來的功能 102
6.2.5 超級組件的版本號 103
6.3 i/o信號 103
6.4 參數化 105
6.4.1 減少矽片空間 105
6.4.2 參數化風險的最小化 106
6.4.3 固件的參數化信息 107
6.4.4 可選的與固定的暫存器及
數據位 109
6.5 小結 110
6.6 參考文獻 111
第7章 設計 113
7.1 事件通知 113
7.1.1 無指示 114
7.1.2 延時 114
7.1.3 狀態位 116
7.1.4 中斷 118
7.2 性能 120
7.2.1 增大緩衝區 120
7.2.2 提前工作 121
7.2.3 調整 122
7.2.4 裕度 122
7.3 上電 122
7.3.1 上電時的互動 122
7.3.2 i/o線路的上電狀態 123
7.3.3 組件級的電源控制 124
7.4 通信與控制 124
7.4.1 錯誤信息 124
7.4.2 dma功能 125
7.4.3 i/o引腳共享 126
7.4.4 隱藏實現細節 127
7.5 小結 128
第8章 暫存器 131
8.1 定址 132
8.1.1 處理器訪問 132
8.1.2 晶片的基址 134
8.1.3 組件的偏移量和基址 135
8.1.4 暫存器的偏移量 137
8.1.5 子組件 137
8.1.6 迸發 138
8.1.7 未使用的地址單元 138
8.1.8 下一代晶片的變化 139
8.2 位分配 141
8.2.1 分配數據位的位置 141
8.2.2 多位欄位 142
8.2.3 多暫存器欄位 144
8.2.4 未使用的數據位單元 145
8.2.5 下一版本的變化 146
8.2.6 數據位類型 148
8.2.7 暫存器中的數據位類型 151
8.2.8 根據操作模式編組 152
8.2.9 組件的多次例化 153
8.3 數據類型 154
8.3.1 整數 154
8.3.2 實數 156
8.3.3 指針 159
8.3.4 常數 160
8.4 硬體標識 161
8.4.1 晶片id和版本 161
8.4.2 組件id和版本 162
8.5 通信與控制 163
8.5.1 必要的信息 163
8.5.2 組件中的排隊任務 164
8.5.3 一致的暫存器內容 167
8.5.4 訪問原子暫存器 168
8.6 小結 172
第9章 中斷 173
9.1 設計 173
9.1.1 中斷超級模組 174
9.1.2 分級的中斷結構 176
9.1.3 中斷共享 177
9.1.4 中斷源信號的完整性 178
9.1.5 中斷觸發的類型 179
9.2 待決暫存器 183
9.2.1 應答中斷 183
9.2.2 中斷位置的次序 185
9.3 使能暫存器 186
9.3.1 1使能中斷 187
9.3.2 使能控制中斷 187
9.3.3 使能的默認設定 188
9.4 可選的暫存器 188
9.4.1 中斷源狀態暫存器 189
9.4.2 搶占暫存器 190
9.4.3 原子使能暫存器/原子關閉
暫存器 190
9.4.4 禁止暫存器 190
9.4.5 例化暫存器 191
9.4.6 可選暫存器的地址 191
9.5 中斷模組回顧 192
9.5.1 中斷通道 193
9.5.2 中斷模組 195
9.5.3 外部連線 196
9.6 雙邊沿觸發 196
9.6.1 利用兩個中斷通道 197
9.6.2 頭邊沿和尾邊沿中斷的
通道位置 198
9.7 使用中斷模組 200
9.7.1 何時分配中斷通道 200
9.7.2 重複中斷 201
9.7.3 地址映射 201
9.8 小結 202
第10章 中止等 205
10.1 定義 205
10.2 停止 206
10.3 復位 207
10.4 中止 208
10.4.1 中止的必要性 208
10.4.2 固件與中止的互動 210
10.4.3 中止的行為 212
10.4.4 中止組件間的互動 213
10.5 小結 214
第11章 鉤子 217
11.1 針對鉤子的設計 218
11.1.1 增加哪些鉤子 218
11.1.2 增加暫存器 219
11.1.3 查找潛在問題區域 219
11.1.4 刪除變通措施 220
11.2 查看 220
11.2.1 內部暫存器 220
11.2.2 信號 221
11.2.3 存儲器 222
11.2.4 狀態機 223
11.3 打探 225
11.3.1 破壞性的讀寫 225
11.3.2 輸入和輸出信號 226
11.3.3 重寫暫存器 226
11.4 監視 227
11.4.1 事件跟蹤 227
11.4.2 定時器 228
11.4.3 數據觀察 229
11.5 其他鉤子 229
11.5.1 旁路 230
11.5.2 測試和調試所需的
附加資源 231
11.5.3 專用處理器 233
11.6 小結 233
第12章 結束語 235
12.1 要點 235
12.2 受益 235
12.3 硬體/固件接口設計的七項
原則 236
12.4 產品終於可以運轉了!
開始發貨吧! 236
附錄a 最佳實踐 239
附錄b 電動車控制器的規範 251
附錄c 將本書作為大學教材 265
附錄d 術語表 271
譯者序
如今,嵌入式產品已經滲入日常生活和工業生產的各個領域。數碼產品、家用電器、工業設備、交通及通信工具中都隨處可見嵌入式產品的身影。嵌入式產品與傳統電氣產品的關鍵區別就在於包含了可程式邏輯器件,因此其開發通常包含硬體電路設計以及針對可程式邏輯器件的軟體設計。這種軟體設計與傳統的軟體設計類似,但是與硬體的相關性更大,通常稱為固件設計。嵌入式產品需要固件與硬體的配合才能工作,因此,二者間的接口設計至關重要。
儘管硬體與固件接口的重要性已經是業內公認的關鍵技術,但是有關這方面的技術資料大都是針對某個系統的詳細設計,或者是個人經驗,尚缺乏系統的討論,特別是缺乏通用性的設計方法。本書在這方面做出了開創性工作,提出了硬體和固件設計的七項原則,並從工程實際中提煉出300多個最佳實踐。由於本書作者的技術背景和寶貴的工作經歷,使得這些原則和實踐的可用性極高,是難得的技術財富。相信本書必能使廣大硬體和固件設計人員獲益匪淺。
本書主要由張鼎翻譯,賀小川翻譯了部分內容。譯文雖然經過多次修改和校正,但是由於譯者水平有限,加之時間倉促,疏漏和錯誤在所難免,真誠地希望同行和讀者不吝賜教,不勝感激。
前言回到頂部↑ 您既可以找到由硬體工程師編寫的向硬體工程師們講授如何設計硬體的書籍,也可以找到由固件工程師編寫的向固件工程師們講授如何設計固件的書籍。本書由固件工程師編寫,但是主要面向硬體工程師。
很多工程師在硬體上運行固件時遇到過問題。硬體和固件通常是分別獨立設計而成並期望在集成時能夠一起工作。但是,這會出現一些問題和缺陷。有時甚至不知道缺陷在何處—— 是硬體還是固件的問題,或者是文檔的問題。
有關如何使硬體和固件在一起協同工作的書籍非常少。本書試圖填補這一空白。本書闡述了硬體領域和固件領域之間的接口,並提供實踐以減少生產嵌入式系統產品所需的時間和工作量。它涵蓋了開發硬體/固件接口相關的所有方面,包括開發的過程、頂層設計以及詳細設計等。
本書的主要特色是包含300多個最佳實踐,可為開發過程及設計的各個方面提供詳細的指導。這些最佳實踐的套用效果極佳,但是它們只適用於特定的情況。應當根據實際情況詳細地對照檢查它們。全書處處強調讓工程師形成他們自己的最佳實踐集。儘管工程師是以這300多個最佳實踐作為起點的,但是應當以此為基礎不斷發展,逐漸形成他們自己的最佳實踐集,因為這樣做可以增加其所在組織的項目獲得成功的幾率。
為了幫助工程師理解這300多個最佳實踐,同時為了幫助他們創建自己的最佳實踐集,本書列出了七項原則作為綱領性指導。即使在某些情況下沒有特別合適的最佳實踐,這些原則也能幫助工程師遵循正確的方向工作。依靠這七項原則和300多個最佳實踐,將提高設計小組成功生產嵌入式系統產品的能力。
本書概述
下面的各章概述提供本書內容的概述,可以幫助讀者瀏覽全書。
第1章:該章為全書打下基礎。討論各種類型的硬體以及它們對硬體/固件接口的影響。該章定義了原則和最佳實踐、目標讀者以及產品生命周期。此外,還展示了一個貫穿全書的案例研究。
第2章:該章介紹了七項原則並高度概括了本書的講述方向,以及本書按照這個方向來講述的原因。理解這些原則是理解列出的實踐為什麼是最佳實踐的關鍵。
第3章:硬體工程師和固件工程師之間合適而充分的合作是影響嵌入式產品成功的關鍵因素。該章定義了在合作中的角色和過程。
第4章:在項目開始之前,必須做計畫以確定並同意新產品採取的研究方向。該章涵蓋了在計畫新項目時所需考慮的幾個方面。
第5章:大多數被指派去編寫文檔的工程師都不喜歡這項工作。同時,大多數工程師都因為閱讀不完整且不正確的文檔而迷糊。該章討論文檔的類型、何時編寫文檔、如何檢查文檔以及文檔應包含哪些類型的內容。
第6章:該章介紹了可以完成在其自己所在領域內所有任務的組件的概念,並且討論了超級組件的優點以及如何建立並根據需要使用超級組件。此外,還討論了實際實現時的局限以及處理方法。
第7章:該章討論設計的各個方面,例如事件、上電順序、通信及控制。
第8章:暫存器是硬體與固件間的基本接口。該章詳細討論暫存器,包括地址、數據位的位置以及數據位的類型。
第9章:由於業界使用的中斷設計缺乏一致性,因此該章著重於詳細討論如何管理硬體產生並傳遞至固件的中斷。該章還將提議一種中斷標準並對此展開詳細討論。
第10章:通常,很少考慮錯誤以及如何修復錯誤。該章討論必要的設計元素以便固件能中止硬體的操作、恢復及繼續處理。
第11章:邏輯分析儀無法探測晶片的內部,但是了解晶片內部發生的情況對於確保固件能在硬體上正常運行至關重要。在晶片內安放一些固件可訪問的鉤子能使固件獲取信息供工程師分析。該章將介紹許多可以運用的鉤子。
第12章:該章總結全書,還包含幾個卡通圖畫來演示書中所講述的概念。
附錄
. 附錄A:該附錄將本書中所有的最佳實踐匯聚於此。
附錄B:該附錄解釋和說明第5章涉及的文檔模板。
附錄C:對於必須共同完成某項目的硬體和固件工程的學生該附錄就如何將本書中的知識傳達給他們提供了一些建議。
附錄D:由於本書涉及兩個不同的工程學科:硬體工程和固件工程,因此本附錄涵蓋了其中一個領域不為另一個領域所理解的術語。
本書約定
本書正文中的大部分內容是在討論概念,散布其中的則是下列一個或多個元素:圖、程式清單、暫存器映射、最佳實踐和實戰故事。
圖
圖0-1是一個例圖。
圖0-1 例圖
固件程式清單
程式清單0-1是固件的C語言原始碼的示例。
程式清單0-1 C語言代碼示例
/* Read the current list of pending interrupts */
interrupts = *interruptRegister;
硬體電路
本書中列出了一些硬體電路,並給出了原理圖及其等價的Verilog代碼。圖0-2是原理圖,程式清單0-2是示例電路對應的Verilog代碼。
圖0-2 示例電路的原理圖
程式清單0-2 示例電路的Verilog代碼
// A simple AND gate.
assign c = a & b;
暫存器映射
本書採用圖解形式討論暫存器、如何將各種數據位映射到暫存器中以及運行模式和這些數據位的復位值。有關該格式的詳細解釋參見第5章。
表0-1 暫存器表格示例
MSB 常用暫存器—0x0004 LSB
位 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R/W - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C B A
復位 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
A:本數據位的第一種含義。
B:本數據位的第二種含義。
C:本數據位的第三種含義。
最佳實踐
本書包含了與所講授概念相關的300多個最佳實踐。除了在全書中展示這些最佳實踐外,還將它們統一收集在附錄A中,從而提供了一個簡明的檢查表,可在晶片項目的設計期間使用。此外,還可以在出版社網站下載到以電子表格形式給出的這些最佳實踐。
在本書正文、附錄A及電子表格中的每個最佳實踐都有一個形式為X.Y.Z的ID編號。
最佳實踐
1.1.1 硬體/固件接口設計的最佳實踐。
與本書一樣,Excel電子表格資料庫也是有著作權的材料。購買本書的讀者有權(並且鼓勵這么做)以這個資料庫作為起點並將其修改成適合自己設計小組需要的形式,但是要遵守一些約定。有關該資料庫及著作權使用許可的細節內容請參見附錄A。
最佳實踐
1.1.2 Copyright ? 2009,Gary Stringham & Associates LLC.保留所有權利。不要將此分發到您所在的設計小組以外。
實戰故事
散布在全書中的這些內容都是真實的故事,它們將有助於展示所在主題的影響。這些故事都來自於進行設計和解決問題的一線工程師(大部分是我自己)。下面就是這種故事的示例(並非真實發生的故事)。
實戰故事
我記得從一位朋友的朋友那裡聽過一個故事,他聽一位工程師說有一位經理告訴她的下屬……
合作站點
從本書的合作站點上能找到包含了300多個最佳實踐的電子表格資料庫的連結,第5章討論的文檔模板,以及其他相關的內容。請訪問我的網站以獲得相同的工具和我在這個領域的工作有關的連結,以及如何與我直接聯繫的細節信息。
聯繫作者
如果您有任何有關本書或有關硬體/固件接口設計方面的問題,請隨時通過聯繫我。
致謝
我要感謝Jack Meador和Mike Merrell,這兩位硬體工程師在我從事項目工作時忍受了我不斷提出的疑問、問題和請求,這個工程也促使我寫成本書。他們在各自的硬體領域內提供了有價值的看法和幫助。他們及其公司以及其他公司的硬體工程師和固件工程師,提供了大量可用於很多最佳實踐的材料,以及本書中的實戰故事的材料。
我還要感謝我的直接經理Warren Johnson和Tracy Sauerwein以及他們的上級經理Sandy Lieske和Von Hansen。本書的最終出版離不開他們無私的支持,是他們伴隨我從生疏到熟練的成長過程,使我受益良多。
在我的科技文寫作教練Joel Saks的耐心指導下,我糟糕的寫作水平提高了很多。他具有用隻言片語就超越我所及的能力。此外,他還對我提出的概念進行了嚴格分析,並促使我進行清楚而準確的表達,從而使我在表達時能夠證明對我自己而言是顯而易見的那些概念是合理的。
我還要感謝John Blyler、Clive “Max” Maxfiled、Jack Meador、Mike Merrell、Joel Saks以及其他三位人士(他們希望保持匿名)審閱本書的全文或部分內容。他們的建議都極具價值,促使本書愈加完善。感謝Mike Merrell幫助完成Verilog代碼,感謝Kevin Falk繪製了汽車插圖。還要感謝5年來向我提出建議並給予熱情鼓勵的很多朋友,是他們的鼓勵促使我完成本書的撰寫。
最重要的,我要感謝我的妻子和孩子們 ,感謝他們的寬容和長期忍受我花費許多夜晚及周末的時間來撰寫本書,卻從未修理房子、帶孩子參加活動或者和全家旅遊。