从零开始设计CPU
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)這些國(guó)際知名公司生產(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è)國(guó)家要想提高某項(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)持。
直播預(yù)告:
4月29日晚20:00—21:00本書作者龍芯中科技術(shù)股份有限公司首席工程師汪文祥老師講解《CPU設(shè)計(jì)實(shí)戰(zhàn)》,帶你從零開始設(shè)計(jì)自己的CPU,并與北京航空航天大學(xué)教授高小鵬老師深度對(duì)話CPU的未來與發(fā)展,敬請(qǐng)關(guān)注~
歡迎加入本書讀者群交流
第一時(shí)間獲取直播資訊、優(yōu)惠活動(dòng)等信息!
想獲取這本書籍的同學(xué),在評(píng)論區(qū)留言,留言點(diǎn)贊前5名獲取紙質(zhì)書籍一本!2021-4-30號(hào)20:00截止
推薦閱讀:
專輯|Linux文章匯總
專輯|程序人生
專輯|C語言
我的知識(shí)小密圈
關(guān)注公眾號(hào),后臺(tái)回復(fù)「1024」獲取學(xué)習(xí)資料網(wǎng)盤鏈接。
歡迎點(diǎn)贊,關(guān)注,轉(zhuǎn)發(fā),在看,您的每一次鼓勵(lì),我都將銘記于心~
點(diǎn)擊閱讀原文查看專題鏈接:
總結(jié)
- 上一篇: 计算机开机提示dll,电脑开机提示找不到
- 下一篇: python2.7详细安装教程_pyth