教案2.docx
- 文档编号:6009965
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:13
- 大小:95.63KB
教案2.docx
《教案2.docx》由会员分享,可在线阅读,更多相关《教案2.docx(13页珍藏版)》请在冰豆网上搜索。
教案2
****学习目的及重点********P2
⏹学习目的:
⏹1.对用Verilog语言进行数字系统设计有初步了解,建立概念;
⏹2.掌握Verilog程序的总体架构和基本语法。
⏹学习重点:
⏹1.Verilog程序的总体架构和特点;
在这一部分学习的时候,书中会有很多例子,大家不用太关注程序实现的细节问题。
因为后面有很多章节会详细的讲这些内容,我们把重点放在程序的总体架构上,这是最基础的东西,是必须要遵守的。
因为课后的习题里要大家设计8位加法器和计数器,所以我会详细为大家讲解教材中例5.1和例5.2的设计过程,这样大家对于用Verilog语言进行数字系统设计的基本思路和步骤就有了认识。
⏹2.Verilog语言的基本要素;
Verilog语言的基本要素其实就是语言符号(关键字、操作符等等)。
本章将对Verilog语言的语言符号,也叫词法进行详尽的阐述。
事实上,Verilog程序的总体架构加上由语言符号形成的符号流,就构成了我们数字系统的设计。
⏹3.硬件描述语言(Verilog)与软件编程语言(C语言)的对比
为什么我们要在这里强调Verilog和C语言的对比呢?
因为这两种语言有着非常相似的语法结构。
事实上,Verilog就是在C语言的基础上发展起来的。
教材里的表5.1和表5.2有很详细的对比,大家可以看一下。
这种相似性带来的好处是,大家可以快速入门,因为大家都有C语言的基础。
而这种相似性带来的问题呢,就是大家在学习的过程中可能会用惯常的软件编程语言的思维方法去编写和分析Verilog代码。
而事实上,这两种语言,在相似的外表之下,本质是截然不同的。
大家在学习过程中要注意这个问题,对比着学习,更能加深理解,提高学习的效率。
因此,我们在这里强调这个问题。
⏹学习方法:
⏹归纳、总结,注意记笔记
**************主要内容************************P3
5.1Verilog简介
5.2Verilog设计举例
5.3Verilog模块的结构
5.4Verilog语言要素
5.5常量
5.6数据类型
5.7参数
5.8向量
5.9运算符
**************5.1Verilog简介********************P4
⏹Verilog语言是1983年由GDA(GatewayDesignAutomation)公司的PhilMoorby首创的,之后Moorby又设计了Verilog-XL仿真器,Verilog-XL仿真器大获成功,也使得Verilog语言得到推广使用。
⏹1989年,Cadence收购了GDA
⏹1990年,Cadence公开发表了VerilogHDL,并成立了OVI组织(OpenVerilogInternational)专门负责VerilogHDL的发展。
⏹Verilog于1995年成为IEEE标准,称为IEEEStandard1364-1995(Verilog-1995)
⏹IEEE“1364-2001”标准(Verilog-2001)也获得了通过,多数综合器、仿真器都已经支持Verilog-2001标准
**************5.2Verilog设计举例**************P5
**************5.2Verilog设计举例**************P6
************Verilog程序的特点************P7
(1)Verilog程序是由模块构成的。
每个模块的内容都嵌在module和endmodule两个关键字之间;每个模块实现特定的功能;模块是可以进行层次嵌套的。
(2)每个模块要有一个名字,名字后要有一个端口列表,将该模块的所有输出输出变量列出。
(3)每个模块首先要进行端口定义,并说明输入和输出口(input、output或inout),然后对模块的功能进行逻辑描述。
(4)Verilog程序书写格式自由,一行可以写几个语句,一个语句也可以分多行写。
(5)除了endmodule等少数语句外,每个语句的最后必须有分号。
(6)可以用/*……*/和//……对Verilog程序作注释。
好的源程序都应当加上必要的注释,以增强程序的可读性和可维护性。
详解4位全加器,4位计数器的设计过程
**************综合(RTL级)**************P8
通过看综合器的综合结果,我们可以深刻认识到,Verilog程序设计最终获得的实际的硬件电路,而不是供计算机执行的二进制代码。
这是硬件描述语言与软件编程语言之间的本质区别。
4位全加器RTL级综合的结果
4位全加器RTL级综合产生的电路很简单,就是一个四位加法器以及输出缓冲器组成,程序与硬件电路实现的对应关系一目了然。
4位计数器RTL级综合的结果
简单分析一下这个电路
1)组成:
加法器、数据选择器、触发器以及器件间互联组成;
2)复位信号的作用分析:
(计数器清零);
3)计数原理分析。
**************综合(门级)**************P9
4位全加器门级综合视图
4位计数器门级综合视图
门级综合是基于器件的,这里选的是Alteral公司的EPF10K10。
门级综合电路包含的基本器件与目标器件的最小逻辑单元构成有关。
这里可以看到,基于EPF10K10的门级电路包含与门、非门、数据选择器、触发器。
**************仿真**************P10
4位全加器的功能仿真结果
4位计数器的功能仿真部分波形
大致分析一下仿真波形
********5.3Verilog模块的结构********P11
moduleAOI(A,B,C,D,F);//模块名为AOI
inputA,B,C,D;//模块的输入端口为A,B,C,D
outputF;//模块的输出端口为F
wireA,B,C,D,F;//定义信号的数据类型
assignF=~((A&B)|(~(C&D)));//逻辑功能描述
endmodule
该程序的第1行为模块的名字、模块的端口列表;第2、3行为输入输出端口声明,第4行定义了端口的数据类型;在第5行中对输入、输出信号间的逻辑关系进行了描述。
********Verilog模块的模板********P12
课件中展示了一个Verilog模块的模板,我把它分成了四个部分,下面就每一个部分进行详细的解说:
1.模块声明
模块定义格式如下:
module模块名(端口1,端口2,……);这叫做端口列表,各端口之间用逗号隔开,行尾要加分号
………(程序主体)……………………
endmodule模块结尾,注意不用加分号
2.端口定义
1)端口的含义:
指模块与外界连接的信号线。
可以类比于器件的管脚;
2)端口的类型:
输入端口(input)
格式:
input端口名1,端口名2,……端口名n;
输出端口(output)
格式:
output端口名1,端口名2,……端口名n;
双向端口(inout)
格式:
inout端口名1,端口名2,……端口名n;
3.信号类型定义
包含对两种信号的定义:
1)端口信号类型定义
对端口列表中的所有端口都要声明,不声明则默认为wire型;
输入端口和双向端口不能定义为寄存器型。
2)模块内部信号进行类型定义
如果信号的数据类型没有进行定义,则综合器默认为wire型。
例子:
regcount;
reg[3:
0]out;//四位寄存器型信号
wireA,B,C,D;//一行可定义多个信号,用逗号隔开
3.逻辑功能描述
如何描述你想要实现的逻辑功能,这就是我们这门课主要要学习的东西,在这里不详述。
以后,课件当中显示的每一部分我们都会仔细的讲解。
********5.4Verilog语言要素********P13
Verilog程序由符号流构成,符号包括
⏹空白符(Whitespace)
⏹注释(Comments)
⏹操作符(Operators)
⏹数字(Numbers)
⏹字符串(Strings)
⏹标识符(Identifiers)
⏹关键字(Keywords)
********空白符和注释********P14
◆空白符(Whitespace)
空白符包括:
空格、tab、换行和换页。
空白符使代码错落有致,阅读起来更方便。
在综合时空白符被忽略。
◆注释(Comment)
单行注释:
以“//”开始到本行结束,不允许续行
多行注释:
多行注释以“/*”开始,到“*/”结束
********标识符(Identifiers)********P15
◆标识符(Identifiers)
Verilog中的标识符可以是任意一组字母、数字以及符号“$”和“_”(下划线)的组合,但标识符的第一个字符必须是字母或者下划线。
另外,标识符是区分大小写的。
1)标识符的定义:
用户在编程时给Verilog对象起的名字,如端口的名字,变量的名字等。
2)标识符的组成及规则:
序号
名称
内容
备注
1
字母
A-Za-z
可做名字第一字符
2
数字
0-9
3
符号1
_(下划线)
可做名字第一字符
4
符号2
$
注意:
1.字母区分大小写Data=data;
2.标识符不可以与关键字一样。
Examples:
正确的标识符:
count
COUNT//COUNT与count是不同的
_A1_d2//以下划线开头
R56_68
FIVE
错误的标识符
30count//非法:
标识符不允许以数字开头
Out*//非法:
标识符不允许包含字符*
3)转义标识符
1)规则:
以符号“\”开头,以空白符结尾,可以包含任何字符。
例子:
\~#@sel
2)注意:
1.开头的符号“\”和结尾的空白符不属于转义标识符的一部分;
例子:
\count=count
2.转义标识符与关键字并不同;
例子:
\wait=wait
********关键字(Keywords)********P16
Verilog语言内部已经使用的词称为关键字或保留字,这些保留字用户不能作为变量或节点名字使用(课本附录B)。
关键字都是小写的。
always(关键字)ALWAYS(标识符)
********5.5常量********P17
程序运行中,值不能被改变的量称为常量(constants),Verilog中的常量主要有如下3种类型:
◆整数
◆实数
◆字符串
常量的用途是什么?
作为计算中需要引用的参数,比较的阈值,输出信息等。
********整数(integer)********P18
⏹整数按如下方式书写:
+/-
即+/-<位宽>'<进制><数字>
size为对应二进制数的宽度;base为进制;value是基于进制的数字序列。
进制有如下4种表示形式:
◆二进制(b或B)
◆十进制(d或D或缺省)
◆十六进制(h或H)
◆八进制(o或O)
********整数(integer)********P19
Examples:
8'b11000101//位宽为八位的二进制数11000101
8'hd5//位宽为八位的十六进制数d5;
5'O27//5位八进制数
4'D2//4位十进制数2
4'B1x_01//4位二进制数1x01
5'Hx//5位x(扩展的x),即xxxxx
4'hZ//4位z,即zzzz
8□'h□2A/*在位宽和'之间,以及进制和数值之间允许出现空格,但'和进制之间,数值间是不允许出现空格的,比如8'□h2A、8'h2□A等形式都是不合法的写法*/
课堂上讲的具体内容:
整数的格式:
+/-<位宽>'<进制><数字>
1.正负数的表示
正数:
“+”表示,也可以省略;
负数:
“-”表示,只能放在最开始的位置,放在其他位置都是非法的。
负数通常表示为二进制的补码(二进制数取反加1)。
例1:
-4'd4合法,表示十进制数的-4;
4'd-4非法
例2:
-16'd1=16'hFFFF
2.位宽
关于位宽的法则:
1)表示整数的二进制宽度。
大家一定注意,是二进制宽度。
2)位宽不能为表达式
例如:
(3+2)'b10非法
3)当数字不说明位宽和进制的时候,默认值为10进制,32位数。
+/-<数字>
例子:
10=32'd10=32'h0000000a
3)如果没有定义整数的宽度,但说明了进制时,实际宽度为相应值中定义的位数。
+/-<位宽>'<进制><数字>
例:
'hAF8位16进制数
5)当定义的位宽和实际数字的位宽不同时
a)定义的位宽大于实际数字长时,通常在数字的左边补0,如果数字最左边为X或Z,就在最左边补X或Z。
例1:
10'b10=10'b00000000_10//左边补8个0
例2:
10'bx1=10'bxxxxxxxx_x1//左边补8个x
b)定义的位宽小于实际数字长时,那么最左边的数字相应的被截断。
例:
4'b0010_1101=4'b1101//最左边的0010被截断了
3.进制
1)进制的表示有四种方法,不区分大小写:
◆二进制(b或B)
◆八进制(o或O)
◆十进制(d或D或缺省)
◆十六进制(h或H)
2)如果不说明进制,默认为10进制数。
4.数字
1)数字必须是基于进制的。
也就是说前面进制是什么,后面数字的表示方法就要是什么进制的。
否则就是非法的。
例子:
4'dA//进制定义的是十进制,但数字表示是16进制,非法。
2)数字的编辑
数字之间可以加入下划线以增加可读性。
但是数字起始位置不能加,加了就为非法。
例:
16'b1101_1100_1110_0101正确的表示方法
16'b_1101_1100_1110_0101_错误的表示方法
3)大小写规定:
16进制的A~Z不区分大小写;
表示不定值的X和表示高阻态的Z(?
与Z同义),也不区分大小写。
4)X、Z在不同进制下的表示方法:
二进制:
X、Z都分别表示一位的X、Z
八进制:
X、Z都分别表示三位的X、Z
十六进制:
X、Z都分别表示三位的X、Z8'b1010zzzz=8'hAZ
5.空格的插入
8'h2A
只能在位数与'之间或进制与数字之间插入空格,其他地方插入都是非法的。
********实数(Real)********P20
⏹实数(Real)有下面两种表示法。
◆十进制表示法。
例如:
2.0
0.1//以上2例是合法的实数表示形式
2.//非法:
小数点两侧都必须有数字
◆科学计数法。
例如:
43_5.1e2//其值为43510.0(43.5×10-2)
9.6E2//960.0(e与E相同)(9.6×10-2)
5E-4//0.0005(5×10-4)
关于实数我们有三个问题要讲一下:
能综合:
代码能生成电路;
不能综合:
代码不能生成电路。
1)综合器对于实数如何处理?
确切的说,综合器是无法处理实数的,遇到实数的时候,都被四舍五入的转换为最相近的整数了!
2)综合器不能处理实数,那实数拿来干什么?
仿真中会用到。
这个讲到仿真的那块时,大家就会知道。
3)如何处理实数?
用verilog语言实现算法,就不可避免的需要处理实数,但是综合器不支持,怎么办?
首先,我们要建立这样一个概念:
在计算机的世界里,它直接处理的对象,除了0就是1,没有其他的东西。
C语言可以处理实数,是因为C编译器为我们的高级语言输入和底层的硬件处理之间搭建了一个平台。
我们的综合器没有提供这样的平台,那怎么办?
这就需要我们自己去做这个工作。
具体C编译器是如何完成这个工作的,我们这里不讲,因为过程很复杂。
在这里提这个,是为了给大家扩展一下思路,以后遇到这个问题,可以朝这个方向去想。
********字符串(Strings)********P21
⏹字符串是双引号内的字符序列。
⏹字符串不能分成多行书写。
例如:
"INTERNALERROR"
⏹字符串的作用主要是用于仿真时,显示一些相关的信息,或者指定显示的格式。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教案