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