上文介绍了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使用SSH连接Linux系统

    SSH连接linux系统使我们在开发项目中常用到的,现在留下来,做个记录 package com.log; import java.io.BufferedReader; import java.io. ...

  2. 阿里如何实现海量数据实时分析技术-AnalyticDB

    导读:随着数据量的快速增长,越来越多的企业迎来业务数据化时代,数据成为了最重要的生产资料和业务升级依据.本文由阿里AnalyticDB团队出品,近万字长文,首次深度解读阿里在海量数据实时分析领域的多项 ...

  3. 数组for循环查找范围

    数组for循环查找范围,如果是判读是否在键值之间,如$array[$i],那么接邻的元素不能用$array[$i+1]或者$array[$i-1]只能用$array[$i++]

  4. Java核心基础学习(一)--- 2019年1月

    1.对比Exception和Error,运行时异常与一般异常 Exception 和 Error 都继承了 Throwable 类,在 Java 中只有 Throwable 类才能 thorw(抛出) ...

  5. Identity Server 4 - Hybrid Flow - 保护API资源

    这个系列文章介绍的是Identity Server 4 的 Hybrid Flow, 前两篇文章介绍了如何保护MVC客户端, 本文介绍如何保护API资源. 保护MVC客户端的文章: https://w ...

  6. 286万QPS!腾讯云TDSQL打造数据库领域的“超音速战机”

    Bloodhound SSC超音速汽车将陆地极限速度提升到1678公里/小时,号称陆地“超音速战斗机”.无独有偶,同样也在2017年,在英特尔®.腾讯金融云团队的共同见证下,腾讯云数据库TDSQL采用 ...

  7. ToastCustom【自定义显示风格的Toast】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 基于系统Toast的自定义显示风格的Toast. 效果图 代码分析 ToastCustom类基于系统Toast,不是继承Toast, ...

  8. 使用Maven的assembly插件实现自定义打包

    一.背景 最近我们项目越来越多了,然后我就在想如何才能把基础服务的打包方式统一起来,并且可以实现按照我们的要求来生成,通过研究,我们通过使用maven的assembly插件完美的实现了该需求,爽爆了有 ...

  9. 基于SpringBoot实现定时任务的设置(常用:定时清理数据库)

    1.构建SpringBoot工程项目 1)创建一个Springboot工程,在它的程序入口加上@EnableScheduling,开启调度任务. @SpringBootApplication @Ena ...

  10. 接口自动化:HttpClient + TestNG + Java(一) - 接口测试概述+自动化环境搭建

    1.1 接口测试简介 1.1.1 什么是接口测试 开始学习接口自动化测试之前,我们先要来了解什么是接口,以及什么是接口测试. 我们都知道,测试从级别上划分可以分为 组件测试 集成测试 系统测试 验收测 ...