在 VSCode 上建置 Verilog 開發環境
2024-09-02T22:19:17+08:00 | 4 minutes read | Update at 2024-09-02T22:19:17+08:00

本文將介紹如何從頭開始在 VSCode 上設定 Verilog 的開發環境,包含語法標示,定義跳轉,以及其他實用的功能
由於在學校的 CAD 工作站上各種軟體套件總是東缺西缺的,我平時都是在自己的電腦上開發,寫完之後再整包丟上去合成。 VSCode 上 Verilog 的 Extension 們在設定上不是特別親民,這篇文章主要在記錄我當初設定的過程,也希望能幫到一些為了同樣事情煩惱的人類。
筆者的作業系統是 macOS,但以下的設定應該在所有 Unix-Like 的系統上都能正常運作。 在所有設定做完之後預計可以達成以下功能:
- Syntax Highlighting
- Linting and Error Detection
- Auto Completion
- Go to Definition
- Find all References
- Formatting
- Auto Instantiate Module
- …
Extension 介紹
網路上已經有不少文章都推薦這款擴充元件:
然而,實際使用過後我發現一些麻煩:
- 需要設定 ctags
- 如果模組寫在別的檔案裡面就找不到 reference 了
雖說第一點只是設定麻煩一點而已,但第二個實在很影響日常使用。 我當初有懷疑過是自己設定錯誤,不過看到留言區也有人遇到同樣的問題,就先當他沒這個功能吧(
我後來轉向另一個擴充元件:
直接按下安裝,應該就可以看到有 Syntax Highlight
出現
對著變數或是模組名稱按下右鍵,選擇 Go to Definition
,即可跳轉到定義的位置,就算模組的定義寫在別的檔案也能搜尋的到。
同時,右鍵之後選擇 Find all Reference
,可以找到所有參考到該變數的地方。
另一個我很常用的功能是自動生成模組的接線。
打開 Command Palette 之後選擇 Auto Instantiate modules in workspace
基本上有這兩個功能就能滿足大部分程式編寫的需求了,但我們還能更進一步!
接下來我們要安裝兩個東西:Verilator 用來支援 Linting,以及 verible 用來支援 Formatting。
Verilator 的安裝與設定
Verilator 是一款優秀且開源的 SystemVerilog Simulator,近年來也被許多企業採用。 這邊安裝他的目的只是作為 Linter,但想用他跑模擬也是完全沒有問題的。
macOS 安裝 Verilator 可以使用 Homebrew:
brew install verilator
Linux 可以參考官方說明
安裝完成之後確保 verilator 可以正常執行:
❯ verilator
Usage:
verilator --help
verilator --version
verilator --binary -j 0 [options] [source_files.v]... [opt_c_files.cpp/c/cc/a/o/so]
verilator --cc [options] [source_files.v]... [opt_c_files.cpp/c/cc/a/o/so]
verilator --sc [options] [source_files.v]... [opt_c_files.cpp/c/cc/a/o/so]
verilator --lint-only -Wall [source_files.v]...
之後來到 Extension 的設定,設定好 Compiler Type,也可以順便把 Compile On Save 打開。
除了可以使用 Verilator,這款 Extension 也支援 VCS 跟 Verible。
設定完成之後來檢查一下 Linter 有沒有正常運作。
此時假設我們寫出了這樣的程式碼,Linter 就能發現我們有寬度不符的問題:
Verible 的安裝與設定
Verible 是由 chipalliance 開發的 SystemVerilog Parser,在這邊我們用他來 Format Verilog。
如果是 Windows/Linux 使用者,可以選擇安裝這個 Extension,他提供 Prebuilt Binary,安裝完之後可以直接使用。
macOS 上可以使用 Homebrew 安裝,不過我當時安裝時出現一點問題,最後是直接下載 Released Version 來用。
之後來到 Extension 的設定:
如果 Verible 是手動安裝的,請確保他有在 $PATH
內,之後這個選項選擇 None,否則直接選擇對應的版本即可。
之後按下 CMD+SHIFT+P 打開 VSCode 的 Command Palette,選擇 Format Document
或是在 VSCode 中設定 Format on Save
來讓每次儲存的時候自動套用 Formatting。
在 Extension 的設定中,我們可以修改 verible 的參數來控制各種 Formatting 的選項,以下列出幾個常用的:
--column_limit
可以控制每行最多的字元數,預設值為 100。--indentation_spaces
可以控制縮排的大小,預設值為 2。
如果你需要暫時停用 Formatting,可以使用以下語法:
// verilog_format: off
... untouched code ...
// verilog_format: on
或是
/* verilog_format: off */
... untouched code ...
/* verilog_format: on */
其他設定
這款 Extension 的缺點在於當檔案非常多或是非常大的時候,會因為需要 Index 的東西太多而卡頓。 以下幾個設定跟 Indexing 有關:
Include & Exclude Indexing
這兩個設定可以控制包含以及排除的檔案,一個常見的用法是把合成出的 Netlist 放在一個叫做 syn
的資料夾裡面,然後排除這個資料夾。
不然 Index 的速度絕對慢到讓你想哭。
Precision
這個選項可以控制 Parser 的 Precision,如果遇到嚴重的效能問題可以試著修改一下這個選項,說不定會有幫助。
Max Line Count
這個選項可以讓 Extension 遇到很大的檔案時切換 Index 的方式來改善效能。
結語
本文介紹了如何逐步在 VSCode 上建立 Verilog 的開發環境。希望這篇文章能夠幫助那些希望在自己電腦上進行 Verilog 開發的讀者。如果您在實作過程中遇到任何問題,或者發現文章中有錯誤或不精確之處,還請不吝指正。