上文介绍了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. Java引用详解-StrongReference SoftReference WeakReference PhantomReference

    1 Java引用介绍 Java从1.2版本开始引入了4种引用,这4种引用的级别由高到低依次为:    强引用  >  软引用  >  弱引用  >  虚引用 ⑴强引用(StrongR ...

  2. 仓储repository概念

    1.为什么要用仓储?(仓储有什么用) 1.1 解耦 为了解耦领域层与数据映射层的关系. 1.2 管理增删查改 仓储模式最大的优点就是所有的数据访问首先是通过仓库的,对仓库的增删改都不会立即提交到数据库 ...

  3. 在macos上基于python2.7安装PyQt5

    在python3上面安装PyQt5是十分简单的,可是,在python2.7上安装这个东西,着实让人折腾了一把.要总结一下,年纪大了,记性不好. 首先要安装最新版的Qt和python2,命令如下: br ...

  4. .NET Core TDD 前传: 编写易于测试的代码 -- 全局状态

    第1篇: 讲述了如何创造"缝".  "缝"(seam)是需要知道的概念. 第2篇, 避免在构建对象时写出不易测试的代码. 第3篇, 依赖项和迪米特法则. 本文是 ...

  5. 浅谈SpringMVC执行过程

    通过深入分析Spring源码,我们知道Spring框架包括大致六大模块, 如Web模块,数据库访问技术模块,面向切面模块,基础设施模块,核心容器模块和模块, 其中,在Spring框架的Web模块中,又 ...

  6. MySQL高可用复制管理工具 —— Orchestrator使用

    背景 在上一篇「MySQL高可用复制管理工具 —— Orchestrator介绍」中大致介绍了Orchestrator的功能.配置和部署,当然最详细的说明可以查阅官方文档.本文开始对Orchestra ...

  7. H5 可堆叠的圆环进度条,支持任意数量子进度条

    by Conmajia SN: S22-W1M 由来 看到一篇帖子<vue实用组件--圆环百分比进度条>,让我想起了很多年前我在WinForm下仿制过的Chrome进度条. ▲ 原版进度条 ...

  8. go并发调度原理学习

    aaarticlea/jpeg;base64,/9j/4AAQSkZJRgABAQAAkACQAAD/4QB0RXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAA

  9. 【转载】 Sqlserver限制最大占用内存

    在Sqlserver数据库管理软件中,Sqlserver对系统内存的管理原则是:按需分配,并且分配完成后为了查询有更好的性能,并不会立即自动释放内存,数据取出后,还会一直占用着内存,所以在Sqlser ...

  10. MySql给表添加列和注释

    1.给表添加列 ALTER TABLE supplier_seller ADD COLUMN company_id INT NULL COMMENT '供应主体id'; 默认情况下,添加的列会添加到最 ...