gVim编辑器 模板篇

时间:2023-03-08 23:59:01
gVim编辑器 模板篇

  上文介绍了gVim的常用操作,这次总结一下我自己常用的模板。

  安装和配置好gVim后,在Program Files (x86)\Vim目录下有个“_vimrc”文件,双击选择gVim软件打开,在里面添加模板就行了。如果做模板时就打开了一个.v文件,保存模板后,在那个.v文件中是无法马上使用刚刚添加的模板的,得关闭重新打开才行。模板格式如下:

gVim编辑器 模板篇

  “ 双引号是注释,相当于我们常用的 // 。:ab是命令。空格。sx1是模板的调出名称。空格。然后就是模板了。所以格式是 ab: 名称 模板,注意一下空格符。

  编写模板程序时可以放心的打空格了。但是注意一点,这里不能按Enter键,如果要达到程序换行的目的,用<Enter>就行了。因为安装时配置好了Verilog的使用,所以模板里的程序被调出时会按Verilog语法自动对齐。但是我使用发现它对于if...else的辨别比较弱,最好加上begin...end。上文说过,如果你改变了gVim的默认编码方式,那么制作模板就不要出现中文,避免乱码现象。上图的模板在用gVim正常写代码时,输入sx1按Enter键即可出现模板,如下所示:

gVim编辑器 模板篇

  

  现在,总结一下自己使用的gVim模板,万一没了还可以来这里看看。

1.小分割,调出名称:xfg

 /*------------------- -------------------*/

2.分割,调出名称:fg

 //-----------------------------------------

3.注释,调出名称:zs

 /*-----------------------------------------

 -----------------------------------------*/

4.标题,调出名称:bt

 //*****************************************
 //
 // File Name    :
 // Module Name  :
 // Project Name :
 // Author       :
 // Blogs        :
 // Version      :
 // Date         :
 //
 // Copyright(c) 2018-2100 XXXX Corporation
 // All Rights Reserved
 //
 //*****************************************

5.时序1,调出名称:sx1

 always @(posedge clk or negedge rst_n)begin
     if(!rst_n)begin
     end
     else if()begin
     end
 end

sx1

6.时序2,调出名称:sx2

 always @(posedge clk or negedge rst_n)begin
     if(!rst_n)begin
     end
     else if()begin
     end
     else if()begin
     end
 end

sx2

7.时序3,调出名称:sx3

 always @(posedge clk or negedge rst_n)begin
     if(!rst_n)begin
     end
     else if()begin
     end
     else if()begin
     end
     else if()begin
     end
 end

sx3

8.组合1,调出名称:zh1

 always @(*)begin
     if()begin
     end
     else begin
     end
 end

zh1

9.组合2,调出名称:zh2

 always @(*)begin
     if()begin
     end
     else if()begin
     end
     else begin
     end
 end

zh2

10.组合3,调出名称:zh3

 always @(*)begin
     if()begin
     end
     else if()begin
     end
     else if()begin
     end
     else begin
     end
 end

zh3

11.计数器1,调出名称:jsq1

 ]             cnt         ;
 wire                    add_cnt     ;
 wire                    end_cnt     ;
 always @(posedge clk or negedge rst_n)begin
     if(!rst_n)begin
         cnt <= ;
     end
     else if(add_cnt)begin
         if(end_cnt)
             cnt <= ;
         else
             cnt <= cnt + ;
     end
 end

 assign add_cnt = ;
 ;

jsq1

12.计数器2,调出名称:jsq2

 ]             cnt0        ;
 wire                    add_cnt0    ;
 wire                    end_cnt0    ;
 always @(posedge clk or negedge rst_n)begin
     if(!rst_n)begin
         cnt0 <= ;
     end
     else if(add_cnt0)begin
         if(end_cnt0)
             cnt0 <= ;
         else
             cnt0 <= cnt0 + ;
     end
 end

 assign add_cnt0 = ;
 ;

 ]             cnt1        ;
 wire                    add_cnt1    ;
 wire                    end_cnt1    ;
 always @(posedge clk or negedge rst_n)begin
     if(!rst_n)begin
         cnt1 <= ;
     end
     else if(add_cnt1)begin
         if(end_cnt1)
             cnt1 <= ;
         else
             cnt1 <= cnt1 + ;
     end
 end

 assign add_cnt1 = end_cnt0;
 ;

jsq2

13.计数器3,调出名称:jsq3

 ]             cnt0        ;
 wire                    add_cnt0    ;
 wire                    end_cnt0    ;
 always @(posedge clk or negedge rst_n)begin
     if(!rst_n)begin
         cnt0 <= ;
     end
     else if(add_cnt0)begin
         if(end_cnt0)
             cnt0 <= ;
         else
             cnt0 <= cnt0 + ;
     end
 end

 assign add_cnt0 = ;
 ;

 ]             cnt1        ;
 wire                    add_cnt1    ;
 wire                    end_cnt1    ;
 always @(posedge clk or negedge rst_n)begin
     if(!rst_n)begin
         cnt1 <= ;
     end
     else if(add_cnt1)begin
         if(end_cnt1)
             cnt1 <= ;
         else
             cnt1 <= cnt1 + ;
     end
 end

 assign add_cnt1 = end_cnt0;
 ;

 ]             cnt2        ;
 wire                    add_cnt2    ;
 wire                    end_cnt2    ;
 always @(posedge clk or negedge rst_n)begin
     if(!rst_n)begin
         cnt2 <= ;
     end
     else if(add_cnt2)begin
         if(end_cnt2)
             cnt2 <= ;
         else
             cnt2 <= cnt2 + ;
     end
 end

 assign add_cnt2 = end_cnt1;
 ;

jsq3

14.有限状态机,调出名称:fsm

 //one-hot code for FSM
 'b0001   ;
 'b0010   ;
 'b0100   ;
 'b1000   ;

 //FSM
 :]             state_c     ;
 :]             state_n     ;
 wire                    id2s1_start ;
 wire                    s12s2_start ;
 wire                    s22s3_start ;
 wire                    s32s1_start ;

 //FSM
 //-----------------------------------------
 //always 1
 always @(posedge clk or negedge rst_n)begin
     if(!rst_n)begin
         state_c <= IDLE;
     end
     else begin
         state_c <= state_n;
     end
 end

 //always 2
 always @(*)begin
     case(state_c)
         IDLE:begin
             if(id2s1_start)begin
                 state_n = S1;
             end
             else begin
                 state_n = state_c;
             end
         end
         S1:begin
             if(s12s2_start)begin
                 state_n = S2;
             end
             else begin
                 state_n = state_c;
             end
         end
         S2:begin
             if(s22s3_start)begin
                 state_n = S3;
             end
             else begin
                 state_n = state_c;
             end
         end
         S3:begin
             if(s32s1_start)begin
                 state_n = S1;
             end
             else begin
                 state_n = state_c;
             end
         end
         default:state_n = IDLE;
     endcase
 end

 assign id2s1_start = state_c==IDLE && ;
 assign s12s2_start = state_c==S1   && ;
 assign s22s3_start = state_c==S2   && ;
 assign s32s1_start = state_c==S3   && ;

 //always 3
 always @(posedge clk or negedge rst_n)begin
     if(!rst_n)begin
     end
     else if()begin
     end
 end

fsm

15.同步fifo,调出名称:tbfifo

 //FIFO
 ]             wdata       ;
 wire                    rd_en       ;
 wire                    wr_en       ;
 wire                    empty       ;
 wire                    full        ;
 ]             usedw       ;
 ]             q           ;

 //FIFO instantiation
 //-----------------------------------------
 fifo_ipcore u1
 (
     .clock          (clk            ),
     .data           (wdata          ),
     .rdreq          (rd_en          ),
     .wrreq          (wr_en          ),
     .empty          (empty          ),
     .full           (full           ),
     .usedw          (usedw          ),
     .q              (q              )
 );

tbfifo

16.异步fifo,调出名称:ybfifo

 //FIFO
 ]             wdata       ;
 wire                    rd_en       ;
 wire                    wr_en       ;
 wire                    rdempty     ;
 wire                    wrempty     ;
 wire                    wrfull      ;
 wire                    rdfull      ;
 ]             rdusedw     ;
 ]             wrusedw     ;
 ]             q           ;

 //FIFO instantiation
 //-----------------------------------------
 fifo_ipcore u1
 (
     .rdclk          (rd_clk         ),
     .wrclk          (wr_clk         ),
     .data           (wdata          ),
     .rdreq          (rd_en          ),
     .wrreq          (wr_en          ),
     .rdempty        (rdempty        ),
     .wrempty        (wrempty        ),
     .rdfull         (rdfull         ),
     .wrfull         (wrfull         ),
     .rdusedw        (rdusedw        ),
     .wrusedw        (wrusedw        ),
     .q              (q              )
 );

ybfifo

17.module,调出名称:module

 module module_name
 (
     input               clk         ,
     input               rst_n       ,
     ]  in          ,
     ]  out         ,
 );

 //parameter
          ;

 //signal
 ]             a           ;
 ]             b           ;

 endmodule

module

18.top层,调出名称:top

 module top_name
 (
     input               clk         ,
     input               rst_n       ,
     ]       in          ,
     ]       out         ,
 );

 //parameter
          ;

 //wire
 //-----------------------------------------
 ]             in          ;
 ]             out         ;

 //instantiation
 //-----------------------------------------
 module_name u0
 (
     .clk            (clk            ),
     .rst_n          (rst_n          ),
     .in             (in             ),
     .out            (out            )
 );

 endmodule

top

19.testbench,调出名称:tb

 `timescale 1ns/1ns

 module tb_module_name;

 //in and out
 //-----------------------------------------
 reg                     clk         ;
 reg                     rst_n       ;
 ]             in          ;
 ]             out         ;

 //test module
 //-----------------------------------------
 module_name u_module_name
 (
     .clk            (clk            ),
     .rst_n          (rst_n          ),
     .in             (in             ),
     .out            (out            )
 );

 //parameter
 //-----------------------------------------
         ;
          ;

 //50M clock and reset
 //-----------------------------------------
 initial begin
     clk = ;
     forever
     #(CYCLE/)
     clk=~clk;
 end

 initial begin
     rst_n = ;
     #;
     rst_n = ;
     #(CYCLE*RST_TIME);
     rst_n = ;
 end

 //input signal
 //----------------------------------------------------
 initial begin
     #;
     //initial value
     in = ;
     #(*CYCLE);
 end

 endmodule

tb