RISC-V開源項目為什麼選用chisel這種新的高層次建模語言,而不是SystemVerilog?

UC Berkeley主導的開源項目RISC-V採用了他們自己新發明的chisel語言,這種語言成熟嗎?為什麼不採用同是高層次語言且已經成熟的SV;chisel以後可以取代SV嗎?能完美地實現更層次綜合嗎?比Xilinx的HLS更強大嗎?


[先給CNRV打個call,國內愛好者建立的RISC-V社區,可以留言加我微信加入微信群]

為什麼用chisel而不用其他語言自然是因為人家覺得好用,能進伯克利的學生的腦子絕對不傻而且絕對比其他一流大學接地氣,去看看人家孵化出多少矽谷項目(Spark,Unix/BSD)就知道了。

人家chisel沒打算取代verilog或者sv之類的任何,而只是希望在這個基礎之上做一個高層次的構建語言,所以chisel叫做Hardware construction language,和HLS毛關係沒有(但是你也可以在chisel的基礎上構建HLS,這是另一碼事)。

聊到chisel你們也別老是想到什麼scala,java什麼的。chisel是基於scala的,那是因為scala是一種元語言和函數式編程語言,而且很適合做DSL,也就是領域特定語言。這幾個特點加起來讓scala成為了一種很合適做這件事的語言。

那麼chisel要做什麼事?

請允許我舉一個非常不恰當的栗子,我們以設計一個CPU為例吧。

你本科熬了幾年圖書館,擠破了頭進入國內某微電子學院做了研究生,老師進來和你說我有個很好的想法,能夠有效的改進指令效率或者多核性能或者功耗

老師說你做個5級流水線CPU把,還要把cache、匯流排、外設之類也做了(沒緩存搞什麼多核?)。好吧,我承認你很聰明,不出幾個月你把CPU寫的差不多了,然後cache、匯流排、外設這些大頭還遠著呢。又過了幾個月你天天啃《量化研究方法》,然後終於把cache實現了。然後你寫了個GPIO,又掛了個SRAM,好吧,你終於實現了一個小的CPU了。為了降低難度,你用了學術界最愛的MIPS體系結構,用了最土的wishbone匯流排。然後你開始了擼軟體了,因為用了MIPS,你的難度已然降低了很多,而且你不用考慮編譯器的問題了,你又吭哧了好幾個月,寫了個巨土的bootloader,終於把程序載入了。儘管後面可能還要在FPGA上跑起來,要發頂作的同學還要去申請經費流個片,這估計又要好久好久。但到目前為止你終於可以開始評估下你的設計的好壞了。

你跑了一堆benchmark,得出了一些結果,然後你才開始把導師的idea應用到你的設計中。然後,然後,你就碩士畢業了,放心吧,你的這個攤子,你的學弟們會接鍋的。

這裡儘管很多東西不那麼真實,但是不得不說大學教授的很多項目,都是好幾屆學生慢慢做才做下來的,而且做歸做,評估歸評估。做完了哪裡不好還得繼續改進,因為有了架構,離實現到最後變成晶元還遠著呢。更何況,評估一個設計好壞這件事本身或許難度更大。

以上的故事暴露了一個問題,對於改進硬體架構這件事,反饋環實在太長了

所以扯了半天,我其實就想說一句話,硬體設計太耗時,verilog寫的蛋疼,需求要是變一點,那些個介面就得跟著變。要是速度上不去了,我要是想換個架構,又要花好久。sv或許好一些,但你真的愛她嗎?

所以當Berkeley的Krste教授和他的學生們決定要去做一些研究的時候(比如下一代數據中心的CPU架構、後摩爾定律時代的CPU架構或是AI加速處理器的時候),他們當然希望反饋環足夠短啊!儘早評估、快速迭代對一個研究者來說太重要了啊。

差不多在統一時間,Berkeley的Joseph Whitworth教授也正好開始了Chisel的研究和開發工作,那他們自然就要決定聯合起來做些有趣的事情。當他們決定做他們的第五代RISC CPU指令集的時候,他們需要設計一個真實的CPU來評估他們設計指令集過程中的每一個選擇。所以他們從頭用Chisel寫了CPU,因為chisel面向對象的一些屬性,他們能用很少的時間就把設計做好並且評估,chisel只要幾十秒就可以生成verilog或者C++model,然後直接扔進模擬器里去跑benchmark。

就這樣他們沒用多少年就做了一個全新的開源指令集RISC-V,這個指令集有多好呢?我說你肯定不信,我引用一段最近David Ditzel採訪里的話。Dave在Sun參與過SPARC ISA的設計,後面創立了全美達(Transmeta)曾經讓Intel也膽戰心驚。他最近成立了一家新的公司做RISC-V的高性能CPU。以下是採訪內容:

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最開始甚至不在我們可考慮範圍之內,但是我們Esperanto的工程師越深入的了解它,就越發現RISC-V不僅僅是個玩具或者教學用的工具。我們還假定說RISC-V在編譯器效率上相比Arm/MIPS/SPARC會損失30%到40%左右,因為它實在是太簡單了。但我們的編譯器工程師對他進行了評測,發現只損失了可恨的不到1%。」Ditzel如是說

基於這幾個事實我得出的推論就是,當我能夠更快的評估我的硬體時,我就能更快的改進它,也就是能比別人更早的靠近不斷變化中的有效邊界。

其實人家berkeley的團隊已經用chisel生成的代碼做了好多次tape-out了,孵化出的SiFive公司做的hifive1 board在crowdsupply上賣的不錯。明年初他們做的可以跑linux的U54 4核處理器就要流片回來了。

當我們看待一件新事物的時候,千萬不要用他現有的狀態去預測它的未來。你一定得想想,Chisel未來會發展成什麼樣,當然這就是另外一個故事了。

冷靜的看待chisel的話,我認為這是就是未來或者是未來路上的一站,原因是它能提高生產力,當然也有很多其他類似的方法和途徑。誰也看不清未來是怎樣的,但是你要明白,當未來到來的時候,要想領先別人,你現在就得去做些什麼對自己未來有利的事情。

所以,當你和我抱怨chisel是scala寫的,我不會scala的時候,看我的大白眼!


1. chisel並不成熟。chisel在描述硬體的靈活性上不如verilog. 但是相比verilog,chisel提供了oo功能(比generate強多了),更多的primitive(比如arbiter,queue...),簡化了interface連接,可以compile成c++ simulator...但是作為一個verilog programmer,scala用起來還是挺彆扭的

2. 為啥不用sv,因為大學研究項目,要裝13

3. chisel不是hls,更像program verilog in scala。 Xilinx都不能實現完美hls,一個大學研究項目更不可能

4. 取代verilog...還是下輩子吧

5. 個人認為ucb的這個項目價值更大的還是risc-v指令集,而不是chisel


使用chisel還是寫rtl,和寫verilog本質是一樣的,但是他用編程的方式來描述硬體電路,描述能力更強,參數系統也更方便,chisel是基於scala的,語法簡潔,而且編程範式支持很好,面向對象,函數式,模板應有盡有,容易提高代碼復用能力
好處這麼多,寫過 chisel的人就再也回不去verilog了
當然也有問題,
首先是scala的學習曲線比較陡,用好chisel,還是得學好scala,有人這麼說scala是宇宙第二難學語言,這肯定是誇張了,但是確實不容易

第二應該說來還不算很完善,chisel3.0還是未能發布,看上去還有一些工作,他們的目標是3.0要進軍工業界,而且chisel持續投入,參與的人也不少,完善也就只是時間問題了

但是我還是很享受寫scala,感覺開發效率高很多,關鍵是,這個項目一定會持續發展,而且他們已經基於chisel做了很多晶元,總的說來,靠得住

-------------這是記錄的分割線

Chisel3已經支持跨時鐘域了,感覺過不了多久就要發布了

Chisel和scala一樣,在未來的一段時間註定是小眾,但是技術的門檻並不會一直都那麼高,金子總會發亮,好東西總要普及,過不了幾年肯定會有相關的書籍出現,再複雜的事情都有人講簡單。這裡的原因很簡單,因為riscv的參考設計rocket是完全開源的,中國半導體大潮下,肯定會有人前赴後繼的衝進來。大膽猜測一下,過不了幾年,懂得chisel/rocket的工程師,將會火起來。


推薦閱讀:

TAG:開源項目 | 數字集成電路 | 晶元設計 | CPU設計 | verilog-hdl |