从零开始设计CPU
CPU,中文全稱為中央處理單元,簡稱處理器,是現代電子計算機的核心器件。如果你想了解一臺計算機是如何構建并工作的,那么深入了解CPU的設計非常有用。不過,這個美好的愿望是否會遭遇“骨感”的現實呢?畢竟一談及CPU,大家馬上想到的是英特爾(Intel)、超微半導體(AMD)、蘋果(Apple)、安謀(ARM)、高通(Qualcomm)這些國際知名公司生產的產品,進而認為CPU設計是一件遙不可及的事情,普通學習者要想掌握它簡直就是天方夜譚。
那么CPU設計到底難不難呢?實話說,要做出具有世界一流水平的產品確實不容易。別看CPU個頭不大,它卻是一個復雜度極高的系統。設計CPU挑戰的是一個團隊進行復雜系統工程研發的能力。不過,從20世紀60年代第一款CPU問世至今,CPU設計所涉及的基本技術已經很成熟了。同時,自動化設計工具的水平也有了大幅度提升。普通學習者想在CPU設計領域初窺堂奧,不再是無法實現的夢想。
本書作者在給新入行的工程師進行培訓以及給高校學生授課的過程中,得到的反饋卻并不樂觀。對于大多數新手來說,設計一個入門級的CPU還是很有難度的。結合我們在研發工作中的成長經歷,以及在培訓和教學過程中獲得的反饋,我們認為最大的難點在于設計一個CPU需要綜合掌握多方面的知識,而初學者往往在“綜合”這個環節遇到了困難。毫不夸張地說,對于設計一個入門級CPU所需要的各方面知識,我們都能找出很多優秀的教材、講義、論文、代碼。如果僅僅把這些資料交給一個初學者,讓他通過自學這些資料來設計CPU,那么能把CPU設計出來的只有少數“悟性高”的人。我們都知道,一個國家要想提高某項體育運動的水平,關鍵的因素是從事該項運動的人數足夠多。同理,要想在信息技術的核心領域做到世界一流,沒有一大批“懂行”的技術開發人員是很難實現的。面對當前急需芯片開發人才的形勢,要想在短時間內培養出大量行業急需的高素質人才,僅僅指望學習者自身“悟性高”是行不通的,需要找到行之有效的學習和訓練方法。
本書作者所在的龍芯團隊自主研發CPU產品近20年,在CPU設計方面積累了豐富的實戰經驗。在本書中,我們將結合自身的研發實踐,盡可能深入淺出地介紹如何從零開始一步步設計出一個入門級的CPU,以及在這個過程中應該掌握哪些知識、遵守哪些設計原則、規避哪些設計風險、使用哪些開發技巧。我們希望這些從工程實踐中總結的經驗能作為高校課程教學中知識講授環節的有益補充,幫助更多初學者更快、更扎實地掌握CPU設計的知識,具備CPU設計能力。
本書的內容安排
本書分為三個部分。
第1~3章為第一部分,介紹業界進行CPU研發的過程以及硬件/云端平臺、FPGA設計、Verilog等CPU設計中必要的基礎知識。
第4~10章為第二部分。
在第二部分,我們從設計一個簡單的單周期CPU開始,逐步引入流水線設計,添加指令,增加例外和中斷的支持,并完成AXI總線接口、TLB MMU和高速緩存(Cache)的設計與實現,最終完成一個入門級CPU的設計。這樣一個處理器核已經不再是用來玩“過家家”游戲的玩具,而是一個能夠滿足絕大多數實際的嵌入式應用場景需求、可以運行教學用的操作系統的真實產品。
第11章為第三部分,在這里,我們會對一些進階設計內容給出建議,例如會介紹如何在第二部分完成的產品基礎上添加少量的指令和功能,再在CPU上運行Linux內核。
各章的內容簡要介紹如下。
第1章介紹CPU芯片產品的研發過程,使讀者對CPU產品開發的全過程有初步的認識和了解,為后續各章的學習奠定基礎。
第2章介紹硬件實驗平臺及FPGA設計流程,包括“龍芯CPU設計與體系結構教學實驗系統”硬件實驗平臺的介紹,以及FPGA的一般設計流程和基于Vivado工具的FPGA設計流程。
第3章介紹數字邏輯電路設計。這一章會結合CPU的實際設計開發工作,對如何使用Verilog代碼進行數字邏輯電路設計給出建議,并給出CPU設計中常用的數字邏輯電路的可綜合Verilog描述。此外,這一章還會介紹數字邏輯電路功能仿真中常見的錯誤及其調試方法。對于缺少電路仿真調試經驗的初學者來說,這部分內容具有很好的指導作用。
第4章介紹簡單流水線CPU設計。這一章將從一個支持19條指令的單周期CPU設計開始,先討論如何將其改造成不考慮相關沖突的流水線,然后考慮用阻塞解決相關沖突,最后引入數據前遞設計。在介紹設計方法的同時,這一章還對書中所采用的實驗開發環境進行介紹,并講解相關的仿真調試技術。
第5章介紹如何在流水線CPU中添加運算類指令。主要內容包括如何在第4章完成的簡單流水線CPU基礎之上添加算術邏輯運算類指令、乘除法運算類指令,以及乘除法配套的數據搬運指令。
第6章介紹如何在流水線CPU中添加轉移指令和訪存指令。主要內容包括如何在第5章完成的CPU基礎之上添加條件分支、間接跳轉和Link類轉移三類轉移指令,以及添加對齊與非對齊訪存指令。
第7章介紹例外和中斷。這一章首先對例外和中斷的基本概念,以及MIPS指令系統中的例外和中斷的定義進行簡要的梳理,然后介紹如何在第6章完成的CPU基礎之上添加對于例外和中斷的支持。CPU有了這兩部分的支持之后,就可以運行一些簡單的嵌入式操作系統了。
第8章介紹AXI總線接口設計。這一章首先對完成CPU設計所需要的AXI總線協議的相關內容加以回顧,然后通過實現類SRAM總線接口、實現類SRAM-AXI轉接橋、集成類SRAM-AXI轉接橋三個階段性任務來完成CPU中AXI總線接口的添加。
第9章介紹TLB MMU的設計。這一章首先對TLB相關的知識點進行梳理,然后通過TLB模塊的設計實現、TLB相關CP0寄存器與指令的實現、將TLB模塊集成到流水線中完成虛實地址轉換功能并支持TLB例外這三個階段性任務來完成整個TLB MMU的設計。
第10章介紹高速緩存(Cache)設計。這一章只介紹最簡單的Cache設計,其設計任務同樣被分解成Cache模塊設計、Cache模塊集成、CACHE指令支持三個循序漸進的階段性任務。
第11章就一些進階設計問題給出我們的建議,主要涉及啟動內核需要補充哪些設計、如何進一步提升主頻、如何進行超標量設計、如何設計動態調度機制、如何設計轉移預測器、如何優化訪存性能、如何設計動態調度機制以及如何添加多核支持。
本書的附錄分別對本書案例相關的開發板、Vivado的安裝與進階使用、MIPS指令系統規范、在線調試等內容進行了補充介紹。
可以看到,本書主體內容是圍繞著一系列進階任務展開的。在第二部分的每一章中,都會給出有針對性的任務,同時給出與之對應的知識點與設計建議。完成本書各章“任務與實踐”部分所需資源可登錄華章網站(www.hzbook.com)下載。我們希望讀者在時間和精力允許的情況下,先嘗試根據自己的想法完成設計任務,有了自己的深入思考和親身實踐后,再來看書中給出的講解,相信會有不一樣的體會,正所謂“不憤不啟,不悱不發”。之所以推薦這種比較“虐”自己的學習方式,源于作者在長期的研發工作中得到的一個感悟:好的工程師是bug“喂”出來的。對于CPU設計與開發這種工程性、實踐性極強的工作來說,眼觀千遍不如手過一遍。前輩們千叮嚀、萬囑咐不要犯的錯,非要自己錯過一次才能刻骨銘心;教科書上、論文中已經寫得清清楚楚的設計思路,只有自己在設計的路上碰壁無數次之后才會有如獲至寶的欣喜。要想真正進入CPU設計的大門,僅僅靠坐在圖書館里看書幾十個小時是遠遠不夠的,它需要走路、吃飯甚至是睡覺的時候都在思考如何設計的那種“為伊消得人憔悴”,更需要通宵達旦調試的那份執著與堅持。
直播預告:
4月29日晚20:00—21:00本書作者龍芯中科技術股份有限公司首席工程師汪文祥老師講解《CPU設計實戰》,帶你從零開始設計自己的CPU,并與北京航空航天大學教授高小鵬老師深度對話CPU的未來與發展,敬請關注~
歡迎加入本書讀者群交流
第一時間獲取直播資訊、優惠活動等信息!
想獲取這本書籍的同學,在評論區留言,留言點贊前5名獲取紙質書籍一本!2021-4-30號20:00截止
推薦閱讀:
專輯|Linux文章匯總
專輯|程序人生
專輯|C語言
我的知識小密圈
關注公眾號,后臺回復「1024」獲取學習資料網盤鏈接。
歡迎點贊,關注,轉發,在看,您的每一次鼓勵,我都將銘記于心~
點擊閱讀原文查看專題鏈接:
總結
- 上一篇: 计算机开机提示dll,电脑开机提示找不到
- 下一篇: SaaSpace:10种最佳免费密码管理