systemverilog硬件设计及建模_Chisel引领敏捷硬件开发浪潮
轉(zhuǎn)載一篇18年6月的舊文
眾所周知,近來開源處理器項(xiàng)目RISC-V在半導(dǎo)體業(yè)界掀起了一片新的潮流。這股潮流同時(shí)帶來的,還包括了敏捷芯片開發(fā)。
“敏捷開發(fā)”對(duì)于IC設(shè)計(jì)工程師來說似乎比較陌生,事實(shí)上它已經(jīng)在軟件開發(fā)中占有重要地位,主要是指開發(fā)團(tuán)隊(duì)在面對(duì)多變的需求時(shí),能快速實(shí)現(xiàn)版本迭代,以精干的團(tuán)隊(duì)在短時(shí)間內(nèi)快速提交高質(zhì)量的代碼。
事實(shí)上,芯片開發(fā)周期過長(zhǎng)已經(jīng)是阻礙半導(dǎo)體數(shù)字設(shè)計(jì)快速發(fā)展的重要瓶頸。Verilog HDL能實(shí)現(xiàn)完整的數(shù)字電路開發(fā),但是其代碼密度低,許多團(tuán)隊(duì)為了加速開發(fā)還必須配合團(tuán)隊(duì)約定的coding style自行開發(fā)非標(biāo)準(zhǔn)的Perl/Python腳本以完成部分代碼編寫的自動(dòng)化,然而這種方式的可移植性存在問題。之前EDA業(yè)界也在嘗試把C代碼直接編譯成Verilog的高級(jí)語言綜合(high-level synthesis),但是該嘗試目前僅僅在FPGA領(lǐng)域獲得了有限的成功。U.C. Berkeley在設(shè)計(jì)和開發(fā)RISC-V標(biāo)準(zhǔn)和Core的過程中,引入了Chisel這樣的開發(fā)工具,并且很大程度上反哺和改進(jìn)了Chisel。那么,U.C. Berkeley這么做的原因是什么?給整個(gè)數(shù)字IC設(shè)計(jì)領(lǐng)域會(huì)帶來哪些改變呢?
先擺事實(shí)再講道理,讓我們先跳過過程看下結(jié)果吧。
SiFive作為Berkeley孵化出的高科技公司,幾乎所有的研發(fā)均使用chisel
rocket-chip項(xiàng)目在Github上做為標(biāo)志性的chisel項(xiàng)目,包含一個(gè)可定制型很強(qiáng)的CPU和總線等其他IP
rocket-chip項(xiàng)目到2018年6月有接近6000次提交
2017年,SiFive在眾籌網(wǎng)站CrowdSupply上發(fā)布了Hifive1,板子上搭載的芯片就是基于rocket-chip并添加其他第三方IP的FE310芯片,工藝為TSMC 180nm,這是一塊Arduino兼容的開發(fā)板
2018年,SiFive又在CrowdSupply上發(fā)布了其4+1核心的可以運(yùn)行Linux操作系統(tǒng)的HiFive Unleashed開發(fā)板,芯片代號(hào)FEU540,工藝為TSMC 28nm,這款SoC芯片依然是基于rocket-chip的。
所以在我看來,為什么用chisel而不用其他語言自然是因?yàn)槿思矣X得好用,Berkeley可以稱得上是在諸多大學(xué)里非常接地氣的大學(xué)了,他們似乎除了提出超前的概念之外,更有能力去讓這些想法落地,去看看人家孵化出多少硅谷項(xiàng)目(Spark,Unix/BSD)就知道了。
所以,今天我們就在這里聊聊chisel吧。客觀地說chisel沒打算取代verilog或者systemverilog,而只是希望在這個(gè)基礎(chǔ)之上做一個(gè)高層次的構(gòu)建語言,所以我們實(shí)際上可以把chisel叫做Hardware?construction?language,要明白這和高層次綜合(HLS)并無半點(diǎn)關(guān)系。(但是你也可以在chisel的基礎(chǔ)上構(gòu)建HLS,這是另一碼事。)
聊到chisel,很多前端工程師就會(huì)想到Java和Scala,這是比較常見的誤區(qū),所以不如先聊聊Scala吧。
Scala:天生適合做"新語言"的"高級(jí)玩具"
先想象下你有一盒含有MindStorm套件的樂高積木,用它來做了一輛遙控車。Scala就是這樣的"高級(jí)玩具"。
Scala是由洛桑聯(lián)邦理工學(xué)院的Martin Odersky?精心設(shè)計(jì)的一門多范式、函數(shù)式和面向?qū)ο蟮木幊陶Z言。我們可以不用太關(guān)心前面的定語,我們只要記住,Scala很適合做領(lǐng)域特定語言(DSL),這一定程度上是設(shè)計(jì)出來的,而非偶然。當(dāng)然,”函數(shù)式“這個(gè)屬性必須得提一下,因?yàn)楹瘮?shù)式編程語言往往和硬件模塊存在一些等價(jià)轉(zhuǎn)換關(guān)系。
DSL意味著他可以像橡皮泥或者積木一樣被組合或者塑造成為新的語言,一個(gè)經(jīng)典的案例就是把Scala捏成BASIC語言。(有興趣的讀者可以參見這個(gè)Github Repo: https://github.com/fogus/baysick)
看到了么,因?yàn)镾cala中幾乎所有的元素都是對(duì)象,并且都能夠被賦予新的功能,同時(shí)配合大量的語法糖,所以這個(gè)無聊的小哥用它來實(shí)現(xiàn)了一門新的語言,而且只用了300行。(有興趣的讀者可以參考Code: https://git.io/vhMmO)
Chisel要解決什么問題?
請(qǐng)?jiān)试S我舉一個(gè)非常不恰當(dāng)?shù)睦踝?#xff0c;我們以設(shè)計(jì)一個(gè)CPU為例吧。
你本科熬了幾年圖書館,擠破了頭進(jìn)入國內(nèi)某微電子學(xué)院做了研究生,老師進(jìn)來和你說我有個(gè)很好的想法,能夠有效的改進(jìn)指令效率或者多核性能或者功耗。
老師說你做個(gè)5級(jí)流水線CPU吧,還要把cache、總線、外設(shè)之類也做了(沒緩存搞什么多核?)。好吧,我承認(rèn)你很聰明,不出幾個(gè)月你把CPU寫的差不多了,然后cache、總線、外設(shè)這些大頭還遠(yuǎn)著呢。又過了幾個(gè)月你天天啃《量化研究方法》,然后終于把cache實(shí)現(xiàn)了。然后你寫了個(gè)GPIO,又掛了個(gè)SRAM,好吧,你終于實(shí)現(xiàn)了一個(gè)小的CPU了。為了降低難度,你用了學(xué)術(shù)界最愛的MIPS體系結(jié)構(gòu),用了最土的wishbone總線。然后你開始了擼軟件了,因?yàn)橛昧薓IPS,你的難度已然降低了很多,而且你不用考慮編譯器的問題了,你又吭哧了好幾個(gè)月,寫了個(gè)巨土的bootloader,終于把程序加載了。盡管后面可能還要在FPGA上跑起來,要發(fā)頂作的同學(xué)還要去申請(qǐng)經(jīng)費(fèi)流個(gè)片,這估計(jì)又要好久好久。但到目前為止你終于可以開始評(píng)估下你的設(shè)計(jì)的好壞了。
你跑了一堆benchmark,得出了一些結(jié)果,然后你才開始把導(dǎo)師的idea應(yīng)用到你的設(shè)計(jì)中。然后,然后,你就碩士畢業(yè)了,放心吧,你的這個(gè)攤子,你的學(xué)弟們會(huì)接鍋的。
這里盡管很多東西不那么真實(shí),但是不得不說大學(xué)教授的很多項(xiàng)目,都是好幾屆學(xué)生慢慢做才做下來的,而且做歸做,評(píng)估歸評(píng)估。做完了哪里不好還得繼續(xù)改進(jìn),因?yàn)橛辛思軜?gòu),離實(shí)現(xiàn)到最后變成芯片還遠(yuǎn)著呢。更何況,評(píng)估一個(gè)設(shè)計(jì)好壞這件事本身或許難度更大。
以上的故事暴露了一個(gè)問題,對(duì)于改進(jìn)硬件架構(gòu)這件事,反饋環(huán)實(shí)在太長(zhǎng)了。
所以扯了半天,我其實(shí)就想說一句話,硬件設(shè)計(jì)太耗時(shí),Verilog寫的蛋疼,需求要是變一點(diǎn),那些個(gè)接口就得跟著變。要是速度上不去了,我要是想換個(gè)架構(gòu),又要花好久。
的確,SystemVerilog這些問題也都有類似的解決方案,但似乎chisel的代碼密度更高,面向?qū)ο蠛透呒?jí)語言特性支持的更好。和SystemVerilog提供的一步到位相比,Chisel首先生成通用的Verilog,然后交由后端處理的方式,降低了對(duì)EDA工具的要求。還有更重要的一點(diǎn),它是開源和免費(fèi)的。
RISC-V和Chisel的小故事
所以當(dāng)Berkeley的Krste教授和他的學(xué)生們決定要去做一些研究的時(shí)候(比如下一代數(shù)據(jù)中心的CPU架構(gòu)、后摩爾定律時(shí)代的CPU架構(gòu)或是AI加速處理器的時(shí)候),他們當(dāng)然希望反饋環(huán)足夠短啊!盡早評(píng)估、快速迭代對(duì)一個(gè)研究者來說太重要了啊。
差不多在同一時(shí)間,Berkeley的Joseph Whitworth教授也正好開始了Chisel的研究和開發(fā)工作,那他們自然就要決定聯(lián)合起來做些有趣的事情。當(dāng)他們決定做他們的第五代RISC CPU指令集的時(shí)候,他們需要設(shè)計(jì)一個(gè)真實(shí)的CPU來評(píng)估他們?cè)O(shè)計(jì)指令集過程中的每一個(gè)選擇。所以他們從頭用Chisel寫了CPU,因?yàn)閏hisel面向?qū)ο蟮囊恍傩?#xff0c;他們能用很少的時(shí)間就把設(shè)計(jì)做好并且評(píng)估,chisel只要幾十秒就可以生成verilog或者C++model,然后直接扔進(jìn)仿真器里去跑benchmark。
就這樣他們沒用多少年就做了一個(gè)全新的開源指令集RISC-V,這個(gè)指令集有多好呢?我說你肯定不信,我引用一段最近David Ditzel采訪里的話。Dave在Sun參與過SPARC ISA的設(shè)計(jì),后面創(chuàng)立了全美達(dá)(Transmeta)曾經(jīng)讓Intel也膽戰(zhàn)心驚。他最近成立了一家新的公司做RISC-V的高性能CPU。以下是采訪內(nèi)容:
RISC-V wasn't even on the shopping list of alternatives, but the more Esperanto's engineers looked at it, the more they realized it was more than a toy or just a teaching tool. “We assumed that RISC-V would probably lose 30% to 40% in compiler efficiency [versus Arm or MIPS or SPARC] because it’s so simple,” says Ditzel. “But our compiler guys benchmarked it, and darned if it wasn't within 1%.”
“RISC-V最開始甚至不在我們可考慮范圍之內(nèi),但是我們Esperanto的工程師越深入的了解它,就越發(fā)現(xiàn)RISC-V不僅僅是個(gè)玩具或者教學(xué)用的工具。我們還假定說RISC-V在編譯器效率上相比Arm/MIPS/SPARC會(huì)損失30%到40%左右,因?yàn)樗鼘?shí)在是太簡(jiǎn)單了。但我們的編譯器工程師對(duì)他進(jìn)行了評(píng)測(cè),發(fā)現(xiàn)只損失了可恨的不到1%。”Ditzel如是說
基于這幾個(gè)事實(shí)我得出的推論就是,當(dāng)我能夠更快的評(píng)估我的硬件時(shí),我就能更快的改進(jìn)它,也就是能比別人更早的靠近不斷變化中的有效邊界。
這里其實(shí)引出了一個(gè)更有意義話題,如果沒有Chisel這樣的工具,RISC-V作為一個(gè)標(biāo)準(zhǔn),能夠如此快的成熟并且達(dá)成諸多成就么?(如:短短幾年內(nèi)就被Linux/GNU Toolchain/LLVM/Qemu... 等并入主線)
Chisel的未來
當(dāng)我們看待一件新事物的時(shí)候,千萬不要用他現(xiàn)有的狀態(tài)去預(yù)測(cè)它的未來。你一定得想想,Chisel未來會(huì)發(fā)展成什么樣。
Chisel仍然是一門不斷發(fā)展和進(jìn)化中的項(xiàng)目,我能夠看到的一個(gè)重要的節(jié)點(diǎn)就是chisel開始分離成為兩個(gè)項(xiàng)目,chisel和firrtl。簡(jiǎn)單講,如果把chisel理解為把chisel代碼轉(zhuǎn)化為verilog的話,那么這個(gè)步驟被分為了兩步:
從chisel到firrtl(一種硬件描述中間表達(dá))
從firrtl到verilog
在筆者看來這個(gè)思路就是LLVM的思路,熟悉編譯器的朋友或許知道,LLVM設(shè)計(jì)了一種描述清楚的中間表達(dá)llir,編譯器前端可以將任何語言轉(zhuǎn)化為llir,而所有的中間優(yōu)化步驟會(huì)一級(jí)級(jí)的處理llir,優(yōu)化過的內(nèi)容仍然是llir表達(dá)的,最終的llir會(huì)被編譯器后端(Backend)轉(zhuǎn)化為到目標(biāo)機(jī)器匯編代碼。我們可以說幾乎大部分編譯器都是這樣工作的,但是當(dāng)llir足夠開放并且易于被他使用的時(shí)候,就會(huì)有更多的人來加入這個(gè)陣營,發(fā)揮他們各自的專業(yè)優(yōu)勢(shì)來實(shí)現(xiàn)更好的編譯器PASS。這也是為什么LLVM本質(zhì)上是編譯器基礎(chǔ)設(shè)施(compiler infrastructure)而非僅僅是編譯器軟件。
所以請(qǐng)?jiān)试S我用下面的圖不專業(yè)的理解一下LLVM所做的事的話。
那么讓我再次發(fā)揮一下想象力,想像一下chisel+firrtl想要做的。
這里我不想解釋太多,但我會(huì)問個(gè)問題:如果RISC-V會(huì)抹平過去高昂的CPU授權(quán)費(fèi),那么昂貴的EDA工具這個(gè)山頭誰來抹平呢?
不要小看開源的力量!
請(qǐng)保持開放的心態(tài)
冷靜的看待chisel的話,我認(rèn)為這是就是未來或者是未來路上的一站,原因是它能提高生產(chǎn)力,我們也必須抱著同樣包容的心態(tài)去看待其他類似的方法和途徑。誰也看不清未來是怎樣的,但是你要明白,當(dāng)未來到來的時(shí)候,要想領(lǐng)先別人,你現(xiàn)在就得去做些什么對(duì)自己未來有利的事情。
事實(shí)上,在John Hennessy and David Patterson最新的圖靈獎(jiǎng)演講上,同時(shí)提到了"DSA"和"Agile Chip Development",而chisel,或許就是開啟這個(gè)新黃金時(shí)代的先鋒。
所以,當(dāng)你和我抱怨chisel是scala寫的,我不會(huì)scala的時(shí)候,看我的大白眼!
總結(jié)
以上是生活随笔為你收集整理的systemverilog硬件设计及建模_Chisel引领敏捷硬件开发浪潮的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python正则表达式中的转义字符_详解
- 下一篇: matlab fft函数说明_【V2.0