上文介绍了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. Node.js 事件循环机制

    Node.js 采用事件驱动和异步 I/O 的方式,实现了一个单线程.高并发的 JavaScript 运行时环境,而单线程就意味着同一时间只能做一件事,那么 Node.js 如何通过单线程来实现高并发 ...

  2. 解决Ajax请求时无法重定向的问题

    今天发现,当使用Ajax请求时,如果后台进行重定向到其他页面时是无法成功的,只能在浏览器地址栏输入才能够实现重定向. Ajax默认就是不支持重定向的,它是局部刷新,不重新加载页面. 需要实现的功能是, ...

  3. Java数据结构和算法 - OverView

    Q: 为什么要学习数据结构与算法? A: 如果说Java语言是自动档轿车,C语言就是手动档吉普.数据结构呢?是变速箱的工作原理.你完全可以不知道变速箱怎样工作,就把自动档的车子从1档开到4档,而且未必 ...

  4. Identity Server 4 - Hybrid Flow - 使用ABAC保护MVC客户端和API资源

    这个系列文章介绍的是Identity Server 4 实施 OpenID Connect 的 Hybrid Flow. 保护MVC客户端: https://www.cnblogs.com/cgzl/ ...

  5. Data Warehouse

    Knowledge Discovery Process OLTP & OLAP 联机事务处理(OLTP, online transactional processing)系统:涵盖组织机构大部 ...

  6. 2018~第三届南宁市网络安全技术大赛~nnctf~write-up

    Web 1.超简单 分值:100 类型:WEB 已解决 题目:超简单的web题  http://gxnnctf.gxsosec.cn:12311/ 代码审计 <?php $white_list ...

  7. springcloud情操陶冶-bootstrapContext(二)

    承接前文监听器对bootstrapContext创建的引导,笔者了解到其主要入口类为BootstrapImportSelectorConfiguration.本文将基于此类进行简单的分析 Bootst ...

  8. JavaScript引擎浅析

    前言 该文章是为大家整理一个关于js的知识网络,重点是知识的罗列及之间的联系,所以实例可能会有所不足,导致可能没有对应知识的人看不懂,希望大家能够结合其他资料来学习这篇文章,并整理出自己的知识体系. ...

  9. Spring Cloud 系列之 Eureka 实现服务注册与发现

    如果你对 Spring Cloud 体系还不是很了解,可以先读一下 Spring Cloud 都有哪些模块 Eureka 是 Netflix 开源的服务注册发现组件,服务发现可以说是微服务架构的核心功 ...

  10. 菜鸟入门【ASP.NET Core】1:环境安装

    下载.NET Core SDK 下载地址:https://www.microsoft.com/net/download/windows https://www.microsoft.com/net/le ...