chVerilogHDL语法与要素PPT课件_第1页
chVerilogHDL语法与要素PPT课件_第2页
chVerilogHDL语法与要素PPT课件_第3页
chVerilogHDL语法与要素PPT课件_第4页
chVerilogHDL语法与要素PPT课件_第5页
已阅读5页,还剩75页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Verilog HDL 语法与要素语法与要素延延 边边 大大 学学 工工 学学 院院电电 子子 信信 息息 通通 信信 学学 科科许许 一一 男男第1页/共80页2 Verilog HDL的注释语句有两种形式: (1)单行注释。用符号“/”表示注释的开始,从这个符号开始到本行的结束都被认为是注释,而且它只能注释到本行结束。6.1 Verilog HDL语语言要素(注 释释 语语 句 )第2页/共80页3 (2)多行注释。以起始符“/*”开始,到终止符“*/”结束,可以跨越多行,在一对起始符与终止符之间的所有内容都被认为是注释。注 释释 语语 句 第3页/共80页4 标识符是用户定义的各种名称,

2、可以是模块、端口、寄存器、线网、实例和程序块等元素的名称,比如语句“module adder;”就定义了一个标识符adder,而语句“reg abc;”则定义了标识符abc。标识符可以是字母、数字和下划线“_”等符号的任意组合序列,但首字符不能是数字,而且单个标识符的总字符数不能多于1024。 关键词是语言的保留字,有其特定的和专有的语法作用,用户不能再对这些关键词做新的定义。Verilog HDL共有102个关键词。 注意:关键词必须是小写的,如“module”是关键词,而“Module”不是。标识标识符和关键词关键词第4页/共80页5 Verilog HDL提供了丰富的数据类型,本章把Ve

3、rilog HDL的数据分为常量和变量两类,并分别介绍其特点和使用方法。 表达式是操作符、操作数和标点符号序列,其目的是用来说明一个计算过程。程序中的大部分语句是由表达式构成的,因此表达式是Verilog HDL的重要部分。数数据类类型与与表达达式第5页/共80页6 在程序运行过程中,其值不能被改变的量称为常量。 Verilog HDL有整型、实数型、字符串型3种常量。 在整型或实数型常量的任意位置可以随意插入下划线“_”(但是不能当作首符号),这些下划线对数本身并没有意义,但是当数字很长时使用下划线可以提高可读性。6.2 常 量 (constants)第6页/共80页7 Verilog HD

4、L有4种基本值: 0 表示逻辑0或“假”; 1 表示逻辑1或“真”; x 表示未知; z 表示高阻。 注意:x值和z值都是不分大小写的,也就是说,值0 x1z与值0X1Z相同。(尽量统一使用小写) Verilog HDL的常量是由以上这4种基本值组成的。第7页/共80页8 整型常量即整数,Verilog HDL的整数有两种书写格式: 十进制数格式, 基数格式。 (1)十进制数格式是一个可以带正负号的数字序列,代表一个有符号数, 如下例: 32 /十进制数32 -15 /十进制数-15(1) 整形常量第8页/共80页9 (2)基数格式的数通常是无符号数,形式如下: sizebase value

5、size定义常量的位数(长度),这是可选项; base是基数,规定这个数据的进制,可以是o或O(表示八进制),b或B(表示二进制),d或D(表示十进制),h或H(表示十六进制)之一; value是一个数字序列,其形式应与base定义的形式相符。这个数字序列中出现的值x和z以及十六进制中的af不区分大小写,“?”字符可以代替值z。第9页/共80页10 下面给出一些典型书写方法,有正确的也有错误的。 5O37 /5位八进制数 4D2 /4位十进制数 4B1x_01 /4位二进制数 7Hx /7位x(扩展的x), 即xxxxxxx 4hZ /4位z(扩展的z) , 即zzzz 2h1? /2位十六进

6、制数,与2h1z相同 8h 2 A /在位数和字符之间,以及基数和数值之间允许出现空格 4d-4 /非法:数值不能为负 3 b001 /非法:和基数b之间不允许出现空格 (2+3)b10 /非法:位数不能够为表达式第10页/共80页11 如果没有定义常量的位数,那么这个数的长度就是相应值的位数,例如: o721 /9位八进制数 hAF /8位十六进制数 如果定义的长度大于数字序列的实际长度,通常在数据序列的高位(左侧)补0。但是如果这个数字序列最左边一位为x或z,就用x或z在左边补位,例如: 10b10 /左边补0, 0000000010 10bx0 x1 /左边补x, xxxxxxx0 x1

7、 如果定义的长度小于数字序列的实际长度,这个数字序列最左边超出的位将被截断,例如: 3b1001_0011 /与3b011相等 5H0FFF /与5H1F相等第11页/共80页12 在Verilog HDL中,实数就是浮点数,实数的定义方式有两种: (1)十进制格式,由数字和小数点组成(必须有小数点),例如: 2. / 非法:小数点右侧必须有数字(2) 实数实数型常量第12页/共80页13 2)指数格式,由数字和字符e(E)组成,e(E)的前面必须要有数字而且后面必须为整数, 例如: 23_5.1e2 /其值为,忽略下划线 3.6E2 /其值为360.0 ( e与E相同) 5E4 /其值为第1

8、3页/共80页14 字符串常量是由一对双引号括起来的字符序列。出现在双引号内的任何字符(包括空格和下划线)都将被作为字符串的一部分。如下例: INTERNAL ERROR“ R E A C H E D H E R E /空格出现在双引号内,所以是字符串的组成部分 12345_6789_0 /下划线出现在双引号内,所以是字符串的组成部分(3) 字符串型常量第14页/共80页15 实际上,字符都会被转换成二进制数,而且这种二进制数是按特定规则编码的。现在普遍都采用ASCII码,这种代码把每个字符用一个字节(8位)的二进制数表示。所以字符串实际就是若干个8位ASCII码的序列。例如字符串“INTER

9、NAL ERROR”共有14个字符,存储这个字符串的变量就需要8*14位的存储空间,如下: reg 1:8*14 Message; /定义变量Message并分配存储空 Message = INTERNAL ERROR /给变量Message赋值为字符串常量第15页/共80页16 Verilog HDL有线网和寄存器两种类型的变量,每种类型都有其在电路中的实际意义。 1线网型变量 线网表示元件之间的物理连线,它不能存储数据。线网是被“驱动”的,可以用连续赋值或把元件的输出连接到线网等方式给线网提供“驱动”,给线网提供驱动的赋值和元件就是“驱动源”,线网的值由驱动源决定。如果没有驱动源连接到线网

10、,线网的缺省值为z。6.3 数数 据 类类 型第16页/共80页17 Verilog HDL共有11种线网类型:wire、tri、wor、trior、wand、triand、trireg、tri1、tri0、supply0、supply1。 线网的声明语法形式如下: net_kind msb:lsb net1, net2, . . . , netN; net_kind是线网类型;msb:lsb定义线网宽度的最高位和最低位,这一项是可选的,如果没有定义宽度,那么认为线网宽度是1位;net1,net2netN是线网变量的名称。第17页/共80页18 可以在同一个定义中声明多个变量,例如: wire

11、 Rdy, Start; /Rdy和Start是2个1位的连线 wand 2:0 Addr; /Addr是3位线与型线网 线网可以有多个驱动源(多条语句对同一个线网进行赋值),每个驱动源都会给线网赋值,出现这种情况时,线网的取值由线网类型决定。第18页/共80页19 wor Rde; /定义Rde为线或类型的线网 assign Rde = Blt & Wyl; /第一个连续赋值语句是Rde的第1个驱动源 assign Rde = Kbl | Kip; /第二个连续赋值语句是Rde的第2个驱动源 本例中,Rde有两个驱动源,它们分别来自于两个连续赋值语句。由于Rde是“线或”类型的线网,

12、所以Rde的有效值由驱动源的值(右边表达式的值)的线或表决定,具体做法是:把这两个驱动源赋给线网的两个值作为索引去线或表中查询,就可以得到线网真正的有效值。第19页/共80页20 在这11种线网中,经常用到的是前6种,下面给出其详细的 (1)wire和tri线网 wire 连线。 tri 三态线。 wire和tri型线网都是用于连接单元的连线,是最常见的线网类型。二者语法和语义一致,不同的是三态线可以用于描述多个驱动源驱动同一根线的线网类型。第20页/共80页21 下面是定义这两种线网的实例: wire Reset; /1位连线Reset wire 3:2 Cla, Pla, Sla; /Cl

13、a,Pla和Sla都是2位连线 tri MSB1:LSB+1 Art; /三态线Art,位宽由表达式确定第21页/共80页22wire(或tri)01xz00 xx01x1x1xxxxxz01xz(1)wire(tri) 真值真值表 如果多个驱动源驱动一个连线如果多个驱动源驱动一个连线(或三态线网或三态线网), 这个线网的有效值由下列表决定这个线网的有效值由下列表决定 第22页/共80页23 例子: assign Cla = Pla & Sla; /第1个驱动源 . assign Cla = Pla Sla; /第2个驱动源 在这个例子中,Cla有两个驱动源。两个驱动源的值用于在上表中

14、进行索引,以便决定Cla的有效值。Cla是一个向量,在查表确定其有效值时应按位操作。例如,如果第1个驱动源的值为01x,第2个驱动源的值为11z,那么Cla的有效值是x1x(两个值的第一位0和1在表中索引到x,第2位1和1在表中索引到1,第3位x和z在表中索引到x)。第23页/共80页24 wor 线或。 trior 三态线或。 线或的含义是只要这类线网的某个驱动源值是1,那么线网的值就是1。线或和三态线或在语法和功能上是一致的。例如: wor MSB:LSB Art; trior MAX1: MIN1 Rdx, Sdx, Bdx;(2)wor和和trior线网线网第24页/共80页25wor

15、(或trior)01xz001x011111xx1xxz01xzwor和和trior真值表真值表 如果多个驱动源驱动这类线网如果多个驱动源驱动这类线网, 其有效值由下列表决定其有效值由下列表决定第25页/共80页26 wand 线与。 triand 三态线与。 线与的含义是只要这类线网的某个驱动源值是0,那么线网的值就是0。线与和三态线与在语法和功能上是一致的。例如: wand -7:0 Dbus; triand Reset, Clk;(3)wand和triand线网第26页/共80页27wand和triand真值表wand(或triand)01xz00100101x1x0 xxxz01xz

16、如果这类线网存在多个驱动源如果这类线网存在多个驱动源, 线网的有效值由下列表决定线网的有效值由下列表决定第27页/共80页28 trireg 三态寄存器。 这种线网可以存储数值(类似于寄存器),可用于电容节点的建模。当没有驱动源时,三态寄存器线网的缺省初始值为x。当它的所有驱动源都处于高阻态(值都为z)时,三态寄存器保存的值是作用在该线网上的最后一个值。例如:(4)trireg线网第28页/共80页29 tri0 三态0。 tri1 三态1。 这两类线网可以用于线逻辑的建模,即线网有多于一个驱动源。tri0(tri1)线网的特征是,若无驱动源驱动,它的值为0(tri0)或1(tri1)。例如:

17、 tri0 3:3 GndBus; tri1 0 :5 OtBus, ItBus;(5)tri0和tri1线网第29页/共80页30tri0和tri1真值表tri0(或tri1)01xz00 xx01x1x1xxxxxz01x0(1) 在有多个驱动源情况下在有多个驱动源情况下, tri0和和tri1的有效值有下列表得到的有效值有下列表得到第30页/共80页31 supply0用于对“地”建模,即低电平0。 supply1用于对电源建模,即高电平1。 例如: supply0 Gnd, ClkGnd; supply1 2:0 Vcc; (6)supply0和supply1线网第31页/共80页32

18、 在Verilog HDL中,可以不必声明某种线网的类型。在这样的情况下,缺省线网类型为1位连线(wire)。wire是Verilog HDL内置的默认线网类型,可以使用编译器指令default_nettype改变这一默认线网类型。使用方法如下: default_nettype net_kind 这里的net_kind就成为系统默认的线网类型,例如: default_nettype wand 带有这条编译器指令的程序中,任何未被说明类型的线网都被设置为1位线与。(7)未说明的线网第32页/共80页33 scalared 标量线网。 vectored 向量线网。 scalared和vectore

19、d是声明线网时的可选项。如果没有定义这一项,那么缺省值是标量线网(scalared),前面所有程序中的线网都是这样的。如果某个线网声明时使用了vectored,那么就不允许对该线网做位选择(只选择线网值中的1位)和部分选择(选择线网值中的部分位),必须对线网整体赋值。(8)scalared线网和vectored线网第33页/共80页34 例如: wire vectored3:1 Grb; / /使用了vectored不允许位选择(如Grb2)和部分选择(如Grb3:2) wor scalared 4:0 Best; / /使用了scalared,效果与“wor 4:0 Best;”相同,允许位

20、选择(如Best2)和部分选择(如Best3:1)第34页/共80页35 程序中经常多次出现某些数字,如延迟时间或变量的宽度,有时(如调用任务或实例化模块时)可能要改变这些值,这种情况下经常要用到参数。参数一经声明,就视其为一个常量,在整个仿真过程中不再改变。其声明形式如下: parameter 参数名1=表达式1, param2 = const_expr2, ., paramN = const_exprN; parameter是用于声明参数的关键词;param1、param2paramN是标识符;const_expr1、const_expr2const_exprN分别是标识符要代表的数字,它

21、们可以不仅仅是数字,也可以是计算表达式。6.4 参参 数数 (parameter)第35页/共80页36 。下面是3条参数声明语句: parameter LINELENGTH=132, ALL_X_S=16bx; parameter BIT=1, BYTE=8, PI=3.14; parameter STROBE_DELAY=(BYTE + BIT)/2; 使用参数可以提高程序的可读性,也利于修改,尤其是延迟时间和变量宽度这些在调试中可能经常修改的值。第36页/共80页376.5 向 量 向量: 线宽大于1位的变量 MSB(Most Significant Bit):最高有效位:最高有效位 L

22、SB (Lease Significant Bit): 最底有效位最底有效位 msb :lsb reg 3:0 canos; wire 5:0 bus;第37页/共80页38位选择选择和域选择选择 A : 1位 B: 7位位 A = B4; assign c=a2&b3; 位选择位选择 assign c=a7:4+b3:0; 域选择域选择6543210第38页/共80页39 表达式的操作数可以是线网或寄存器的某个位,即位选择。位选择是从线网(或寄存器)中选择特定的某个位。形式如下: net_or_reg_vector bit_select_expr 其中,net_or_reg_vect

23、or是向量线网或寄存器名,bit_select_expr是要选择位的编号。例如: State1 & State 4 /寄存器位选择,让State1和State4做逻辑与操作 Prt 0 | Bbq /线网位选择,让Prt0和Bbq做位或操作第39页/共80页40 上例中,State是多位寄存器,Prt多位线网,Bbq是1位线网,可见通过使用位选择可以对线网和寄存器中的某个位进行操作。 注意,如果bit_select_expr的值为x、z或越界,那么位选择得到的值为x,如State x值为x。第40页/共80页41 和位选择类似,线网或寄存器的部分连续位也可以作为表达式中的操作数。部分选

24、择是在线网或寄存器中选择某几个连续的位。形式如下: net_or_reg_vector msb:lsb 其中,net_or_reg_vector是向量线网或寄存器名,msb和lsb声明了要选择的位的编号范围。部分选择部分选择第41页/共80页42 例如: State 1:4 / State是多位寄存器,寄存器部分选择,选择了State中编号从1到4的4个位 Prt 1:3 / Prt是多位线网,线网部分选择,选择了Prt中编号从1到3的3个位 注意,在部分选择中若msb或lsb的值为x、z或它们标定的范围超出了向量的实际范围时,部分选择的值为x。第42页/共80页43 存储器建模是使用reg声

25、明寄存器组,不能在一条语句内就完成对存储器内所有寄存器单元的赋值,必须对其中的存储器单元(即单个寄存器)进行赋值。形式如下: memory word_address 其中,memory是存储器名,word_address是要选择单元的编号(即某个寄存器的编号)。存储器存储器第43页/共80页44 例如: reg 1:8 Ack, Dram 0:63 ; /*定义了一个8位寄存器Ack和一个有64个8位寄存器组成的存储器*/ . . . Ack = Dram 60; /把存储器Dram的编号为60的存储单元的值赋给Ack 注意,虽然存储器单元就是寄存器,但不允许对存储器单元做位选择或部分选择。例

26、如: Dram 60 2 /位选择不允许 Dram 60 2:4 /部分选择也不允许第44页/共80页45 如果想从存储器中读取一个位或部分位,可以先把存储器单元赋值给某个寄存器变量,然后对该寄存器变量进行位选择或部分选择操作。如在上例中做了Ack=Dram60之后,Ack 2和Ack 2:4就能够取出存储器单元Dram60的某个位或部分位。第45页/共80页46 Verilog HDL的操作符有如下9种类型: 算术操作符 关系操作符 相等操作符 逻辑操作符 按位操作符 归约操作符 移位操作符 条件操作符 连接和复制操作符6.6 运算符运算符第46页/共80页47操作符的优先级和名称操作符的优

27、先级和名称优先优先级别级别操作操作符符名称名称优先优先级别级别操作操作符符名称名称优先优先级别级别操作操作符符名称名称优先优先级别级别操作操作符符名称名称1+加加9|或或17右移右移25!=非全非全等等2-减减10|或非或非18小于小于26&位与位与3!逻辑逻辑非非11*乘乘19大于大于28,异或异或非非5&与与13%取模取模21=大于大于等于等于29|位或位或6&与非与非14+二元二元加加22=相等相等30&逻辑逻辑与与7异或异或15-二元二元减减23!=不等不等31|逻辑逻辑或或8或或异或异或非非16(大于) =(不小于) 45 /结果为假(0) 52= b

28、01110 /结果为假(0) 操作时给左侧操作数高位添0,等价于: b01000 = b01110 /结果为假(0)第59页/共80页60 与关系操作符类似,相等操作符也是对两个操作数进行比较,如果比较结果为假,则结果为0,否则结果为1。 相等操作符有如下4种: =(逻辑相等) !=(逻辑不等) =(全等) !=(非全等)3相等操作符相等操作符第60页/共80页61 其中,“=”和“!=”是把两个操作数的逻辑值做比较,由于操作数中某些位可能是x或z,所以比较结果也有可能是x。 而 “=”和“!=”是按位进行比较,即便在两个操作数中某些位出现了x或z,只要它们出现在相同的位,那么就认为二者是相同

29、的,比较结果为1,否则为0,而不会出现结果为x的情况。第61页/共80页62 例如: Data = b11x0; Addr = b11x0; 那么: Data = Addr /为真,也就是说值为1,因为全等操作严格按位比较 Data = Addr /这是逻辑比较,操作数中出现了x,所以结果为x第62页/共80页63 如果操作符两端操作数的长度不相等,长度较小的操作数在高位添0补位,例如: 2b10 = 4b0010 /结果为真(1) 与下面的表达式相同: 4b0010 = 4b0010 /结果为真(1)第63页/共80页64 逻辑操作符是对操作数做与、或、非运算,操作结果为0或1。逻辑操作符有

30、3种: &(逻辑与) |(逻辑或) !(逻辑非)4逻辑操作符逻辑操作符第64页/共80页65 逻辑操作符的操作数只能是逻辑值0或1,例如: Crd = b0; /Crd是逻辑0 Dgs = b1; /Dgs是逻辑1 那么: Crd & Dgs /结果为0 (假) Crd | Dgs /结果为1 (真) !Dgs /结果为0 (假)第65页/共80页66 如果操作数是向量,那么非0向量被当作逻辑1,例如: A_Bus = b0110; /A_Bus不是0向量,被当作逻辑1 B_Bus = b0100; /B_Bus不是0向量,被当作逻辑1 那么: A_Bus | B_Bus /结

31、果为1 A_Bus & B_Bus /结果为1 !A_Bus /结果为0 !B_Bus /结果为0 在逻辑操作中,如果任意一个操作数包含x,结果也为x,如!x的结果为x。第66页/共80页67 位操作符是对操作数按位进行与、或、非等逻辑操作。位操作符有如下5种: (一元非,只有一个操作数位于右侧) &(二元与,有两个操作数位于左右两侧) |(二元或,有两个操作数位于左右两侧) (二元异或,有两个操作数位于左右两侧) , (二元异或非,有两个操作数位于左右两侧)5位操作符位操作符第67页/共80页68 例如: A = b0110; B = b0100; 那么: A | B /结果

32、为0110 A & B /结果为0100 如果两个操作数长度不相等, 长度较小的操作数在高位添0补位,例如: b0110 b10000 /结果为b10110 与下式相同: b00110 b10000 /结果为b10110第68页/共80页69 归约操作符的操作数只有一个,并只产生1位结果。归约操作符有如下6种: &(归约与) 如果操作数的某个位的值为0,那么结果为0;如果操作数的某个位的值为x或z,那么结果为x;否则结果为1。 &(归约与非) 与归约操作符&相反。6规约操作符规约操作符第69页/共80页70 例如: A = b0110; B = b0100; 那么: |B /结果为1,因为B中有1 &B /结果为0,因为B中有0 A /结果为0,因为A中有偶数个1 归约异或操作符“”可用于检查操作数中是否包含x,例如: MyReg = 4b01x0; MyReg /结果为x,说明操作数MyReg中包含x第70页/共80页71 移位操作符是把操作数向左或向右移位若干

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论