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

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

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

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

  

  现在,总结一下自己使用的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

gVim编辑器 模板篇的更多相关文章

  1. gVim编辑器 操作篇

    gVim是一款强大的编辑器,可以满足大部分语言的编程需要.尤其是其自带的模板定制功能对于Verilog来说非常受用.然而gVim有很多操作是不同于其他编辑器的,这让很多初学者望而却步,因此,本文将gV ...

  2. 10-C++远征之模板篇-学习笔记

    C++远征之模板篇 将会学到的内容: 模板函数 & 模板类 -> 标准模板类 友元函数 & 友元类 静态数据成员 & 静态成员函数 运算符重载: 一切皆有可能 友元函数 ...

  3. 《深入浅出WPF》笔记——模板篇

    原文:<深入浅出WPF>笔记--模板篇 我们通常说的模板是用来参照的,同样在WPF中,模板是用来作为制作控件的参照. 一.认识模板 1.1WPF菜鸟看模板 前面的记录有提过,控件主要是算法 ...

  4. GVIM与模板——让FPGA开发变得更简单

    还在使用FPGA开发环境自带的代码编辑器?还在逐个字母敲击冗长重复的代码?明德扬至简设计法让你快速提高代码编写效率!利用GVIM这一高效的编辑工具并添加自定义模板,通过简短的脚本命令即可自动生成所有常 ...

  5. windows下git commit使用gvim编辑器

    安装gvim 下载安装包:ftp://ftp.vim.org/pub/vim/pc/gvim80-586.exe 安装后将安装路径添加到环境变量Path中 设置编码支持中文 在安装路径下的_vimrc ...

  6. Unity3D使用经验总结 编辑器扩展篇

    一个引擎,最重要的就是工具,工具除了提升开发速度,提供可视化操作环境以外,还带了容错功能. 它使得大家的工作局限在一定的范围内,比如一个变量的配置,或者是一些类型的选择. 使用编辑器,使得既使不太明白 ...

  7. ASP.NET MVC学习之模型模板篇

    一.前言 如果你使用ASP.NET MVC制作后台一定会爱上它的EditorForModal.DisplayForModal和LabelForModal方法,因为这些方法可以将模型直接变成对应的标签, ...

  8. C++学习笔记之模板篇

    title: C++学习笔记之模板篇 tags: c++,c,模板,vector,friend,static,运算符重载,标准模板 --- 一.模板 不管是函数模板还是类模板,在未初始化前都是不占用内 ...

  9. nodejs--(一)http模板篇

    Nodejs http模块可以创建服务器应用实例,也能发送http请求 1.http.get(options[, callback]) 发送简单Get请求,并响应 var http=require(' ...

随机推荐

  1. ASP.NET Core 中断请求了解一下(翻译)

    ASP.NET Core知多少系列:总体介绍及目录 本文所讲方式仅适用于托管在Kestrel Server中的应用.如果托管在IIS和IIS Express上时,ASP.NET Core Module ...

  2. TTL 和 DNS TTL 的区别

    TTL TTL是 Time To Live 的缩写,该字段指定IP包被路由器丢弃之前允许通过的最大网段数量.TTL是IPv4包头的一个8 bit字段.在IPv4包头中TTL是一个8 bit字段,它位于 ...

  3. 百度APP移动端网络深度优化实践分享(二):网络连接优化篇

    本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<二>连接优化>,感谢原作者的无私分享. 一.前言 在<百度APP移动端网 ...

  4. redis bind连不上的坑

    由于需要在内网其他服务器上连接redis服务器(192.168.1.110),本想直接在redis配置文件中加上目标的IP地址: bind 192.168.1.166 就可以了,实际上不正确. red ...

  5. Python题集:2019春Python程序设计选修课习题笔记

    一.判断题: 1-1.在Python 3.x中可以使用中文作为变量名. 答案:√ 1-2.Python变量使用前必须先声明,并且一旦声明就不能再当前作用域内改变其类型. 答案:× 1-3.Python ...

  6. 文本分布式表示(三):用gensim训练word2vec词向量

    今天参考网上的博客,用gensim训练了word2vec词向量.训练的语料是著名科幻小说<三体>,这部小说我一直没有看,所以这次拿来折腾一下. <三体>这本小说里有不少人名和一 ...

  7. 【Android Studio安装部署系列】十二、Android studio代码混淆

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 为什么需要代码混淆呢?原因很简单,你的apk很容易被反编译出来,你写的代码都会被看到,因此我们需要在编译过程中对代码进行一定程度的混 ...

  8. 『练手』001 Laura.SqlForever架构基础(Laura.XtraFramework 的变迁)

    001 Laura.SqlForever架构的基础(Laura.XtraFramework 的变迁之路) Laura.XtraFramework 到底是 做什么的? Laura.XtraFramewo ...

  9. seg:NLP之正向最大匹配分词

    已迁移到我新博客,阅读体验更佳seg:NLP之正向最大匹配分词 完整代码实现放在我的github上:click me 一.任务要求 实现一个基于词典与规则的汉语自动分词系统. 二.技术路线 采用正向最 ...

  10. 一段JAVA代码了解多线程,JUC、CAS原子性操作。

    @Test public void testPaceController_multiThread() throws InterruptedException { final PaceControlle ...