老石按:在傳統(tǒng)的數(shù)字芯片開發(fā)里,,絕大多數(shù)設(shè)計(jì)者都會(huì)使用諸如Verilog、VHDL或者SystemVerilog的硬件描述語言(HDL)對(duì)電路的行為和功能進(jìn)行建模,。但是在香山處理器里,團(tuán)隊(duì)選擇使用Chisel作為主要開發(fā)語言,。這是基于怎樣的考慮,?
Chisel是基于Scala這個(gè)函數(shù)式語言來擴(kuò)展出來的,我們可以把它看做是一個(gè)用來描述電路的領(lǐng)域?qū)S谜Z言,,它和Verilog還是有很大區(qū)別的,。
事實(shí)上,我們自己也做過兩種語言的對(duì)比,。在2016年,,我們整個(gè)團(tuán)隊(duì)開始決定用RISC-V去實(shí)現(xiàn)標(biāo)簽化體系結(jié)構(gòu),也在那個(gè)時(shí)候開始接觸Chisel,。最早的時(shí)候我們重用了UC伯克利開發(fā)了的名叫Rocket的開源內(nèi)核,。這是個(gè)順序執(zhí)行的小核,我們?cè)谒厦婕由狭宋覀兊臉?biāo)簽機(jī)制,,這期間其實(shí)就有很多的一些開發(fā)體會(huì),。
Rocket chip generator的系統(tǒng)架構(gòu)圖
前面提到我們的同學(xué)原來對(duì)Verilog很熟,但是用Chisel以后就會(huì)有一種愛不釋手的感覺,。有好多的通信,,特別是年輕的同學(xué),,他們都愿意去嘗試使用Chisel。有一個(gè)北大的研究生,,他在做報(bào)告的時(shí)候講,,你用了Chisel以后就再也回不去了。
其實(shí),,我們自己還做過量化的評(píng)估,。在2018年,我們團(tuán)隊(duì)里有兩個(gè)本科生和一個(gè)工程師做過一個(gè)實(shí)驗(yàn),。這個(gè)實(shí)驗(yàn)是要開發(fā)一個(gè)L2 Cache,,但是要集成到RISC-V的內(nèi)核里。我們的工程師是用Verilog來開發(fā)的,,他對(duì)Cache非常熟悉,。他把OpenSPARC里面的Cache、還有Xilinx提供的Cache等等都研究過,,代碼都讀得很透,。所以他用Verilog開發(fā),并且接到RISC-V里面去,。當(dāng)時(shí)他花了應(yīng)該是6個(gè)星期開發(fā),,包括測(cè)試框架等等,一共寫了5000多行代碼,。即便這樣,,后面還是有一些問題和Bug。
另外,,我們當(dāng)時(shí)有一位大四的本科生,,現(xiàn)在也是香山的核心成員,他懂一些計(jì)算機(jī)體系結(jié)構(gòu),,使用Chisel有9個(gè)月的時(shí)間,。同樣的任務(wù),他用Chisel開發(fā)只花了三天時(shí)間就寫出來了,。把設(shè)計(jì)接到RISC-V核里面之后,,還能夠正常工作。之后又進(jìn)一步就把DMA調(diào)通了,,就能夠支持像網(wǎng)卡這樣的一些DMA的數(shù)據(jù)的傳輸,。這個(gè)給我們留下了很深刻的印象。
表格來源:《芯片敏捷開發(fā)實(shí)踐:標(biāo)簽化RISC-V》
我們覺得,,本科生使用Chisel做的設(shè)計(jì),,哪怕是性能或者各方面差了一些,但他只用了三天時(shí)間,。這樣我們就可以快速去驗(yàn)證,,并且實(shí)現(xiàn)我們的想法,。
當(dāng)然這個(gè)只是第一組實(shí)驗(yàn)。我們當(dāng)時(shí)有一個(gè)群,,在群里面吵的還是挺不可開交的,,因?yàn)槲覀兊墓こ處熌莻€(gè)時(shí)候很不服氣,他就覺得他的代碼各方面都質(zhì)量更高,。所以我們后來又有另外一位中國(guó)科學(xué)院大學(xué)的大四本科生,,他懂Verilog、但是沒學(xué)過Chisel,,所以他做的事情就是讀我們工程師的Verilog代碼,,并把核心代碼一行一行翻譯成Chisel,最后要通過工程師寫的測(cè)試,。也就是說,,翻譯后的Chisel和Verilog實(shí)現(xiàn)的邏輯功能是完全一致的。
翻譯完之后,,再在同一個(gè)FPGA上面評(píng)估,,看設(shè)計(jì)的PPA、 頻率,、功耗,,還有使用的資源等等,。這樣下來的話,,你就會(huì)看到其實(shí)出來的指標(biāo)上面,大多數(shù)的指標(biāo)實(shí)際都是Chisel還反而更好一些,,代碼量也會(huì)比他要小,。
這還只是第一個(gè)階段。后面我們的本科生又在博士生的指導(dǎo)下,,把Chisel里面的高級(jí)特性給它加進(jìn)去,,結(jié)果一下子就完全超越Verilog的版本了,代碼量大概只有Verilog的1/4~1/5,,有些邏輯資源可以減少百分之六七十,。所以那時(shí)候這組數(shù)據(jù)出來以后,工程師就他也覺得服氣了,。
表格來源:《芯片敏捷開發(fā)實(shí)踐:標(biāo)簽化RISC-V》
Chisel vs 高層次綜合
老石按:在FPGA里高層綜合是一個(gè)非常熱,、非常流行的一個(gè)研究方向。但是我知道Chisel和高層次綜合可能并不是一回事,。在Chisel官網(wǎng)上也明確的指出:我不是高層次綜合,。但在我看來,它們背后的思維方式,、或者是大的方向是有共同之處的,,也就是讓硬件開發(fā)更加的快速,、更加敏捷。也就是像您剛才說的,,從想法到實(shí)現(xiàn),,周期更加縮短。
但是從高層綜合的角度來看,,雖然學(xué)術(shù)界一直在講高層次綜合已經(jīng)很多年的時(shí)間,,它實(shí)際的商業(yè)化可能還是需要特別突破性的進(jìn)展。現(xiàn)在業(yè)界的這些設(shè)計(jì),,比如大的網(wǎng)絡(luò)設(shè)計(jì),、還有數(shù)據(jù)中心加速器的這些設(shè)計(jì),仍然是基于SystemVerilog/Verilog/VHDL這樣的RTL語言,。這主要是因?yàn)楦邔哟尉C合有這么幾個(gè)問題:
第一個(gè)就是HLS可能并不能覆蓋掉的全部應(yīng)用領(lǐng)域,,也就是說它可能適合于某些應(yīng)用領(lǐng)域,但是對(duì)于這種吞吐量比較大的,、或者高速數(shù)據(jù)包處理這些應(yīng)用,,它可能就不那么適合。
另外一個(gè)就是它的驗(yàn)證,。因?yàn)樗喈?dāng)于在RTL頂上加了一層額外的高層次語言,,等它綜合或者處理完了以后,還是生成底層的RTL語言,,然后再走原來的FPGA的這些開發(fā)流程,。所以在驗(yàn)證過程中,增加額外的這層可能會(huì)給驗(yàn)證工作造成很大的問題,。所以關(guān)于這兩點(diǎn)您怎么看,?
我想其實(shí)它的通用性方面是沒有問題的。Chisel本身是一個(gè)硬件描述語言,,所以從它的這種完備性來看的話,,它跟Verilog是一樣的。也就是說,,Verilog能干什么事,,Chisel也能干什么事,這兩個(gè)是沒有什么區(qū)別的,,它只不過是另外一種語法表達(dá)而已,。
調(diào)試是很多人都擔(dān)心的一個(gè)問題。因?yàn)镃hisel它現(xiàn)在其實(shí)是一個(gè)源到源的翻譯,,是首先是基于Scala這套語法去寫一個(gè)硬件的描述,。然后通過FIRRTL進(jìn)行翻譯。再往后走的話,其實(shí)是用Verilog那套流程去做,,最后生成GDSII版圖,。
所以在這個(gè)過程當(dāng)中,其實(shí)是明顯的分成兩個(gè)階段了,。前面一個(gè)階段Chisel到Verilog,,第二階段就是Verilog到GDSII版圖。
我們用Chisel已經(jīng)流過三顆芯片,,有大的芯片,、有的小的芯片,有單核的有8核的,。在早期的時(shí)候,,我們其實(shí)也遇到過這樣的一些問題。比如你用Chisel寫的代碼生成了Verilog,,Verilog里面有一些變量,,你那邊在Chisel里面改一行代碼,那它這個(gè)變量就全部重新改變,。后來其實(shí)仔細(xì)分析以后,,我們發(fā)現(xiàn)這些問題都是可以有一些辦法來解決的,或者說它不是阻礙可調(diào)試性的最根本的問題,。所以后面我們?cè)谧鱿闵降臅r(shí)候,,我們?cè)谶@些方面已經(jīng)處理得比較好了。
就像我們有同學(xué),,他自己開發(fā)了一個(gè)工具,,可以把電路波形直接轉(zhuǎn)變成一個(gè)上層的高級(jí)的事件。這個(gè)時(shí)候他其實(shí)就用了Chisel和FIRRTL里面的特性,。
因?yàn)镕IRRTL它有點(diǎn)像LLVM,,它可以放很多的這樣自己設(shè)計(jì)的模塊,,F(xiàn)IRRTL也可以定義自己需要的功能,。這個(gè)在LLVM里叫pass,在FIRTEL里叫transformer,。
有了這些工具,,就可以讓Chisel源碼和下面波形建立起聯(lián)系,讓調(diào)試的過程甚至比原來用Verilog還要方便,。
除了這個(gè)工具,,同學(xué)們還自定義和擴(kuò)展了一些printf,讓我們?cè)谡{(diào)的時(shí)候很多時(shí)候根本不用去看波形,。這些都得益于Chisel的強(qiáng)大和開放,。