Verilog-HDL数字集成电路设计原理与应用-第2章课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《Verilog-HDL数字集成电路设计原理与应用-第2章课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Verilog HDL 数字 集成电路设计 原理 应用 课件
- 资源描述:
-
1、第2章 Verilog HDL基础知识2.1 Verilog HDL的语言要素 2.2 数据类型 2.3 运算符 2.4 模块本章小结在线教务辅导网:在线教务辅导网:http:/教材其余课件及动画素材请查阅在线教务辅导网教材其余课件及动画素材请查阅在线教务辅导网QQ:349134187 或者直接输入下面地址:或者直接输入下面地址:http:/Verilog HDL语法来源于C语言基本语法,其基本词法约定与C语言类似。程序的语言要素也称为词法,是由符号、数据类型、运算符和表达式构成的,其中符号包括空白符、注释符、标识符和转义标识符、关键字、数值等。2.1 Verilog HDL的语言要素的语言要
2、素2.1.1 空白符空白符空白符包括空格符(b)、制表符(t)、换行符和换页符。空白符使代码看起来结构清晰,阅读起来更方便。在编译和综合时,空白符被忽略。Verilog HDL程序可以不分行,也可以加入空白符采用多行编写。例2.1-1 空白符使用示例。initial begin a = 3b100; b = 3b010; end相当于:initialbegin a = 3b100; b = 3b010;end2.1.2 注释符注释符Verilog HDL语言中允许插入注释,标明程序代码功能、修改、版本等信息,以增强程序的可阅读性和帮助管理文档。Verilog HDL中有两种形式的注释。(1)
3、单行注释:单行注释以“/”开始,Verilog HDL忽略从此处到行尾的内容。(2) 多行注释:多行注释以“/*”开始,到“*/”结束,Verilog HDL忽略其中的注释内容。需要注意的是,多行注释不允许嵌套,但是单行注释可以嵌套在多行注释中。例2.1-2 注释符使用示例。单行注释:assign a=b & c; /单行注释多行注释:assign a3:0=b3:0&c3:0; /*注释行1注释行2 */非法多行注释:/*注释内容 /*多行注释嵌套多行注释*/ 注释内容*/合法多行注释:/*注释内容 /多行注释嵌套单行注释*/2.1.3 标识符和转义标识符标识符和转义标识符在Verilog
4、HDL中,标识符(Identifier)被用来命名信号名、模块名、参数名等,它可以是任意一组字母、数字、$符号和_(下划线)符号的组合。应该注意的是,标识符的字母区分大小写,并且第一个字符必须是字母或者下划线。例2.1-3 以下标识符都是合法的。countCOUNT /与count不同_CC_G5B25_78SIX例2.1-4 以下标识符都是不正确的。30count /标识符不允许以数字开头out* /标识符中不允许包含字符*a+b-c /标识符中不允许包含字符+和-n238/标识符中不允许包含字符为了使用标识符集合以外的字符或标号,Verilog HDL规定了转义标识符(Escaped Id
5、entifier)。采用转义标识符可以在一条标识符中包含任何可打印的字符。转义标识符以“”(反斜线)符号开头,以空白结尾(空白可以是一个空格、一个制表字符或换行符)。例2.1-5 以下是合法的转义标识符。 a+b=c7400.*.$*QOutGate /与OutGate相同2.1.4 关键字关键字Verilog HDL语言内部已经使用的词称为关键字或保留字,它是Verilog HDL语言内部的专用词,是事先定义好的确认符,用来组织语言结构。用户不能随便使用这些关键字。需注意的是,所有关键字都是小写的。例如,ALWAYS不是关键字,它只是标识符,与always(关键字)是不同的。表2.1-1所示
6、为Verilog HDL的常用关键字。表2.1-1 Verilog HDL中的常用关键字2.1.5 数值数值Verilog HDL有四种基本的逻辑数值状态,用数字或字符表达数字电路中传送的逻辑状态和存储信息。Verilog HDL逻辑数值中,x和z都不区分大小写,也就是说,0 x1z与值0X1Z是等同的。Verilog HDL中的四值电平逻辑如表2.1-2所示。表2.1-2 四值电平逻辑在数值中,下划线符号“_”除了不能放于数值的首位外,可以随意用在整型数与实型数中,它们对数值大小没有任何改变,只是为了提高可读性。例如,16b1011000110001100和16b1011_0001_1000
7、_1100的数值大小是相同的,只是后一种的表达方式可读性更强。1整数及其表示整数及其表示Verilog HDL中的整数可以是二进制(b或B)、八进制(o或O)、十进制(d或D)与十六进制(h或H),其基数符号和可以采用的数字字符集如表2.1-3所示。表2.1-3 数制的基数符号与数字字符集整数的表示形式为如下:+/-其中,“+/-”是正数和负数标示;size指换算过后的二进制数的宽度;“”为基数格式表示的固有字符,该字符不能缺省,否则为非法表示形式;base_format是其基数符号;number是可以使用的数字字符集,形式上是相应进制格式下的一串数值。使用整数时需要注意的是:(1) 在较长的
8、数之间可以用下划线来分开,目的是提高可读性,下划线本身没有意义,如16b1110_1011_0011_1010,但下划线符号不能用作首字符。(2) 当数字没有说明位宽时,默认为32位。(3) x或z在二进制中代表1位x或z,在八进制中代表3位x或z,在十六进制中代表4位x或z,其代表的宽度取决于所用的进制。例如:8b1011xxxx /等价于8hBx8b1001zzzz /等价于8h9z(4) 若没有定义一个整数的位宽,其宽度为相应值中定义的位数。例如:o642/9位八进制数hBD/8位十六进制数(5) 若定义的位宽比实际数的位数大,则在左边用0补齐。但如果数最左边一位为x或z,就相应地用x或
9、z在左边补齐。例如:10b101/左边补0,得00000001018bz0 x1/左边补z,得zzzzz0 x1如果定义的位宽比实际数的位宽小,那么最左边的位被截断。例如:4b10111011/等价于4b10116HFFFB/等价于6H3B(6) “?”是高阻态z的另一种表示符号。在数字的表示中,字符“?”和Z或z是等价的,可互相替代。例如:4b?等价于4bzzzz。(7) 整数可以带正、负号,并且正、负号应写在最左边。负数表示为二进制的补码形式。例如:-4等价于4b1100。(8) 如果位宽和进制都缺省,则代表十进制数。例如:-15代表十进制数-15。(9) 数字中不能有空格,但在表示进制的
10、字母两侧可以有空格。例2.1-6 下面是一些合法的整数表示。8b10001101 /位宽为8位的二进制数100011018ha6 /位宽为8位的十六进制数a65o35 /5位八进制数354d6 /4位十进制数64b1x_01 /4位二进制数1x015hx/5位十六进制数x (扩展的x),即xxxxx4hz/4位十六进制数z,即zzzz8 h 2A /在位宽和字符之间以及进制和数值之间可以有空格,/但数字之间不能有空格例2.1-7 下面是错误的整数表示。4d-4 /数值不能为负,有负号应放最左边3 b001 /和基数b之间不允许出现空格(4+4) b11 /位宽不能是表达式形式2实数及其表示实数
11、及其表示实数有两种表示方法。(1) 十进制表示法。采用十进制格式,小数点两边必须都有数字,否则为非法的表示形式。例如:3.0、4.54、0.2等都是正确的,而5.是错误的。(2) 科学计数法。例如:564.2e2的值为56420.0,8.7E2的值为870.0(e不分大小写),3E-3的值为0.003。Verilog HDL还定义了实数转换为整数的方法,实数通过四舍五入转换为最相近的整数。例如:-13.74转换为整数是-14,33.27转换为整数是33。例2.1-8 实数表示示例。 2.7/十进制计数法5.2e8/科学计数法3.5E-6/科学计数法可用e或E表示,其结果相同5_4582.215
12、8_5896/使用下划线提高可读性6./非法表示.3e5/非法表示3字符串及其表示字符串及其表示字符串是指用双引号括起来的字符序列,它必须包含在同一行中,不能分行书写。若字符串用作Verilog HDL表达式或赋值语句中的操作数,则字符串被看做8位的ASCII值序列,即一个字符对应8位的ASCII值。例如hello world和An example for Verilog HDL是标准的字符串类型。在Verilog HDL中,数据类型共有19种,分别是wire、tri、tri0、tri1、wand、triand、trireg、trior、wor、reg、large、small、scalared
13、、medium、vectored、integer、time、real、parameter型。2.2 数数 据据 类类 型型按照抽象程度,Verilog HDL的数据类型又可划分为两大类:物理数据类型(主要包括连线型及寄存器型)和抽象数据类型(主要包括整型、时间型、实型及参数型)。物理数据类型的抽象程度比较低,与实际硬件电路的映射关系比较明显;而抽象数据类型则是进行辅助设计和验证的数据类型。2.2.1 物理数据类型物理数据类型Verilog HDL最主要的物理数据类型是连线型、寄存器型和存储器型,并使用四种逻辑电平和八种信号强度对实际的硬件电路建模。四值逻辑电平是对信号的抽象表示方式(见表2.1
14、-2)。信号强度表示数字电路中不同强度的驱动源,用来解决不同驱动强度下的赋值冲突,逻辑0和1可以用表2.2-1列出的强度值表示,驱动强度从supply到highz依次递减。表2.2-1 强 度 等 级1连线型连线型连线型变量包含多种类型,表2.2-2给出了各种连线型变量类型以及相应的含义。表2.2-2 连线型数据类型及其功能描述连线表示逻辑单元的物理连接,可以对应为电路中的物理信号连线,这种变量类型不能保持电荷(除trireg之外)。连线型变量必须要有驱动源,一种是连接到一个门或者模块的输出端,另一种是用assign连续赋值语句对它进行赋值。若没有驱动源,将保持高阻态z。1) wire和tri
15、在众多的连线型数据类型中,最常见的是wire(连线)和tri(三态线)两种,它们的语法和语义一致。不同之处在于:wire型变量通常用来表示单个门驱动或连续赋值语句驱动的连线型数据,tri型变量则用来表示多驱动器驱动的连线型数据,主要用于定义三态的线网。Wire/tri的真值表如表2.2-3所示。表2.2-3 wire/tri真值表上述真值表可以理解为,同时有两个驱动强度相同的驱动源来驱动wire或tri变量时的输出结果。例2.2-1 连线型变量示例。wire 2:0c;assign c =3b0 x1;assign c = 3b1z1; /c=3bxx1;在上面的例子中,两个驱动源共同决定c的
16、值。第一个赋值语句右侧表达式的值为0 x1,第二个赋值语句右侧表达式的值为1z1,那么c 的有效值是xx1。这是因为0和1同时驱动的结果为x,x和z同时驱动的结果为x,而1和1同时驱动的结果为1。2) wor和trior当有多个驱动源驱动wor和trior型数据时,将产生线或结构,其真值表如表2.2-4所示。表2.2-4 wor/trior真值表3) wand和triand当有多个驱动源驱动wand和triand型数据时,将产生线与结构,其真值表如表2.2-5所示。表2.2-5 wand/triand真值表4) tri0和tri1tri0(tri1)的特征是:若无驱动源驱动,其值为0(tri1
17、的值为1);在多个驱动源情况下,tri0/tri1的真值表如表2.2-6所示。表2.2-6 tri0/tri1真值表5) supply0和supply1supply0用于对“地”建模,即低电平0;supply1用于对电源建模,即高电平1。例如: supply0表示Gnd,supply1表示Vcc。6) trireg线网trireg线网能存储数值(类似于寄存器型数据类型),并且用于电容节点的建模。当三态寄存器(trireg)的所有驱动源都处于高阻态z时,三态寄存器线网将保存作用在线网上的最后一个逻辑值。三态寄存器线网的缺省初始值为x。一个trireg网络型数据用于模拟电荷存储。电荷量强度可由下面
18、的关键字来控制:small、medium、large。默认的电荷强度为medium。一个trireg网络型数据能够模拟一个电荷存储节点,该节点的电荷量将随时间而逐渐衰减。对于一个trireg网络型数据,仿真时其电荷衰减时间应当制定为延迟时间。2. 寄存器型寄存器型reg型变量是最常见也是最重要的寄存器型数据类型,它是数据储存单元的抽象类型,其对应的硬件电路元件具有状态保持作用,能够存储数据,如触发器、锁存器等。reg型变量常用于行为级描述中,由过程赋值语句对其进行赋值。reg型数据与wire型数据的区别在于,reg型数据保持最后一次的赋值,而wire型数据需要有持续的驱动。一般情况下,reg型
19、数据的默认初始值为不定值x,缺省时的位宽为1位。reg型变量举例:reg a;/定义一个1位的名为a的reg型变量reg 3:0 b;/定义一个4位的名为b的reg型变量reg8:1c,d,e;/定义三个名称分别为c、d、e的8位的reg型变量reg型变量一般为无符号数,若将一个负数赋给reg型变量,则自动转换成其二进制补码形式。例如:reg signed3:0 rega;rega=-2;/rega的值为1110(14),是2的补码在过程块内被赋值的每一个信号都必须定义成reg型,并且只能在always或initial过程块中赋值,大多数reg型信号常常是寄存器或触发器的输出。2.2.2 连线
20、型和寄存器型数据类型的声明连线型和寄存器型数据类型的声明1. 连线型数据类型的声明连线型数据类型的声明缺省的连线型数据的默认类型为1位(标量)wire类型。Verilog HDL禁止对已经声明过的网络、变量或参数再次声明。连线型数据类型声明的一般语法格式如下: list_of_variables; 其中,drive_strength、range、delay为可选项,而list_of_variables为必选项。说明:(1) net_ declaration:表示网络型数据的类型,可以是wire、tri、tri0、tri1、wand、triand、trior、wor、trireg中的任意一种。对
21、于trireg类型,其声明还有一个charge_strength(电荷强度)的可选项。(2) drive_strength:表示连线变量的驱动强度。(3) range:用来指定数据为标量或矢量。若该项默认,表示数据类型为1位的标量,超过1位则为矢量形式。 (4) delay:指定仿真延迟时间。 (5) list_of_variables:变量名称,一次可定义多个名称,之间用逗号分开。除了逻辑值外,Verilog HDL还用强度值来解决数字电路中不同强度的驱动源之间的赋值冲突,强度等级说明见表2.2-1。如果两个具有不同强度的信号驱动同一个线网,则竞争结果为高强度信号的值;如果两个强度相同的信号
22、之间发生竞争,则结果为不确定值。2. 寄存器型数据类型的声明寄存器型数据类型的声明reg型数据类型声明的一般语法格式:reg;其中,range为可选项,它指定了reg型变量的位宽,缺省时为1位。 说明:list_of_register_variables:变量名称列表,一次可以定义多个名称,之间用逗号分开。3. 物理数据类型声明举例物理数据类型声明举例前面已经了解了连线型数据和寄存器型数据这两种物理数据类型的声明格式,下面举例来理解这两种声明格式的用法。例2.2-2 物理数据类型声明举例。reg rega;/定义一个1位的寄存器型变量reg 7:0 regb;/定义一个8位的寄存器型变量tri
23、 7:0 tribus;/定义一个8位的三态总线tri015:0 busa;/定义一个16位的连线型,处于三态时为上拉电阻tri131:0 busb;/定义一个32位的连线型,处于三态时为下拉电阻reg scalared1:4b;/定义一个4位的标量型寄存器矢量wire(pull1,strong0)c=a+b;/定义一个1和0的驱动强度不同的1位连线型变量ctrireg(large) storeline;/定义一个具有大强度的电荷存储功能的存储线2.2.3 存储器型存储器型存储器型(memory)本质上还是寄存器型变量阵列,只是Verilog HDL语言中没有多维数组,所以就用reg型变量建立
24、寄存器组(数组)来实现存储器的功能,也就是扩展的reg型数据地址范围。存储器型变量可以描述RAM型、ROM型存储器以及reg文件。数组中的每一个单元通过一个数组索引进行寻址。存储器型变量的一般声明格式:reg ;其中,range1和range2都是可选项,缺省时都为1。 说明:(1) range1:表示存储器中寄存器的位宽,格式为msb:lsb。(2) range2:表示寄存器的个数,格式为msb:lsb,即有msb-lsb+1个。(3) name_of_register:变量名称列表,一次可以定义多个名称,之间用逗号分开。例2.2-3 存储器型变量声明。reg7:0 mem1255:0;/定
25、义了一个有256个8位寄存器的存储器mem1。/地址范围是0到255reg 15:0mem2127:0,reg1,reg2;/定义了一个具有128个16位寄存器的存储器/ mem2和2个16位的寄存器reg1和reg2注意memory型和reg型数据的区别。一个由n个1位寄存器构成的存储器和一个n位寄存器的意义是不同的。例2.2-4 存储器型变量与寄存器型变量的比较。regn-1:0 a;/表示一个n位的寄存器areg mem1n-1:0;/表示一个由n个1位寄存器构成的存储器mem1一个n位的寄存器可以在一条赋值语句里进行赋值,而一个完整的存储器则不行。例如,对于上例可以进行“reg a =
展开阅读全文