明德扬论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 105|回复: 0

【FPGA至简设计原理与应用】书籍连载07第二篇FPGA至简设计原理第二章多用模板专注设计

[复制链接]
发表于 6 天前 | 显示全部楼层 |阅读模式

马上注册,看完整文章,学更多FPGA知识。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x


大家好,近期我们会连载《FPGA至简设计原理与应用》一书,有兴趣的同学可以学习,也希望大家可以对我们的书提出宝贵的意见和建议。

《FPGA
至简设计原理与应用》书籍连载索引目录

http://www.fpgabbs.cn/forum.php?mod=viewthread&tid=989


读过的朋友可积极在贴后留言,书籍正式出版时,我们会从留言者中挑选20位幸运读者,幸运读者可获潘老师亲笔签名书籍一本。

注:手机浏览可能格式会乱,建议用电脑端进行浏览。





第二篇 FPGA至简设计原理


    第一章 多用模板专注设计

    进行工程设计的过程中,在亲手完成了部分工程的设计后就会发现其实大多数工程都有一定的“套路”。因此至简设计法制作了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”需要大写,如下图所示:
                              

1

1
2.2-1  调用模块设计模板
按下“回车”键后编辑栏会出现模块设计模板,此处主要是为结构设计提供参考,如下图所示,将其补充完整即可。
2.png
2.2-2  模块设计模板调用结果
2.2 时序逻辑模板
1)常用时序always模板

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

在时序语句中经常会存在若干嵌套条件,在这种情况下,调用时可以在“Shixu”后面加上条件的数量。如存在2个条件时,应在编辑模式下输入“Shixu2”。同样的,首字母“S”需要大写,如下图所示。

5

5
2.2-5  调用2个条件的时序模板
按下“回车”键后编辑栏会出现2个条件的时序always模板,如下图所示。同样在此模板中时钟和复位代码一般无需改变,只需要填写相应条件将代码补充完整即可。
6.png
2.2-6  2个条件的时序模板调用结果
同样的,如果要调用3个条件的时序always模板,应在编辑模式下输入“Shixu3”,如下图所示。
7.png
2.2-7  调用3个条件的时序模板
按下“回车”键后编辑栏会出现3个条件的时序always模板,如下图所示。同样的,此模板一般只需填写相应条件将代码补充完整即可。
8.png
2.2-8   3个条件的时序模板调用结果
2.3 组合逻辑模板

1)组合逻辑always模板

在编辑模式下输入“Zuhe”,注意首字母“Z”大写,如下图所示。

9

9
2.2-9  调用组合逻辑模板
按下“回车”键后编辑栏会出现1个组合逻辑always模板,如下图所示,将其补充完整即可。
10.png
2.2-10  组合逻辑模板调用结果
2)有条件的组和逻辑always模板

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

11个计数器模板

在编辑模式下输入“Jsq”,注意首字母“J”需要大写,如下图所示。

13

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

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

17

17
2.2-17  调用3个计数器模板
按下“回车”键,编辑栏会出现3个计数器模板,如下图所示,考虑相应条件后将代码补充完整即可
18.png
2.2-18  3个计数器模板调用结果
3)增加1个计数器模板

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

1)一般的状态机模板

在编辑模式下输入“Ztj”,注意首字母“Z”需要大写,如下图所示。

21

21
2.2-21  调用状态机模板
按下“回车”键后编辑栏会出现状态机模板,如下图所示。
22.png
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,以此类推。
23.png
2.2-23  调用具有3个状态5个跳转条件的状态机模板
按下“回车”键后编辑栏会出现具有3个状态且有5个跳转条件的状态机模板,如下图所示。
24.png
2.2-24  具有3个状态5个跳转条件的状态机模板的调用结果
2.6 测试文件模板

在编辑模式下输入“Test”,注意首字母“T”需要大写,如下图所示。

25

25
2.2-25  调用测试文件模板
按下“回车”键后编辑栏会出现测试文件模板,如下图所示。可以在此基础上完成模块例化,从而实现文件测试。
26.png
2.2-26  调用测试文件模板
2.7 reg类型代码模板

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

以位宽为32为例,如果要调用位宽为32wire类型代码的模板,需在编辑模式下输入“Wire32”,注意首字母“W”需要大写,如下图所示。

29

29
2.2-29  调用位宽为32wire型模板
按下“回车”键后编辑栏会出现位宽为32wire信号定义,如下图所示。
30.png
2.2-30  位宽为32wire型模板调用结果
2.9 输入信号定义模板

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

33

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

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

37

37
2.2-37  调用位宽为32的输出信号模板
按下“回车”键后编辑栏会出现位宽为32的输出信号定义,如下图所示。
38.png
2.2-38  位宽为32的输信号模板调用结果
2.11 initial语句模板

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





上一篇:【FPGA至简设计原理与应用】书籍连载06 第二篇FPGA至简设计原理 第一章高效编辑器GVIM
下一篇:【FPGA至简设计原理与应用】书籍连载08 第二篇 FPGA至简设计原理 第三章 实验平台
MP801开发板 网络培训班 就业培训班 FPGA学习资料
周老师 17002067067(微信同号) Q1727673675
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|MDYBBS ( 粤ICP备16061416号-1

GMT+8, 2020-5-26 13:12 , Processed in 0.606844 second(s), 98 queries , File On.

Powered by Discuz! X3.4

本论坛由广州健飞通信有限公司所有

© 2001-2019 Comsenz Inc.

快速回复 返回顶部 返回列表