《步步驚“芯”:軟核處理器內部設計分析》是2013年電子工業出版社出版圖書,作者是雷思磊。
基本介紹
- 中文名:步步驚"芯":軟核處理器內部設計分析
- 作者:雷思磊
- 出版社:電子工業出版社
- 出版時間:2013年7月1日
- 頁數:482 頁
- 開本:16 開
- ISBN:9787121204890
- 語種:簡體中文
內容簡介,圖書目錄,作者簡介,序言,
內容簡介
《步步驚"芯":軟核處理器內部設計分析》編輯推薦:不唯上、不唯下、只唯實。掀開處理器的神秘面紗,帶你遨遊在一個簡潔但不簡單、複雜但不混亂的二進制世界。
《步步驚"芯":軟核處理器內部設計分析》以開源32位軟核處理器OR1200為研究對象,像引導讀者如做解剖學實驗那般,對其進行剖析,力圖使讀者對教科書上介紹的處理器有一個實踐上的認識,打破處理器令人高深莫測的印象,同時使讀者了解處理器設計的細節。OR1200包括CPU、MMU、Cache、匯流排接口、電源管理、中斷控制和計時器單元等多個模組,對於不同的模組,根據其難易程度,採用指令驅動分析法、情景分析法及直接分析原始碼等不同的分析方法,便於讀者理解。通過閱讀《步步驚"芯":軟核處理器內部設計分析》,讀者可以掌握一款成熟的軟核處理器OR1200的設計思路、實現方法,同時更加深刻、具體地理解計算機組成原理、計算機體系結構等課程介紹的知識。《步步驚"芯":軟核處理器內部設計分析》適合計算機專業的學生、FPGA開發人員、處理器設計者、嵌入式系統套用開發工程師、對處理器內部實現感興趣的讀者及對這個世界充滿好奇心的讀者閱讀,也可以作為高等院校計算機組成原理、計算機體系結構等課程的實踐參考書。
圖書目錄
第1章OpenRISC介紹1
1.1開源軟核處理器1
1.2OpenRISC1000架構4
1.3OR1200——OpenRISC1000架構的一個實現4
1.3.1定址模式5
1.3.2位和位元組次序6
1.3.3暫存器集6
1.3.4指令集7
1.3.5異常模型8
1.4OR1200代碼組織8
1.5本書的分析方法11
第2章實驗環境的搭建13
2.1GNU開發工具鏈的安裝13
2.2GNU開發工具鏈的使用18
2.2.1一個簡單的彙編程式18
2.2.2編譯及ELF檔案介紹19
2.2.3連結21
2.2.4Makefile檔案23
2.2.5使用OR1KSim模擬器運行程式24
2.3創建OR1200運行的最小系統25
2.3.1最小系統的創建26
2.3.2運行仿真29
2.3.3修改Makefile30
2.3.4觀察流水線32
2.3.5流水線介紹33
2.4本書的一些說明及定義34
2.4.1一些說明34
2.4.2一些定義35
第3章QMEM剖析37
3.1QMEM的作用37
3.2Wishbone匯流排快速了解40
3.3QMEM的Wishbone匯流排接口43
3.3.1QMEM與CPU、IMMU的連線44
3.3.2QMEM與ICache的連線45
3.3.3QMEM與CPU、DMMU的連線46
3.3.4QMEM與DCache的連線47
3.4QMEM的內部RAM49
3.5復位後取第一條指令的過程分析51
3.5.1復位信號有效階段51
3.5.2復位信號無效後的第一個時鐘周期上升沿56
3.5.3復位信號無效後的第一個時鐘周期的組合邏輯階段57
3.6第二條及後續指令的讀取過程分析58
3.6.1復位信號無效後的第二個時鐘周期的上升沿58
3.6.2復位信號無效後的第二個時鐘周期的組合邏輯階段59
第4章數據處理類指令剖析61
4.1數據處理類指令說明61
4.2分析用例65
4.3流水線的簡單模型67
4.4l.add指令分析69
4.4.1l.add取指階段的組合邏輯輸出70
4.4.2l.add取指階段的時序邏輯輸出73
4.4.3l.add解碼階段的組合邏輯輸出75
4.4.4l.add解碼階段的時序邏輯輸出80
4.4.5l.add執行階段的組合邏輯輸出91
4.4.6l.add執行階段的時序邏輯輸出97
4.4.7第一條指令分析小結98
4.5l.sfeqi指令分析99
4.5.1l.sfeqi取指階段的組合邏輯輸出99
4.5.2l.sfeqi取指階段的時序邏輯輸出100
4.5.3l.sfeqi解碼階段的組合邏輯輸出100
4.5.4l.sfeqi解碼階段的時序邏輯輸出101
4.5.5l.sfeqi執行階段的組合邏輯輸出102
4.5.6l.sfeqi執行階段的時序邏輯輸出105
4.5.7第二條指令分析小結106
4.6ALU分析106
4.7流水線數據相關的解決方法112
4.8定製屬於自己的指令117
4.9不完整流水線數據通路圖121
第5章特殊暫存器訪問類指令剖析123
5.1OR1200中的特殊暫存器123
5.2第0組特殊暫存器125
5.3特殊暫存器訪問類指令說明127
5.4分析用例128
5.5l.mfspr指令分析130
5.5.1l.mfspr取指階段的組合邏輯輸出131
5.5.2l.mfspr取指階段的時序邏輯輸出132
5.5.3l.mfspr解碼階段的組合邏輯輸出132
5.5.4l.mfspr解碼階段的時序邏輯輸出133
5.5.5l.mfspr執行階段第1個時鐘周期的組合邏輯輸出135
5.5.6l.mfspr執行階段第1個時鐘周期的時序邏輯輸出138
5.5.7l.mfspr執行階段第2個時鐘周期的組合邏輯輸出141
5.5.8l.mfspr執行階段第2個時鐘周期的時序邏輯輸出144
5.5.9l.mfspr指令分析小結144
5.6l.mtspr指令分析145
5.6.1l.mtspr執行階段的組合邏輯輸出147
5.6.2l.mtspr執行階段的時序邏輯輸出148
5.7SPRS分析148
5.8完善流水線數據通路圖155
第6章轉移類指令剖析157
6.1延遲槽157
6.2轉移類指令說明158
6.3分析用例159
6.4l.bf指令分析161
6.4.1l.bf取指階段的組合邏輯輸出162
6.4.2l.bf取指階段的時序邏輯輸出163
6.4.3l.bf解碼階段的組合邏輯輸出164
6.4.4l.bf解碼階段的時序邏輯輸出166
6.4.5l.bf執行階段第1個時鐘周期的組合邏輯輸出169
6.4.6l.bf執行階段第2個時鐘周期的組合邏輯輸出173
6.4.7l.bf執行階段第2個時鐘周期的時序邏輯輸出174
6.4.8l.bf指令分析小結175
6.5l.jalr指令分析176
6.5.1l.jalr取指階段的組合邏輯輸出177
6.5.2l.jalr取指階段的時序邏輯輸出177
6.5.3l.jalr解碼階段的組合邏輯輸出177
6.5.4l.jalr解碼階段的時序邏輯輸出179
6.5.5l.jalr執行階段第1個時鐘周期的組合邏輯輸出180
6.5.6l.jalr執行階段第2個時鐘周期的組合邏輯輸出181
6.5.7l.jalr執行階段第2個時鐘周期的時序邏輯輸出182
6.6轉移類指令對處理器效率的影響182
6.7繼續完善流水線數據通路圖183
第7章異常處理類指令剖析185
7.1OR1200中的異常分類185
7.2OR1200中的異常處理過程185
7.3異常處理類指令說明187
7.4分析用例187
7.5EXCEPTION模組的作用190
7.6l.sys指令分析195
7.6.1l.sys取指階段的組合邏輯輸出196
7.6.2l.sys取指階段的時序邏輯輸出196
7.6.3l.sys解碼階段的組合邏輯輸出197
7.6.4l.sys解碼階段的時序邏輯輸出198
7.6.5l.sys執行階段的組合邏輯輸出199
7.6.6l.sys執行階段的時序邏輯輸出201
7.6.7異常處理過程——FLU1狀態207
7.6.8異常處理過程——FLU2狀態211
7.6.9異常處理過程——FLU3狀態212
7.6.10異常處理過程——FLU4狀態212
7.6.11異常處理過程——FLU5狀態213
7.6.12l.sys分析小結214
7.7l.trap指令分析215
7.7.1l.trap解碼階段的時序邏輯輸出216
7.7.2l.trap執行階段的組合邏輯輸出216
7.7.3l.trap執行階段的時序邏輯輸出216
7.7.4異常處理過程——FLU1狀態217
7.7.5異常處理過程——FLU2狀態217
7.7.6l.trap分析小結218
7.8l.rfe指令分析218
……
第8章乘法、除法類指令剖析228
第9章載入存儲類指令剖析268
第10章MMU剖析301
第11章基於OR1200的一個簡單SOPC340
第12章ICache剖析350
第13章DCache剖析389
第14章StoreBuffer(SB)剖析440
第15章WB_BIU剖析450
第16章PM、TT、PIC剖析466
作者簡介
雷思磊,理工男,好靜,倡導低碳生活,常以環保人士自居,喜讀書,自幼篤信“博觀而約取厚積而薄發”,是故,所讀書籍甚為駁雜,年近而立,尚不確定根本興趣目標,一日,駐足書架之前,細覽所讀書籍,驚覺隨歲月增長,關注點依次從套用編程、作業系統、驅動設計轉移至處理器結構,此一脈絡極其清晰,遂如醍醐灌頂,幡然醒悟,原來余根本興趣目標在“底層”,在於從根本上理解世界之運行,遂耗數年時間鑽研處理器工作原理,乃有些微收穫,拙作當為數年辛苦之小結,然學無止境,科技發展亦日新月異,唯有持續鑽研,方能大成,屈子曰:路漫漫其修遠兮,吾將上下而求索。此言甚是,余定謹記而遵行之。
序言
人看見我
就是看見了父
我就是道路、真理、生命
若不借著我
沒有人能到父那裡去
——《約翰福音》
現在看來,用上述語句形容1971年誕生的世界上第一款商用微處理器Intel 4004,似乎也是恰當的。從“人類歷史上最具革新性的產品之一”(戈登·摩爾語)的4004誕生至今,已過了四十多年,期間,處理器的套用範圍不斷擴展,滲透到各行各業,浸入人們的日常生活,極大地影響了第五次信息革命的進程。對其自身而言既有“變”也有“不變”,“變”的是處理器的性能,“不變”的是其高高在上的形象,處理器設計製造作為國家信息產業的基石之一,一直都是高科技行業,輕易無法涉足。幸運的是,隨著可程式硬體技術的持續發展,如今可以通過編寫代碼實現處理器,出現了軟核處理器,它的出現使得尋常人士也能有機會了解處理器內部實現原理,甚至參與處理器的設計、研發。
軟核處理器有很多,比如:NiosII、OR1200、LEON3和OpenSparc等,本書選擇OR1200作為分析對象,深度剖析其內部實現,理解其設計思路、工作過程。選擇OR1200的原因有兩個:一方面OR1200是開源的;另一方面,筆者在學習處理器的過程中有一個體會,那就是“一通百通、融會貫通、取長補短、創新提高”。我們的最終目的是了解處理器的實現原理,不必過多糾結於選擇哪個、不選哪個,處理器設計中很多問題都是相通的,深入學習一款處理器,明白其架構,在這個過程中可以找到學習處理器的途徑,找到適合自己的學習方法,有了方法,再學其他的處理器時就會順利很多,所以稱為“一通百通”。
分析第一個處理器內部實現時,是抱著學習的態度,學第二個、第三個就應該在頭腦中形成一種比較的意識,比較這幾種處理器實現相同功能的部分為何會有不同的設計方法,哪一種性能更好,這就稱為“融會貫通”。通過前面的兩步,我們已經如牛頓那般站在巨人的肩膀上了,學習了各種處理器的設計原理,明白了各自優劣,在自己設計處理器的時候就可以“取長補短”。此外,通過獨立思考,或者由於不同設計思路的碰撞,可能會產生新的、更好的設計靈感,是謂“創新提高”。
寫作目的
尋找一個確定性的世界
我們信科學
我們信邏輯
我們信因果
我們是理工男
科學的、邏輯的、因果的,最終表達的是確定性。恐懼源於未知,人類科技活動的目的就是為了探索未知,消除未知帶來的不確定性,努力使得一切都可預測,都是確定性的。當然,現實生活中各種因素使我們個體所接觸的物質世界顯得如此的不確定。從大的方面講,對於個人命運、社會變革這些宏大的命題,我們都顯得渺小和茫然;從小的方面講,即使坐在對面的是自己的意中人,因為不知她(他)的心思,從而產生一種對確定性喪失的焦慮和痛苦。這時我們迫切地需要一種滿足,一種對確定性存在的滿足,進而是一種理想的滿足。筆者覺得這也是剖析處理器的魅力,處理器的世界就是一個確定性的世界,從加電的那一刻開始,讀指令、執行、再讀指令、再執行,一切都是設計好的,精準、無誤、確定。即使出現意外,也可以得到一個確定的意外原因。
對好奇心的滿足
人類進步的推動力量有兩個:懶惰、好奇。這不是玩笑,而是很嚴肅的話題,關於第一點,大家想想洗衣機、電視、麥當勞就很容易理解了。第二點更好理解,看看嬰兒打量這個世界的眼神就知道好奇心是人類與生俱來的。為什麼太陽東升西落?為什麼蘋果會掉下來?為什麼燒開的水會把壺蓋頂起來?……每一個為什麼的提出及解答,都使得人類前進了一步。在IT行業,人們會問,為什麼可以通過計算機一邊聽音樂、一邊上網、一邊看電影?
不同的人會有不同的答案
A君:啊,這還有為什麼啊,計算機本來就可以這樣啊,不這樣還能叫計算機!
B君:這是多執行緒的效果。
C君:這是作業系統調度的原因。
D君:這是由於處理器在每個時鐘中斷都會進入時鐘中斷處理例程,在其中切換進程。
A君的回答天真無邪,基本可以斷定這位同學不是IT行業的。其他三位同學的答案一個比一個接近根本、接近底層、接近硬體,但好奇的我們不禁要多問一句:時鐘中斷是如何發生的?解答這個問題就需要深入處理器內部實現了。
對現有教科書的不滿
國內大多數計算機方面的教科書,常給人這么一個體會:理論太多、實踐太少。作業系統、計算機體系結構、計算機組成原理等課程無不如此。過多的理論、過少的實踐,給學生帶來的問題是:容易紙上談兵;對具體知識的印象不深刻;知其然,不知其所以然。因此,筆者想結合一款實用的處理器,深度剖析其內部設計實現,作為現有教科書的一個補充。
適合誰讀
適合對確定性世界狂熱追求者閱讀。通過閱讀本書,讀者將發現,雖然處理器內部十分複雜,但是從加電的那一刻開始,它就按照預定程式運行,每一刻都是可預測的,都是確定性的。
適合對處理器內部實現有著強烈好奇心的朋友閱讀。本書通過對OR1200處理器的剖析,將使讀者全方位了解32位RISC處理器設計。
適合不滿足於教科書的同學閱讀。本書可以作為實踐參考書,幫助讀者理解書本上抽象的概念,同時培養讀者的動手能力。
適合正在從事軟核處理器開發、設計的人員閱讀。本書將提供一些經驗、一些好的方法,幫助讀者做到事半功倍。
適合正在從事嵌入式開發的人員閱讀,本書對處理器的一些介紹,有助於嵌入式開發。
內容安排
全書共16章,每章的主要內容如下。
第1章簡單介紹了目前主要的開源軟核處理器,並做了對比,然後重點介紹了OR1200的架構、代碼組織,並對本書的分析方法進行了說明。
第2章帶領讀者一步一步建立起實驗平台、準備好實驗工具,有了平台和工具的幫助,可以更加方便地認識和理解OR1200的內部細節。
第3章剖析了OR1200中的QMEM模組,這是一個快速存儲器模組,可以在一個時鐘周期內讀取其中的指令,同時分析了復位結束後,指令的讀取過程,給出了一個理想的取指模型。
第4~9章分別剖析了OR1200中數據處理類指令、特殊暫存器訪問類指令、轉移類指令、異常處理類指令、乘法/除法類指令和載入存儲類指令的處理過程。這些指令也是OR1200支持的全部指令,分析了這些指令的處理過程,也就明白了OR1200處理器中CPU模組的內部結構、工作原理。在第9章最後給出一個完整的OR1200流水線數據通路圖,而4~9章中,對每一類指令處理過程的分析都採用相同的方法:首先寫一段簡單的測試代碼,測試代碼包含我們即將分析的指令類別中的全部或部分指令,然後使用OR1KSim模擬器查看執行情況,接下來對這一類指令中有代表性的若干條指令採用流水線驅動的方法進行分析,即分析指令處理過程中,在流水線各個階段引起的信號變化,以及通過這些變化的信號是如何逐步實現指令目標的。
第10章剖析了MMU模組,採用的是情景分析法,即通過分析使用該模組的各種情景及各種情景下模組的工作過程,達到了解該模組原理的目的。
第11章建立了一個基於OR1200的簡單SOPC,後續章節將藉助該SOPC分析OR1200中的指令Cache、數據Cache等模組。
第12、13章分別剖析了OR1200中的指令Cache、數據Cache,採用的是情景分析法。
第14章剖析了Store Buffer模組,採用的是直接分析原始碼的方式。
第15章剖析了OR1200處理器與外部Wishbone匯流排連線的接口模組WB_BIU,採用的是情景分析法。
第16章剖析了電源管理模組、計時器單元、可程式中斷控制器,由於比較簡單,採用的都是直接分析原始碼的方式。
寫作原則
不唯上、不唯下,只唯實
要保持質疑,哪怕對方是所謂的權威。本書對OR1200的一些介紹可能與OR1200手冊及其他學者的觀點不同,比如:本書認為OR1200是三級流水線。OR1200手冊上認為是五級流水線,筆者在原始碼的剖析中發現這種說法並不充分,在第9章給出理由以佐證筆者的觀點,整本書也是按照三級流水線進行分析的。同時,本書指出了原始碼中的一些錯誤,有些可能是筆誤,有些就是設計缺陷(如:QMEM的設計)。
像剝洋蔥似的,一步步接近核心
OR1200是一個系統、一個整體,各個模組之間的聯繫很緊密,並且相互影響。最開始,只給出了一種理想情況,也是OR1200大部分時候的運行情況,後面分析到某些指令、某些場景的時候,會具體分析這些指令、場景是如何影響這個理想情況的。比如:第3章給出了一個理想的取指過程,在後續章節,當分析系統調用指令l.sys的時候,就會介紹l.sys對這個取指過程的影響;分析轉移指令l.bf的時候,就會介紹l.bf對這個取指過程的影響;分析特殊暫存器讀指令l.mfspr的時候,就會介紹l.mfspr對這個取指過程的影響。通過這樣一步一步的探索,由簡到繁,由不求甚解到全面了解,最後揭示得出結論,而不是直接給出結論,再分析得出這個結論的理由。筆者認為前者更符合我們認識事物的規律。
依據不同的分析對象使用合適的分析方法
在內容安排中可以發現,本書針對不同的模組,依據具體情況,採用了不同的分析方法,主要有:流水線驅動的分析方法、場景分析法和直接分析原始碼的方法。
適量重複
在分析過程中,為了直觀,本書大量採用了表格化的顯示方法,表格中列出了當前階段的主要變化信號,包括信號的作用說明,其中有很多信號可能在之前的表格中出現過,但筆者仍然在新的表格中重複給出這個信號的作用說明。這樣適量的重複,增強了各章之間的獨立性,尤其是第5~9章,便於讀者選擇性閱讀。
感性與理性結合
除了對代碼進行分析,本書還使用ModelSim進行仿真,通過ModelSim仿真結果可以直觀地觀察到任意時刻處理器內部任一信號的狀態,既驗證了代碼分析的正確性,也使讀者加深了印象。
本書特色
(1)國內第一本採用指令驅動分析法、流水線驅動分析法和情景分析法對一款成熟的32位軟核處理器進行分析的圖書,通過對流水線、MMU和Cache等處理器內部重要功能單元的分析,有效消除了處理器的神秘感。
(2)國內第一本採用實驗的方法對處理器設計中的一些重要思想進行闡釋的書,如:通過實驗,給出了存儲操作在Cache存在、Cache不存在時的區別,從而使讀者可以更加深刻地體會到Cache的作用。
(3)國內第一本對OR1200處理器進行全面、詳細介紹的圖書。
閱讀方法
針對不同的閱讀需要,可以有粗讀、精讀兩種閱讀方法。
粗讀
該方法適合希望快速理解處理器內部工作原理的讀者使用,這些讀者可能更關心處理器在流水線每個階段的主要工作,而不關心這個工作是如何實現的。因此,本書在流水線每一個階段分析結束的時候,都會給出一個表格,列出本階段變化信號,其中重要的變化信號都使用“加粗斜體”來強調,這些重要變化信號的作用就反映了處理器在本階段的主要工作,讀者只需關注每個階段分析結束時的表格即可,從而達到快速理解處理器內部工作原理之目的。
精讀
該方法適合不僅希望知道處理器在流水線每個階段的主要工作是什麼,而且希望知道這個工作是如何實現的讀者使用。這種方法當然比較辛苦,也比較耗時,然而讀書無捷徑,任何知識的獲取都是要下一番苦功夫的。
引用余秋雨先生的話與讀者共勉:
閱讀的最大理由是想擺脫平庸
早一天就多一份人生的精彩
遲一天就多一天平庸的困擾
致謝
向OR1200的諸位作者Damjan Lampret、Julius Baxter等致敬,正是由於你們的辛苦工作和無私奉獻,為我們打開了一扇窗,有機會進入另一個世界。
筆者第一次與博文視點合作,博文視點幹練、敏捷的工作作風給筆者留下了深刻的印象,在此特別感謝孫學瑛老師,正是由於孫老師的出謀劃策、辛苦工作才使得本書能夠及時發行。
感謝酒泉衛星發射中心通信總站的各位領導、同事,雖然我們處在戈壁灘上,自然條件惡劣,但是我們共同從事的是一項偉大的事業,這一事業將我們緊緊聯繫在一起。若干年後,當我老得哪兒也去不了的時候,這必定將成為一段珍貴的回憶。
感謝我的好友張世偉老師在百忙之中閱讀了本書,並提出許多寶貴的修改意見。
最後,感謝我的爸爸、媽媽、姐姐、姐夫,以及可愛的外甥女,任何成績的取得都離不開家人的付出,謝謝你們!
筆者學識有限,儘管已通讀數次,但仍不能保證書中無一紕漏,歡迎各位讀者朋友對本書提出批評、建議。