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