LoginSignup
3
6

More than 5 years have passed since last update.

Emacsのverilog-modeのためのflymake設定

Last updated at Posted at 2014-02-16

Emacsにおいてverilog-mode + flymake + verilatorで自動でlintチェックを行えるようにする。

verilog-mode-flymake.el
;;; flymake
(require 'flymake)

;; チェック後にエラーしても終了しないようにする
(defadvice flymake-post-syntax-check
  (before flymake-force-check-was-interrupted)
  (setq flymake-check-was-interrupted t))
(ad-activate 'flymake-post-syntax-check)

;; Verilog HDL用のflymake初期化関数
(defun flymake-verilog-init()
  (let* ((temp-file (flymake-init-create-temp-buffer-copy 'flymake-create-temp-inplace))
         (main-file (file-relative-name temp-file (file-name-directory buffer-file-name)))
         (sub-files (flymake-verilog-get-files)))
    (list "verilator_bin" (append (list "--lint-only" main-file) sub-files))))

;; verilog-modeのverilog-library-files設定からサブモジュールのファイルリストを取得する
(defun flymake-verilog-get-files()
  (save-excursion
    (goto-char (point-min))
    (if (re-search-forward "verilog-library-files:( *\"\\([^)]+\\)\" *)" nil t)
        (split-string (match-string-no-properties 1) "\" *\"") (list))))

;; Verilog HDLのファイル拡張子と初期化関数を登録する
(push '(".+\\.s?v$" flymake-verilog-init) flymake-allowed-file-name-masks)

;; エラーメッセージのパターンを登録する
(push '("^%.+: \\(.+\\):\\([0-9]+\\): \\(.*\\)$" 1 2 nil 3) flymake-err-line-patterns)

;; verilog-modeでflymakeを有効にする
(add-hook 'verilog-mode-hook '(lambda () (flymake-mode t)))

verilog-modeのverilog-library-filesの記載があれば、そこからファイル一覧を取得しverilatorへ渡している。
こうすることでインスタンスしているサブモジュールとの接続もチェックすることができる。
Local Variableの値を編集してもverilog-library-filesの値はファイルを再読み込みしないと反映されないようなので、
編集後に反映されるようにゴリ押しで実装している。

verilog-mode-flymake-sample.v
module foo( /*AUTOARG*/ );
    /*AUTOINPUT*/
    /*AUTOOUTPUT*/
    /*AUTOWIRE*/

    bar bar( /*AUTOINST*/ );
    baz baz( /*AUTOINST*/ );
endmodule

// Local Variables:
// verilog-library-files:("bar.v" "baz.v")
// End:

flymakeのsyntax-checkが異常終了しても無視するようにするを参考にした。

3
6
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6