[0]為什麼是SpinalHDL-Spinal簡介

msuad發表於2023-01-14

[0]為什麼是SpinalHDL-Spinal簡介

1. verilog/VHDL打咩

稍微先說兩句SpinalHDL,硬體描述語言(HDL)分為verilog/VHDL和其他(霧),不過確實是這樣,眾多eda基本只對這兩種語言有良好支援,但是這兩門上古語言我一言難盡。。。

筆者用的是verilog,並沒有寫過什麼大型的專案,光是一些小專案,他對型別檢查的坑讓筆者花了很多時間去查bug哈,比如一個最簡單的位寬不匹配,坑了很多次/笑哭

所以需要一些比較新一些的語言,什麼?SystemVerilog?好像也不是不行哈,確實vivado對SystemVerilog支援還是不錯的,但是畢竟只是對上古語言的修修補補。

2. 幾個基於DSL的HDL生成器

其實嚴格來講很多語言都有,比如jshdl、pythonhdl有很多。

但是比較有名的基於scala的chisel和SpinalHDL、基於Haskell的bluespec。

由於Haskell是上世紀90年代出來的一個函式式的語言,估計比較怪異難學(參考lisp),先不考慮。

對於chisel,是伯里克利大學搞出來的,我翻閱了一下百度,感覺是為了寫riscv而創造了chisel。而且有很多有名的riscv處理器都是用chisel寫的。

但是和SpinalHDL相比,兩者生成的verilog中SpinalHDL是可讀可維護的。

3.BSV(BlueSpec Verilog)介紹

(1)BSV相對於chisel的可取之處(這篇文章很好,裡面還有bsv的資料)

作者:parker liu
連結:https://www.zhihu.com/question/26816009/answer/1257445442
來源:知乎
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

另外,Chisel只能用於電路設計的程式設計,不能用來寫電路的驗證程式,需要用Verilog來寫驗證程式。而Bluespec則是全面的,既可以用於電路設計,也可以用於電路的驗證,而且可以用來寫硬體電路的spec,硬體架構模型。

在電路設計的抽象機制上也有不同,Chisel和Verilog一樣,都是基於時鐘節拍的動作來設計電路的。而Bluespec則是使用了基於Term Rewrite System的Atomic rules的抽象來設計電路的,在設計高併發的電路時比Chisel要簡潔很多,更不容易寫錯。

Bluespec是一個商業公司,而且是systemVerilog標準的制定者之一。有著很完善的文件,高質量的培訓資料,和循序漸進的引導你入門的書。Chisel的資料則相對匱乏很多,學習資料的質量也不夠好,讓初學者剛開始時比較茫然。另外,作為個人的感覺,Scala的語法噪音比Haskell的多多了,相對Haskell要囉嗦很多。

Bluespec是一個廣譜的電路設計工具,無論什麼種類的電路都可以高效地設計出來。而C和C++,systemC則只適合用來設計比較規整的資料流計算的電路,其他控制型別的電路則實現的效率很低,不能用。

(2)bsv優勢:寫ip核

作者:WangXuan
連結:https://www.zhihu.com/question/54912932/answer/2374219869
來源:知乎
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

BSV的優勢包括但不限於:

  • 輸入輸出訊號封裝為method方法、自動生成握手訊號
  • 可用複合資料型別來組織資料,提高程式碼可讀性和可維護性。
  • 提供各種小型FIFO模組,在構成複雜的彈性流水線電路時,比Verilog更高效。
  • 可用順序結構、瞬時結構、並行結構構成狀態機,相比Verilog手動維護狀態轉移更加方便。
  • 支援多型,獲得儘可能多的程式碼複用。
  • 在多型的加持下,BSV的模組庫會比Verilog模組庫的通用性更強,因此BSV具有大量的官方庫或第三方庫,來支援各種常見功能,例如定點數、浮點數、LSFR、CRC、AXI匯流排等

BSV生成的Verilog和手寫Verilog相比,資源量和時脈頻率不差多少。但 BSV 的程式碼量往往很低,並獲得更高的可讀性、可維護性。這裡給出一些直觀樣例:

  • BSV 編寫 RISC-V RV32I 流水線 CPU 只有200行(手寫Verilog可能要600行),在 EP4CE115F29C8 FPGA 佔 5kLE,時脈頻率達到 77MHz 。
  • BSV 編寫 JPEG 影像壓縮器只有300行(手寫Verilog可能要1000行),在 EP4CE115F29C8 FPGA 佔 12kLE,時脈頻率達到 43MHz,效能達到 344 M畫素/秒 。

個人認為 BSV 非常適合編寫模組 (IP核)。方法是:用BSV編寫模組和testbench,在BSV階段就做好驗證,然後生成Verilog模組。另外你還能用BSV testbench來生成Verilog testbench,進行Verilog模擬。後續使用時,把 Verilog 模組嵌入到 FPGA 專案中即可。

如有興趣,可閱讀我的 BSV 教程:

4.總結

由上面所說,這三門工具獨有自己的可取之處,bsv穩定、chisel的riscv實踐豐富、spinal看起來更新鮮。其實我覺得是有必要三門都學習一下的。

5. 學習路徑

以下內容摘自csdn

Scala入門

SpinalHDL是基於Scala來實現的,因此在學習SpinalHDL使用前需要對Scala語法有一定的瞭解。Scala是一門基於JVM的語言,其靈活性個人感覺與Python不相上下,這裡學習Scala推薦部落格:

Learning Chisel and Scala Scala Part I(https://vvviy.github.io/2018/12/01/Learning-Chisel-and-Scala-Part-I/)

Learning Chisel and Scala Scala Part II(https://vvviy.github.io/2018/12/12/Learning-Chisel-and-Scala-Part-II/)

透過兩篇部落格,可以對scala又一個快速的瞭解,有過Systemverilog物件導向經驗的小夥伴理解起來可能更容易一些。

如果想更進一步細緻的瞭解Scala,這裡推薦兩本書:

《Scala程式設計實戰》(微信讀書裡可以直接看):

img

《Scala程式設計》第三版(有需要電子版的小夥伴可以私信我)

img

對於Scala,SpianlHDL裡面用到的語法也不多,而開始的目的不是讓我們去精通Scala去面試大資料的,所以不必太糾結於其中,當然愛好學習的人除外。

SpinalHDL資料

學習SpinalHDL首先要做的是:

​ 讀SpinalHDL-Doc

​ 讀SpinalHDL-Doc

​ 讀SpinalHDL-Doc

在百度或谷歌可直接搜尋SpinalHDL-Doc

除了SpinalHDL-Doc之外,這裡推薦另外兩個練手參照的地方:

https://gitee.com/peasent/SpinalWorkshop

https://github.com/jijingg/Spinal-bootcamp

把這些能夠手把手的過一遍之後,相信拿SpinalHDL去做專案應該還是OK的。

最後,遇到問題可以去Gitter放膽去問,這裡貼上鍊接:

https://gitter.im/SpinalHDL/SpinalHDL

SpinalHDL資料

最後,歡迎有更多的小夥伴來一起探討SpinalHDL,讓優秀的設計思路能夠普及開來,提升RTL生產力。

相關文章