提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
gvim在编写Verilog代码时通过预先设定的模板可以快速生成特定代码模块,提高代码编写效率。
1.Windows下:将以下代码拷贝到 "_vimrc"文件中,该文件在安装目录中,如果不知道安装目录在哪,可以在末行模式下输入::echo $VIM就可以显示安装位置。
2.Linux下:将以下代码拷贝到 ".vimrc"文件中,该文件一般在/home目录下,该文件属于隐藏文件,使用命令“ls -a” 可以查看到。
请注意:以下模板的映射名具有灵活性,可以根据你自己的需求修改相应的代码。我的命名规格一般是模块名英文翻译是单个单词,则令其映射为首字母大写的英文全拼,若翻译超过一个单词则命名为各单词首字母,并且大写。举个例子:就拿最常见的Verilog模块中的计数器模块来说,我的重命名为:Counter,若有多个计数器模块,可在其后加数字区。例如时序逻辑块(sequential logic),我的重命名为:SL,如有多个时序逻辑块,则同样在其名字后加数字区分。其他的都类似。
模板如下(模板中已做了英文注释,可参考):
" 语法高亮度显示
syntax on
"取消自动备份及产生swp文件
"set noundofile
"set nobackup
"set nowb
"set noswapfile
"自动保存
"set autowrite
"设置当文件被改动时自动载入
set autoread
"与windows共享剪贴板
set clipboard+=unnamed
"代码补全
set completeopt=preview,menu
"搜索匹配高亮
set hlsearch
set cuc
set cul
" 设置行号
set nu
"防止中文注释乱码
set fileencoding=utf-8
set fenc=utf-8
set fencs=utf-8,usc-bom,euc-jp,gb18030,gbk,gb2312,cp936,big-5
set enc=utf-8
let &termencoding=&encoding
"设置字体
"set guifont=Monospace\ 13
" 设置tab4个空格
"set tabstop=4
"set expandtab
"程序自动缩进时候空格数
"set shiftwidth=4
"退格键一次删除4个空格
"set softtabstop=4
"autocmd FileType make set noexpandtab
" 在编辑过程中,在右下角显示光标位置的状态行
set ruler
" 搜索忽略大小写
set ignorecase
" vim使用自动对起,也就是把当前行的对起格式应用到下一行
"set autoindent
" 依据上面的对起格式,智能的选择对起方式,对于类似C语言编写上很有用
"set smartindent
" 在状态列显示目前所执行的指令
set showcmd
" 设置颜色主题
colorscheme koehler
set nocompatible
set backspace=indent,eol,start
"################### set file head start #########################
"autocmd创建新文件自动调用setfilehead()函数
autocmd BufNewFile *.v,*.sv,*.cpp,*.c,*.h exec ":call Setfilehead()"
func Setfilehead()
call append(0, '/***********************************************')
call append(1, '#')
call append(2, '# Filename: '.expand("%"))
call append(3, '#')
call append(4, '# Author: Bright - [email protected]')
call append(5, '# Description: ---')
call append(6, '# Create: '.strftime("%Y-%m-%d %H:%M:%S"))
call append(7, '# Last Modified: '.strftime("%Y-%m-%d %H:%M:%S"))
call append(8, '***********************************************/')
" call append(9, '')
endfunc
"map F2 to creat file head comment
"映射F2快捷键,生成后跳转至第10行,然后使用o进入vim的插入模式
map :call Setfilehead():10o
"################### set file head end ##########################
" Annote the line where the cursor is
:map l0i//
" Cut-off Line
:ab COL //------------------------------Cut-off-Line----------------------------------------------------
" Note
:ab Note /*******************************Annotation****************************************************/
" Parameter
:ab Parameter parameterDATA_W=8;
" Localparam
:ab Localparam localparamP_ST_IDLE=8'b0000_0001;
" Assign
:ab Assign assigno_=r_;
" Initial
:ab Initial initial begin#1;end
" Sequential Logic
:ab SL1 always @(posedge i_clk or negedge i_rstn)if(!i_rstn)else
:ab SL2 always @(posedge i_clk or negedge i_rstn)if(!i_rstn)else if()
:ab SL3 always @(posedge i_clk or negedge i_rstn)if(!i_rstn)else if()else if()
" Combinatorial Logic
:ab CL1 always @(*)if(!i_rstn)else
:ab CL2 always @(*)if(!i_rstn)elseif()
:ab CL3 always @(*)if(!i_rstn)elseif()elseif()
" Module
:ab Module module module_name(inputi_clk,inputi_rstn,output[15: 0]o_out);// ParameterparameterDATA_W=8;endmodule
" Top
:ab Top module top_name(inputi_clk,inputi_rstn,input[15: 0]i_in,output[15: 0]o_out);//Instantiationmodule_name u_module_name(.i_clk(i_clk),.i_rstn(i_rstn),.i_in(i_in),.o_out(o_out));endmodule
" Instantiation
:ab Instantiation //Instantiationmodule_name u_module_name(.i_clk(i_clk),.i_rstn(i_rstn),.i_in(i_in),.o_out(o_out));
" Testbench
:ab Testbench `timescale 1 ns/1 nsmodule testbench_name();// Clock and reset signals regi_clk;regi_rstn;