たいちょーの雑記

ぼくが3日に一度くらい雑記をかくところ

VSCodeをVerilogHDLのすごいエディタにする

VSCodeをVerilogHDLのすごいエディタにする

HDLを書きたいけどいいエディタがないょー>< という皆さんへ
VSCodeをVerilogHDLのすごいエディタにする方法をご紹介

VSCodeって?


VSCODE
Visual Studio Code

Visual Studio Code is a code editor redefined and
optimized for building and debugging modern web and cloud applications.
Visual Studio Code is free and
available on your favorite platform - Linux, Mac OSX, and Windows.

つまりVisual StudioとかいうMicrosoft社が販売している(高いのは80万円ぐらい)強すぎるIDEをフリー版にしてマルチプラットフォームにしたもの。

いろんな言語に対応していて(させることもできる)、 有志が作った拡張機能とかをインストールすることで強いエディタに育てられます。
この記事もVSCodeでMarkDownという形式で書いてます。

デフォルトではVerilogHDL用の機能が無いのでカスタマイズしていきます。
俺についてこい!

インストール方法


ここにアクセスしてプラットフォームにあったアーカイブとかインストーラをダウンロードします。

winなら

exeインストーラがここに ここです

zipアーカイブとかLinuxMacなら

下の方にありまする こっち

ダウンロードし終わったらダブルクリックして解凍とかインストールしてください。(ここは説明いらないと思います)

VSCodeがインストールされたら起動しましょう

ようこそVSCodeへ


これがVSCodeです。カッコいい
画像
さっそく拡張機能をインストールしていきます。
最近のバージョンはやり方が簡単になりました。
vscode4.png
ここをクリック
vscode5.png
こういうのが出たら検索ボックスに「HDL」と入れてみましょう。
そして
vscode6.png
上から二番目のVerilogHDLをクリックします。 そしたら vscode7.png
こういうのがでます。 これはVerilogHDLを書くためにシンタックスハイライトやシンプルなスニペット補完をしてくれるナイスな拡張機能です。
作ったのはIWD研の人らしいです。 vscode8.png
さっさとインストールします。

これでVSCode側のうんぬんはおしまいです。 VSCodeを再起動すればVerilogHDLの拡張機能が有効になります。


iverilogを用意する。


Win版

せっかくHDLを書いてもiverilogがないとどうにもならんので用意します。
といってもここを見てもらえばわかるのでwindows版は割愛

Linux版のいんすこ

ターミナルに以下のコマンドをシューッ!!!

% sudo apt-get install iverilog

おわり

おわり

これで一通りHDLが書けるようになったので好きなように書いてね

発展編

ここからはさらにスゴいエディタへ進化させたい人向けです。


VSCode上で実行結果を得る

Runner という拡張機能を使うとVSCode上でiverilogの結果を取得できます。
vscode9.png
これ Runner はプログラムやスクリプトを実行してその結果をVSCode上に表示させるスゴいやつです。

インストールしたらverilogを実行するようにbatを書きます

iverilog %1

これを適当なファイル名(例えばrun_iverilog.bat)で保存して好きなフォルダに保存します。
僕はdocuments以下に置きました。ファイルへのパスはしっかりメモっておいてね。

次はVSCodeとRunnerにbatファイルの場所を教えます。
Ctrl+Shift+Pを押し、「setting」とタイプして
vscode10.png
上から二番目のユーザ設定を開いてどうぞ
vscode11
VSCodeでは設定系をJSONという形式で記述します。自分の設定をするときは右側に追記する手法です。
ここに

"runner.languageMap": {
    "verilog":"C:/Users/USER/Documents/run_iverilog.bat"
}

と追記します。
これは verilog タイプのファイルを開いているときに path のbatファイルを実行するようにRunnerに教えています。 また

"runner.extentionMap": {
    "v":"C:/Users/USER/Documents/run_iverilog.bat"
}

とすれば、拡張子が ".v" であるファイルに対してRunnerは path のbatファイルを実行します。
↑の例はどちらでもいいです。

ここまでできたら後はRunnerするだけです。 HDLを書いているエディタ上でCtrl+Alt+Rを押すと...
vscode12
こんな風に出力がされます。 (文字化けとるがな)
ちなみに僕が実行したbatファイルは

echo test

なので本当はiverilogの出力がここに出ます。

Linuxの場合はbatファイルをshファイルで書くだけですね。

スニペットを追加する


スニペットとは

スニペットってのは補完のことです。
vscode13
こういうやつです、見たことあるかもね。

これをHDLを記述する際にもガンガン使っていくわけですが、スニペットの定義ファイルにほしいスニペットがないかもしれません。
しかし、スニペットの定義は自分で追加できます。

↑までの手順通りに拡張機能を追加しているなら、スニペットの定義ファイルは、ユーザ以下の
.vscode/extentions/mshr-h.VerilogHDL-0.0.11/snippets/verilog.json にあります。
拡張子がJsonなので察しているかと思いますが中身はJsonです。
例えば

"monitor":{
    "prefix":"mon",
    "body":[
        "$monitor ($time, ,\"$1\"$0);"
    ],
    "description":"monitor"
}

テストベンチとかでよく見るあれです。これを書いたらどうなるかというと
vscode14
mon を入力してTABキーを押すとbody内に書かれた文字列が展開されます。
以降TABキーを押すたびに$1$2→・・・の位置へとカーソルが進みEnterを押すと$0の位置へ移動してスニペットが終了します。

以降は簡単な例を書いときます。

//port接続用(同名)
"connect":{
    "prefix":"con",
    "body":[
        ".$1($1),$0"
    ],
    "description":"connect to same name port"
},
//port接続用(異名)
"connectanothor":{
    "prefix":"acon",
    "body":[
        ".$1($2),$0"
    ],
    "description":"connect to same name port"
},
//timescale
"timescale":{
    "prefix":"ts",
    "body":[
        "`timescale ${1:1ps}/${2:1ps}$0"
    ],
    "description":"timescale"
}

いろいろやってみてね!