現在hls越來越強大,hls有什麼Verilog做不到的事情嗎,Verilog大家認為是否會被淘汰呢,我現在一直在用Verilog做FPGA和asic,慌得一匹。。


HLS也做了很多年了,在FPGA領域甚至還有一些應用,但是在ASIC領域還主要是Verilog,而且主流的ASIC設計EDA廠商也不會很積極支持,與其說HLS替代,還不如說Chisel更有可能,不過還是面臨主流EDA廠商是否積極支持問題。

Chisel這樣用直接生成Verilog的方案,對於一些特定功能的IP可以使用,經過驗證過的可以縮短晶元的開發週期,而且主流的EDA工具後續的開發流程也完全適用。Chisel家族也更接近硬體的設計思維方式。

Chisel在RSIC-V上風光了一把,但是對於傳統的ASIC設計流程,目前各種方法學,已經非常完善了,ASIC設計更像是一種模式設計,從功能制定到最終流片及驗證,完全遵循業內公認的設計方法學,晶元必然能夠成功。

直接打破積累了多少年的開發流程和經驗,還有前人踩過了那麼多的坑。當然是很難了。要說替代,我更願意相信是Chisel這類的HDL語言,Chisel不是未來,也至少是未來的一站。

Chisel家族還有一個叫Spinal HDL的,文檔也非常完善。可以瞭解下。是一個工程師開發的,和高校出品的Chisel還是有些不同的,更偏向工程化思維。

Welcome to SpinalHDL』s documentation!?

spinalhdl.github.io

關於Spinal HDL我還裝了下環境,跑了一個demo,發出來可以一起看下。

https://ninghechuan.com/2020/05/08/2020-5-9-SpinalHDL%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/?

ninghechuan.com

看到有朋友用HLS和Verilog的比較來類比C語言和彙編語言,個人認為這樣的類比不是很合理,C語言和彙編語言的關係,應該是Verilog和門級網表/手繪數字電路圖來類比比較。HLS/Chisel/Spinal HDL和Verilog的關係,用Python和C語言的關係比較,是不是更形象一些?


對於HLS,個人感覺目前頂多在FPGA行業會有一定的發展,畢竟Xilinx、Intel都在大力推自家的HLS(比如Xilinx最新的VItis),但對於ASIC行業,主流肯定還是Verilog,畢竟對於ASIC開發流程而言,RTL設計週期並不長,而HLS這種東西面積和性能太不可控了(因人而異),所有的優化都依賴於編譯器,生成的RTL代碼萬一有坑就迷茫了。

而對於Chisel、SpinalHDL,個人認為絕對是一個真正的數字電路描述的發展方向,在面積和資源與手寫Verilog無差的情況下,開發效率天上地下(不到一百行代碼實現一個帶行緩衝期的Sobel邊緣檢測演算法實現,代碼如偽代碼一般,可讀性相較於Verilog好的不止一點半點)。當然這個東西由於是基於Scala的,而且需要一點面向對象的編程基礎,對於純硬體和邏輯出身的人來講入門有一些難度,但入門掌握後你會放棄Verilog的。有想對SpinalHDL瞭解的小夥伴可以關注本人公眾號「似猿非猿的FPGA」。

2021.1.1追更:

趁著假期把近半年筆記整理匯總下,歡迎交流

從Verilog到SpinalHDL?

mp.weixin.qq.com


題主是不是看到這個回答害怕了:

以後hls是否會替代Verilog成為主流FPGA編程語言??

www.zhihu.com圖標

這是我之前用小號的回答,也沒想到會惹來這麼大的爭議... 別慌,這不是搶飯碗預警。先說結論:

Verilog 暫時不會被淘汰,而且也不會被 HLS 淘汰,但是我之前的答案依然成立。

對於題主的疑惑,我來澄清一下,總共三點,先說說硬體設計工作的要求,再談談 Verilog 會不會淘汰,然後再來和大家分享一下高層次綜合(HLS)對於 Verilog 的意義。

硬體工程師的喫飯本領

從核心來說硬體設計的工作大部分是設計而不是實現。設計電路的工作,看得是工程師對電路原理的理解,比如如何設計狀態機,定製內存結構,流水線和位寬優化。這些知識都是要從本科最基礎的知識,電阻電容電感那些,開始積累的。在那之後,工程師才開始通過編程實現硬體結構。同理,之後模擬或者驗證的工作,大多數時間和精力也是花在設計的地方。

假如有一天 Verilog 真的被淘汰了,但是硬體的設計原理是不會被淘汰的。工程師只需要再掌握一門取代它的語言就可以了,設計過程換湯不換藥。就好比有一天 J 語言被淘汰了,大家都用 W 語言來寫代碼,對 J 語言的職業玩家來說也不算天塌下來了吧。只需要學習如何在 J 裏做平時 W 裏做的優化好了,優化原理是不會變的。所以很多時候學習 Verilog 其實還是在學習硬體優化,所以大家覺得難,如果對電路很熟悉,上手還是很快的。我玩了一年 VHDL 以後,學 Verilog, Chisel, HLS 的時候,電路設計的核心觀念都是沒有變的。晶元技術還是那個技術,底層電路都是不變的,只不過是寫法變了。這一部分的重要性在量子計算到來前基本不會變。

註:本來想舉例說 Python 取代 C 的,但是取代不了... 還是用簡單的 J 和 W 吧。

Verilog 會被淘汰嗎?

前面說了設計是硬體設計的核心,Verilog 則是實現硬體結構的手段。那麼 Verilog 是否被淘汰,取決於它是否在硬體設計方面的有一個最優店。如果有一天 Verilog 在各方面都不佔優,那麼它就該被淘汰了。但是今天的 Verilog 沒有被淘汰,說明目前還是沒有語言在編寫上比 Verilog 更方便,並且可以覆蓋 Verilog 所有功能的。

那麼 Verilog 會被淘汰嗎?這要看如何定義淘汰吧,Verilog-95 不就被 Verilog 2001 淘汰了,然後 2001 被 2005 淘汰了,然後 SystemVerilog 出來了... 所幸區別不大,也被大家看成是同一種語言。【VHDL 愛好者這裡還是要推一下 VHDL,最新的標準都更新到 2019 年了:VHDL-2019: The Users Standard】

據我所知,ARM 內部都是已經用 SystemVerilog 編寫了(如果你覺得 SystemVerilog 不算 Verilog,那麼 Verilog 已經逐漸被淘汰了),顧名思義,系統化編程,SystemVerilog 可以和驗證端代碼相結合,做模擬或者驗證會比較方便。

未來 Verilog 能被其他非 Verilog 系的語言取代則需要兩個條件:1)Verilog 標準長期不更新,功能不拓展;2)其他語言標準功能覆蓋和追趕速度都超過 Verilog 本身。目前真的能說是對手的也只有 VHDL,但是還是有輸有贏。

HLS 會不會是取代 Verilog 的編程語言?

高層次綜合(high-level synthesis,簡稱 HLS)是一種可以把高級語言自動轉化成底層硬體描述語言的綜合手段。這裡的高級語言,不單單是 C/C++,Python,也可以是其他語言,比如 Coq,Java。那麼我們回到之前給出 Verilog 被淘汰的條件,目前大多數 HLS(據我所知是所有,但是我也不敢說)都不能完全覆蓋 Verilog 的功能,暫時不會去威脅到 Verilog 的地位

好了,接下來我來說明一下為何我之前的答案依舊成立。Verilog 主要是作為在設計硬體的工作上的編程語言,而硬體設計,則主要分為兩個方面,可編程晶元,比如 FPGA, 和完全定製化硬體,比如 ASIC。我一直很看好用現在的 HLS 替代 Verilog 在 FPGA 上編程,但是認為現階段的 HLS 在替代 Verilog 在 ASIC 設計上的地位還有很多路要走。

此處的 FPGA 不是用於 ASIC 的測試,而是用於在雲上供軟體工程師進行高性能計算,比如微軟的 Catapult。在雲計算這一塊,因為開發時間極短的原因,可以使 HLS 和手寫 Verilog 在性能上的差距被忽略不計。比如我就想跑一個高級語言寫的大工程,運行個幾次,我不可能造一塊 ASIC 晶元;我會選擇租個伺服器跑,那麼這個伺服器裏可能不是 GPU 而是 FPGA,那麼 HLS 來寫就很方便。

而在 ASIC 領域,因為粒度控制不足,所以晶元面積會相對來說比手寫 Verilog 大一點,性能相差無幾。如今的門電路成本在晶元製造行業相較於幾年前還是比較廉價的,有些廠家也願意犧牲這部分的成本來換取更短的開發時間。隨著後期計算機結構的穩定,逐漸 IP 化,這部分的差距會逐漸縮小,目前還需要時間積澱。

很多朋友用 Chisel/Bluespec 打壓 HLS,我在這裡小提一下。相較於 HLS,這些定製語言(domain specific language,DSL)雖然不是很完善,在學術界確實也是比較熱門的工具。不過我覺得還是不至於到說晶元必然成功,這一點也在今年的 PLDI2020 的一篇論文點到了,因此它們提出了 LLHD(有機會我會另外細說)。而且最重要的一點,它們需要電路原理之外的學習成本去掌握這項語言。所以它們替代 Verilog 也不是不可能,但是 DSL 和 HLS 的出發點不一樣,是可以共同存在的。


近幾年是 HLS 突飛猛進的風口。機器學習的推進造成了定製硬體結構(domain specific architecture)的重要性,Google 提出了 MLIR 框架來構建一個完整的生態。而這可能將對 HLS,以及一切高性能計算相關的編譯器帶來革命性的變化(當然,之後也是被可能打腫臉的)。

我對未來的展望是,Verilog 的從業者十年後會主要從事單個 IP 的設計,而整個系統設計,則會是用 HLS 來完成(編譯器會自動實現替換 IP)。我看到有答案把 HLS 和 Verilog 比做是 Python 和 C,我是不同意的:HLS 想要實現硬體結構必須要先生成 HDL,運行 Python 需要必須要轉換成 C 語言嗎?

最後,時代總是在進步的,就像你不可能擁有一臺永遠不會被淘汰的電腦,習慣與時俱進就好了。更何況編程語言的迭代週期是很長的,如果真的擔心未來發展太快,可以考慮直接去學最新的量子計算...

打得匆忙,有問題的話歡迎大家指正,謝謝。


我很希望它被淘汰,這可能是我見過的除了彙編之外編碼效率最低的語言了。從業界來看,很多工程師還是秉持著verilog或VHDL,甚至連system verilog引入的優秀特性都不願意嘗試。個人感覺業界風氣不是很好。

但是取代verilog的也不會是HLS,HLS還是太侷限了,很多並行性很強的硬體行為是不能用C語言這種順序執行的模式來描述的,即便是廠商引入了非常多的pragma。試想一下用HLS寫一個五級流水線的MIPS CPU……對於硬體工程師來說,pragma終究還是軟約束,綜合工具犯蠢的時候pragma也沒用。但HLS也不是一無是處,它給軟體工程師提供了一個快速上手的通道,給硬體開發人員提供了快速驗證和迭代的方式。它在一些Dataflow的優化還有流水級的劃分上是要比人來得細緻的,因為有明確的數學模型指導。

————以下瞎扯————

Chisel以及bluespec也許是更好的選擇,但是這兩個我都沒用過,有時間還是想學習一下的。但是Verilog距離被淘汰還遠的很。這個問題可以用軟體的編程語言來類比。越是高級的語言效率越低,從彙編到C到python。但是算力越來越便宜,人們越來越關注如何實現更複雜的功能而不是更快的代碼。一些標準化的東西固化下來成為高級語言的基礎設施。現在來看,verilog裡面有些東西是可以固化的,比如乘法器和加法器。但是硅始終都還是太貴了。FPGA還好,但對於大一點的設計,FPGA也不便宜。大家還是需要去摳硬體的細節。


看應用領域,有些領域註定要求短平快,能用就行,有些領域需要電路層優化,一分錢一分錢扣成本


推薦閱讀:
相關文章