-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

自己動手寫CPU

( 簡體 字)
作者:雷思磊類別:1. -> 電子工程 -> Verilog
   2. -> 程式設計 -> 綜合
譯者:
出版社:電子工業出版社自己動手寫CPU 3dWoo書號: 39366
詢問書籍請說出此書號!

缺書
NT售價: 495

出版日:9/1/2014
頁數:556
光碟數:1
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787121239502
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

自己動手寫處理器?
自己動手寫處理器!
沒錯,您手上拿著的就是介紹如何實現處理器的書,通過閱讀本書,您可以實現世界上獨一無二、獨屬于您的處理器。
吹牛?
噢,No,理工科學生不打誑語。
不信?
……那就請您閱讀本書。
寫作背景
自1971年世界上第一款單芯片微處理器4004誕生已逾40多年,使用“日新月異”來形容這40多年處理器的發展變化亦不為過,無論是速度、集成度,還是架構等許多方面都有了前人難以想象的變化。不過可惜的是,處理器設計制造一直都是高科技行業,輕易無法涉足。大多數人對處理器的直觀印象就是一個銀白色的小芯片,有許多管腳,至于里面是如何工作的,則不甚了解,更不用說自己制作處理器了。
幸運的是,在處理器發展的同時,可編程邏輯器件也在持續發展。可編程邏輯器件不僅是技術的革新,也帶來觀念的革新、設計流程的革新。如今通過編寫代碼可以在可編程邏輯器件上實現十分復雜的電路設計,比如處理器。于是,普通大眾也能有機會了解處理器內部的實現原理,甚至參與處理器的設計、研發。
實際上,目前已經有很多可以下載到可編程邏輯器件上運行的處理器,這些處理器稱為軟核處理器,比如:NiosII、OR1200、LEON3、OpenSparc等,這些軟核處理器有的是開源的、有的不是開源的。筆者在前期深入閱讀了幾款開源軟核處理器的代碼,包括:OC8051、OR1200、LEON3。其中,OC8051是OpenCores提供的一款8位、兩級流水線處理器,與Intel 8051兼容,是CISC(Complex Instruction Set Computer)類型,采用Verilog HDL編寫代碼。OR1200是OpenCores提供的一款32位、五級流水線處理器,是RISC(Reduced Instruction Set Computer)類型,也采用Verilog HDL編寫代碼。LEON3是由Gaisler Research公司設計發布的一款32位、七級流水線處理器,也是RISC類型,但采用的是VHDL編寫代碼。
通過閱讀上述開源軟核處理器的代碼,一方面消除了筆者對處理器的神秘印象,另一方面也激發筆者強烈的創作沖動,陸游曾言:紙上得來終覺淺,絕知此事要躬行,是啊!為何不自己也寫一個處理器?于是世間又多了一款開源處理器OpenMIPS。OpenMIPS是具有哈佛結構的32位、五級流水線標量處理器,兼容MIPS32體系結構,這樣可以使用現有的MIPS編譯開發環境。它分為教學版、實踐版兩個版本,每個版本都使用VHDL、Verilog HDL兩種語言編寫。
本書以Verilog HDL編寫的版本為例,詳細介紹了OpenMIPS從無到有、從小到大、一步一步成長完善的過程。
寫作目的
撕掉處理器貼著的“高大上”標簽
處理器一貫被人們貼上“高大上”、“高科技”諸如此類的標簽,貼標簽的原因就在于人們對此不了解,越不了解越覺得神秘,越覺得神秘越不想了解,如此,“高大上”的標簽算是貼牢了。本書的目的之一就是幫助讀者改變這種固有的偏見,從本質上認識處理器,撕掉這些標簽。簡單來說,處理器的作用就是識別0、1編碼,也就是識別指令,據此進行各種運算和數據處理。處理器只能計算小學數學課堂上講授的四則運算,再加上一些并不復雜的與、或、非等邏輯運算,其余諸如平方、開方、微分、積分等都是做不了的。是不是很簡單?
對現有處理器相關書籍的補充
翻看現有的處理器相關書籍,會有兩個體會:一個體會是大多數書籍講授的理論部分太多、實踐部分太少。過多的理論、過少的實踐,會使得讀者知其然,不知其所以然;第二個體會是有少部分書籍講授處理器實現,但是介紹的方式不太易懂,讀者需要對處理器有一定了解之后才能閱讀此類書籍。因此,筆者想結合OpenMIPS介紹處理器實現,本書完全按照OpenMIPS的實現過程講解,從零起步,遇到什么問題就解決什么問題,筆者認為這樣易于理解。
拋磚引玉
高手在民間,此言不虛,筆者寫作此書的第三個目的就是拋磚引玉,希望有更多人士能夠參與維護和改進OpenMIPS,為其添加更多的功能,或者改善性能。當然,也希望出現更多類似的軟核處理器,這樣,大家可以相互學習、相互探討、取長補短、共同進步。
適合誰讀
適合對處理器內部實現有著強烈好奇心的朋友閱讀,通過本書介紹的OpenMIPS處理器的實現過程,您將全方位地了解32位RISC處理器的內部設計。
適合不滿足于教科書的同學閱讀,本書可以作為您的實踐參考書,幫助您理解書本上抽象的概念,同時培養動手能力。
適合正在從事軟核處理器開發、設計的朋友閱讀,本書將給您一些經驗、一些好的方法,幫助您事半功倍。
適合正在從事嵌入式開發的朋友閱讀,本書對處理器的一些介紹,將有助于嵌入式開發。
內容安排
全書共15章,分為三篇,第一篇是理論篇,包含第1∼2章,介紹了指令集架構、Verilog HDL的相關知識。第二篇是基礎篇,包含第3∼11章,采用增量模型,實現了教學版OpenMIPS處理器。第三篇是進階篇,包含第12∼15章,實現了實踐版OpenMIPS處理器,并為其移植了嵌入式實時操作系統μC/OS-II。每章的主要內容如下。
第一篇 理論篇
第1章給出了計算機的簡單組成模型、簡單使用模型,對比了RISC與CISC,說明了指令集架構的作用,并列舉了目前幾種主要的指令集架構,由于OpenMIPS采用的是MIPS32指令集架構,所以本章后半部分重點介紹了MIPS32指令集架構。
第2章介紹了FPGA、Verilog HDL的基礎知識,FPGA是可編程邏輯器件的一種,本書的實踐版OpenMIPS處理器就將在FPGA上運行。
第二篇 基礎篇
第3章介紹了教學版OpenMIPS處理器的設計藍圖,包括設計目標、處理器接口,以及最終完成時組成OpenMIPS的各個模塊的作用,力圖使讀者有一個整體認識。并在本章詳述了OpenMIPS處理器的實現方法。
第4章實現了OpenMIPS處理器的第一條指令ori,之所以選擇這條指令作為我們實現的第一條指令,就因為它足夠簡單,指令ori用來實現邏輯“或”運算,通過這條簡單指令的實現,初步建立了OpenMIPS的五級流水線結構,后續章節實現其余指令的時候,都是在這個初步建立的流水線結構基礎上進行擴充的。本章還建立了用于測試的小型SOPC,并通過ModelSim仿真驗證ori指令、五級流水線實現的正確與否。
第5章討論并解決了流水線數據相關問題,然后修改第4章的OpenMIPS,添加實現了MIPS32指令集架構中定義的邏輯、移位操作與空指令。
第6章介紹添加實現了MIPS32指令集架構中定義的移動操作指令。
第7章介紹添加實現了MIPS32指令集架構中定義的算術操作指令。
第8章介紹添加實現了MIPS32指令集架構中定義的轉移指令,OpenMIPS支持延遲轉移。
第9章介紹添加實現了MIPS32指令集架構中定義的加載存儲指令。
第10章介紹添加實現了MIPS32指令集架構中定義的協處理器CP0,以及協處理器訪問指令。
第11章介紹添加實現了MIPS32指令集架構中定義的異常相關指令,并實現了異常處理。
在每一類指令的實現過程中,都是先介紹該類指令的格式、作用、用法,然后介紹實現思路,接著通過修改代碼實現該類指令,最后,編寫測試程序,使用仿真的方式驗證實現的正確性。
第三篇 進階篇
第12章介紹在教學版OpenMIPS處理器的基礎上,通過添加Wishbone總線接口模塊,實現了實踐版OpenMIPS處理器。
第13章講述設計實現了基于實踐版OpenMIPS處理器的小型可編程片上系統SOPC的整個過程。該SOPC包括GPIO、UART控制器、Flash控制器、SDRAM控制器等模塊,這些模塊都具有Wishbone總線接口,與OpenMIPS處理器一起掛接在Wishbone總線互聯矩陣上。
第14章將第13章實現的小型SOPC下載到實際的硬件平臺上,編寫測試程序,驗證實踐版OpenMIPS處理器實現的正確性。
第15章介紹了嵌入式實時操作系統μC/OS-II,并將其移植到本書設計的OpenMIPS處理器上,進一步驗證了實踐版OpenMIPS處理器實現的正確性,也為OpenMIPS處理器發揮實際作用奠定了基礎。
本書特色
從無到有、從小到大,介紹一款處理器的成長過程
在本書之前已有介紹軟核處理器實現的書籍,這些書在介紹實現方法時有一個共同點:一次考慮所有的指令、所有的情況,然后給出代碼。筆者認為這不是一種讀者易于接受的方法,而且這也可能不是作者實現處理器時采用的方法。在本書中,筆者借鑒了軟件開發中的“增量模型”的概念,使用了一種完全不同的實現方法:先考慮最簡單的情況,給出代碼,然后考慮稍微多一點的情況,修改、補充代碼,隨著考慮情況的增多,不停地修改、補充代碼,最終,實現需求的兩個版本。
教學、實踐兼顧
OpenMIPS處理器分為教學版、實踐版兩個版本。
教學版的主要設想是盡量簡單,比如:在一個時鐘周期內可以取到指令,完成存儲、加載數據,這樣處理器的運行情況(比如:流水線的運行)就比較理想化,與教科書相似,代碼也很清晰簡單,便于使用其進行教學、學術研究和討論,也有助于讀者理解計算機原理、計算機體系結構等課程的教科書上講授的知識。
實踐版的主要設計思想是使OpenMIPS成為一個實際可用的處理器,能夠下載到可編程邏輯器件上,運行實際有用的程序,為此,添加了Wishbone總線接口,這樣就能方便地利用各種已有的SDRAM、Flash、GPIO、UART、LCD等模塊控制器,組成一個SOPC,完成特定功能,進一步還可為其移植操作系統。
光盤內容
本書附帶光盤提供了OpenMIPS的所有源代碼,以及一些開發工具,詳情如下。
Code文件夾
提供了本書每一章涉及的OpenMIPS源代碼、測試程序。
tools文件夾
提供了GNU工具鏈的安裝文件,以及一個小工具Bin2Mem.exe,該工具用來將二進制文件轉化為可以用于ModelSim仿真的格式。
Doc文件夾
提供了本書使用的一些IP核的說明手冊,包括UART控制器、SDRAM控制器、GPIO模塊等。還提供了FPGA開發平臺DE2的說明手冊。
DE2文件夾
提供了用來將程序寫入DE2上Flash芯片的工具,在第14-15章會用到。
致謝
感謝OC8051、OR1200、LEON3的開發者,正是你們的辛苦工作、無私奉獻,使得我們有機會領略、學習這些優秀的作品,向你們致敬!
筆者是第二次與博文視點合作,一如既往的敏捷、迅速、干練,在此特別感謝孫學瑛老師,孫老師以專業的眼光審閱了全書,提出了許多寶貴意見,為本書的順利出版耗費了不少心力。
感謝我的好友張世偉老師,為我提供了DE2開發平臺。
最后,感謝我的爸爸、媽媽、姐姐、姐夫,以及可愛的外甥女,任何成績的取得都離不開家人的身影,謝謝你們!
筆者學識有限,盡管已通讀數次,但仍不能保證書中無一紕漏,歡迎各位讀者朋友對本書提出批評、建議,可以通過郵箱leishangwen@163.com與筆者交流。
寫作體會
在實現OpenMIPS處理器的過程中,筆者深刻體會到“羅馬不是一天建成的”這句話,外表看起來巨大、龐雜的羅馬,也是通過人們一步一步、一天一天、一點一點建成的,處理器也是如此,讀者首先不要被處理器的神秘嚇到,從最簡單的地方入手,逐步增加功能、完善設計,一行代碼一行代碼地的書寫,不僅要有實現處理器的遠大目標,還要確立切實可操作的短期目標,比如本周實現除法指令、下周實現轉移指令,諸如此類,等有一天你突然回頭,會發現,原來已經走了那么遠,實現了那么多功能。李白有詩云:兩岸猿聲啼不住,輕舟已過萬重山。當是此意。
處理器實現了,但要把它的實現過程明白地表達出來,讓讀者理解,則又是一件難事。筆者從開始寫作到最終完稿的這一過程中,一直承受著巨大的煎熬,幾度欲放棄寫作,所幸的是最終堅持了下來。
最后,我想對各位讀者說。

一個人的旅行是孤單的
一個人的冬季是寒冷的
但是
一個人的處理器是驕傲的
讓我們驕傲一次

雷思磊
2014年8月
內容簡介:

(含CD光盤1張)本書使用Verilog HDL設計實現了一款兼容MIPS32指令集架構的處理器——OpenMIPS。OpenMIPS處理器具有兩個版本,分別是教學版和實踐版。教學版的主要設計思想是盡量簡單,處理器的運行情況比較理想化,與教科書相似,便于使用其進行教學、學術研究和討論,也有助于學生理解課堂上講授的知識。實踐版的設計目標是能完成特定功能,發揮實際作用。
全書分為三篇。第一篇是理論篇,介紹了指令集架構、Verilog HDL的相關知識。第二篇是基礎篇,采用增量模型,實現了教學版OpenMIPS處理器。首先實現了僅能執行一條指令的處理器,從這個最簡單的情況出發,通過依次添加,實現邏輯操作指令、移位操作指令、空指令、移動操作指令、算術操作指令、轉移指令、加載存儲指令、協處理器訪問指令、異常相關指令,最終實現了教學版OpenMIPS處理器。第三篇是進階篇,通過為教學版OpenMIPS添加Wishbone總線接口,從而實現了實踐版OpenMIPS處理器,并與SDRAM控制器、GPIO模塊、Flash控制器、UART控制器、Wishbone總線互聯矩陣等模塊組成一個小型SOPC,然后下載到FPGA芯片以驗證實現效果,最后為實踐版OpenMIPS處理器移植了嵌入式實時操作系統μC/OS-II。

目錄:

第一篇 理論篇

第1章 處理器與MIPS 2
1.1 計算機的簡單模型 2
1.1.1 計算機的簡單組成模型 2
1.1.2 計算機的簡單使用模型 3
1.2 架構與指令集 4
1.2.1 CISC與RISC 4
1.2.2 主要的幾種ISA 5
1.3 MIPS指令集架構的演變 6
1.4 MIPS32指令集架構簡介 9
1.4.1 數據類型 9
1.4.2 寄存器 9
1.4.3 字節次序 10
1.4.4 指令格式 11
1.4.5 指令集 11
1.4.6 尋址方式 13
1.4.7 協處理器CP0 13
1.4.8 異常 14
1.5 本書的目標與組織方式 14
第2章 可編程邏輯器件與
Verilog HDL 16
2.1 可編程邏輯器件概述 16
2.2 基于PLD的數字系統設計流程 18
2.2.1 設計輸入 19
2.2.2 綜合 20
2.2.3 布局布線 20
2.2.4 下載 20
2.2.5 仿真 20
2.2.6 工具介紹 21
2.3 Verilog HDL簡介 21
2.4 Verilog HDL中模塊的結構 22
2.5 Verilog HDL基本要素 24
2.5.1 常量 24
2.5.2 變量聲明與數據類型 24
2.5.3 向量 26
2.5.4 運算符 26
2.6 Verilog HDL行為語句 29
2.6.1 過程語句 29
2.6.2 賦值語句 31
2.6.3 條件語句 32
2.6.4 循環語句 34
2.6.5 編譯指示語句 35
2.6.6 行為語句的可綜合性 37
2.7 電路設計舉例 38
2.8 仿真 41
2.8.1 系統函數 42
2.8.2 Test Bench 43
2.8.3 ModelSim仿真 45
2.9 本章小結 48

第二篇 基礎篇

第3章 教學版OpenMIPS處理器
藍圖 50
3.1 系統設計目標 50
3.1.1 設計目標 50
3.1.2 五級整數流水線 50
3.1.3 指令執行周期 52
3.2 教學版OpenMIPS處理器接口 53
3.3 文件說明 54
3.4 實現方法 55
第4章 第一條指令ori的實現 58
4.1 ori指令說明 58
4.2 流水線結構的建立 59
4.2.1 流水線的簡單模型 59
4.2.2 原始的OpenMIPS五級
流水線結構 60
4.2.3 一些宏定義 62
4.2.4 取指階段的實現 63
4.2.5 譯碼階段的實現 65
4.2.6 執行階段的實現 74
4.2.7 訪存階段的實現 78
4.2.8 回寫階段的實現 81
4.2.9 頂層模塊OpenMIPS
的實現 81
4.3 驗證OpenMIPS實現效果 85
4.3.1 指令存儲器ROM的實現 85
4.3.2 最小SOPC的實現 87
4.3.3 編寫測試程序 88
4.3.4 建立Test Bench文件 89
4.3.5 使用ModelSim檢驗OpenMIPS實現效果 90
4.4 MIPS編譯環境的建立 92
4.4.1 VisualBox的安裝與設置 93
4.4.2 GNU工具鏈的安裝 96
4.4.3 使用GNU工具進行編譯 97
4.4.4 使用GNU工具進行鏈接 99
4.4.5 得到ROM初始化文件 102
4.4.6 編寫Makefile文件 103
4.5 第一條指令實現小結 105
第5章 邏輯、移位操作與空指令
的實現 107
5.1 流水線數據相關問題 107
5.2 OpenMIPS對數據相關問題的
解決措施 111
5.3 測試數據相關問題解決效果 115
5.4 邏輯、移位操作與空指令說明 115
5.5 修改OpenMIPS以實現邏輯、
移位操作與空指令 119
5.5.1 修改譯碼階段的ID模塊 120
5.5.2 修改執行階段的EX模塊 127
5.6 測試程序1——測試邏輯
操作實現效果 129
5.7 測試程序2——測試移位
操作與空指令實現效果 130
5.8 小結 131
第6章 移動操作指令的實現 132
6.1 移動操作指令說明 132
6.2 移動操作指令實現思路 133
6.2.1 實現思路 133
6.2.2 新的數據相關情況的
解決 135
6.2.3 系統結構的修改 136
6.3 修改OpenMIPS以實現移動
操作指令 137
6.3.1 HI、LO寄存器的實現 137
6.3.2 修改譯碼階段的ID模塊 138
6.3.3 修改執行階段 141
6.3.4 修改訪存階段 146
6.3.5 修改回寫階段 149
6.3.6 修改OpenMIPS頂層
模塊 149
6.4 測試程序 150
第7章 算術操作指令的實現 152
7.1 簡單算術操作指令說明 153
7.2 簡單算術操作指令實現思路 156
7.3 修改OpenMIPS以實現簡單
算術操作指令 157
7.3.1 修改譯碼階段的ID模塊 157
7.3.2 修改執行階段的EX模塊 164
7.4 測試簡單算術操作指令
實現效果 171
7.5 流水線暫停機制的設計
與實現 174
7.5.1 流水線暫停機制設計 174
7.5.2 流水線暫停機制實現 175
7.6 乘累加、乘累減指令說明 180
7.7 乘累加、乘累減指令實現思路 181
7.7.1 實現思路 181
7.7.2 系統結構的修改 181
7.8 修改OpenMIPS以實現乘
累加、乘累減指令 182
7.8.1 修改譯碼階段的ID模塊 182
7.8.2 修改執行階段的EX模塊 184
7.8.3 修改EX/MEM模塊 189
7.8.4 修改OpenMIPS模塊 190
7.9 測試乘累加、乘累減指令
實現效果 190
7.10 除法指令說明 191
7.11 除法指令實現思路 192
7.11.1 試商法 192
7.11.2 實現思路 193
7.11.3 系統結構的修改 193
7.12 修改OpenMIPS以實現
除法指令 194
7.12.1 增加DIV模塊 194
7.12.2 修改譯碼階段的ID
模塊 199
7.12.3 修改執行階段的EX
模塊 200
7.12.4 修改OpenMIPS模塊 204
7.13 測試除法指令實現效果 204
7.14 數據流圖的修改 205
第8章 轉移指令的實現 206
8.1 延遲槽 206
8.2 轉移指令說明 207
8.3 轉移指令實現思路 210
8.3.1 實現思路 210
8.3.2 數據流圖的修改 210
8.3.3 系統結構的修改 211
8.4 修改OpenMIPS以實現
轉移指令 212
8.4.1 修改取指階段的PC模塊 212
8.4.2 修改譯碼階段 213
8.4.3 修改執行階段的EX 模塊 223
8.4.4 修改OpenMIPS模塊 225
8.5 測試轉移指令的實現效果 225
8.5.1 測試跳轉指令 225
8.5.2 測試分支指令 227
第9章 加載存儲指令的實現 230
9.1 加載存儲指令說明 230
9.1.1 加載指令lb、lbu、lh、
lhu、lw說明 230
9.1.2 存儲指令sb、sh、sw
說明 231
9.1.3 加載存儲指令用法示例 232
9.1.4 加載指令lwl、lwr說明 233
9.1.5 存儲指令swl、swr說明 235
9.2 加載存儲指令實現思路 238
9.2.1 實現思路 238
9.2.2 數據流圖的修改 239
9.2.3 系統結構的修改 240
9.3 修改OpenMIPS以實現加載
存儲指令 240
9.3.1 修改譯碼階段 240
9.3.2 修改執行階段 247
9.3.3 修改訪存階段 249
9.3.4 修改OpenMIPS頂層模塊 260
9.4 修改最小SOPC 261
9.4.1 添加數據存儲器RAM 262
9.4.2 修改最小SOPC 264
9.5 測試程序 265
9.6 鏈接加載指令ll、條件存儲
指令sc說明 267
9.7 ll、sc指令實現思路 269
9.7.1 實現思路 269
9.7.2 數據流圖的修改 270
9.7.3 系統結構的修改 271
9.8 修改OpenMIPS以實現ll、
sc指令 271
9.8.1 LLbit寄存器的實現 271
9.8.2 修改譯碼階段的ID模塊 273
9.8.3 修改訪存階段 275
9.8.4 修改OpenMIPS模塊 279
9.9 測試ll、sc指令實現效果 279
9.10 load相關問題 281
9.10.1 load相關問題介紹 281
9.10.2 解決方法 281
9.11 修改OpenMIPS以解決load
相關問題 283
9.11.1 修改譯碼階段的ID
模塊 283
9.11.2 修改OpenMIPS模塊 284
9.12 測試load相關問題解決效果 285
9.13 小結 286
第10章 協處理器訪問指令的實現 287
10.1 協處理器介紹 287
10.2 協處理器CP0中的寄存器 288
10.3 協處理器CP0的實現 295
10.4 協處理器訪問指令說明 300
10.5 協處理器訪問指令實現思路 300
10.5.1 實現思路 300
10.5.2 數據流圖的修改 301
10.5.3 系統結構的修改 301
10.6 修改OpenMIPS以實現協
處理器訪問指令 303
10.6.1 修改譯碼階段 303
10.6.2 修改執行階段 305
10.6.3 修改訪存階段 311
10.6.4 修改OpenMIPS模塊 314
10.7 測試程序 314
第11章 異常相關指令的實現 316
11.1 MIPS32架構中定義的異常
類型 316
11.2 精確異常 318
11.3 異常處理過程 319
11.4 異常相關指令介紹 321
11.4.1 自陷指令 321
11.4.2 系統調用指令syscall 324
11.4.3 異常返回指令eret 325
11.5 異常處理實現思路 325
11.5.1 實現思路 325
11.5.2 修改數據流圖 326
11.5.3 修改系統結構 326
11.6 修改OpenMIPS以實現異常
處理 328
11.6.1 修改取指階段 328
11.6.2 修改譯碼階段 330
11.6.3 修改執行階段 339
11.6.4 修改訪存階段 346
11.6.5 修改協處理器CP0 352
11.6.6 修改控制模塊CTRL 355
11.6.7 修改OpenMIPS 357
11.7 再次修改最小SOPC 358
11.8 測試程序 359
11.8.1 測試程序1——測試
系統調用異常 359
11.8.2 測試程序2——測試
自陷異常 361
11.8.3 測試程序3——測試
時鐘中斷 364
11.9 教學版OpenMIPS處理器
實現小結 366

第三篇 進階篇

第12章 實踐版OpenMIPS處理器
設計與實現 368
12.1 實踐版OpenMIPS處理器的
設計目標 368
12.2 Wishbone總線介紹 370
12.2.1 Wishbone總線接口
說明 370
12.2.2 Wishbone總線單次
讀操作的過程 372
12.2.3 Wishbone總線單次寫
操作的過程 373
12.2.4 SEL_O/SEL_I信號說明 374
12.3 實踐版OpenMIPS處理器
接口 375
12.4 實踐版OpenMIPS處理器的
實現思路 376
12.4.1 實現思路 376
12.4.2 修改系統結構 377
12.5 從教學版OpenMIPS到
實踐版OpenMIPS 378
12.5.1 Wishbone總線接口模塊
的實現 378
12.5.2 修改CTRL模塊 384
12.5.3 修改OpenMIPS頂層
模塊 386
12.6 實踐版OpenMIPS處理器
實現小結 386
第13章 基于實踐版OpenMIPS的
小型SOPC 387
13.1 小型SOPC的結構 387
13.2 Wishbone總線互聯
矩陣WB_CONMAX 388
13.3 GPIO 390
13.4 UART控制器 392
13.4.1 UART簡介 392
13.4.2 UART16550 IP核介紹 394
13.5 Flash控制器 398
13.5.1 Flash簡介 398
13.5.2 Flash控制器的設計 399
13.5.3 Flash控制器的實現 400
13.6 SDRAM控制器 403
13.6.1 SDRAM簡介 403
13.6.2 SDRAM CONTROLLER
IP核 409
13.7 實現基于實踐版OpenMIPS
的小型SOPC 412
13.8 本章小結 423
第14章 驗證實踐版OpenMIPS
處理器 424
14.1 DE2平臺簡介 424
14.2 測試需要的硬件連接 425
14.3 QuartusII工程建立 426
14.4 測試步驟說明 430
14.5 測試一——GPIO實驗 431
14.5.1 測試內容 431
14.5.2 測試程序 431
14.5.3 編譯測試程序 432
14.5.4 將測試程序寫入
Flash芯片 433
14.5.5 下載小型SOPC
到DE2 435
14.5.6 測試效果 435
14.6 測試二——UART實驗 435
14.6.1 測試內容 435
14.6.2 測試程序 436
14.6.3 測試效果 438
14.7 測試三——模擬操作系統的
加載過程 439
14.7.1 測試內容 439
14.7.2 測試程序BootLoader 439
14.7.3 測試程序SimpleOS 443
14.7.4 將測試程序寫入Flash 446
14.7.5 測試效果 448
14.8 本章小結 449
第15章 為OpenMIPS處理器
移植μC/OS-II 450
15.1 為什么需要操作系統 450
15.2 嵌入式實時操作系統介紹 451
15.3 μC/OS-II簡介 452
15.4 μC/OS-II特點 452
15.5 μC/OS-II的幾個概念 454
15.5.1 任務 454
15.5.2 任務調度 456
15.5.3 任務切換 456
15.5.4 μC/OS-II的中斷處理 457
15.5.5 時鐘節拍 457
15.5.6 μC/OS-II的初始化 458
15.5.7 μC/OS-II的啟動 458
15.6 μC/OS-II的基本功能 458
15.6.1 任務間的通信與同步 459
15.6.2 任務管理 459
15.6.3 時間管理 459
15.6.4 內存管理 460
15.7 μC/OS-II的文件體系 460
15.8 μC/OS-II的移植條件 461
15.9 C語言中使用匯編代碼 463
15.10 MIPS函數調用規范 465
15.10.1 寄存器使用規范 465
15.10.2 參數傳遞 466
15.10.3 函數返回值 466
15.10.4 堆棧布局 467
15.10.5 示例 468
15.11 μC/OS-II在OpenMIPS
處理器上的移植 470
15.11.1 文件目錄的建立 470
15.11.2 修改os_cpu.h文件 473
15.11.3 修改os_cpu_a.S文件 474
15.11.4 修改os_cpu_c.c文件 496
15.12 測試程序 500
15.12.1 創建openmips.h文件 500
15.12.2 創建openmips.c文件 502
15.13 編譯指示文件的建立 508
15.14 OpenMIPS處理器運行
移植后的μC/OS-II 515
15.15 本章小結 516
附錄A 教學版OpenMIPS各個模塊
的接口說明 517
A.1 PC模塊接口說明 517
A.2 IF/ID模塊接口說明 518
A.3 ID模塊接口說明 518
A.4 Regfile模塊接口說明 520
A.5 ID/EX模塊接口說明 520
A.6 EX模塊接口說明 521
A.7 DIV模塊接口說明 524
A.8 EX/MEM模塊接口說明 525
A.9 MEM模塊接口說明 527
A.10 MEM/WB模塊接口說明 529
A.11 CP0模塊接口說明 530
A.12 LLbit模塊接口說明 532
A.13 HILO模塊接口說明 532
A.14 CTRL模塊接口說明 533
附錄B OpenMIPS實現的所有
指令及對應的機器碼 534
B.1 邏輯操作指令 534
B.2 移位操作指令 534
B.3 移動操作指令 535
B.4 算術操作指令 535

















B.5 轉移指令 536
B.6 加載存儲指令 536
B.7 協處理器訪問指令 537
B.8 異常相關指令 537
B.9 空指令及其他指令 537
參考文獻 538
序: