關于我們
書單推薦
新書推薦
|
CPU設計實戰(zhàn) 本書面向初學者,以實戰(zhàn)的方式帶領讀者了解CPU設計的流程,并從零開始逐步開發(fā)出自己的CPU。本書將計算機組成與體系結構的理論知識和工業(yè)實踐充分結合,使讀者在實際的CPU設計與開發(fā)過程中更加深入地理解計算機系統(tǒng)的工作原理,掌握CPU設計理念、方法和技術。 本書共分為三個部分,第一部分介紹CPU的研發(fā)過程以及FPGA、數(shù)字邏輯電路等相關知識;第二部分先介紹簡單流水線CPU設計,在此基礎上添加指令、例外、中斷、總線、高速緩存等功能,完成一個具有基本功能的CPU;第三部分介紹如何增加各種高級功能,最終形成一個具有豐富功能的CPU。 本書深入淺出、層次清晰,并融入了典型的CPU開發(fā)相關的技術問題,既可以作為高等院校計算機及相關專業(yè)本科生和研究生的CPU開發(fā)類課程的教材,也可以作為從事CPU相關研發(fā)工作的專業(yè)人員的參考書。 適讀人群 :高校計算機專業(yè)的本科生、研究生,從事計算機芯片開發(fā)的技術人員、高校從事計算機組成、體系結構課程教學的教師 (1)本書按照CPU設計的實際工程過程安排內(nèi)容。全書分為三個部分:第一部分從工程化的視角介紹業(yè)界進行CPU研發(fā)的過程,并且提煉出完成CPU設計應具備的FPGA設計、Verilog、軟硬件平臺等方面的基礎知識;第二部分圍繞一個基本的單周期CPU的設計,逐步引入流水線、指令、例外和中斷、總線、高速緩存等部分的設計和實現(xiàn),最終完成一個入門級的CPU設計;第三部分則在基本CPU的基礎上進一步添加常見指令和功能,啟發(fā)讀者的創(chuàng)造力,使設計出的CPU更接近真實產(chǎn)品。通過這樣循序漸進、層層深入的安排,引導讀者逐步掌握CPU的設計方法。 序 與汪文祥老師相識源于2016年籌辦全國大學生計算機系統(tǒng)能力大賽。彼時,以本科生開發(fā)CPU、操作系統(tǒng)、編譯器為目標的系統(tǒng)能力培養(yǎng)教學改革已進入第10個年頭。在教育部高等學校計算機類專業(yè)教學指導委員會(以下簡稱“教指委”)的大力推動下,在北京大學、北京航空航天大學、國防科技大學、南京大學、清華大學、上海交通大學、浙江大學、中國科學技術大學這8所系統(tǒng)能力培養(yǎng)示范高校的帶動下,全國數(shù)十所高校加入教學改革的行列,系統(tǒng)能力培養(yǎng)逐漸成為計算機類專業(yè)教學研究與改革的熱點之一。面對教學改革蓬勃推進的態(tài)勢,一個關鍵問題擺在我們面前:如何檢驗教學改革后的學生能力培養(yǎng)成效? 在教指委的支持和指導下,經(jīng)過深入考慮和多方調(diào)研,我們決定舉辦面向全國大學生的系統(tǒng)能力大賽,希望通過大賽來檢驗教學改革的成效,進一步推進教學改革,同時將企業(yè)融入人才培養(yǎng)的生態(tài)。這個想法得到了龍芯公司的積極響應,并指派汪老師加入大賽的技術組。 大賽從哪個環(huán)節(jié)開始呢?從技術來看,CPU是計算機系統(tǒng)乃至信息技術領域的基石。從產(chǎn)業(yè)的角度,如果我國有一大批熟知CPU等硬件系統(tǒng)原理與特性的人才,那么他們必將在我國信息技術產(chǎn)業(yè)中發(fā)揮重要作用。從教學改革成熟度的角度,CPU相關的教學改革歷史久、體系全、影響大。從學生培養(yǎng)的角度,能做出CPU的學生必定是一流的學生,其專業(yè)基礎與能力毋庸置疑,更重要的是這些學生有過做出CPU的“巔峰體驗”,這勢必極大地增強其挑戰(zhàn)未來的信心與雄心。最終,我們決定于2017年先行啟動CPU賽道,一定程度上這也是為其他賽道“探路”。 從2017年到2020年,連續(xù)四屆大賽讓我們看到了學生們對CPU設計的熱情,他們的學習能力、工程能力與創(chuàng)新能力超乎我們的想象。更可喜的是,一些高校將系統(tǒng)能力大賽的技術方案融入課程教學中,實現(xiàn)了教學支撐競賽、競賽牽引教學的良性迭代。同時,我們也看到,參賽團隊主要由本科二年級、三年級的學生組成。雖然他們具有極強的學習熱情與能力,但無論從技術還是工程上,開發(fā)一個CPU對于他們來說都并非易事。 人才培養(yǎng)的核心要義在于普惠。因此,教育者必須努力尋找和構建一個適合絕大多數(shù)學生的技術路線,不僅要降低他們的學習曲線的陡峭程度,還應使他們能運用工程化的方法完成具有挑戰(zhàn)性的成果。如何才能讓更多僅學習和實踐過有限的CPU知識的學生參與CPU設計呢?這就必須要進一步縮小教學與競賽的難度差。 在我們技術組幾位成員的“游說”下,汪老師勇挑重擔,用了一年多的時間為零基礎的讀者編寫了這本CPU設計實戰(zhàn)之書。這本書的獨特之處很多,印象最深的有以下幾點: 1)對初學者非常友好。這本書從介紹工業(yè)界真實的CPU設計流程開始,一步步帶領讀者從單周期CPU設計逐步深入到流水線、添加指令、增加異常與中斷的支持,并完成AXI總線接口、TLB MMU和Cache的設計,最終開發(fā)出一個入門級CPU。在此基礎上還可以增加指令、運行Linux,進一步完善CPU的功能和性能。讀者完全可以按照書中的指導設計出自己的CPU。 2)融入了很多工程經(jīng)驗。產(chǎn)品化的CPU開發(fā)要考慮很多工程因素、注意很多工程細節(jié),這些知識通常在教科書中是不會講到的。汪老師結合自己豐富的開發(fā)經(jīng)驗,在書中給出了很多提示和指引來幫助讀者解決設計過程中那些看似不起眼但常常會困擾大家的問題。甚至對如何閱讀、理解指令系統(tǒng)規(guī)范,汪老師也分享了自己的經(jīng)驗。對于讀者來說,這些實踐中的真知灼見不僅對于設計CPU是非常寶貴的,對于未來的工作也具有重要的參考價值。 3)適合作為計算機組成、體系結構相關課程的配套實踐教材。汪老師長期兼任國科大本科體系結構課程的教師,深諳系統(tǒng)類課程實踐教學中的痛點和難點。本書很多素材來源于汪老師在教學中的實踐和思考。這套實踐方案很好地將理論課程中離散的知識點熔接為一套系統(tǒng)化的知識體系,從而有助于提升教學的質量。 系統(tǒng)能力培養(yǎng)是計算機類專業(yè)的一次教育、教學改革的重大探索與實踐。面對正在或即將開展系統(tǒng)能力培養(yǎng)教學改革的眾多高校與任課教師,面對積極備戰(zhàn)全國大學生計算機系統(tǒng)能力大賽的廣大參賽選手,我們熱切期盼更多志同道合之士加入這個行列,將更多優(yōu)質的教學資源提供給廣大學子。 祝各位閱讀愉快! 高小鵬 北京航空航天大學 PREFACE 前 言 CPU,中文全稱為中央處理單元,簡稱處理器,是現(xiàn)代電子計算機的核心器件。如果你想了解一臺計算機是如何構建并工作的,那么深入了解CPU的設計非常有用。不過,這個美好的愿望是否會遭遇“骨感”的現(xiàn)實呢?畢竟一談及CPU,大家馬上想到的是英特爾(Intel)、超微半導體(AMD)、蘋果(Apple)、安謀(ARM)、高通(Qualcomm)這些國際知名公司生產(chǎn)的產(chǎn)品,進而認為CPU設計是一件遙不可及的事情,普通學習者要想掌握它簡直就是天方夜譚。 那么CPU設計到底難不難呢?實話說,要做出具有世界一流水平的產(chǎn)品確實不容易。別看CPU個頭不大,它卻是一個復雜度極高的系統(tǒng)。設計CPU挑戰(zhàn)的是一個團隊進行復雜系統(tǒng)工程研發(fā)的能力。不過,從20世紀60年代第一款CPU問世至今,CPU設計所涉及的基本技術已經(jīng)很成熟了。同時,自動化設計工具的水平也有了大幅度提升。普通學習者想在CPU設計領域初窺堂奧,不再是無法實現(xiàn)的夢想。 本書作者在給新入行的工程師進行培訓以及給高校學生授課的過程中,得到的反饋卻并不樂觀。對于大多數(shù)新手來說,設計一個入門級的CPU還是很有難度的。結合我們在研發(fā)工作中的成長經(jīng)歷,以及在培訓和教學過程中獲得的反饋,我們認為最大的難點在于設計一個CPU需要綜合掌握多方面的知識,而初學者往往在“綜合”這個環(huán)節(jié)遇到了困難。毫不夸張地說,對于設計一個入門級CPU所需要的各方面知識,我們都能找出很多優(yōu)秀的教材、講義、論文、代碼。如果僅僅把這些資料交給一個初學者,讓他通過自學這些資料來設計CPU,那么能把CPU設計出來的只有少數(shù)“悟性高”的人。我們都知道,一個國家要想提高某項體育運動的水平,關鍵的因素是從事該項運動的人數(shù)足夠多。同理,要想在信息技術的核心領域做到世界一流,沒有一大批“懂行”的技術開發(fā)人員是很難實現(xiàn)的。面對當前急需芯片開發(fā)人才的形勢,要想在短時間內(nèi)培養(yǎng)出大量行業(yè)急需的高素質人才,僅僅指望學習者自身“悟性高”是行不通的,需要找到行之有效的學習和訓練方法。 本書作者所在的龍芯團隊自主研發(fā)CPU產(chǎn)品近20年,在CPU設計方面積累了豐富的實戰(zhàn)經(jīng)驗。在本書中,我們將結合自身的研發(fā)實踐,盡可能深入淺出地介紹如何從零開始一步步設計出一個入門級的CPU,以及在這個過程中應該掌握哪些知識、遵守哪些設計原則、規(guī)避哪些設計風險、使用哪些開發(fā)技巧。我們希望這些從工程實踐中總結的經(jīng)驗能作為高校課程教學中知識講授環(huán)節(jié)的有益補充,幫助更多初學者更快、更扎實地掌握CPU設計的知識,具備CPU設計能力。 本書的內(nèi)容安排 本書分為三個部分。第1~3章為第一部分,介紹業(yè)界進行CPU研發(fā)的過程以及硬件/云端平臺、FPGA設計、Verilog等CPU設計中必要的基礎知識。第4~10章為第二部分。在第二部分,我們從設計一個簡單的單周期CPU開始,逐步引入流水線設計,添加指令,增加例外和中斷的支持,并完成AXI總線接口、TLB MMU和高速緩存(Cache)的設計與實現(xiàn),最終完成一個入門級CPU的設計。這樣一個處理器核已經(jīng)不再是用來玩“過家家”游戲的玩具,而是一個能夠滿足絕大多數(shù)實際的嵌入式應用場景需求、可以運行教學用的操作系統(tǒng)的真實產(chǎn)品。第11章為第三部分,在這里,我們會對一些進階設計內(nèi)容給出建議,例如會介紹如何在第二部分完成的產(chǎn)品基礎上添加少量的指令和功能,再在CPU上運行Linux內(nèi)核。 各章的內(nèi)容簡要介紹如下。 第1章介紹CPU芯片產(chǎn)品的研發(fā)過程,使讀者對CPU產(chǎn)品開發(fā)的全過程有初步的認識和了解,為后續(xù)各章的學習奠定基礎。 第2章介紹硬件實驗平臺及FPGA設計流程,包括“龍芯CPU設計與體系結構教學實驗系統(tǒng)”硬件實驗平臺的介紹,以及FPGA的一般設計流程和基于Vivado工具的FPGA設計流程。 第3章介紹數(shù)字邏輯電路設計。這一章會結合CPU的實際設計開發(fā)工作,對如何使用Verilog代碼進行數(shù)字邏輯電路設計給出建議,并給出CPU設計中常用的數(shù)字邏輯電路的可綜合Verilog描述。此外,這一章還會介紹數(shù)字邏輯電路功能仿真中常見的錯誤及其調(diào)試方法。對于缺少電路仿真調(diào)試經(jīng)驗的初學者來說,這部分內(nèi)容具有很好的指導作用。 第4章介紹簡單流水線CPU設計。這一章將從一個支持19條指令的單周期CPU設計開始,先討論如何將其改造成不考慮相關沖突的流水線,然后考慮用阻塞解決相關沖突,最后引入數(shù)據(jù)前遞設計。在介紹設計方法的同時,這一章還對書中所采用的實驗開發(fā)環(huán)境進行介紹,并講解相關的仿真調(diào)試技術。 第5章介紹如何在流水線CPU中添加運算類指令。主要內(nèi)容包括如何在第4章完成的簡單流水線CPU基礎之上添加算術邏輯運算類指令、乘除法運算類指令,以及乘除法配套的數(shù)據(jù)搬運指令。 第6章介紹如何在流水線CPU中添加轉移指令和訪存指令。主要內(nèi)容包括如何在第5章完成的CPU基礎之上添加條件分支、間接跳轉和Link類轉移三類轉移指令,以及添加對齊與非對齊訪存指令。 第7章介紹例外和中斷。這一章首先對例外和中斷的基本概念,以及MIPS指令系統(tǒng)中的例外和中斷的定義進行簡要的梳理,然后介紹如何在第6章完成的CPU基礎之上添加對于例外和中斷的支持。CPU有了這兩部分的支持之后,就可以運行一些簡單的嵌入式操作系統(tǒng)了。 第8章介紹AXI總線接口設計。這一章首先對完成CPU設計所需要的AXI總線協(xié)議的相關內(nèi)容加以回顧,然后通過實現(xiàn)類SRAM總線接口、實現(xiàn)類SRAM-AXI轉接橋、集成類SRAM-AXI轉接橋三個階段性任務來完成CPU中AXI總線接口的添加。 第9章介紹TLB MMU的設計。這一章首先對TLB相關的知識點進行梳理,然后通過TLB模塊的設計實現(xiàn)、TLB相關CP0寄存器與指令的實現(xiàn)、將TLB模塊集成到流水線中完成虛實地址轉換功能并支持TLB例外這三個階段性任務來完成整個TLB MMU的設計。 第10章介紹高速緩存(Cache)設計。這一章只介紹最簡單的Cache設計,其設計任務同樣被分解成Cache模塊設計、Cache模塊集成、CACHE指令支持三個循序漸進的階段性任務。 第11章就一些進階設計問題給出我們的建議,主要涉及啟動內(nèi)核需要補充哪些設計、如何進一步提升主頻、如何進行超標量設計、如何設計動態(tài)調(diào)度機制、如何設計轉移預測器、如何優(yōu)化訪存性能、如何設計動態(tài)調(diào)度機制以及如何添加多核支持。 本書的附錄分別對本書案例相關的開發(fā)板、Vivado的安裝與進階使用、MIPS指令系統(tǒng)規(guī)范、在線調(diào)試等內(nèi)容進行了補充介紹。 可以看到,本書主體內(nèi)容是圍繞著一系列進階任務展開的。在第二部分的每一章中,都會給出有針對性的任務,同時給出與之對應的知識點與設計建議。完成本書各章“任務與實踐”部分所需資源可登錄華章網(wǎng)站(www.hzbook.com)下載。我們希望讀者在時間和精力允許的情況下,先嘗試根據(jù)自己的想法完成設計任務,有了自己的深入思考和親身實踐后,再來看書中給出的講解,相信會有不一樣的體會,正所謂“不憤不啟,不悱不發(fā)”。之所以推薦這種比較“虐”自己的學習方式,源于作者在長期的研發(fā)工作中得到的一個感悟:好的工程師是bug“喂”出來的。對于CPU設計與開發(fā)這種工程性、實踐性極強的工作來說,眼觀千遍不如手過一遍。前輩們千叮嚀、萬囑咐不要犯的錯,非要自己錯過一次才能刻骨銘心;教科書上、論文中已經(jīng)寫得清清楚楚的設計思路,只有自己在設計的路上碰壁無數(shù)次之后才會有如獲至寶的欣喜。要想真正進入CPU設計的大門,僅僅靠坐在圖書館里看書幾十個小時是遠遠不夠的,它需要走路、吃飯甚至是睡覺的時候都在思考如何設計的那種“為伊消得人憔悴”,更需要通宵達旦調(diào)試的那份執(zhí)著與堅持。 致謝 本書的寫作得到了作者所任職的龍芯中科技術有限公司的大力支持。正是在多個部門的眾多同事的幫助之下,我們才能從零開始寫完本書并完成了所有的實驗任務的開發(fā)。在此感謝他們對本書無私的支持!特別感謝龍芯公司芯片研發(fā)部IP組的全體同事、通用事業(yè)部和教育事業(yè)部的同事們,沒有他們的辛勤付出,本書將無法面世。 我們非常感謝教育部高等學校計算機類專業(yè)教學指導委員會、系統(tǒng)能力培養(yǎng)教學研究專家組、機械工業(yè)出版社華章分社的各位專家和老師,感謝所有致力于我國大學生計算機系統(tǒng)能力培養(yǎng)的老師們,正是他們的滿腔熱情和不懈努力激勵著我們寫出這本書。我們衷心希望這本書能為我國大學生計算機系統(tǒng)能力培養(yǎng)事業(yè)盡一份綿薄之力。 我們還要特別感謝中國科學院大學參與計算機體系結構研討課的同學們,以及歷屆“龍芯杯”全國大學生計算機系統(tǒng)能力培養(yǎng)大賽的參賽選手們,他們的反饋讓這本書的內(nèi)容更加充實和完整。 由于CPU設計和開發(fā)工作體系龐大、內(nèi)容繁多,盡管我們已經(jīng)盡力展現(xiàn)其中的核心內(nèi)容,但難免有掛一漏萬之處,懇請各位老師和讀者批評、指正。 作者 汪文祥 工學博士,龍芯中科技術股份有限公司首席工程師,中國科學院大學崗位教授。主要研究方向為處理器體系結構設計、處理器驗證及計算機系統(tǒng)性能分析優(yōu)化等,參與了多項國家“核高基”、863 和 973 項目,在國內(nèi)外各種期刊會議發(fā)表文章十余篇,申請專利數(shù)十項,授權專利十余項。2012年起任龍芯中科芯片研發(fā)部IP組組長,負責龍芯系列CPU IP核的開發(fā)研制及維護,參與制訂龍芯指令系統(tǒng)架構規(guī)范。 邢金璋 碩士畢業(yè)于中國科學院計算技術研究所,2015年加入龍芯中科技術股份有限公司,從事處理器核結構設計工作,是龍芯小、中系列處理器核演進版本的主要結構設計者之一。近年來,積極參與“龍芯杯”全國大學生計算機系統(tǒng)能力培養(yǎng)大賽的技術支持、培訓等工作。 目 錄 叢書序言 序 前言 第1章CPU芯片研發(fā)過程概述 1 1.1處理器和處理器核 1 1.2芯片產(chǎn)品的研制過程 2 1.3芯片設計的工作階段 3 第2章硬件實驗平臺及FPGA設計流程 5 2.1硬件實驗平臺 5 2.1.1龍芯CPU設計與體系結構教學實驗系統(tǒng) 5 2.1.2龍芯計算機系統(tǒng)能力培養(yǎng)遠程實驗平臺 7 2.2FPGA的設計流程 8 2.2.1FPGA的一般設計流程 9 2.2.2基于Vivado的FPGA設計流程 10 2.2.3Vivado使用小貼士 33 2.3任務與實踐 35 第3章數(shù)字邏輯電路設計基礎 36 3.1數(shù)字邏輯電路設計與Verilog代碼開發(fā) 36 3.1.1面向硬件電路的設計思維方式 37 3.1.2行為描述的Verilog編程風格 38 3.1.3自頂向下的設計劃分過程 38 3.1.4常用數(shù)字邏輯電路的Verilog描述 39 3.2數(shù)字邏輯電路功能仿真的常見錯誤及其調(diào)試方法 55 3.2.1功能仿真波形分析 56 3.2.2波形異常類錯誤的調(diào)試 60 3.3進一步使用Vivado 66 3.3.1定制同步RAM IP核 66 3.3.2定制異步RAM IP核 68 3.3.3查看時序結果和資源利用率 69 3.4任務與實踐 69 3.4.1實踐任務一:寄存器堆仿真 70 3.4.2實踐任務二:同步RAM和異步RAM仿真、綜合與實現(xiàn) 71 3.4.3實踐任務三:數(shù)字邏輯電路的設計與調(diào)試 72 第4章簡單流水線CPU設計 74 4.1設計一個簡單的單周期CPU 75 4.1.1設計單周期CPU的總體思路 75 4.1.2單周期CPU的數(shù)據(jù)通路設計 76 4.1.3單周期CPU的控制信號生成 88 4.1.4復位的處理 91 4.2不考慮相關沖突的流水線CPU設計 92 4.2.1添加流水級間緩存 92 4.2.2同步RAM的引入 93 4.2.3調(diào)整更新PC的數(shù)據(jù)通路 96 4.2.4不考慮相關沖突情況下流水線控制信號的設計 96 4.3CPU設計開發(fā)環(huán)境(CPU_CDE) 97 4.3.1快速上手CPU設計的開發(fā)環(huán)境 97 4.3.2CPU設計開發(fā)環(huán)境的組織與結構 99 4.3.3CPU設計開發(fā)環(huán)境使用進階 113 4.4CPU設計的功能仿真調(diào)試技術 117 4.4.1為什么要用基于Trace比對的調(diào)試輔助手段 117 4.4.2基于Trace比對調(diào)試手段的盲區(qū)及其對策 119 4.4.3學會閱讀匯編程序和反匯編代碼 119 4.4.4CPU調(diào)試中要抓取的信號以及如何看這些信號 124 4.5指令相關與流水線沖突 125 4.5.1處理寄存器寫后讀數(shù)據(jù)相關引發(fā)的流水線沖突 126 4.5.2轉移計算未完成 127 4.6流水線數(shù)據(jù)的前遞設計 127 4.6.1前遞的數(shù)據(jù)通路設計 128 4.6.2前遞的流水線控制信號調(diào)整 130 4.6.3前遞引發(fā)的主頻下降 131 4.7任務與實踐 131 4.7.1實踐任務一:簡單CPU參考設計調(diào)試 132 4.7.2實踐任務二:用阻塞技術解決相關引發(fā)的沖突 132 4.7.3實踐任務三:用前遞技術解決相關引發(fā)的沖突 133 第5章在流水線中添加運算類指令 134 5.1算術邏輯運算類指令的添加 134 5.1.1ADD、ADDI和SUB指令的添加 134 5.1.2SLTI和SLTIU指令的添加 135 5.1.3ANDI、ORI和XORI指令的添加 135 5.1.4SLLV、SRLV和SRAV指令的添加 135 5.2乘除法運算類指令的添加 136 5.2.1調(diào)用Xilinx IP實現(xiàn)乘除法運算部件 136 5.2.2電路級實現(xiàn)乘法器 140 5.2.3電路級實現(xiàn)除法器 147 5.3乘除法配套數(shù)據(jù)搬運指令的添加 154 5.3.1乘法運算實現(xiàn)為單周期的情況 155 5.3.2乘法運算實現(xiàn)為多周期流水的情況 155 5.4任務與實踐 156 第6章在流水線中添加轉移指令和訪存指令 157 6.1轉移指令的添加 157 6.1.1BGEZ、BGTZ、BLEZ和BLTZ指令 158 6.1.2J指令 158 6.1.3BLTZAL和BGEZAL指令 158 6.1.4JALR指令 158 6.2訪存指令的添加 158 6.2.1LB、LBU、LH和LHU指令的添加 158 6.2.2SB和SH指令的添加 159 6.2.3非對齊訪存指令的說明 160 6.2.4LWL和LWR指令的添加 162 6.2.5SWL和SWR指令的添加 164 6.3任務與實踐 164 第7章例外和中斷的支持 166 7.1例外和中斷的基本概念 166 7.1.1例外是一套軟硬件協(xié)同處理的機制 166 7.1.2精確例外 167 7.2MIPS指令系統(tǒng)中與例外相關的功能定義 168 7.2.1CP0寄存器 168 7.2.2例外產(chǎn)生條件的判定 168 7.2.3例外入口 170 7.2.4MFC0和MTC0指令 170 7.2.5ERET指令 170 7.3流水線CPU實現(xiàn)例外和中斷的設計要點 170 7.3.1例外檢測邏輯 170 7.3.2精確例外的實現(xiàn) 172 7.3.3CP0寄存器 173 7.3.4CP0沖突 179 7.4任務與實踐 180 7.4.1實踐任務一:添加syscall例外支持 181 7.4.2實踐任務二:添加其他例外支持 181 第8章AXI總線接口設計 184 8.1類SRAM總線 184 8.1.1主方和從方 185 8.1.2類SRAM總線接口信號的定義 185 8.1.3類SRAM總線的讀寫時序 186 8.1.4類SRAM總線的約束 189 8.2類SRAM總線的設計 189 8.2.1取指設計的考慮 190 8.2.2訪存設計的考慮 195 8.3AXI總線協(xié)議 195 8.3.1AXI總線信號一覽 195 8.3.2理解AXI總線協(xié)議 197 8.3.3類SRAM總線接口信號與AXI總線接口信號的關系 202 8.4類SRAM-AXI的轉接橋設計 203 8.4.1轉接橋的頂層接口 203 8.4.2轉接橋的設計要求 204 8.4.3轉接橋的設計建議 204 8.5任務與實踐 205 8.5.1實踐任務一:添加類SRAM總線支持 205 8.5.2實踐任務二:添加AXI總線支持 208 8.5.3實踐任務三:完成AXI隨機延遲驗證 210 第9章TLB MMU設計 211 9.1TLB模塊的基礎知識 212 9.1.1TLB的虛實地址轉換 212 9.1.2TLB的軟件訪問 214 9.1.3TLB的軟硬件交互機制 215 9.2TLB模塊設計的分析 217 9.3TLB相關的CP0寄存器與指令的實現(xiàn) 219 9.4利用TLB進行虛實地址轉換及TLB例外 221 9.5任務與實踐 222 9.5.1實踐任務一:TLB模塊設計 222 9.5.2實踐任務二:添加TLB相關指令和CP0寄存器 224 9.5.3實踐任務三:添加TLB相關例外支持 225 第10章高速緩存設計 226 10.1Cache模塊的設計 227 10.1.1Cache的設計規(guī)格 227 10.1.2Cache模塊的數(shù)據(jù)通路設計 228 10.1.3Cache模塊內(nèi)部的控制邏輯設計 237 10.1.4Cache的硬件初始化問題 241 10.2將Cache模塊集成至CPU中 242 10.2.1Cache命中情況下的CPU流水線適配 242 10.2.2Cache缺失情況下的CPU流水線適配 243 10.2.3Uncache訪問的處理 243 10.3CACHE指令 245 10.3.1CACHE指令的定義 245 10.3.2CACHE指令的實現(xiàn) 247 10.4性能測試程序 247 10.4.1Dhrystone 247 10.4.2Coremark 250 10.5Cache的性能 251 10.6任務與實踐 252 10.6.1實踐任務一:Cache模塊設計 252 10.6.2實踐任務二:在CPU中集成ICache 254 10.6.3實踐任務三:在CPU中集成DCache 255 10.6.4實踐任務四:在CPU中添加CACHE指令 256 第11章進階設計 258 11.1運行Linux內(nèi)核 258 11.1.1復雜SoC搭建 259 11.1.2CPU的進一步完善 259 11.1.3調(diào)試建議 260 11.2提升主頻的常用方法 261 11.2.1平衡各級流水線的延遲 261 11.2.2優(yōu)化大概率事件的處理邏輯 261 11.2.3用面積和功耗換時序 262 11.2.4進一步切分流水線 262 11.3靜態(tài)雙發(fā)射流水線的實現(xiàn) 262 11.4動態(tài)調(diào)度機制的實現(xiàn) 263 11.4.1一個雙發(fā)射動態(tài)調(diào)度流水線的設計實例 263 11.4.2動態(tài)調(diào)度中常見電路結構的RTL實現(xiàn) 266 11.5硬件轉移預測技術 266 11.5.1硬件轉移預測的流水線設計框架 267 11.5.2一個輕量級轉移預測器的設計規(guī)格 268 11.6訪存優(yōu)化技術 269 11.6.1store buffer 269 11.6.2Non-blocking Cache 270 11.6.3訪存亂序執(zhí)行 271 11.6.4多級Cache 271 11.6.5Cache預取 272 11.7多核處理器的實現(xiàn) 272 11.7.1多核互聯(lián)結構 273 11.7.2多核編號 273 11.7.3核間中斷 273 11.7.4多核情況下的存儲一致性 274 11.7.5LL-SC指令對的訪存原子性 282 附錄A龍芯CPU設計與體系結構教學實驗系統(tǒng) 285 附錄BVivado的安裝 288 附錄C簡單MIPS指令系統(tǒng)規(guī)范 301 附錄DVivado使用進階 345
你還可能感興趣
我要評論
|