Vim e SystemVerilog

Quer usar o Vim para editar SystemVerilog? Infelizmente, o Vim não fornece muito suporte SystemVerilog fora da caixa. Acho que os recursos mais básicos necessários para ser produtivo são o destaque de sintaxe e o suporte a ctags.

Realce de sintaxe

Se você usa o Vundle, adicione o pacote ao seu vimrc e BundleInstall:

Bundle 'nachumk/systemverilog.vim'

ctags

Acho que usar ctags é muito útil, especialmente com um pacote grande como o UVM. Existem algumas contribuições encontradas aqui: http://www.verificationguild.com/modules.php?name=Forums&file=viewtopic&t=1621

Basta adicionar as seguintes expressões regulares às suas tags ~ / .ctags

--langdef=systemverilog
--langmap=systemverilog:.sv.svh.svi
--regex-systemverilog=/^[ t]*(virtual)?[ t]*class[ t]*([a-zA-Z_0-9]+)/2/c,class/

--regex-systemverilog=/^[ t]*(virtual)?[ t]*task[ t]*.*::([a-zA-Z_0-9]+)[t]*[(;]/2/t,task/
--regex-systemverilog=/^[ t]*(virtual)?[ t]*function[ t]*.*::([a-zA-Z_0-9]+)[ t]*[(;]/2/f,function/

--regex-systemverilog=/^[ t]*module[ t]*([a-zA-Z_0-9]+)/1/m,module/
--regex-systemverilog=/^[ t]*program[ t]*([a-zA-Z_0-9]+)/1/p,program/
--regex-systemverilog=/^[ t]*interface[ t]*([a-zA-Z_0-9]+)/1/i,interface/
--regex-systemverilog=/^[ t]*typedef[ t]+.*[ t]+([a-zA-Z_0-9]+)[ t]*;/1/e,typedef/
--regex-systemverilog=/^[ t]*`define[ t]*([a-zA-Z_0-9]+)/`1/d,define/

--regex-systemverilog=/^[ t]*(static)?[ t]*(local)?[ t]*(private)?[ t]*(rand)?[ t]*shortint[ t]*([a-zA-Z_0-9]+).*/`
5/v,variable/
--regex-systemverilog=/^[ t]*(static)?[ t]*(local)?[ t]*(private)?[ t]*(rand)?[ t]*int[ t]*(unsigned)?[ t]*([a-zA-Z_0-9]+).*/`6/v,variable/
--regex-systemverilog=/^[ t]*(static)?[ t]*(local)?[ t]*(private)?[ t]*(rand)?[ t]*longint[ t]*(unsigned)?[ t]*([a-zA-Z_0-9]+).*/`
6/v,variable/
--regex-systemverilog=/^[ t]*(static)?[ t]*(local)?[ t]*(private)?[ t]*(rand)?[ t]*byte[ t]*([a-zA-Z_0-9]+).*/`5/v,variable/
--regex-systemverilog=/^[ t]*(static)?[ t]*(local)?[ t]*(private)?[ t]*(rand)?[ t]*bit[ t]*([a-zA-Z_0-9]+).*/`
5/v,variable/
--regex-systemverilog=/^[ t]*(static)?[ t]*(local)?[ t]*(private)?[ t]*(rand)?[ t]*logic[ t]*([a-zA-Z_0-9]+).*/`5/v,variable/
--regex-systemverilog=/^[ t]*(static)?[ t]*(local)?[ t]*(private)?[ t]*(rand)?[ t]*reg[ t]*([a-zA-Z_0-9]+).*/`
5/v,variable/
--regex-systemverilog=/^[ t]*(static)?[ t]*(local)?[ t]*(private)?[ t]*(rand)?[ t]*integer[ t]*([a-zA-Z_0-9]+).*/`5/v,variable/
--regex-systemverilog=/^[ t]*(static)?[ t]*(local)?[ t]*(private)?[ t]*(rand)?[ t]*time[ t]*([a-zA-Z_0-9]+).*/`
5/v,variable/

--regex-systemverilog=/^[ t]*(static)?[ t]*(local)?[ t]*(private)?[ t]*real[ t]*([a-zA-Z_0-9]+).*/`4/v,variable
--regex-systemverilog=/^[ t]*(static)?[ t]*(local)?[ t]*(private)?[ t]*shortreal[ t]*([a-zA-Z_0-9]+).*/`
4/v,variable/

--regex-systemverilog=/^[ t]*(static)?[ t]*(local)?[ t]*(private)?[ t]*chandle[ t]*([a-zA-Z_0-9]+).*/`4/v,variable/
--regex-systemverilog=/^[ t]*(static)?[ t]*(local)?[ t]*(private)?[ t]*string[ t]*([a-zA-Z_0-9]+).*/`
4/v,variable/

--regex-systemverilog=/^[ t]*(static)?[ t]*(local)?[ t]*(private)?[ t]*event[ t]*([a-zA-Z_0-9]+).*/`4/v,variable/

--regex-systemverilog=/^[ t]*`
SVT_REPLACEABLE_DEFINE([ t]*([a-zA-Z_0-9]+),.*)/`1/d,define/

--systemverilog-kinds=+ctfmpied


--langdef=altsystemverilog

--regex-altsystemverilog=/^[ t]*(extern)?[ t]*(virtual)?[ t]*(protected)?[ t]*class[ t]*([a-zA-Z_0-9]+)/4/c,class/

--regex-altsystemverilog=/^[ t]*(extern)?[ t]*(virtual)?[ t]*(protected)?[ t]*task[ t]*.*[ t]+([a-zA-Z_0-9]+)[t]*[(;]/4/t,task

--regex-altsystemverilog=/^[ t]*(extern)?[ t]*(virtual)?[ t]*(protected)?[ t]*function[ t]*.*[ t]+([a-zA-Z_0-9]+)[ t]*[(;]/4/f,function/

--regex-altsystemverilog=/^[ t]*(virtual)?[ t]*task[ t]*.*[ t]+([a-zA-Z_0-9]+)[t]*[(;]/2/t,task/

--regex-altsystemverilog=/^[ t]*(virtual)?[ t]*function[ t]*.*[ t]+([a-zA-Z_0-9]+)[ t]*[(;]/2/f,function/

Você precisa fazer uma passagem única de sua biblioteca UVM:

cd my_UVM_path
ctags
--languages=systemverilog -R .
mv tags
~/.vim/tags/UVM

Para usar as ctags para seu projeto UVM, primeiro adicione o seguinte ao seu ~ / .vimrc:

set tags=./tags;
set tags+=~/.vim/tags/UVM

Então, para cada projeto:

cd my_project
ctags
-R .