gvim 模板(ab命令快速生成常用Verilog模板)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、模板制作方法
  • 二、使用步骤
  • 总结


前言

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;// Input signalsreg[15: 0]din0;reg[15: 0]din1;// Output signalswire[15: 0]dout0;wire[15: 0]dout1;// Clock periodparameterCYCLE=20;// Reset timeparameterRST_TIME=3;// DUTmodule_nameu_instatiation_name(.i_clk(i_clk), .i_rstn(i_rstn),.din0(din0),.din1(din1),.dout0(dout0),.dout1(dout1));// Generate system clockinitial begini_clk = 0;forever#(CYCLE/2)i_clk=~i_clk;end// Generate reset signalinitial begini_rstn = 1;#2;i_rstn = 0;#(CYCLE*RST_TIME);i_rstn = 1;end// Input singals assignmentinitial begin#1;//Initial value assignmentdin0=0;#(10*CYCLE);// Start the assignmentendendmodule

" State Machine
:ab SM localparam[2:0]P_ST_IDLE=3'b000;localparam[2:0]P_ST_S1=3'b001;localparam[2:0]P_ST_S2=3'b010;reg[2:0]r_state_c;reg[2:0]r_state_n;always @( posedge i_clk or negedge i_rstn )if ( !i_rstn )r_state_c<=P_ST_IDLE;elser_state_c<=r_state_n;always @( * ) beginr_state_n = P_ST_IDLE;case ( r_state_c )IDLE: beginif (  )r_state_n = P_ST_S1;elseif (  )r_state_n = P_ST_S2;elser_state_n = P_ST_IDLE;endP_ST_S1: beginif (  )r_state_n = P_ST_IDLE;elseif (  )r_state_n = P_ST_S2;elser_state_n = P_ST_S1;endP_ST_S2: beginif (  )r_state_n = P_ST_IDLE;elseif (  )r_state_n = P_ST_S1;elser_state_n = P_ST_S2;enddefault:r_state_n = P_ST_IDLE; endcaseendalways @( posedge i_clk or negedge i_rstn )if ( !i_rstn )else begin case ( r_state_n )endcase end 

" Counter
:ab Counter    reg[15:0]r_cnt;wirew_cnt_clr=;wirew_cnt_inc=;always @(posedge i_clk or negedge i_rstn)if(!i_rstn)cnt <= 'h0;elseif(w_cnt_clr)r_cnt <= 'h0;elseif(w_cnt_inc)r_cnt <= r_cnt + 1'b1;   

" Output
:ab Output32 output[31: 0]o_;
:ab Output16 output[15: 0]o_;
:ab Output8  output[ 7: 0]o_;
:ab Output4  output[ 3: 0]o_;
:ab Output3  output[ 2: 0]o_;
:ab Output2  output[ 1: 0]o_;
:ab Output1  output       o_;

" Input
:ab Input32 input[31: 0]i_;
:ab Input16 input[15: 0]i_;
:ab Input8  input[ 7: 0]i_;
:ab Input4  input[ 3: 0]i_;
:ab Input3  input[ 2: 0]i_;
:ab Input2  input[ 1: 0]i_;
:ab Input1  input       i_;

" Wire
:ab Wire32 wire[31: 0]w_;
:ab Wire16 wire[15: 0]w_;
:ab Wire8  wire[ 7: 0]w_;
:ab Wire4  wire[ 3: 0]w_;
:ab Wire3  wire[ 2: 0]w_;
:ab Wire2  wire[ 1: 0]w_;
:ab Wire1  wire       w_;

" Register
:ab Reg32 reg[31: 0]r_;
:ab Reg16 reg[15: 0]r_;
:ab Reg8  reg[ 7: 0]r_;
:ab Reg4  reg[ 3: 0]r_;
:ab Reg3  reg[ 2: 0]r_;
:ab Reg2  reg[ 1: 0]r_;
:ab Reg1  reg       r_;


总结

例如:在使用的过程如果遇到更好用的模板还会继续更新。

你可能感兴趣的:(GVim使用技巧,fpga开发,linux,vim)