1. 程式人生 > >我的中國“芯”,手把手教你設計CPU

我的中國“芯”,手把手教你設計CPU

​點選關注 非同步圖書,置頂公眾號

每天與你分享 IT好書 技術乾貨 職場知識​

​參與文末話題討論,每日贈送非同步圖書。

——非同步小編

永恆的熱點——CPU                                                                                                                                                                                                               燈,等燈等燈……  —— Intel

如果要評選過去十數年間經典的科技廣告音樂,想必Intel的廣告音樂“燈,等燈等燈……”必然會榜上有名。而熟悉的藍色貼標“Intel Inside”,也必是辨識度很高的廣告圖示。

中央處理單元(Center Processor Unit,CPU),雖然早已被大眾所熟知,但在相當長的時間內,它一直是高階大氣的代名詞。你是否有著相同的印象,在早期的電腦雜誌上,必然有著濃墨重彩的篇幅與專欄,詳細介紹Intel或AMD公司推出的CPU晶片的詳細引數,抑或MIPS與ARM的優劣之處,甚至是令人津津樂道的各家CPU的小道訊息與幕後橋段。

而CPU代表的高階技術,也一直籠罩在神祕的面紗之下。CPU設計部門總能以其光環吸引著眾多的應聘者競爭角逐。不無誇張地說,就像每個男孩心中都有一個軍人夢一樣,似乎每一個晶片設計人員都有一個CPU夢。

今天小編介紹2本書《手把手教你設計CPU》以及《自制程式語言》,並引出作者胡振波老師對於自制CPU的一些思考。希望對於對這個領域感興趣的讀者提供一些指導。

​(2018年5月出版)

​(2018年5月出版)

歷 史

晶片,是整個電子資訊產業的基石。目前,全球半導體市場規模達3200億美元,全球54%的晶片都出口到了中國,但國產晶片的市場份額只佔10%。中國晶片產業每年進口需要消耗2000多億美元外匯,超過了石油和大宗商品,在進口商品中佔有相當大的比重。 

CPU作為晶片的“心臟”,可謂“芯中之心”,國內的產業實力在此方面一直比較薄弱。CPU實現國產自主化對我國的發展至關重要,但是CPU的主流指令集架構(譬如x86和ARM)一直為國外公司所壟斷,國內公司需要支付高昂的專利費用且受制於人。CPU作為一種特殊的晶片,其要求指令集架構具有普世的通用性且能夠共享生態系統,因此囿於一國範圍內發明一套封閉的指令集並不具備實用性,必須走與世界主流架構接軌的道路。在這種背景下,開放的RISC-V架構給中國CPU晶片產業的發展帶來了巨大的戰略機遇,有希望徹底實現CPU的國產自主化和架構主流化。

目前,我國正處於大力發展晶片設計行業的關鍵時期,實現中華民族偉大復興的重任需要廣大科研和工程工作者孜孜不倦地努力與拼搏,需要很多像作者這樣求真務實的技術中堅力量來擔負起國產晶片振興的重任。而國內CPU領域人才的奇缺是長期制約行業發展的主要因素,《手把手教你設計CPU》作者作為一名長期工作在一線的資深CPU設計專家,將其經驗撰寫成書,資料翔實,文字生動。配合作者所在公司開發的蜂鳥E200系列處理器核作為例項,非常適合用於教學領域以及愛好者學習,對於普及CPU的設計技術具有十分正面的意義。

新興的RISC-V架構在全球範圍內已經掀起了一場熱潮,在國內也引起了廣泛的關注,但是由於沒有很好的中文普及書籍,很多人對於RISC-V仍然是“只聞其聲,未見其形”。作者作為國內第一批接觸RISC-V架構,並最早研發成功RISC-V處理器的技術專家,在工作之餘將其自研的處理器核開源,並著書詳細解讀其實現細節,體現了作者極高的專業水準和推進國產CPU產業發展的強烈情懷。

ISA請扛起這口鍋——為什麼國產CPU尚未足夠成功

眾所周知,晶片是我國資訊產業發展的核心領域,而CPU則代表了晶片中的核心技術。在此方面,我國與發達國家相比有著明顯的差距。雖然經過多年的努力,技術差距已經有了顯著的縮小,但是在民用商業領域內,仍然沒有看到太多國產CPU的身影。是什麼原因造成國產商業CPU尚未足夠成功這一現狀呢?接下來,我們便細數一下國內自主開發CPU的公司與現狀,以及它們選擇的指令集流派。通過逐一分析其過去與現狀,相信能夠讓讀者得到答案。

MIPS系——龍芯和君正

新興的RISC-V架構在全球範圍內已經掀起了一場熱潮,在國內也引起了廣泛的關注,但是由於沒有很好的中文普及書籍,很多人對於RISC-V仍然是“只聞其聲,未見其形”。作者作為國內第一批接觸RISC-V架構,並最早研發成功RISC-V處理器的技術專家,在工作之餘將其自研的處理器核開源,並著書詳細解讀其實現細節,體現了作者極高的專業水準和推進國產CPU產業發展的強烈情懷。

1.龍芯

龍芯CPU由中國科學院計算技術所龍芯課題組研製,由中國科學院計算技術所授權的北京神州龍芯積體電路設計公司研發。以下是龍芯CPU晶片的相關簡介。

  •  龍芯1號的頻率為266MHz,最早在2002年開始使用,如圖1-3所示。
  • 龍芯2號的頻率最高為1GHz。
  •  龍芯3A系列是國產商用4核處理器。最新龍芯3A3000基於中芯28nm FDSOI工藝,設計為4核64位,主頻為1.5GHz,功耗僅為30W,非常適合筆記本平臺。
  •  龍芯3B系列是國產商用8核處理器,主頻超過1GHz,支援向量運算加速,峰值計算能力達到128GFLOPS,具有很高的效能功耗比。龍芯3B系列主要用於高效能運算機、高效能伺服器、數字訊號處理等領域。

2.君正

國內的MIPS系還有另外一家公司——北京君正。君正和龍芯同屬於MIPS陣營,與龍芯著力於桌面PC處理器不同,北京君正是國內較早專注於可穿戴、物聯網領域的本土IC設計公司之一。由於嵌入式晶片的軟體一般按需求定製。這導致在智慧可穿戴市場,相當一部分可穿戴產品和應用軟體具有專用性,軟體生態鏈相對較短,加上應用需求的多樣化,因此不能用一套通用方案來滿足所有人的要求,所以在這個領域沒有某個廠商可以實現壟斷。因此,在智慧穿戴市場不容易出現PC和移動手機市場那樣被x86與ARM架構壟斷的情況。

智慧穿戴晶片和物聯網晶片對效能要求不高,大部分應用場景更關注低功耗、廉價和尺寸等因素,君正的產品完全滿足效能要求,x86處理器不可能應用於該領域,ARM陣營IC設計公司受制於相對較高的授權費,在晶片產量較小的情況下,並不具備價格上的競爭力。君正擁有十多年的晶片設計經驗和技術積累,其最大的特點就是具有較高的效能功耗比。國內第一批上市的智慧手錶包括果殼的第一代智慧手錶、土曼一代、土曼二代智慧手錶等都採用了君正的方案。

x86系——北大眾志、兆芯和海光

1.北大眾志

北京北大眾志微系統科技有限責任公司成立於2002年11月,是國家積體電路設計行業的重要骨幹企業。2005年,AMD與中國政府達成了協議,科技部指定北大微電子中心接收AMD Geode-2處理器的技術授權,AMD的處理器無疑是x86架構,中國因此獲得了x86技術。不過Geode處理器屬於AMD嵌入式處理器,因此AMD授權給北大的x86技術屬於嵌入式架構。

2.兆芯

另外一家使用x86架構的國內企業——兆芯,也許被更多的人所熟知。眾所周知,核心的x86架構是 Intel和AMD公司的核心技術,美國政府也會嚴格控制其技術的授權。不過,除了Intel和AMD,另外一家中國臺灣公司威盛(VIA)也曾經擁有x86架構授權。據稱,如圖1-8所示,兆芯自主研發的ZX-C處理器於2015年4月量產,28nm工藝,4核處理器,主頻可達2.0GHz,並且支援國密演算法加密。2017年兆芯宣佈其最新一代ZX-D系列4核和8核通用處理器已經成功流片,並透露將在2018年推出16nm的ZX-E 8核CPU。

3.海光

除了上海兆芯,還有一家誕生不久的新銳公司——天津海光。2016年,AMD宣佈與中國天津海光投資公司達成了協議,將x86技術授權給海光公司,獲得授權費,並且雙方還會成立合資公司,授權其生產伺服器處理器。據稱,為了開啟中國高效能伺服器市場,AMD這次授權給中國公司的x86很可能是最尖端的x86技術。對於海光的表現,也值得我們拭目以待。

Power系——中晟巨集芯

藍色巨人IBM的Power架構一直是高效能的代言。IBM於2013年聯合NVIDIA等公司成立OpenPower開放聯盟,其他公司也可以獲得Power架構授權。此後還推動成立了中國POWER技術產業生態聯盟,與多家中國公司簽署了授權協議,中晟巨集芯就是其中的一家。中晟巨集芯成立於2013年,相信巨集芯能用若干年的時間實現技術的消化吸收和推陳出新。

Alpha系——申威

申威處理器或申威CPU,簡稱“SW處理器”。

申威對自主的Alpha架構在不斷深化升級,在雙核Alpha基礎上拓展了多核架構和SIMD等特色擴充套件指令集,主要面向高效能運算、伺服器領域,在2016年國際超算大會評比中,基於申威26010處理器的“神威太湖之光”超級計算機系統(如圖1-9所示)首次亮相併奪冠,其峰值效能達每秒12.5×108億次浮點運算,成為世界首臺執行速度超109億次的超級計算機。

ARM系——飛騰、華為海思、展訊和華芯通

為了更好地理解本節的內容,有必要先對ARM的授權模式進行介紹。簡而言之,ARM公司的主要授權模式可以分為兩種。

  1.  授權“ARM處理器IP”給其他的晶片生產商(合作伙伴),後者直接使用ARM處理器IP設計SoC晶片。
  2. 授權“ARM架構”給其他的晶片生產商(合作伙伴),後者基於ARM架構自研其處理器核,然後使用自研處理器核設計SoC晶片。

1.飛騰

飛騰公司是中國國防科技大學高效能處理器研究團隊建立的企業,國防科大多年來在CPU領域的耕耘積累了雄厚的技術實力。2016年天津飛騰公佈了最新產品FT2000,它最早亮相於2015年的HotChips大會,代號“火星”,定位於高效能伺服器、行業業務主機等。FT2000採用ARMv8指令集,但是使用自研核心,不同於市面上ARMv8的Cortex-A53\A57\A72(直接購買於ARM公司的核心)。

FT2000之所以引人注目還因為它在效能方面,包括高達64個FTC661處理器核,其公佈的Spec 2006測試中,成績為整數672、浮點585,足以和Xeon E5-2699v3相媲美。這也是國產伺服器晶片第一次在效能上追平Intel,儲存器控制晶片總聚合頻寬為204.8GB/s,超過目前的E5V3和E7V3,接近IBM POWER8(230GB/s)。跑分與Intel的Xeon E5-2699v3相媲美意味著飛騰2000對於很多商業應用來說已經完全夠用了,只要軟體生態跟得上,完全可以在商業市場上取代Intel的某些產品。

2.華為海思

華為海思目前是我國技術最強大的晶片開發商之一。華為的麒麟晶片在效能上與高通、三星這些領先的晶片企業處於一個水平。同時華為目前也是國內四大伺服器提供商之一,華為、聯想、浪潮等國產伺服器企業佔有中國伺服器市場的份額已經超過65%。華為在幾年前便已經購買了ARM指令集架構授權,開始研發自有的處理器核,主攻伺服器市場。

在“十二五”科技創新成就展上,華為展出了其第一臺ARM平臺伺服器“泰山”,配備自主研發ARM架構64位處理器“Hi1612”,採用臺積電16nm工藝,擁有多達16個核心,相容ARMv8-A指令集。憑藉華為強大的研發實力與市場運作能力,相信一定會有不俗的表現。

3.展訊

除華為之外,展訊是另一家國內手機晶片的翹楚。2016年展訊的晶片出貨達到67000萬套,2017年6月宣佈成功研發其自主的ARM架構處理器,展訊宣稱在SC9850 4核(Cortex-A7)晶片同樣大的面積上實現了6核的設計,功耗和效能都可以按照自己的需求調配,標誌著展訊成為了除蘋果、三星兩家智慧手機廠商之外(三星和蘋果的自主晶片主要都是自用),繼高通之後,第二家擁有自主ARM CPU關鍵技術的手機晶片廠商。

4.華芯通

2016年,高通與中國貴州政府合資在華成立了一家晶片公司——華芯通半導體,旨在專門為中國市場設計與開發伺服器專用晶片的公司。華芯通已獲ARM v8-A架構授權,並表示中國成為全球第二大資料中心市場,該授權將幫助華芯通半導體在快速擴張的中國伺服器市場推出先進伺服器晶片組技術,幫助中國企業在本土市場提供基於ARM的伺服器技術,從而推動高效伺服器解決方案的大規模部署。

背鍋俠ISA

從上述幾個章節中,我們已經瞭解了國內CPU設計的英雄榜。但是如前文所述,目前在民用商業領域內,仍然沒有看到太多國產CPU的身影。可以說,國產處理器在民用商業領域至今尚未足夠成功的主要原因在於ISA,這口鍋ISA必背無疑。

論述了指令集架構(ISA)對於CPU的重要性,那麼對於一款CPU而言,絕對的硬體技術水平不是最重要的。

目前商業主流的指令集架構在不同的領域已經各自出現了明顯的霸主格局。

  •  x86架構統治著桌面PC與伺服器領域。
  • ARM架構統治著移動手持領域,同時對桌面PC和伺服器領域全面進軍。
  • ARM在嵌入式領域佔據絕對優勢。

因此作者之前一直認為,只有依附於x86與ARM陣營的商業公司,才能夠真正地實現全面的商用化。相信這也是為什麼在近幾年來國內CPU設計的英雄榜上湧現出來的大多為x86或者ARM系的原因。

但是,國產自主對我國的國計民生又至關重要,追求國產自主安全可控是我國在戰略上必須堅持的方向。從這個角度上來看,選擇x86或者ARM架構終究也有其侷限性,分別論述如下。

1.x86架構

· 由於Intel與AMD本身是晶片公司而不是智慧財產權(IP)公司,因此x86架構是其生命線,假設其他得到授權的晶片公司使用x86架構生產的晶片對Intel和AMD造成了實質威脅時,Intel與AMD完全可以拿起專利的大棒停止授權。

· x86架構的授權費用極為高昂,遠非普通公司或者組織能夠染指。

2.ARM架構

· ARM架構的局面會樂觀很多,因為ARM架構雖然也是屬於ARM公司且受專利保護的架構,但是ARM公司的商業模式是以開放共贏為基本原則。ARM公司是ARM生態的主導者和核心規則的制定者,通過基礎架構授權、IP核授權等方式獲得經濟收益。而生態系統中大量的上下游軟硬體企業則遵循ARM統一制定的標準規範,對接眾多客戶需求而實現經濟利益的獲取。

· 國內基於ARM生態的CPU產業已有較好基礎,華為海思、展訊、聯芯和飛騰等眾多企業均已累積多年的ARM晶片研發經驗,在移動終端領域我國晶片設計技術已與國際主流水平同步,國外的巨頭高通、三星和谷歌等也屬於ARM生態系統陣營的成員。因此,從全球範圍來看,國內外的晶片公司能夠在開放共贏的生態下進行公平的競爭。基於上述原因,國內CPU英雄榜上使用ARM架構的CPU公司,其成就更加令人可期。

· 儘管如此,ARM架構畢竟屬於ARM公司,一方面需要為ARM公司支付極其高昂的授權費(一次數千萬美金),另一方面被軟銀收購後ARM現在屬於一家日本公司。因此,從絕對的自主可控的角度來看,受制於人那是在所難免的。

所謂“成也蕭何,敗也蕭何”,讀到此處,讀者可能要問,難道就沒有一種ISA具備如下幾個特點嗎?

(1)它開源共享,不屬於某一家商業公司私有,因此也就不會有受制於人與自主可控的隱憂,更加不需要向商業公司支付高昂的授權費。

(2)它以開放共贏為基本原則,有一個統一的非盈利組織作為主導者和核心規則的制定者,任何公司和個人都可以永久免費地使用其架構。

  • 生態系統中大量的上下游軟硬體企業應遵循該組織統一制定的標準規範,對接眾多客戶需求而實現經濟利益的獲取。
  •  同樣從全球範圍來看,國內國外的晶片公司能夠在此開放共贏的生態下進行公平的競爭。

相信很多人都與作者一樣,在很長的一段時間內,非常期待有這樣一種ISA的出現,業界甚至出現過希望由國家主導指定一種國家標準ISA,從而統一國內CPU各ISA派系的聲音。然而,國家標準ISA這種被侷限在一國範圍內的技術在當今全球化的趨勢下,必然是格格不入且不可能成功的。於是所有人都認為不可能出現這樣一種ISA了,作者作為一名CPU設計的老兵,也不得不用一首詩來表達一下彼時的心情:“死去元知萬事空,但悲不見九州同。王師北定中原日,家祭無忘告乃翁”。

然而在2016年,有一位叫做RISC-V的新生突然自帶光環登場。它完全符合上述提到的兩個條件,屬於全人類的免費開放架構,無任何專利的桎梏,眾多國際知名大公司均加入其中,將以開放共贏的生態下進行公平的競爭。作者隱隱感到,如果這個ISA真能夠發展起來,這似乎可能是國產CPU崛起的真正機會。剛才我們提到曾有人建議制定一種國家標準的指令集架構,而當RISC-V誕生不久,我們的鄰國印度迅速地採用了RISC-V作為其國家標準的指令集,推薦其國內的大學和研究機構均採用RISC-V架構,並且已經制定規劃且投入專項資金用於開發幾個不同系列的RISC-V處理器。

有道是“山窮水盡疑無路,柳暗花明又一村”,有關新生的RISC-V架構。

人生已是如此艱難,你又何必拆穿——CPU從業者的無奈

對於每一個行業的普通從業者而言,都希望所在行業能夠蓬勃發展、欣欣向榮,能夠有大量的商業公司參與併產生大量工作崗位的需求。倘使所在的行業或是日暮西山,或是走向寡頭化成為一潭死水,自然也就無法誕生大量的工作需求,那普通的從業者們可能就只有“尋尋覓覓,冷冷清清,悽悽慘慘慼戚”,或者“門前冷落鞍馬稀,老大嫁作商人婦”了。

處理器設計便是一個典型的例子。雖然處理器設計是一門開放的學科,其所需的技術均已成熟,很多的工程師與從業人員都已經掌握,也具備開發的處理器的能力。但是:

· 由於處理器架構長期以來主要由以Intel(x86架構)與ARM(ARM架構)為代表的商業巨頭公司所掌控,及其軟體生態環境衍生出的寡頭排他效應,成為了普通公司與個人無法逾越的天塹。

· 由於寡頭的排他效應,眾多的處理器體系結構走向消亡,國產的商用CPU也無法足夠成功,從而造成了CPU設計這項工作變成了極少數商業公司的“堂前燕”,普通平民“只可遠觀,而不可褻玩焉”,國內長期沒有形成有足夠影響力的相關產業與商業公司。

綜上,作者作為曾經在國際一流公司任職的CPU高階設計工程師,竟一度在換工作時面臨擇業無門的窘境,更扼腕嘆息眾多同仁被迫轉行的情形。正可謂“曲高者和寡,大音者稀聲”,CPU設計從業者,頗無奈也。讀至此,被迫轉行的同仁們可能已經老淚縱橫:“人生已是如此的艱難,你又何必拆穿啊”。

好訊息是最近幾年來國內CPU產業的情形終於發生了的改觀,由於中國的巨大市場與產業支援,國內湧現出瞭如上節中我們提到的兆芯、飛騰、華為、展訊、海光和華芯通等從事CPU設計的公司,且隨著《手把手教你設計CPU》介紹的RISC-V架構之誕生,都將催生更多的市場需求。

東邊日出西邊雨,道是無晴卻有晴——RISC-V登場

RISC-V架構主要由伯克利大學的Krste Asanovic教授、Andrew Waterman和Yunsup Lee等開發人員於2010年發明,並且得到了計算機體系結構領域的泰斗David Patterson的大力支援。伯克利大學的開發人員之所以發明一套新的指令集架構,而不是使用成熟的x86或者ARM架構,是因為這些架構經過多年的發展變得極為複雜和冗繁,並且存在著高昂的專利和架構授權問題。並且修改ARM處理器的RTL程式碼是不被支援的,而x86處理器的原始碼根本不可能獲得到。其他的開源架構(譬如SPARC、OpenRISC)均有著或多或少的問題(第2章將詳細論述)。有感於計算機體系結構和指令集架構已經過數十年的發展非常成熟,但是像伯克利大學這樣的研究機構竟然“無米下鍋”(選擇不出合適的指令集架構供其使用)。伯克利大學的教授與研發人員決定發明一種全新的、簡單且開放免費的指令集架構,於是RISC-V架構誕生了。

有關RISC-V的誕生,有興趣的讀者可以自行到網路中查閱文章《伯克利希望將RISC-V開源架構推向主流》。

RISC-V(英文讀作“risk-five”),是一種全新的指令集架構。“V”包含兩層意思,一是這是Berkeley從RISC I開始設計的第五代指令集架構;二是它代表了變化(Variation)和向量(Vectors)。

經過幾年的開發,伯克利大學為RISC-V架構開發除了完整的軟體工具鏈以及若干開源的處理器例項,得到越來越多的人的關注。2016年,RISC-V基金會(Foundation)正式成立開始運作。RISC-V基金會是一個非盈利性的組織,負責維護標準的RISC-V指令集手冊與架構文件,並推動RISC-V架構的發展。

RISC-V架構的目標如下。

  • 成為一種完全開放的指令集,可以被任何學術機構或商業組織所自由使用。
  • 成為一種真正適合硬體實現且穩定的標準指令集。

RISC-V基金會負責維護標準的RISC-V架構文件和編譯器等CPU所需的軟體工具鏈,任何組織和個人可以隨時在RISC-V基金會網站上免費下載(無需註冊)。

RISC-V的推出以及基金會的成立,受到了學術界與工業界的巨大歡迎。著名的科技行業分析公司Linley Group 將RISC-V評為“2016年最佳技術”,如圖1-12所示。

開放而免費的RISC-V架構誕生,不僅對於高校與研究機構是個好訊息;為前期資金缺乏的創業公司、或成本極其敏感的產品、或對現有軟體生態依賴不大的領域,都提供了另外一種選擇,而且得到了業界主要科技公司的擁戴,包括谷歌、惠普、Oracle和西部資料等矽谷巨頭都是RISC-V基金會的創始會員,如圖1-13所示。眾多的晶片公司已經開始使用(譬如,三星、英偉達等)或者計劃使用RISC-V開發其自有的處理器用於其產品。

RISC-V基金會組織每年舉行兩次公開的專題討論會(Workshop),以促進RISC-V陣營的交流與發展,任何組織和個人均可以從RISC-V基金會的網站上下載到每次Workshop上演示的PPT與文件。RISC-V第六次Workshop於2017年5月在中國的上海交大舉辦,如圖1-14所示,吸引了大批的中國公司和愛好者參與。

簡單就是美——RISC架構的設計哲學

RISC-V架構作為一種指令集架構,在介紹細節之前,讓我們先了解設計的哲學。所謂設計的“哲學”便是其推崇的一種策略,譬如我們熟知的日本車的設計哲學是經濟省油,美國車的設計哲學是霸氣等。RISC-V架構的設計哲學是什麼呢?是“大道至簡”。

作者最為推崇的一種設計哲學便是:簡單就是美,簡單便意味著可靠。無數的實際案例已經佐證了“簡單即意味著可靠”的真理,反之越複雜的機器則越容易出錯。一個最好的例子便是著名的AK47衝鋒槍,正是由於簡單可靠的設計哲學,使其價效比和可靠性極其出眾,成為世界上應用最廣泛的單兵武器。

在格鬥界,初學者往往容易陷入追求花式繁複技巧的泥淖,迷信於花拳繡腿。然而頂級的格鬥高手,最終使用的都是簡單、直接的招式。所謂大道至簡,在IC設計的實際工作中,作者曾見過簡潔的設計實現其安全可靠,也曾見過繁複的設計長時間無法穩定收斂。簡潔的設計往往是可靠的,在大多數的專案實踐中一次次得到檢驗。IC設計的工作性質非常特殊,其最終的產出是晶片,而一款晶片的設計和製造週期均很長,無法像軟體程式碼那樣輕易地進行升級和打補丁,每一次晶片的改版到交付都需要幾個月的週期。不僅如此,晶片的製造成本費用高昂,從幾十萬美金到成百上千萬美金不等。這些特性都決定了IC設計的試錯成本極為高昂,因此能夠有效地降低錯誤的發生就顯得非常重要。現代的晶片設計規模越來越大,複雜度也越來越高,並不是要求設計者一味地逃避使用複雜的技術,而是應該將好鋼用在刀刃上,將最複雜的設計用在最為關鍵的場景,在大多數有選擇的情況下,儘量選擇簡潔的實現方案。

作者在第一次閱讀RISC-V架構文件之時,不禁讚歎。因為RISC-V架構在其文件中不斷地明確強調其設計哲學是“大道至簡”,力圖通過架構的定義使硬體的實現足夠簡單。其簡單就是美的哲學,可以從幾個方面看出,後續小節將一一加以論述。

無病一身輕——架構的篇幅

如果對ARM的架構文件熟悉的讀者應該瞭解其篇幅。經過幾十年的發展,現在的x86與ARM架構的架構文件多達數千頁,打印出來能有半個桌子高,可真是“著作等身”。

想必x86與ARM架構在誕生之初,其篇幅也不至於像現在這般長篇累牘。之所以架構文件長達數千頁,且版本眾多,一個主要的原因是其架構發展的過程也伴隨了現代處理器架構技術的不斷髮展成熟,並且作為商用的架構,為了能夠保持架構的向後相容性,不得不保留許多過時的定義,或者在定義新的架構部分時為了能夠相容已經存在的技術部分而顯得非常的彆扭。久而久之就變成了老太婆的裹腳布——極為冗長,可以說是積重難返。

那麼現代成熟的架構是否能夠選擇重新開始,重新定義一個簡潔的架構呢?可以說是幾乎不可能。Intel也曾經在推出Itanium架構之時另起灶爐,放棄了向前相容性,最終Intel的Itanium遭遇慘敗,其中一個重要的原因便是其無法向前相容,從而無法得到使用者的接受。試想一下,如果我們買了一款具有新的處理器的計算機或者手機,之前所有的軟體都無法執行,那肯定是無法讓人接受的。

現在推出的RISC-V架構,則具備了後發優勢。由於計算機體系結構經過多年的發展已經是一個比較成熟的技術,多年來在不斷成熟的過程中暴露的問題都已經被研究透徹了,因此新的RISC-V架構能夠加以規避,並且沒有揹負向後相容的歷史包袱,可以說是無病一身輕。

目前的“RISC-V架構文件”分為“指令集文件”和“特權架構文件”。“指令集文件”的篇幅為100多頁,而“特權架構文件”的篇幅也僅為100頁左右。熟悉體系結構的工程師僅需一兩天便可將其通讀,雖然“RISC-V的架構文件”還在不斷地豐富,但是相比“x86的架構文件”與“ARM的架構文件”,RISC-V的篇幅可以說是極其短小精悍。

感興趣的讀者可以登入RISC-V基金會的網站,無需註冊便可免費下載文件,如圖1-1所示。

​  RISC-V基金會網站上的架構文件​ RISC-V基金會網站上的架構文件

能屈能伸——模組化的指令集

RISC-V架構相比其他成熟的商業架構,最大的不同在於它是一個模組化的架構。因此RISC-V架構不僅短小精悍,而且其不同的部分還能以模組化的方式組織在一起,從而試圖通過一套統一的架構滿足各種不同的應用。

這種模組化是x86與ARM架構所不具備的。以ARM的架構為例,ARM的架構分為A、R和M,共3個系列,分別針對應用作業系統(Application)、實時(Real-Time)和嵌入式(Embedded)3個領域,彼此之間並不相容。但是模組化的RISC-V架構能夠使得使用者靈活地選擇不同的模組進行組合,以滿足不同的應用場景,可以說是“老少咸宜”。例如針對小面積、低功耗的嵌入式場景,使用者可以選擇RV32IC組合的指令集,僅使用機器模式(Machine Mode);而針對高效能應用作業系統場景,則可以選擇例如RV32IMFDC的指令集,使用機器模式(Machine Mode)與使用者模式(User Mode)兩種模式。

濃縮的都是精華——指令的數量

短小精悍的架構和模組化的哲學,使得RISC-V架構的指令數目非常簡潔。基本的RISC-V指令數目僅有40多條,加上其他的模組化擴充套件指令總共幾十條指令。圖2-2是RISC-V指令集圖卡,請參見附錄A瞭解RISC-V指令集的詳細資訊。

​ RISC-V指令集圖卡​ RISC-V指令集圖卡

這本書講什麼?

《手把手教你設計CPU》以極為通俗易懂的語言對RISC-V架構進行了系統而全面地介紹,並且結合蜂鳥E200系列開源處理器核對CPU設計技術進行了深入淺出的講解,圖文並茂,生動活潑,體現了作者深厚的專業技能以及將專業知識進行通俗化表述的優秀能力。令人印象深刻的是,本書作者在對RISC-V架構進行介紹的過程中,加入了大量的背景知識解讀以及個人註解,使得枯燥的專業知識變得非常易於理解,可以說是難能可貴。這是一本凝聚了作者多年所學的精心之作,非常值得一讀,對於RISC-V架構在國內的傳播也將具有巨大的推動作用。本書作為國內不可多得的介紹RISC-V的中文書籍,相信一定會成為該領域的經典之作。

這本書目錄

第一部分  CPU與RISC-V綜述

第1章  一文讀懂CPU之三生三世 2

1.1 眼看他起高樓,眼看他宴賓客,眼看他樓塌了——CPU眾生相 3

1.1.1  ISA——CPU的靈魂 4

1.1.2  CISC與RISC 5

1.1.3  32位與64位架構 6

1.1.4  ISA眾生相 6

1.1.5  CPU的領域之分 10

1.2 ISA請扛起這口鍋——為什麼國產CPU尚未足夠成功 12

1.2.1  MIPS系——龍芯和君正 12

1.2.2  x86系——北大眾志、兆芯和海光 13

1.2.3  Power系——中晟巨集芯 13

1.2.4  Alpha系——申威 14

1.2.5  ARM系——飛騰、華為海思、展訊和華芯通 14

1.2.6  背鍋俠ISA 15

1.3 人生已是如此艱難,你又何必拆穿——CPU從業者的無奈 17

1.4 無敵是多麼寂寞——ARM統治著的世界 18

1.4.1  獨樂樂與眾樂樂——ARM公司的盈利模式 18

1.4.2  小個子有大力量——無處不在的Cortex-M系列 21

1.4.3  移動王者——Cortex-A系列在手持裝置領域的巨大成功 23

1.4.4  進擊的巨人——ARM進軍PC與伺服器領域的雄心 25

1.5 東邊日出西邊雨,道是無晴卻有晴——RISC-V登場 25

1.6 原來你是這樣的“薯片”——ARM的免費計劃 28

1.7 舊時王謝堂前燕,飛入尋常百姓家——你也可以設計自己的處理器 28

第2章  大道至簡——RISC-V架構之魂 29

2.1 簡單就是美——RISC-V架構的設計

哲學 30

2.1.1  無病一身輕——架構的篇幅 30

2.1.2  能屈能伸——模組化的

指令集 32

2.1.3  濃縮的都是精華——指令的數量 32

2.2 RISC-V指令集架構簡介 33

2.2.1  模組化的指令子集 33

2.2.2  可配置的通用暫存器組 34

2.2.3  規整的指令編碼 34

2.2.4  簡潔的儲存器訪問指令 34

2.2.5  高效的分支跳轉指令 35

2.2.6  簡潔的子程式呼叫 36

2.2.7  無條件碼執行 37

2.2.8  無分支延遲槽 37

2.2.9  零開銷硬體迴圈 38

2.2.10  簡潔的運算指令 38

2.2.11  優雅的壓縮指令子集 39

2.2.12  特權模式 40

2.2.13  CSR暫存器 40

2.2.14  中斷和異常 40

2.2.15  向量指令子集 40

2.2.16  自定製指令擴充套件 41

2.2.17  總結與比較 41

2.3 RISC-V軟體工具鏈 42

2.4 RISC-V和其他開放架構有何不同 44

2.4.1  平民英雄——OpenRISC 44

2.4.2  豪門顯貴——SPARC 44

2.4.3  名校優生——RISC-V 45

第3章  亂花漸欲迷人眼——盤點RISC-V商業版本與開源版本 46

3.1 各商業與開源版本綜述 47

3.1.1  Rocket Core(開源) 47

3.1.2  BOOM Core(開源) 49

3.1.3  Freedom SoC(開源) 50

3.1.4  LowRISC SoC(開源) 50

3.1.5  PULPino Core and SoC(開源) 50

3.1.6  PicoRV32 Core(開源) 51

3.1.7  SCR1 Core(開源) 51

3.1.8  ORCA Core(開源) 51

3.1.9  Andes Core(商業IP) 52

3.1.10  Microsemi Core(商業IP) 52

3.1.11  Codasip Core(商業IP) 53

3.1.12  蜂鳥E200 Core & SoC(開源) 53

3.2 總結 53

第4章  中國第一個開源RISC-V——蜂鳥E200系列超低功耗Core & SoC 54

4.1 與眾不同的蜂鳥E200處理器 55

4.2 蜂鳥E200簡介——蜂鳥雖小,

五臟俱全 56

4.3 蜂鳥E200型號系列 57

4.4 蜂鳥E200效能指標 58

4.5 蜂鳥E200配套SoC 59

4.6 蜂鳥E200配置選項 60

第二部分  手把手教你使用

Verilog設計CPU

第5章  先見森林,後觀樹木——蜂鳥E200設計總覽和頂層介紹 65

5.1 處理器硬體設計概述 66

5.1.1  架構和微架構 66

5.1.2  CPU、處理器、Core和

處理器核 66

5.1.3  處理器設計和驗證的特點 66

5.2 蜂鳥E200處理器核設計哲學 67

5.3 蜂鳥E200處理器核RTL程式碼風格

介紹 68

5.3.1  使用標準DFF模組例化生成

暫存器 68

5.3.2  推薦使用assign語法替代if-else和case語法 70

5.3.3  其他若干注意事項 71

5.3.4  小結 72

5.4 蜂鳥E200模組層次劃分 72

5.5 蜂鳥E200處理器核原始碼 73

5.6 蜂鳥E200處理器核配置選項 73

5.7 蜂鳥E200處理器核支援的RISC-V

指令子集 74

5.8 蜂鳥E200處理器流水線結構 74

5.9 蜂鳥E200處理器核頂層介面介紹 74

5.10 總結 77

第6章  流水線不是流水賬——蜂鳥E200

               流水線介紹 78

6.1 處理器流水線概述 79

6.1.1  從經典的五級流水線說起 79

6.1.2  可否不要流水線——流水線和狀態機的關係 81

6.1.3  深處種菱淺種稻,不深不淺種荷花——流水線的深度 81

6.1.4  向上生長——越來越深的

流水線 82

6.1.5  向下生長——越來越淺的

流水線 83

6.1.6  總結 83

6.2 處理器流水線中的亂序 83

6.3 處理器流水線中的反壓 84

6.4 處理器流水線中的衝突 84

6.4.1  流水線中的資源衝突 84

6.4.2  流水線中的資料衝突 85

6.5 蜂鳥E200處理器的流水線 86

6.5.1  流水線總體結構 86

6.5.2  流水線中的衝突 87

6.6 總結 87

第7章  萬事開頭難嗎——一切從取指令 開始 88

7.1 取指概述 89

7.1.1  取指特點 89

7.1.2  如何快速取指 90

7.1.3  如何處理非對齊指令 91

7.1.4  如何處理分支指令 92

7.2 RISC-V架構特點對於取指的簡化 97

7.2.1  規整的指令編碼格式 97

7.2.2  指令長度指示碼放於低位 97

7.2.3  簡單的分支跳轉指令 98

7.2.4  沒有分支延遲槽指令 100

7.2.5  提供明確的靜態分支預測依據 100

7.2.6  提供明確的RAS依據 101

7.3 蜂鳥E200處理器的取指實現 101

7.3.1  IFU總體設計思路 102

7.3.2  Mini-Decode 103

7.3.3  Simple-BPU分支預測 105

7.3.4  PC生成 109

7.3.5  訪問ITCM和BIU 111

7.3.6  ITCM 115

7.3.7  BIU 116

7.4 總結 116

第8章  一鼓作氣,執行力是關鍵—— 執行 117

8.1 執行概述 118

8.1.1  指令譯碼 118

8.1.2  指令執行 118

8.1.3  流水線的衝突 119

8.1.4  指令的交付 119

8.1.5  指令發射、派遣、執行、寫回的順序 119

8.1.6  分支解析 121

8.1.7  小結 121

8.2 RISC-V架構特點對於執行的簡化 122

8.2.1  規整的指令編碼格式 122

8.2.2  優雅的16位指令 122

8.2.3  精簡的指令個數 122

8.2.4  整數指令都是兩運算元 123

8.3 蜂鳥E200處理器的執行實現 123

8.3.1  執行指令列表 123

8.3.2  EXU總體設計思路 123

8.3.3  譯碼 124

8.3.4  整數通用暫存器組 130

8.3.5  CSR暫存器 133

8.3.6  指令發射派遣 134

8.3.7  流水線衝突、長指令和OITF 139

8.3.8  ALU 145

8.3.9  高效能乘除法 157

8.3.10  浮點單元 158

8.3.11  交付 159

8.3.12  寫回 159

8.3.13  協處理器擴充套件 160

8.3.14  小結 160

第9章  善始者實繁,克終者蓋寡——交付 161

9.1 處理器交付、取消、沖刷 162

9.1.1  處理器交付、取消、沖刷簡介 162

9.1.2  處理器交付常見實現策略 163

9.2 RISC-V架構特點對於交付的簡化 164

9.3 蜂鳥E200處理器交付硬體實現 164

9.3.1  分支預測指令的處理 165

9.3.2  中斷和異常的處理 168

9.3.3  多週期執行指令的交付 169

9.3.4  小結 169

第10章  讓子彈飛一會兒——寫回 170

10.1 處理器的寫回 171

10.1.1  處理器寫回功能簡介 171

10.1.2  處理器寫回常見策略 171

10.2 蜂鳥E200處理器的寫回硬體實現 171

10.2.1  最終寫回仲裁 172

10.2.2  OITF和長指令寫回仲裁 174

10.2.3  小結 177

第11章  哈弗還是比亞迪—— 儲存器架構 178

11.1 儲存器架構概述 179

11.1.1  誰說處理器一定要有快取 179

11.1.2  處理器一定要有儲存器 180

11.1.3  ITCM和DTCM 182

11.2 RISC-V架構特點對於儲存器訪問指令的簡化 183

11.2.1  僅支援小端格式 183

11.2.2  無地址自增自減模式 183

11.2.3  無“一次讀多個數據”和“一次寫多個數據”指令 183

11.3 RISC-V架構的儲存器相關指令 184

11.3.1  Load和Store指令 184

11.3.2  Fence指令 184

11.3.3  “A”擴充套件指令 184

11.4 蜂鳥E200處理器儲存器子系統硬體實現 185

11.4.1  儲存器子系統總體設計思路 185

11.4.2  AGU 186

11.4.3  LSU 190

11.4.4  ITCM和DTCM 192

11.4.5  “A”擴充套件指令處理 195

11.4.6  Fence與Fence.I指令處理 200

11.4.7  BIU 202

11.4.8  ECC 202

11.4.9  小結 202

第12章  黑盒子的視窗——匯流排介面單元BIU 203

12.1 片上匯流排協議概述 204

12.1.1  AXI 204

12.1.2  AHB 204

12.1.3  APB 205

12.1.4  TileLink 205

12.1.5  總結比較 205

12.2 自定義匯流排協議ICB 206

12.2.1  ICB匯流排協議簡介 206

12.2.2  ICB匯流排協議訊號 207

12.2.3  ICB匯流排協議時序 207

12.3 ICB匯流排的硬體實現 210

12.3.1  一主多從 210

12.3.2  多主一從 211

12.3.3  多主多從 212

12.4 蜂鳥E200處理器核BIU 212

12.4.1  BIU簡介 212

12.4.2  BIU微架構 213

12.4.3  BIU原始碼分析 214

12.5 蜂鳥E200處理器SoC匯流排 214

12.5.1  SoC匯流排簡介 215

12.5.2  SoC匯流排微架構 215

12.5.3  SoC匯流排原始碼分析 216

12.6 總結 216

第13章  不得不說的故事——中斷和異常 217

13.1 中斷和異常概述 218

13.1.1  中斷概述 218

13.1.2  異常概述 219

13.1.3  廣義上的異常 219

13.2 RISC-V架構異常處理機制 221

13.2.1  進入異常 221

13.2.2  退出異常 224

13.2.3  異常服務程式 225

13.3 RISC-V架構中斷定義 226

13.3.1  中斷型別 226

13.3.2  中斷遮蔽 228

13.3.3  中斷等待 229

13.3.4  中斷優先順序與仲裁 230

13.3.5  中斷巢狀 230

13.3.6  總結比較 231

13.4 RISC-V架構異常相關CSR

暫存器 232

13.5 蜂鳥E200異常處理的硬體實現 232

13.5.1  蜂鳥E200處理器的異常和中斷實現要點 232

13.5.2  蜂鳥E200處理器的異常型別 233

13.5.3  蜂鳥E200處理器對於mepc的處理 234

13.5.4  蜂鳥E200處理器的中斷介面 234

13.5.5  蜂鳥E200處理器CLINT微架構及原始碼分析 235

13.5.6  蜂鳥E200處理器PLIC微架構及原始碼分析 238

13.5.7  蜂鳥E200處理器交付模組對中斷和異常的處理 242

13.5.8  小結 245

第14章  最不起眼的,其實是最難的——  除錯機制 246

14.1 除錯機制概述 247

14.1.1  互動除錯概述 247

14.1.2  跟蹤除錯概述 249

14.2 RISC-V架構的除錯機制 249

14.2.1  偵錯程式軟體的實現 250

14.2.2  除錯模式 250

14.2.3  除錯指令 251

14.2.4  除錯機制CSR 251

14.2.5  除錯中斷 251

14.3 蜂鳥E200除錯機制的硬體實現 251

14.3.1  蜂鳥E200互動式除錯概述 251

14.3.2  DTM模組 253

14.3.3  硬體除錯模組 253

14.3.4  除錯中斷處理 257

14.3.5  除錯機制CSR暫存器的

實現 258

14.3.6  除錯機制指令的實現 258

14.3.7  小結 259

第15章  動如脫兔,靜若處子——低功耗的訣竅 260

15.1 處理器低功耗技術概述 261

15.1.1  軟體層面低功耗 261

15.1.2  系統層面低功耗 261

15.1.3  處理器層面低功耗 262

15.1.4  單元層面低功耗 262

15.1.5  暫存器層面低功耗 263

15.1.6  鎖存器層面低功耗 264

15.1.7  SRAM層面低功耗 264

15.1.8  組合邏輯層面低功耗 264

15.1.9  工藝層面低功耗 265

15.2 RISC-V架構的低功耗機制 265

WFI指令 265

15.3 蜂鳥E200低功耗機制的硬體實現 265

15.3.1  蜂鳥E200系統層面低功耗 265

15.3.2  蜂鳥E200處理器層面低功耗 267

15.3.3  蜂鳥E200單元層面低功耗 269

15.3.4  蜂鳥E200暫存器層面低功耗 269

15.3.5  蜂鳥E200鎖存器層面低功耗 272

15.3.6  蜂鳥E200 SRAM層面低功耗 273

15.5.7  蜂鳥E200組合邏輯層面低功耗 274

15.5.8  蜂鳥E200工藝層面低功耗 275

15.4 總結 275

第16章  工欲善其事,必先利其器——RISC-V可擴充套件協處理器 276

16.1 專用領域架構DSA 277

16.2 RISC-V架構的可擴充套件性 278

16.2.1  RISC-V的預留指令編碼

空間 278

16.2.2  RISC-V的預定義的Custom指令 279

16.3 蜂鳥E200的協處理器介面EAI 279

16.3.1  EAI指令的編碼 279

16.3.2  EAI介面訊號 280

16.3.3  EAI流水線介面 281

16.3.4  EAI儲存器介面 282

16.3.5  EAI介面時序 283

16.4 蜂鳥E200的協處理器參考示例 286

16.4.1  示例協處理器需求 286

16.4.2  示例協處理器指令 287

16.4.3  示例協處理器實現 288

16.4.4  示例協處理器效能 289

16.4.5  示例協處理器程式碼 290

第三部分  使用Verilog進行模擬和在FPGA SoC原型上執行軟體

第17章  冒個煙先——執行Verilog模擬測試 292

17.1 E200開源專案的程式碼層次結構 293

17.2 E200開源專案的測試用例 294

17.2.1  riscv-tests 自測試用例 294

17.2.2  編譯ISA自測試用例 295

17.3 E200開源專案的測試平臺

(TestBench) 298

17.4 在Verilog TestBench中執行

測試用例 299

第18章  套上殼子上路——實現SoC和FPGA原型 302

18.1 Freedom E310 SoC簡介 303

18.2 HBird-E200-SoC簡介 304

18.2.1  HBird-E200-SoC組成結構 304

18.2.2  HBird-E200-SoC程式碼結構 309

18.3 HBird-E200-SoC FPGA原型平臺 311

18.3.1  FPGA開發板 311

18.3.2  生成mcs檔案燒寫FPGA 314

18.3.3  JTAG偵錯程式 317

18.3.4  FPGA原型平臺DIY

總結 320

18.4 蜂鳥E200專用FPGA開發板 320

第19章  畫龍點睛——執行和除錯軟體示例 321

19.1 Freedom-E-SDK平臺簡介 322

19.2 SIRV-E-SDK平臺簡介 323

19.2.1  SIRV-E-SDK簡介 323

19.2.2  SIRV-E-SDK程式碼結構 324

19.3 使用SIRV-E-SDK執行示例程式 325

19.4 使用GDB和OpenOCD除錯示例

程式 328

19.5 Windows圖形化IDE開發工具 331

第20章  是騾子是馬?拉出來遛遛——執行跑分程式 332

20.1 跑分程式簡介 333

20.2 Dhrystone簡介 333

20.3 執行Dhrystone Benchmark 335

20.4 CoreMark簡介 337

20.5 執行CoreMark Benchmark 338

20.6 總結與比較 340

附錄A  RISC-V架構指令集介紹 342

附錄B  RISC-V架構CSR暫存器介紹 374

附錄C  RISC-V架構的PLIC介紹 384

附錄D  儲存器模型背景介紹 392

附錄E  儲存器原子操作指令背景介紹 397

附錄F  RISC-V指令編碼列表 400

附錄G  RISC-V偽指令列表 404

相關好書

​《手把手教你設計CPU——RISC-V處理器篇》

胡振波 著

(2018年5月出版)

本書是一本介紹通用CPU設計的入門書,以通俗的語言系統介紹了CPU和RISC-V架構,力求為讀者揭開CPU設計的神祕面紗,開啟計算機體系結構的大門。 

本書共分為四部分。第一部分是CPU與RISC-V的綜述,幫助初學者對CPU和RISC-V快速地建立起認識。第二部分講解如何使用Verilog設計CPU,使讀者掌握處理器核的設計精髓。第三部分主要介紹蜂鳥E203配套的SoC和軟體平臺,使讀者實現蜂鳥E203 RISC-V處理器在FPGA原型平臺上的執行。第四部分是附錄,介紹了RISC-V指令集架構,輔以作者加入的背景知識解讀和註解,以便於讀者理解。 ​

鄭鋼 著

點選封面購買紙書

一本看得懂,學得會,作者用詼諧幽默語言講述的深入理解作業系統原理的精品書,學完後讀者可以輕鬆自制作業系統。作業系統並不深奧,本書給予權威解讀。歷時19個月,行文60餘萬字,用6000多行程式碼實現了一個完整的作業系統。 

本書用詼諧幽默的語言,把深奧的作業系統儘量講解清楚,讀者在輕鬆閱讀中就學通了深奧的知識,學完後不但明白了作業系統,讀者可以輕鬆自制一個作業系統,是一本難得的好書。​

​《自制程式語言——基於C語言》

鄭鋼  著

(2018年5月出版)

“純手工”:不需要第三方庫和工具,充分了解各個細節的原理及實現。實現的是面向物件指令碼語言,這涉及到虛擬機器的實現,讓讀者領略指令碼語言的內部實現。  

今日互動

你對自己設計CPU的看法?截止時間4月26日17時,留言+轉發本活動到朋友圈,小編將抽獎選出5名讀者贈送e讀版100元非同步社群代金券一張,(留言點贊最多的自動獲得一張)。

推薦閱讀

​長按二維碼,可以關注我們喲

每天與你分享IT好文。

在“非同步圖書”後臺回覆“關注”,即可免費獲得2000門線上視訊課程;推薦朋友關注根據提示獲取贈書連結,免費得非同步e讀版圖書一本。趕緊來參加哦!

點選閱讀原文,直接購買《作業系統真象還原》

閱讀原文