官方论坛
官方淘宝
官方博客
微信公众号
点击联系吴工 点击联系周老师

2.2多用模板专注设计--明德扬科教(mdy-edu.com)

发布时间:2021-08-22   作者:admin 浏览量:

本文的文档编号:001400000010

需要看对应的视频,请点击视频编号:001400000088

1、介绍了MDY最常用的至简设计verilog代码模板,以及如何调用和使用该模板的方法


第二章 多用模板专注设计


    进行工程设计的过程中,在亲手完成了部分工程的设计后就会发现其实大多数工程都有一定的“套路”。因此至简设计法制作了verilog代码模板,该模板包含了verilog最常用的代码,只要按照模板提示的步骤进行思考和填空,就能得到简洁、漂亮的代码。当然这种方法也会减少一定的错误率,毕竟相比一个字符一个字符的输入,一定是部分字符填空更加简单便捷且错误率低。

    有人认为至简设计法模板仅仅是为了节省敲代码的时间,这种想法其实是错误的。至简设计法旨在用一套固有的思想方法来应对不同的设计,力求使用最简洁的语言,最直接的算法得到最省资源的代码。同样,至简设计法的模板更多地是将至简设计法的设计经验转化到模板当中,每个模板看起来毫无关系,但其实都是工程设计中必不可少的步骤。这种方法也会时刻提醒设计者按照规范的思路进行编码,不会中途“开小差,走跑偏”,利用模板完整的将整个工程串起来才是至简设计法的目的。

第1节 至简设计法模板总表

    下表为至简设计法现有可供使用的模板,后续还会不断的进行完善补充。为了方便查阅,下面列出模板总表,随后会依次单独演示相应模板的使用方法。使用这些模板需要按照提示正确安装至简设计法提供的GVIM软件,也可以前往至简设计法网址:XXXXXXX进行下载使用。本书只能通过文字以及截图的形式进行描述和演示,可以登陆至简设计法官网观看使用视频,网址为:XXXXXXXXXXXX

                    表2.2- 1至简设计法模板总表
  
命令
  
作用
Module
可以调出verilog模块的模板,包括模块的常用部分,在相应位置补充就可以非常方便地完成设计。
Shixu
“时序”的拼音。可以调出时序逻辑的模板。绝大部分情况下时钟和复位信号都无须修改。
  
always  @(posedge clk or negedge rst_n)begin
  
    if(rst_n==1'b0)begin
  
    end
  
    else begin
  
    end
  
end
Zuhe
“组合”的拼音。可以调出组合逻辑的模板。
  
always  @(*)begin
  
end
Jsq
“计数器”拼音的缩写。可以调出至简设计法计数器模板。
Ztj
“状态机”拼音的缩写。可以调出至简设计法四步法状态机模板。
Test
可以调出测试文件的模板。
Regx
定义reg类型代码时使用。其中x是指位宽数字,目前支持1,2,3,4,8,16,32。
  
当x为1时,即Reg1,可以调出以下语句:
  
reg;
  
当x为其他值时,如Reg8时,可以调出以下语句:
  
reg  [7: 0];
Wirex
定义wire类型代码时使用。其中x是指位宽数字,目前支持1,2,3,4,8,16,32。
  
当x为1时,即Wire1,可以调出以下语句:
  
wire;
  
当x为其他值时,如Wire8时,可以调出以下语句:
  
wire [7: 0]     ;
Inputx
定义input类型代码时使用。其中x是指位宽数字,目前支持1,2,3,4,8,16,32。
  
当x为1时,即Input1,可以调出以下语句:
  
input;
  
当x为其他值时,如Input8时,可以调出以下语句:
  
input[7:  0];
Outputx
定义output类型代码时使用。其中x是指位宽数字,目前支持1,2,3,4,8,16,32。
  
当x为1时,即Output1,可以调出以下语句:
  
output;
  
当x为其他值时,如Output8时,可以调出以下语句:
  
output[7:  0];
Initial
用于调用测试文件中initial段的语句。语句中补充了#1延时,请注意不要删除。
  
initial  begin
  
    #1;
  
end
第2节 模板演示

为便于理解,下面将依次对各模板进行单独演示。

2.1 模块设计模板

在编辑模式下输入“Module”,注意首字母“M”需要大写,如下图所示:
                              
2.2-1  调用模块设计模板
按下“回车”键后编辑栏会出现模块设计模板,此处主要是为结构设计提供参考,如下图所示,将其补充完整即可。
2.2-2  模块设计模板调用结果
2.2 时序逻辑模板
1)常用时序always模板

在编辑模式下输入“Shixu”,注意首字母“S”需要大写,如下图所示.
2.2-3  调用时序模板
按下“回车”键后编辑栏会出现最常用的时序always模板,如下图所示,此模板中时钟和复位代码一般无需改变,只需要填写相应条件将代码补充完整即可。
3.2-4  时序模板调用结果
2)存在条件的时序always模板

在时序语句中经常会存在若干嵌套条件,在这种情况下,调用时可以在“Shixu”后面加上条件的数量。如存在2个条件时,应在编辑模式下输入“Shixu2”。同样的,首字母“S”需要大写,如下图所示。
2.2-5  调用2个条件的时序模板
按下“回车”键后编辑栏会出现2个条件的时序always模板,如下图所示。同样在此模板中时钟和复位代码一般无需改变,只需要填写相应条件将代码补充完整即可。
2.2-6  2个条件的时序模板调用结果
同样的,如果要调用3个条件的时序always模板,应在编辑模式下输入“Shixu3”,如下图所示。
2.2-7  调用3个条件的时序模板
按下“回车”键后编辑栏会出现3个条件的时序always模板,如下图所示。同样的,此模板一般只需填写相应条件将代码补充完整即可。
2.2-8   3个条件的时序模板调用结果
2.3 组合逻辑模板

1)组合逻辑always模板

在编辑模式下输入“Zuhe”,注意首字母“Z”大写,如下图所示。
2.2-9  调用组合逻辑模板
按下“回车”键后编辑栏会出现1个组合逻辑always模板,如下图所示,将其补充完整即可。
2.2-10  组合逻辑模板调用结果
2)有条件的组和逻辑always模板

当存在若干嵌套条件的情况下,进行调用时可以在“Zuhe”后面加上条件的数量。如要调用有2个条件的组合逻辑模板,在编辑状态下输入“Zuhe2”,首字母“Z”大写,如下图所示。
2.2-11  调用2个条件的组合逻辑模板
按下“回车”键后编辑栏会出现有条件的逻辑always模板,如下图所示,将其补充完整即可。
2.2-12  2个条件的组合逻辑模板调用结果
2.4 计数器模板

11个计数器模板

在编辑模式下输入“Jsq”,注意首字母“J”需要大写,如下图所示。
2.2-13  调用1个计数器模板
按下“回车”键后编辑栏会出现1个计数器模板,如下图所示。在此模板中需要考虑计数器的加1条件以及最终加数的大小,将add_cntend_cnt代码补充完整即可。
2.2-14  1个计数器模板的调用结果
2)多个计数器模板

当需要调用多个计数器时,可以在“Jsq”后加上调用计数器的个数,如需要调用两个计数器模板,应在编辑模式下输入“Jsq2”,首字母“J”大写,如下图所示。
2.2-15  调用2个计数器模板
按下“回车”键,编辑栏会出现2个计数器模板,如下图所示,考虑相应条件后将代码补充完整即可。
2.2-16  2个计数器模板调用结果
同样,如果要3个计数器模板则要在编辑模式下输入“Jsq3”,如下图所示。
2.2-17  调用3个计数器模板
按下“回车”键,编辑栏会出现3个计数器模板,如下图所示,考虑相应条件后将代码补充完整即可
2.2-18  3个计数器模板调用结果
3)增加1个计数器模板

调用计数器模板还有另外一种方法,这种方法可以在已有的计数器模板后加入新的计数器模板。如下图所示,在命令模式下输入“:call MDYJSQ()”,此处需注意大小写的转换。
2.2-19  增加1个计数器模板
按下“回车”键,可以看到编辑栏同样会出现1个计数器模板,如下图所示,在此模板中同样需要考虑后将相应代码补充完整即可。同样,如果此时已经存在计数器cnt0,也可以利用该方法新增1个计数器,新的计数器会自动命名为cnt1
图2.2-20  增加1个计数器模板的调用结果
2.5 状态机模板

1)一般的状态机模板

在编辑模式下输入“Ztj”,注意首字母“Z”需要大写,如下图所示。
2.2-21  调用状态机模板
按下“回车”键后编辑栏会出现状态机模板,如下图所示。
2.2-22  状态机模板调用结果
2)具有多个状态多个跳转条件的状态机模板

需要调用多个状态多个条件的状态机模板时,可以在相应代码后加入状态数量、名称以及跳转条件以实现调用。如需要调用具有3个状态且有5个跳转条件的状态机模板,则在命令模式下输入“:call MDYZTJ(3,”S1”,”S2”,”S3”,12,13,23,32,31)”,如下图所示,注意大小写区分。其中“3”代表状态的数量,”S1”,”S2”,”S3”分别为三个状态的名称,“1213233231”代表跳转条件,如“12”代表从状态1跳转到状态2,“13”代表状态1跳转到状态3,以此类推。
2.2-23  调用具有3个状态5个跳转条件的状态机模板
按下“回车”键后编辑栏会出现具有3个状态且有5个跳转条件的状态机模板,如下图所示。
2.2-24  具有3个状态5个跳转条件的状态机模板的调用结果
2.6 测试文件模板

在编辑模式下输入“Test”,注意首字母“T”需要大写,如下图所示。
2.2-25  调用测试文件模板
按下“回车”键后编辑栏会出现测试文件模板,如下图所示。可以在此基础上完成模块例化,从而实现文件测试。
2.2-26  调用测试文件模板
2.7 reg类型代码模板

以位宽为4为例,如果要调用位宽为4reg类型代码的模板,需在编辑模式下输入“Reg4”,注意首字母“R”需要大写,如下图所示。
2.2-27  调用位宽为4reg型模板
按下“回车”键后编辑栏会出现位宽为4reg型代码定义,如下图所示。
2.2-28  位宽为4reg型模板调用结果
2.8 wire类型代码模板

以位宽为32为例,如果要调用位宽为32wire类型代码的模板,需在编辑模式下输入“Wire32”,注意首字母“W”需要大写,如下图所示。
2.2-29  调用位宽为32wire型模板
按下“回车”键后编辑栏会出现位宽为32wire信号定义,如下图所示。
2.2-30  位宽为32wire型模板调用结果
2.9 输入信号定义模板

以位宽为8的输入信号为例,在编辑模式下输入“Input8”,注意首字母“I”需要大写,如下图所示。
2.2-31  调用位宽为8的输入信号模板
按下“回车”键后编辑栏会出现位宽为8的输入信号定义,如下图所示。
2.2-32  位宽为8的输入信号模板调用结果
同样,若输入信号位宽为16时,在编辑模式下输入“Input16”,如下图所示。

2.2-33  调用位宽为16的输入信号模板
按下“回车”键后编辑栏会出现位宽为16的输入信号定义,如下图所示。
2.2-34  位宽为16的输入信号模板调用结果
2.10 输出信号定义模板

以位宽为16的输出信号为例,在编辑模式下输入“Output16”,注意首字母“O”需要大写,如下图所示。
2.2-35  调用位宽为16的输出信号模板
按下“回车”键后编辑栏会出现位宽为16的输出信号定义,如下图所示。
2.2-36  位宽为16的输出信号模板调用结果
同样的,若调用位宽为32的输出信号模板,需在编辑状态下输入“Output32”,如下图所示。
2.2-37  调用位宽为32的输出信号模板
按下“回车”键后编辑栏会出现位宽为32的输出信号定义,如下图所示。
2.2-38  位宽为32的输信号模板调用结果
2.11 initial语句模板

调用initial语句模板需在编辑模式下输入“Initial”,注意首字母“I”需要大写,如下图所示。
2.2-39  调用initial语句模板
按下“回车”键后编辑栏会出现用于调用测试文件中initial段的语句,如下图所示。语句中补充了#1延时,请注意不要删除。
2.2-40  initial语句模板调用结果

   拓展阅读