第三讲常用Verilog语法之一PPT课件_第1页
第三讲常用Verilog语法之一PPT课件_第2页
第三讲常用Verilog语法之一PPT课件_第3页
第三讲常用Verilog语法之一PPT课件_第4页
第三讲常用Verilog语法之一PPT课件_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

1、第三讲第三讲 常用常用Verilog 语法之一语法之一 Verilog的基本设计单元是“模块”(block) 。一个模块是由两部分组成的,一部分描述接口,另一部分描述逻辑功能,即定义输入是如何影响输出的。 module block1(a, b, c, d); input a, b; output c, d; assign c = a | b; assign d = a & b; endmoduleabcd华东理工大学East China University of Science And Technology module 模块名模块名(端口名端口名1,端口名,端口名2,端口名,端口名

2、3,.);端口类型说明(端口类型说明(input,output,inout);参数定义(可选);参数定义(可选); 数据类型定义(数据类型定义(wire,reg等);等); 实例化低层模块和基本门级元件;实例化低层模块和基本门级元件; 连续赋值语句(连续赋值语句(assign);); 过程块结构(过程块结构(initial和和always) 行为描述语句;行为描述语句; Endmodule Verilog 模块的结构由在module和endmodule 关键词之间的四个主要部分组成: module block1(a, b, c, d ); input a, b, c ; output d ;

3、wire x; assign d = a | x ; assign x = ( b & c ); endmodule 3.1.1 模块的端口定义 模块的端口声明了模块的输入输出口。其格式如下: module 模块名(口1,口2,口3,口4, );3.1.2 模块内容 模块的内容包括I/O说明、内部信号声明、功能定义。 输入口:输入口: inputinput信号位宽信号位宽1 1:0 0 端口名端口名1 1; inputinput信号位宽信号位宽1 1:0 0 端口名端口名2 2; input input信号位宽信号位宽1 1:0 0 端口名端口名i i; /(/(共有共有i i个输入口

4、个输入口) )输出口 output信号位宽1:0 端口名1; output信号位宽1:0 端口名2; output信号位宽1:0 端口名j; /(共有j个输出口)输入/输出口: inout信号位宽1:0 端口名1; inout信号位宽1:0 端口名2; inout信号位宽1:0 端口名k; /(共有k个双向总线端口) I/O说明也可以写在端口声明语句里。其格式如下: module module_name(input port1,input port2, output port1,output port2 ); 在模块内用到的和与端口有关的wire 和 reg 变量的声明。 如: reg wid

5、th-1 : 0 R变量1,R变量2 ; wire width-1 : 0 W变量1,W变量2 ; 模块中最重要的部分是逻辑功能定义部分。有三种方法可在模块中产生逻辑。 assign a = b & c ; and2 and_inst ( q, a, b); always (posedge clk or posedge clr) begin if (clr) q= 0; else if (en) q= d; end如在模块中逻辑功能由下面三个语句块组成 : assign cs = ( a0 & a1 & a2 ) ; / -1 and2 and_inst ( qout,

6、 a, b); / -2 always (posedge clk or posedge clr) /-3 begin if (clr) q= 0; else if (en) q= d; end三条语句是并行的,它们产生独立的逻辑电路;而在 always 块中: begin 与 end 之间是顺序执行的。 在Verilog HDL中,整型常量即整常数有以下四种进制表示形式:1) 二进制整数(b或B)2) 十进制整数(d或D)3) 十六进制整数(h或H)4) 八进制整数(o或O) 数字表达方式有以下三种:1) 这是一种全面的描述方式。2) 在这种描述方式中,数字的位宽采用缺省位宽(这由具体的机器系

7、统决定,但至少32位)。3) 在这种描述方式中,采用缺省进制十进制。3.1.2 数值1. Verilog HDL中的数值可取下面的四类值:0逻辑零、逻辑非、逻辑零、逻辑非、低电平低电平1逻辑逻辑1、逻辑真、高、逻辑真、高电平电平x或或X不确定的逻辑状态不确定的逻辑状态z或或Z高阻态高阻态Verilog HDL中有两类数值常量 整型数和实型数 下划线符号下划线符号“_”_”除了不能放于数值的首位以外,除了不能放于数值的首位以外,可以随意用在整型数与实型数中,他们对数值的大小没可以随意用在整型数与实型数中,他们对数值的大小没有任何改变,只是为了提高可读性。有任何改变,只是为了提高可读性。 1 1)

8、整型数及其表示)整型数及其表示 Verilog HDLVerilog HDL的整数可以使二进制的整数可以使二进制(b(b或或B)B)、十进、十进制制(d(d或或D)D)、十六进制、十六进制(h(h或或H)H)与八进制与八进制(o(o或或O)O),有下面三,有下面三种书写形式种书写形式(1 1)简单的十进制格式;)简单的十进制格式;(2 2)缺省位宽的基数格式;)缺省位宽的基数格式;(3 3)指定位宽的基数格式。)指定位宽的基数格式。Verilog HDL中有两类数值常量 整型数和实型数()简单的十进制格式:()简单的十进制格式:用的数字串组成的十进制数,可以用符号用的数字串组成的十进制数,可以

9、用符号“”或或“”来表示数的来表示数的正负正负()缺省位宽的基数格式;()缺省位宽的基数格式; 表示形式为:表示形式为:符号符号“”为基数格式表示的固有字符,该字符不能省略,否则为非法表示形为基数格式表示的固有字符,该字符不能省略,否则为非法表示形式;参数式;参数用于说明数值采用的进制格式;参数用于说明数值采用的进制格式;参数为为相应进制格式下的一串数字这种格式未指定位宽,其缺省值至少为位相应进制格式下的一串数字这种格式未指定位宽,其缺省值至少为位()指定位宽的基数格式:()指定位宽的基数格式: 表示形式为:表示形式为:sizebase_formatnumber参数参数size用来指定所表示数

10、字的位宽当位宽小于数值的实际大小时,用来指定所表示数字的位宽当位宽小于数值的实际大小时,相应的高位部分被忽略;当位宽大于数值的实际位数,且数值的最高位是或相应的高位部分被忽略;当位宽大于数值的实际位数,且数值的最高位是或时,相应的高位部分补;而当位宽大于数值的实际位数,但数值的最高位是时,相应的高位部分补;而当位宽大于数值的实际位数,但数值的最高位是x或或z时,相应的高位部分补或时,相应的高位部分补或数制数制基数符号基数符号合法的表示值合法的表示值二进制二进制b or B0,1,x,X,z,Z,?,_八进制八进制o or O07,x,X,z,Z,?,?,_十进制十进制d or D09,_十六进

11、制十六进制h or H09,af,AF,x,X,z,Z,?,_Verilog HDL中有两类数值常量 整型数和实型数基数符号及其合法的表示值数值表示数值表示位宽位宽数制数制等效二进制值及其解书释等效二进制值及其解书释10缺省缺省十进制十进制00_1010(32位或以上位或以上)4ac缺省缺省十进制十进制非法,十进制表示不允许出现非法,十进制表示不允许出现ac字样字样h4ac缺省缺省十六进制十六进制0_0100_1010_1100(32位或以上位或以上)9o6719位位八进制八进制0110_0111_00019o-6719位位八进制八进制非法,符号位只能出现在表示的最左端非法,符号位只能出现在表

12、示的最左端6hf36位位十六进制十六进制11_0011,高位部分被舍去高位部分被舍去6hf6位位十六进制十六进制00_1111,高位部分由高位部分由0补足补足3b10 x3位位二进制二进制10 x12h2x612位位十六进制十六进制0010_xxxx_10106hx6位位十六进制十六进制xx_xxxx,高位部分由高位部分由x补足补足Verilog HDL中有两类数值常量 整型数和实型数例;三种格式的整数表示法15(十进制15)简单的十进制h15(十进制21,十六进制15)缺省位宽的十六进制5b10011(十进制19,二进制10011)位的二进制12h01F(十进制31,十六进制01F)位的十六

13、进制Syntax: Integer 存为 表示 1 00000000000000000000000000000001 unsized 32bits 8hAA 10101010 sized hex6b10_0011 100011 sized binary hF00000000000000000000000000001111 unsized hex 32 bits 8Hfz 1111zzzzsized hex 1bx Xsized binaryVerilog HDL中有两类数值常量 整型数和实型数Verilog HDL中的实数可以用十进制与科学计数法两种格式来表示,如果采用十进制格式,小数点两边必

14、须都有数字,否则为非法的表示形式实数表示法的实例1.8 /十进制计数法3.8e10 /科学计数法2.1E-9 /科学计数法可用e或E表示,其结果相同3_2387.3398_3047 /使用下划线提高可读性3. /非法表示,小数点两遍都必须有数.2e6 /非法表示,小数点两遍都必须有数.12 /非法表示,小数点两遍都必须有数实型数及其表示Verilog HDL中有两类数值常量 整型数和实型数l在数字电路中,x代表不定值,z代表高阻值。一个x可以用来定义十六进制数的4位二进制数的状态,八进制数的3位,二进制数的1位。z的表示方式同x类似。z还有一种表达方式是可以写作“?”。一个数字可以被定义为负数

15、,只需在位宽表达式前加一个减号,减号必须写在数字定义表达式的最前面。注意减号不可以放在位宽和进制之间也不可以放在进制和具体的数之间。 -8d5 /这个表达式代表5的补数(用八位二进制数表示) 8d-5 /非法格式。下划线可以用来分隔开数的表达以提高程序可读性。但不可以用在位宽和进制处,只能用在具体的数字之间。 16b1010_1011_1111_1010 /合法格式 8b_0011_1010 /非法格式 当常量不说明位数时,默认值是32位,每个字母用8位的ASCII值表示。 用参数声明一个可变常量,常用于定义延时及宽度变量。 参数定义的语法:parameter ; 可一次定义多个参数,用逗号隔

16、开。 在使用文字(literal)的地方都可以使用参数。 参数的定义是局部的,只在当前模块中有效。 参数定义可使用以前定义的整数和实数参数。module mod1( out, in1, in2); . . .parameter cycle = 20, prop_ del = 3, setup = cycle/2 - prop_del, p1 = 8, x_ word = 16bx, file = / usr1/ jdough/ design/ mem_ file. dat; . . . wire p1: 0 w1; / A wire declaration using parameter .

17、. .endmodule注意注意:参数:参数file不是不是string,而是一个整数,而是一个整数,其值是所有字母的扩展其值是所有字母的扩展ASCII值。若值。若file=“AB”,则则file值为值为8h4142。用。用法:法:$fopen(file);$display(“%s”, file);3.2.2 变量 变量即在程序运行过程中其值可以改变的量。常用的网络变量即在程序运行过程中其值可以改变的量。常用的网络数据类型包括数据类型包括wire型和tri型。wirewire型变量通常是用来表示单个门驱动或连续赋型变量通常是用来表示单个门驱动或连续赋值语句驱动的网络值语句驱动的网络型数据,型数

18、据,tritri型变量则用来表示多驱动器驱动的网络型数据。型变量则用来表示多驱动器驱动的网络型数据。 表表 1.3.1 Wire/tri 变量的真值变量的真值 wire型数据常用来表示用于以型数据常用来表示用于以assign关键关键字指定的组合逻辑信号。字指定的组合逻辑信号。Verilog程序模块中输入输出信号类型缺省时程序模块中输入输出信号类型缺省时自动定义为自动定义为wire型。其格式型。其格式如下:如下: wire n-1:0 数据名数据名1,数据名数据名2,数据数据名名i; /共有共有i条总线,每条总条总线,每条总线内有线内有n条线路,或条线路,或 wire n:1 数据名数据名1,数

19、据名数据名2,数据名数据名i; 寄存器是数据储存单元的抽象。寄存器数据类型的关键字是reg。 reg类型数据的默认初始值为不定值x。 reg型数据常用来表示用于“always”模块内的指定信号,常代表触发器。在“always”块内被赋值的每一个信号都必须定义成reg型。 reg型数据的格式如下: reg n-1:0 数据名1,数据名2, 数据名i;或 reg n:1 数据名1,数据名2, 数据名i;module top;wire y; reg a, b; DUT u1(y,a,b); initial begin a = 0; b = 0; #10 a =1; . endendmodule mo

20、dule DUT(Y, A, B_);output Y;input A,B: wire Y, A, B; and (Y, A, B);endmodule模块DUT的边界输入口输出口输出/入口netnetnet/registernetnet/registernetinout举例说明数据类型的选择举例说明数据类型的选择l 输入口(input)可以由寄存器或网络连接驱动,但它本身只能驱动网络连接。l 输出口 (output)可以由寄存器或网络连接驱动,但它本身只能驱动网络连接。l 输入/输出口(inout)只可以由网络连接驱动,它本身也只能驱动网络连接。l 如果信号变量是在过程块 (initial块

21、 或 always块)中被赋值的,必须把它声明为寄存器类型变量 如何选择正确的数据类型?如何选择正确的数据类型?如何选择正确的数据类型module top;wire y; reg a, b;DUT u1 (y, a, b) ;initial begina = 0; b = 0; #5 a = 1; endendmodulemodule DUT (Y, A, B);output Y;input A, B;wire Y, A, B;and (Y, A, B) ;endmodule输入端口可以由输入端口可以由net/register驱动,但驱动,但输入端口只能是输入端口只能是net输出端口可以是输出

22、端口可以是net/register类型,输类型,输出端口只能驱动出端口只能驱动net在过程块中只能给在过程块中只能给register类型赋值类型赋值若若Y,A,B说明为说明为reg则会产生错误。则会产生错误。in1in2OABY双向端口输入双向端口输入/输出输出只能是只能是net类型类型选择数据类型时常犯的错误举例修改前:修改前:module example(o1, o2, a, b, c, d); input a, b, c, d; output o1, o2; reg c, d; reg o2 and u1(o2, c, d); always (a or b) if (a) o1 = b;

23、 else o1 = 0;endmodule修改后:修改后:module example(o1, o2, a, b, c, d); input a, b, c, d; output o1, o2;/ reg c, d;/ reg o2 reg o1; and u1(o2, c, d); always (a or b) if (a) o1 = b; else o1 = 0;endmoduleexample.v选择数据类型时常犯的错误举例选择数据类型时常犯的错误举例Compiling source file example.vError! Illegal left-hand-side assign

24、ment Verilog-ILHSA example.v, 11: o1 = b;Error! Illegal left-hand-side assignment Verilog-ILHSA example.v, 12: o1 = 0;2 errors第一次编译信息第一次编译信息verilog c example.v第二次编译信息第二次编译信息Compiling source file example.vError! Incompatible declaration, (c) defined as input at line 2 Verilog-IDDIL example.v, 5: Erro

25、r! Incompatible declaration, (d) defined as input at line 2 Verilog-IDDIL example.v, 5: Error! Gate (u1) has illegal output specification Verilog-GHIOS example.v, 8: 3 errors Verilog HDL通过对reg型变量建立数组来对存储器建模,可以描述RAM型存储器,ROM存储器和reg文件。数组中的每一个单元通过一个数组索引进行寻址。在Verilog语言中没有多维数组存在。 memory型数据是通过扩展reg型数据的地址范围

26、来生成的。其格式如下: reg n-1:0 存储器名m-1:0;或 reg n-1:0 存储器名m:1; Verilog HDL语言的运算符范围很广,其运算符按其功能可分为以下几类:运算符分类运算符分类所含运算符所含运算符算术运算符算术运算符+,-,*,/,%逻辑运算符逻辑运算符!,!,&,|关系运算符关系运算符,=相等运算符相等运算符=,!=,=,!=位运算符位运算符,&,|,or归约运算符归约运算符&,&,|,|,or移位运算符移位运算符条件运算符条件运算符?:连接运算符连接运算符 在Verilog HDL语言中运算符所带的操作数是不同的,按其所带操作数的个

27、数运算符可分为三种:1) 单目运算符(unary operator):可以带一个操作数,操作数放在运算符的右边。2) 二目运算符(binary operator):可以带二个操作数,操作数放在运算符的两边。3) 三目运算符(ternary operator):可以带三个操作,这三个操作数用三目运算符分隔开。 见下例: clock = clock; / 是一个单目取反运算符, clock是操作数。 c = a | b; / 是一个二目按位或运算符, a 和 b是操作数。 r = s ? t : u; / ?: 是一个三目条件运算符, s,t,u是操作数。3.3.1.基本的算术运算符 + 加加 -

28、 减减 * 乘乘 / 除除 % 模模 将负数赋值给将负数赋值给reg或其它无符号变或其它无符号变量使用量使用2的补码算术。的补码算术。 如果操作数的某一位是如果操作数的某一位是x或或z,则,则结果为结果为x 在整数除法中,余数舍弃在整数除法中,余数舍弃 模运算中使用第一个操作数的符模运算中使用第一个操作数的符号号module arithops (); parameter five = 5; integer ans, int; reg 3: 0 rega, regb; reg 3: 0 num; initial begin rega = 3; regb = 4b1010; int = -3; /

29、int = 11111111_1101 end initial fork #10 ans = five * int; / ans = -15 #20 ans = (int + 5)/ 2; / ans = 1 #30 ans = five/ int; / ans = -1 #40 num = rega + regb; / num = 1101 #50 num = rega + 1; / num = 0100 #60 num = int; / num = 1101 #70 num = regb % rega; / num = 1 #80 $finish;joinendmodule注意intege

30、r和reg类型在算术运算时的差别。integer是有符号数,而reg是无符号数。3.3.2.位运算符 not & and | or xor xnor xnor 按位操作符对矢量中相对应位运算。按位操作符对矢量中相对应位运算。regb = 4b1 0 1 0regb = 4b1 0 1 0regc = 4b1 x 1 0regc = 4b1 x 1 0num = regb & regc = 1 0 1 0 ;num = regb & regc = 1 0 1 0 ; 位值为位值为x x时不一定产生时不一定产生x x结果。如结果。如#50#50时的时的oror计算。计算。module bitwise (); reg 3: 0 rega, regb, regc; reg 3: 0 num; init

温馨提示

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

评论

0/150

提交评论