[Vim] Verilator 와 Vim Ale Plugin을 활용한 SystemVerilog Linter 셋업

YumeIroVillain·2024년 12월 15일
0

개발노트

목록 보기
30/30

Reference

개요

  • vim에서 가볍게 활용할 Plugin이 필요했다.
    • NeoVim 에도 관심이 있었으나, 폐쇄망 환경상 Primitive한 Plugin만 사용하고싶었다.
  • 가능하면 가장 친숙한 verilator를 LSP로 사용하고 싶었다.
    • 그러나 조사하면서, sv-lang 같은 여러 훌륭한 Language Server Frontend 가 있다는것도 깨달았다.
    • iverilog는 system verilog 지원이 되지않아서 배제하였다.

Vundle 설치

Vundle git
^ README 대로 git clone 하여 설치한다.
~/.vim/bundle/Vundle.vim 에 설치함에 유의.

.vimrc에 추가할 내용

:set ignorecase
:set nu
:set rnu

"-----------------------------------------------------------------------"
" Vundle 환경설정
"------------------------------------------------------------------------"
filetype off                   " required!
set shell=/bin/bash
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
	" let Vundle manage Vundle
	" required! 
	Plugin 'VundleVim/Vundle.vim'

	" vim 하단에 파일 정보 띄우기
	Plugin 'vim-airline/vim-airline' 
	Plugin 'vim-airline/vim-airline-themes'
	" ...
	
	"명령어 자동완성 플러그인(inc + <C-a> : #includ<>)
	Plugin 'SirVer/ultisnips'
	Plugin 'honza/vim-snippets'
	" ...

	Plugin 'dense-analysis/ale'
    
call vundle#end()
filetype plugin indent on     " required!
	"
	" Brief help
	" :BundleList          - list configured bundles
	" :BundleInstall(!)    - install(update) bundles
	" :BundleSearch(!) foo - search(or refresh cache first) for foo
	" :BundleClean(!)      - confirm(or auto-approve) removal of unused bundles
	"
	" see :h vundle for more details or wiki for FAQ
	" NOTE: comments after Bundle command are not allowed..

"-----------------------------------------------------------------------"
" ultisnips&vim-snippets Trigger Configuration
"-----------------------------------------------------------------------""
" Trigger configuration. You need to change this to something other than <tab>
" if you use one of the following:
" " - https://github.com/Valloric/YouCompleteMe
" " - https://github.com/nvim-lua/completion-nvim
let g:UltiSnipsExpandTrigger="<C-a>"
let g:UltiSnipsJumpForwardTrigger="<tab>"
let g:UltiSnipsJumpBackwardTrigger="<s-tab>"
" If you want :UltiSnipsEdit to split your window.
let g:UltiSnipsEditSplit="vertical"
" let g:UltiSnipsSnippetDirectories = ['~/.vim/UltiSnips']

" for ALE
let b:ale_linters = {'c': ['gcc'], 'verilog':['verilator'], 'systemverilog':['xvlog', 'verilator']}
" ALE가 에러와 경고를 표시하는 방법 설정
let g:ale_set_highlights = 1
let g:ale_set_signs = 1
let g:ale_set_loclist = 1
let g:ale_set_quickfix = 0
let g:ale_echo_cursor = 1
"let g:ale_echo_msg_error_str = 'E'
"let g:ale_echo_msg_warning_str = 'W'
let g:ale_echo_msg_format = 'linter says - [%linter%] %s [%severity%]'

그 후, :PluginInstall

이 때, bundle의 파일구조는 아래와 같아야 한다.

각 bundle은 보다시피 git clone 한 것과 동일하다.
.git/config 또한 그냥 보통의 것과 같다.

Code Snippet 기능

미리 설정된 Template 대로 출력해주는 기능이다.

  • uvm_object 입력 후, Ctrl + A를 누르면 Snippet 자동완성 확인가능.
  • 마찬가지로, mod 입력 후 Ctrl + A를 누르면 module ~ endmodule 자동완성 확인가능.

와...이거 xvlog랑 verilator 둘다 잡을수도있네?

vimrc의 ale_linter를

let b:ale_linters = {'c': ['gcc'], 'verilog':['verilator'], 'systemverilog':['xvlog']}

로 하면,

로 xvlog로 잡힌다.


Future Work

let g:ale_completion_enabled = 1
를 해도, auto-suggestion이 안되는 현상은 해결해야한다. c랑 verilog 모두 안된다.

다른 분야 Futurework

profile
HW SW 둘다 공부하는 혼종의 넋두리 블로그 / SKKU SSE 17 / SWM 11th

0개의 댓글