一場(chǎng)關(guān)于開源芯片生態(tài)之語(yǔ)言與工具鏈的討論
一場(chǎng)關(guān)于開源芯片生態(tài)之語(yǔ)言與工具鏈的討論
\\\插播一條:
自己在今年整理一套單片機(jī)單片機(jī)相關(guān)論文800余篇
論文制作思維導(dǎo)圖
原理圖+源代碼+開題報(bào)告+正文+外文資料
想要的同學(xué)私信找我。
一、摘要
5.8日由網(wǎng)友的兩個(gè)問題引發(fā)了大家的廣泛探討,從Chisel與Verilog孰優(yōu)孰劣,Chisel的規(guī)范與規(guī)范,再到麻利設(shè)計(jì)與開源生態(tài)體系構(gòu)建的挑戰(zhàn)等一系列的相關(guān)探討。
二、兩段關(guān)于開源硬件語(yǔ)言和EDA工具鏈的反應(yīng)
拜讀了這篇詳盡的綜述,以及關(guān)于RISC-V的白皮書,關(guān)于選擇Chisel的理由比較讓人困惑,就是一個(gè)熟悉OpenSparcT1源碼的工程師用Verilog寫不出能夠跑Linux的cache,但是本科生用Chisel卻能夠,并且代碼量差異很大。
但其實(shí)現(xiàn)實(shí)情況是這樣,通常硬件工程師都沒有受過良好的編程語(yǔ)言的訓(xùn)練,假如如何封裝,如何設(shè)計(jì)接口,只有看到波形沒問題就能夠。由于EDA攻克了大局部后續(xù)的工作,所以從軟件開發(fā)來的角度來評(píng)估代碼自身的質(zhì)量通常都比較糟糕。所以這有可能是語(yǔ)言使用者而非語(yǔ)言自身的問題。至少過去我看過很多我EE同學(xué)的代碼,能用,但沒法看。這也是為什么國(guó)內(nèi)芯片設(shè)計(jì)驗(yàn)證的壓力那么大的理由。
假如能夠讓下個(gè)學(xué)期參加CPU設(shè)計(jì)的本科生們一局部用Verilog,后續(xù)再構(gòu)成Chisel的toolchain能承受的形式(如net list或Firrtl)然后再燒進(jìn)FPGA里,看一下這個(gè)流程花的時(shí)長(zhǎng)和用Chisel的學(xué)生是否相似。假如相似的話,那么可能證明并非Chisel優(yōu)于Verilog,而是學(xué)生們?cè)诔绦蛟O(shè)計(jì)方面受到的訓(xùn)練優(yōu)于傳統(tǒng)寫Verilog的工程師。
之所以提這件事,是由于Verilog是一個(gè)DSL,其語(yǔ)法非常貼合電路的邏輯。Chisel是以Scala為根底的,在開發(fā)時(shí)須要在Chisel
【文章福利】:小編整理了一些個(gè)人覺得比較好的學(xué)習(xí)書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦!~點(diǎn)擊綠色通訊軟件搜索airuimcu加入。
和Scala兩種概念模型之間來回切換。在硬件開發(fā)中是否要用到比較深入的OO或FP的概念,我對(duì)此表示懷疑。在NutShell的源碼中,對(duì)于各種應(yīng)用到Scala的OO特性的部分,其實(shí)也總能找到一個(gè)更簡(jiǎn)潔的Verilog替代。所以從開發(fā)者心智模型的角度,Chisel并不是一個(gè)好選擇。以Verilog為例,我認(rèn)為其提供的parameter,generate等功能對(duì)于硬件開發(fā)的抽象其實(shí)足夠了(當(dāng)然這個(gè)也是我認(rèn)為)
其次的一個(gè)顧慮是,畢竟Chisel和RISC-V幾乎來自同一個(gè)團(tuán)隊(duì),Chisel也主要用來設(shè)計(jì)CPU。那么其它的硬件怎么辦?比如RF,DSP,或是不依賴時(shí)鐘的純異步電路,Chisel及其開發(fā)思路在應(yīng)用于設(shè)計(jì)其它類型的硬件的效率/效果并未得到驗(yàn)證。
最后,Chisel是一個(gè)開源項(xiàng)目。它是一個(gè)開放的實(shí)現(xiàn),而不是開放標(biāo)準(zhǔn)。一個(gè)開放標(biāo)準(zhǔn)的形成是多方博弈的結(jié)果,由一個(gè)委員會(huì)或工作組來維護(hù),這樣確保一個(gè)語(yǔ)言的規(guī)范可以有序進(jìn)行,不會(huì)產(chǎn)生disruptive change。把創(chuàng)新的芯片研發(fā)工作建立在沒有開放標(biāo)準(zhǔn)的語(yǔ)言上,如果有一天Chisel的語(yǔ)法發(fā)生了重大變化,我們就都會(huì)變得很被動(dòng)。所以以現(xiàn)在Chisel的社區(qū)治理形式來看,恐怕也不是一個(gè)好的選擇。
比如Chisel目前沒有任何關(guān)于formal verification的文檔,雖然GitHub的issue中已經(jīng)提到了experimental里已經(jīng)有了類System Verilog Assertion語(yǔ)法的支持,但是文檔中除了幾個(gè)AP I就沒有任何線索了。
所以我的建議是,首先最理想的是,在繼續(xù)使用Chisel的同時(shí),形成一個(gè)新的HDL的委員會(huì)/工作組,形成并維護(hù)一個(gè)新的語(yǔ)言標(biāo)準(zhǔn),在此基礎(chǔ)上允許各方擁有自己的實(shí)現(xiàn),這樣可以避開使用Verilog的各種影響,同時(shí)也能避免Chisel發(fā)生重大變化或社區(qū)崩潰的情況。新的語(yǔ)言可以在Verilog和Firrtl之間互譯,從而能夠利用上現(xiàn)有的Verilog和Chisel開源工具鏈。
如果這個(gè)無法實(shí)現(xiàn),必須要選擇Chisel,則退而求其次,要盡可能地在Chisel社區(qū)中發(fā)揮影響力,使它從一個(gè)實(shí)現(xiàn)變成既定標(biāo)準(zhǔn),實(shí)現(xiàn)穩(wěn)定的迭代。
包老師團(tuán)隊(duì)的成果對(duì)國(guó)人CPU及整個(gè)VLSI/SoC開發(fā)都具有示范作用,您的選擇無論從商業(yè)開發(fā)還是教學(xué)方式都有很大影響力,很多人都在關(guān)注著您的動(dòng)向。小弟本是nobody,只是殷切希望國(guó)內(nèi)芯片半導(dǎo)體自主創(chuàng)新能通向一個(gè)健康的方向,希望包老師百忙中抽空看一下。
2)網(wǎng)友@雙塔東街陶馬文原文2
開源路真的挺長(zhǎng)。現(xiàn)在也就是RTL級(jí)別仿真做的還可以,Icarus/Yosys/Firrtl都是不錯(cuò)的方案,但我們也沒有國(guó)產(chǎn)的。再往下仿真驗(yàn)證環(huán)節(jié),形式化驗(yàn)證這個(gè)概念本身也比較新,周圍的工程師還是以看波形為主,對(duì)SVA支持程度也不一樣。再往下Synthesizing/P&R/Layout那部分就更是路漫漫其修遠(yuǎn)兮了。
三、開源芯片團(tuán)隊(duì)討論與反饋
1)Chisel與Verilog之爭(zhēng)
網(wǎng)友對(duì)于“通過一個(gè)小例子來證明Chisel比Verilog好”提出了質(zhì)疑。大家針對(duì)這個(gè)問題也進(jìn)行了廣泛的討論,大家的觀點(diǎn)也認(rèn)為從一個(gè)例子來證明兩個(gè)語(yǔ)言的好壞是不夠充分的,衡量一門語(yǔ)言應(yīng)該從多方面來進(jìn)行考慮,而"如何量化這個(gè)標(biāo)準(zhǔn)"本身就是一個(gè)科學(xué)問題。
在計(jì)算機(jī)軟件領(lǐng)域,衡量一門編程語(yǔ)言的好壞通常從:Abstraction,Performance,Integration,Simplicity,Testability,Debugging,State Management等角度進(jìn)行衡量,而對(duì)于硬件描述語(yǔ)言(HDL)而言,目前并不存在一個(gè)公認(rèn)的衡量標(biāo)準(zhǔn)。
盡管如此,大家認(rèn)為以下幾個(gè)因素對(duì)于HDL而言是至關(guān)重要的:1.同樣對(duì)于一個(gè)對(duì)綜合器理解不夠深入的初學(xué)者,在相同的時(shí)間內(nèi),使用不同的編程語(yǔ)言,實(shí)現(xiàn)的某個(gè)具體模塊的質(zhì)量如何。2.對(duì)于一個(gè)剛?cè)腴T的設(shè)計(jì)者,在使用不同語(yǔ)言實(shí)現(xiàn)相同功能的模塊時(shí),所用的工作時(shí)間如何。3.對(duì)于一個(gè)擁有多年設(shè)計(jì)經(jīng)驗(yàn)的工程師,將一個(gè)相同的模塊做到極致,最終的質(zhì)量如何。
對(duì)于第一個(gè)和第二個(gè)問題而言,大家認(rèn)為Chisel還是存在一定的優(yōu)勢(shì)的。最后,大家得出的結(jié)論是:芯片設(shè)計(jì)的質(zhì)量最終取決于設(shè)計(jì)人員的水平,而編程語(yǔ)言也只是一種實(shí)現(xiàn)手段。從國(guó)內(nèi)某個(gè)知名芯片設(shè)計(jì)大廠的競(jìng)賽數(shù)據(jù)中可以看到,即使同樣使用Verilog語(yǔ)言,不同的設(shè)計(jì)人員在PPA上的差距可以高達(dá)20%-30%。
因此,在討論編程語(yǔ)言的區(qū)別時(shí),不一定非要爭(zhēng)一個(gè)高下,踩一捧一是不可取的。正如在軟件領(lǐng)域也存在許多編程語(yǔ)言一樣,硬件設(shè)計(jì)語(yǔ)言也應(yīng)當(dāng)百花齊放才對(duì)。Chisel作為一門新生的語(yǔ)言,在配套的基礎(chǔ)設(shè)施,認(rèn)可度等各個(gè)方面也是存在它的不足之處,只有通過大家都對(duì)社區(qū)進(jìn)行貢獻(xiàn),整個(gè)生態(tài)才會(huì)越變?cè)胶茫?/span>
2)Chisel未來的發(fā)展
此外,網(wǎng)友提出了對(duì)于Chisel未來的擔(dān)憂。針對(duì)這個(gè)問題,大家目前的看法普遍是樂觀的,從歷史來看,大部分編程語(yǔ)言的向前兼容性都是不錯(cuò)的,發(fā)生過重大語(yǔ)法的變化的語(yǔ)言還是少數(shù)。即使發(fā)生了重大語(yǔ)法變化,那也完全可以當(dāng)作兩門獨(dú)立的語(yǔ)言,將過去的一個(gè)版本的分支遷出,就如同Python2與Python3一樣。
關(guān)于標(biāo)準(zhǔn)化的問題,世界上的大部分語(yǔ)言在制定標(biāo)準(zhǔn)的時(shí)候都是由標(biāo)準(zhǔn)化委員會(huì)進(jìn)行推進(jìn)與審核的。作為一門被許多人使用的語(yǔ)言,Chisel的標(biāo)準(zhǔn)化委員會(huì)/工作組也是存在的,如國(guó)內(nèi)的Sequencer也在參與相關(guān)工作。
最后,大家也感謝這位網(wǎng)友可以提出這么中肯的意見,以及對(duì)于中國(guó)芯片產(chǎn)業(yè)的殷切期盼,只有大家共同努力才能使得國(guó)內(nèi)的開源芯片生態(tài)體系越來越完善,共勉。
3)開源工具鏈的討論
此外,網(wǎng)友對(duì)開源工具鏈提出了道阻且長(zhǎng),任重道遠(yuǎn)的看法,這個(gè)問題也引起了大家的廣泛討論。誠(chéng)然,開源芯片生態(tài)體系建設(shè)分為兩個(gè)方面:開源芯片與開源的工具鏈。包老師也常說,開源芯片"香山"更多的是大家能看到的"冰山一角",實(shí)際上在冰山下面,也就是從前到后的整套基礎(chǔ)設(shè)施也是開源生態(tài)不可或缺的一部分。
互聯(lián)網(wǎng)的興起離不開如雨后春筍般興起的APP,而在這些APP的背后,許許多多的開源軟件庫(kù)與軟件工具鏈的功不可沒。在芯片設(shè)計(jì)領(lǐng)域亦是如此,如果有足夠多的開源IP,配套的開源工具鏈,敏捷設(shè)計(jì)方法學(xué)與敏捷驗(yàn)證工具鏈。那樣芯片設(shè)計(jì)領(lǐng)域會(huì)不會(huì)像互聯(lián)網(wǎng)一樣,涌現(xiàn)出許許多多的成功的商業(yè)案例呢?
網(wǎng)友的擔(dān)憂不無道理,整條工具鏈所涉及到的工具,大大小小上百個(gè),如果想要建立整條開源的工具鏈還是存在一定難度,但是我們不妨可以沿著一條主線;”開源的敏捷設(shè)計(jì)工具鏈“,建立整條工具鏈的子集,逐步代替。
如果想要建立工具鏈,則應(yīng)該分門別類,逐個(gè)擊破,在這里,我們可以從兩個(gè)方面對(duì)工具進(jìn)行劃分:其一,從輔助前端設(shè)計(jì)的角度,語(yǔ)言或者語(yǔ)言的feature本身也屬于工具的范疇,比如Chisel和 Spinal HDL可以是一門語(yǔ)言,也可以算作是Verilog generator,是用于生成Verilog,降低前端開發(fā)和驗(yàn)證成本的輔助工具;Chisel種的一些比較好的feature,能夠降低開發(fā)者的驗(yàn)證成本,既算是語(yǔ)言功能,也可以算是工具。其二,傳統(tǒng)意義上的EDA工具,如仿真驗(yàn)證工具,以及邏輯綜合、物理設(shè)計(jì)和Signoff工具,理解為通用含義上的EDA工具。這兩方面工具鏈的建立仍然存在許多挑戰(zhàn),只有抽絲剝繭,找到良好的切入點(diǎn),才能有逐步解決的可能。
在輔助前端設(shè)計(jì)方面:RTL語(yǔ)言的好壞會(huì)嚴(yán)重影響前端開發(fā)的效率,并且RTL語(yǔ)言也會(huì)和仿真驗(yàn)證工具存在較強(qiáng)的耦合,比如如果想要在Chisel語(yǔ)言上實(shí)現(xiàn)形式化驗(yàn)證,可能不得不為Chisel添加類似于System Verilog Assertion的功能,并且支持model checking。但同時(shí)也可能存在一些好處,比如Chisel所生成的Verilog表示可能會(huì)在運(yùn)算符上限定的更加嚴(yán)格,這樣可以嘗試?yán)?/span>用Verilog的子集來設(shè)計(jì)一個(gè)RTL仿真器,它的通用性可能會(huì)差些(無法擴(kuò)展到通用Verilog),但是性能的挖掘空間,可能更大一些。同樣,如果這個(gè)仿真器真的設(shè)計(jì)好了,并且效果可達(dá)預(yù)期,就會(huì)成為 Chisel生態(tài)的一部分,提升 Chisel的吸引力。從這個(gè)角度來講,輔助語(yǔ)言的工具,確實(shí)要比語(yǔ)言本身要重要一些,而這時(shí)候,工具本身也可能在概念上內(nèi)化為語(yǔ)言的一部分,那就是,大家會(huì)說Chisel的仿真工具很好用,速度奇快。
語(yǔ)言的發(fā)展,總歸是會(huì)朝著更加符合工業(yè)需求的方向發(fā)展,但這個(gè)“需求”是多維度的(比如開發(fā)效率、后期維護(hù)成本等)。比如軟件領(lǐng)域的 Rust,其學(xué)習(xí)曲線比較陡峭,但可以有效減少常見的代碼bug,降低后期的維護(hù)成本,因為Rust可以保證代碼運(yùn)行效率,同時(shí)在編譯器層面保證并發(fā)安全和內(nèi)存安全。對(duì)于百萬行代碼的項(xiàng)目來說,項(xiàng)目體量較大,后期維護(hù)成本不容小覷,借由 Rust來一定程度上避免代碼質(zhì)量受限于開發(fā)者水平,以降低開發(fā)效率來?yè)Q取更低的維護(hù)成本,就變得很有吸引力了。
在傳統(tǒng)EDA工具鏈方面:開源EDA的全流程工具鏈的質(zhì)量確實(shí)差很多。整個(gè)工具鏈的流程很長(zhǎng),一個(gè)或多個(gè)環(huán)節(jié)的工具質(zhì)量差一些,組合起來缺點(diǎn)會(huì)被疊加放大,最后的PPA相比商業(yè)的EDA工具會(huì)差很多。而在EDA行業(yè)這個(gè)事情幾乎是無法容忍的,優(yōu)秀的設(shè)計(jì)者總是期望我的設(shè)計(jì)工具一定以最小的面積成本獲得最高的性能,每1%的面積縮減,都意味著成本的降低!用一個(gè)不恰當(dāng)?shù)睦?/span>,"行百里者半九十",也可以認(rèn)為達(dá)到了90%的性能所花的時(shí)間與達(dá)到100%的性能所花的時(shí)間相差一倍!而在實(shí)際的工程中這個(gè)數(shù)字甚至可能達(dá)到甚至十倍!
同時(shí)由于行業(yè)特點(diǎn),EDA工具在驗(yàn)證工具上需要和芯片設(shè)計(jì)者交互;在輔助制造的工具上,需要得到制造廠商的認(rèn)證;在EDA工具質(zhì)量評(píng)測(cè)上,又需要設(shè)計(jì)公司的真實(shí)設(shè)計(jì)。因此,許多的初創(chuàng)EDA公司內(nèi)憂外困,這就是所謂的行業(yè)壁壘。
但是有這么多困難就是沒有希望了嗎?也并非如此。隨著"開源芯片生態(tài)"的不斷擴(kuò)大,“一生一芯”,“香山”等優(yōu)秀的開源芯片項(xiàng)目的影響力不斷提升,每年都產(chǎn)生大量的用戶與真實(shí)設(shè)計(jì),可以持續(xù)的為"開源芯片工具鏈"提供更加高質(zhì)量的芯片輸入,為不斷打磨迭代提供了數(shù)據(jù)基礎(chǔ)。與此同時(shí),隨著人工智能的不斷發(fā)展,大家有了強(qiáng)有力的從數(shù)據(jù)中尋找pattern的方法論,相比于上世紀(jì)EDA誕生伊始靠著人工的提取數(shù)據(jù)特征,例化到code中去,效率提升了很多。同時(shí),優(yōu)化理論,機(jī)器學(xué)習(xí),甚至Learning for Optimization的發(fā)展都對(duì)于EDA這個(gè)算法密集型的領(lǐng)域有著深遠(yuǎn)影響。也許過去不能被優(yōu)化的問題,在未來引入了最先進(jìn)的方法論后可以被解決!
冰凍三尺,非一日之寒;滴水穿石,非一日之功。誠(chéng)然,正如網(wǎng)友所說的“任重道遠(yuǎn)”,建立“開源芯片生態(tài)”是一個(gè)道阻且長(zhǎng)的過程。但是,與網(wǎng)友提到“任重道遠(yuǎn)”時(shí)的迷茫和悲觀不同,我們?cè)谔?/span>到“開源芯片生態(tài)”任重而道遠(yuǎn)時(shí),更多的是心中涌現(xiàn)出的澎湃和淡然,是對(duì)事物有了相對(duì)深入和客觀的認(rèn)識(shí)后,展示出的一種自信和灑脫。通過構(gòu)建一套110nm可流片的P&R工具,我們有機(jī)會(huì)從實(shí)踐中獲得第一手的信息,這是我們對(duì)開源EDA的未來充滿期待和信心的重要原因。
四、總結(jié)
開源芯片生態(tài)的建立離不開這樣關(guān)心國(guó)家芯片發(fā)展的優(yōu)秀網(wǎng)友,下面援引一位老師的一句話作為共勉:“鵬怒而飛,其翼若垂天之云;水擊三千里,碧空九萬丈,好風(fēng)憑借力,送我上青云!”