第九章-硬件描述语言Verilog-HDL-(2课件.ppt

上传人(卖家):ziliao2023 文档编号:6043760 上传时间:2023-05-23 格式:PPT 页数:150 大小:3.45MB
下载 相关 举报
第九章-硬件描述语言Verilog-HDL-(2课件.ppt_第1页
第1页 / 共150页
第九章-硬件描述语言Verilog-HDL-(2课件.ppt_第2页
第2页 / 共150页
第九章-硬件描述语言Verilog-HDL-(2课件.ppt_第3页
第3页 / 共150页
第九章-硬件描述语言Verilog-HDL-(2课件.ppt_第4页
第4页 / 共150页
第九章-硬件描述语言Verilog-HDL-(2课件.ppt_第5页
第5页 / 共150页
点击查看更多>>
资源描述

1、19.8 9.8 循环语句循环语句9.9 9.9 结构说明语句结构说明语句9.10 9.10 编译预处理语句编译预处理语句9.11 9.11 语句的顺序执行与并行执行语句的顺序执行与并行执行9.12 9.12 不同抽象级别的不同抽象级别的Verilog HDLVerilog HDL模型模型9.13 9.13 设计技巧设计技巧9.1 9.1 引言引言9.2 Verilog HDL9.2 Verilog HDL基本结构基本结构9.3 9.3 数据类型及常量、变量数据类型及常量、变量9.4 9.4 运算符及表达式运算符及表达式9.5 9.5 语句语句9.6 9.6 赋值语句和块语句赋值语句和块语句9

2、.7 9.7 条件语句条件语句第第9 9章章 硬件描述语言硬件描述语言Verilog HDLVerilog HDL29.1 9.1 引言引言一、什么是一、什么是Verilog HDLVerilog HDL二、二、Verilog HDLVerilog HDL的发展历史的发展历史三、不同层次的三、不同层次的Verilog HDLVerilog HDL抽象抽象 四、四、Verilog HDLVerilog HDL的特点的特点39.1 9.1 引言引言一、一、什么是什么是Verilog HDL Verilog HDL是一种用于是一种用于数字数字逻辑电路设计的硬件描述逻辑电路设计的硬件描述语言(语言(H

3、radware Description Language),可以用来进,可以用来进行数字电路的仿真验证、时序分析、逻辑综合。行数字电路的仿真验证、时序分析、逻辑综合。用Verilog HDL描述的电路设计就是该电路的Verilog HDL模型。Verilog HDL 既是一种行为描述语言也是一种结构描述语言。既可以用电路的功能描述,也可以用元器件及其之间的既可以用电路的功能描述,也可以用元器件及其之间的连接来建立连接来建立Verilog HDLVerilog HDL模型。模型。49.1 9.1 引言引言二、二、Verilog HDLVerilog HDL的发展历史的发展历史 1983年,由年,

4、由GDA(GateWay Design Automation)公)公司的司的Phil Moorby首创;首创;1989年,年,Cadence公司收购了公司收购了GDA公司;公司;1990年,年,Cadence公司公开发表公司公开发表Verilog HDL;1995年年,IEEE制定并公开发表制定并公开发表Verilog HDL1364-1995标准;标准;1999年,模拟和数字电路都适用的年,模拟和数字电路都适用的Verilog标准公开标准公开发表发表59.1 9.1 引言引言三、不同层次的三、不同层次的Verilog HDLVerilog HDL抽象抽象 Verilog HDLVerilog

5、 HDL模型可以是实际电路的不同级别的抽象。模型可以是实际电路的不同级别的抽象。抽象级别可分为抽象级别可分为五五级:级:系统级系统级(system level):(system level):用高级语言结构(如case语句)实现的设计模块外部性能的模型;算算法级法级(algorithmic level):(algorithmic level):用高级语言结构实现的设计算法模型(写出逻辑表达式);RTLRTL级级(register transfer level):(register transfer level):描述数据在寄存器之间流动和如何处理这些数据的模型;门级门级(gate level)

6、:(gate level):描述逻辑门(如与门、非门、或门、与非门、三态门等)以及逻辑门之间连接的模型;开关级开关级(switch level):(switch level):描述器件中三极管和储存节点及其之间连接的模型。返回返回9.1269.1 9.1 引言引言四、四、Verilog HDLVerilog HDL的特点的特点 语法结构上的主要语法结构上的主要特点特点:形式化地表示电路的行为和结构;借用C语言的结构和语句;可在多个层次上对所设计的系统加以描述,语言对设计规模不加任何限制;具有混合建模能力:一个设计中的各子模块可用不同级别的抽象模型来描述;基本逻辑门、开关级结构模型均内置于语言中

7、,可直接调用;易创建用户定义原语(UDP,User Designed Primitive)。易学易用,功能强易学易用,功能强与与C C语言语言非常相非常相似似!79.2 Verilog HDL9.2 Verilog HDL基本结构基本结构一、简单的一、简单的Verilog HDLVerilog HDL例子例子二、二、Verilog HDLVerilog HDL模块的结构模块的结构三、逻辑功能定义三、逻辑功能定义四、关键字四、关键字五、标识符五、标识符六、编写六、编写Verilog HDLVerilog HDL源代码的标准源代码的标准89.2 Verilog HDL9.2 Verilog HDL

8、基本结构基本结构一、简单的一、简单的Verilog HDLVerilog HDL例子例子 例例9.2.1 8 8位全加器位全加器module adder8(cout,sum,a,b,cin);output cout;/输出端口声明输出端口声明 output 7:0 sum;input 7:0 a,b;/输入端口声明输入端口声明 input cin;assign cout,sum=a+b+cin;endmodule assign语句:无论右边表达式操作数何时发生变化,右边表达式都语句:无论右边表达式操作数何时发生变化,右边表达式都会重新计算,并且在指定的延迟后给左边表达式赋值。会重新计算,并且在

9、指定的延迟后给左边表达式赋值。I/O说明说明端口定义端口定义功能描述功能描述模块名(文件名)整个整个Verilog HDLVerilog HDL程序嵌套在程序嵌套在modulemodule和和endmoduleendmodule声明语句中。声明语句中。每条语句相对每条语句相对modulemodule和和endmoduleendmodule最好缩进最好缩进2 2格或格或4 4格!格!/表示注释部分,一般只占据表示注释部分,一般只占据一一行。对编译不起作用!行。对编译不起作用!单行注释符99.2 Verilog HDL9.2 Verilog HDL基本结构基本结构 例例9.2.2 8 8位计数器位

10、计数器module counter8(out,cout,data,load,cin,clk);output 7:0 out;output cout;input 7:0 data;input load,cin,clk;reg7:0 out;always(posedge clk)begin if(load)out=data;/同步预置数据同步预置数据 else out =out+1+cin;/加加1计数计数 end assign cout=&out&cin;/若若out为为8hFF,cin为为1,则,则cout为为1endmoduleI/O说明说明端口定义端口定义功能描述功能描述信号类型声明信号类

11、型声明缩减运算符位运算符109.2 Verilog HDL9.2 Verilog HDL基本结构基本结构 例例9.2.3 2 2位比较器位比较器module compare2(equal,a,b);output equal;input 1:0 a,b;assign equal=(a=b)?1:0;/*如果如果a等于等于b,则,则equal 为为1,否则为,否则为0*/endmodule“=”非阻塞过程性赋值:将想要赋给左式的值安排在未来时刻。不等上一个赋值非阻塞过程性赋值:将想要赋给左式的值安排在未来时刻。不等上一个赋值完成执行下个赋值语句。完成执行下个赋值语句。“=”阻塞过程性赋值:按照顺序

12、执行,前一个赋值结束才执行下边的赋值语句。阻塞过程性赋值:按照顺序执行,前一个赋值结束才执行下边的赋值语句。连续赋值语句连续赋值语句条件运算符条件运算符/*/内表示注释部分,一般可占据内表示注释部分,一般可占据多多行。行。对编译不起作用!对编译不起作用!多行注释符多行注释符119.2 Verilog HDL9.2 Verilog HDL基本结构基本结构 例例9.2.4 三态驱动器三态驱动器module trist2(out,in,enable);output out;input in,enable;bufif1 mybuf(out,in,enable);endmodule例化元件名门元件关键字

13、门元件例化门元件例化程序通过调用一程序通过调用一个在个在VerilogVerilog语言库中现存的实例语言库中现存的实例门元件来实现某逻辑门功能。门元件来实现某逻辑门功能。Inputs|OutputIN ENABLE|OUTX0|Z11|101|0bufif1bufif1的真值表的真值表门元件例化门元件例化12module trist1(out,in,enable);output out;input in,enable;mytri tri_inst(out,in,enable);endmodulemodule mytri(out,in,enable);output out;input in,e

14、nable;assign out=enable?in:bz;/*如果如果enable为为1,则,则out=in,否则为高阻态,否则为高阻态*/endmodule9.2 Verilog HDL9.2 Verilog HDL基本结构基本结构 例例9.2.5 三态驱动器三态驱动器例化元件名子模块名顶层模块顶层模块子模块子模块模块元件例化模块元件例化模块元件例化模块元件例化顶层模块(顶层模块(trist1trist1)调用由某子模块)调用由某子模块(mytrimytri)定义的实例元件()定义的实例元件(tri_insttri_inst)来实现某功能。)来实现某功能。返回返回逻辑逻辑功能定义功能定义1

15、39.2 Verilog HDL9.2 Verilog HDL基本结构基本结构Verilog HDL程序是由程序是由模块模块构成的。每个模块嵌套在构成的。每个模块嵌套在module和和endmodule声明语句中。模块是可以进行层次嵌套的。声明语句中。模块是可以进行层次嵌套的。每个每个Verilog HDL源文件中只准有一个顶层模块,其他为子模块。源文件中只准有一个顶层模块,其他为子模块。每个模块要进行端口定义,并说明输入输出端口,然后对模块的每个模块要进行端口定义,并说明输入输出端口,然后对模块的功能进行行为逻辑描述。功能进行行为逻辑描述。程序书写格式自由,一行可以写几个语句,一个语句也可以

16、分多程序书写格式自由,一行可以写几个语句,一个语句也可以分多行写。行写。除了除了endmodule语句、语句、begin_end语句和语句和fork_join语句外,每个语语句外,每个语句和数据定义的最后必须有分号。句和数据定义的最后必须有分号。可用可用/*.*/和和/.对程序的任何部分作注释。加上必要的注释,以对程序的任何部分作注释。加上必要的注释,以增强程序的可读性和可维护性。增强程序的可读性和可维护性。149.2 Verilog HDL9.2 Verilog HDL基本结构基本结构二、二、Verilog HDLVerilog HDL模块的结构模块的结构 VerilogVerilog的基本

17、设计单元是的基本设计单元是“模块模块 (block)(block)”。Verilog Verilog 模块的结构由在模块的结构由在modulemodule和和endmoduleendmodule关键词关键词之间的之间的4 4个主要部分组成:个主要部分组成:module block1(amodule block1(a,b b,c c,d)d);input ainput a,b b,c c;output doutput d;wire xwire x;assign d=a|xassign d=a|x;assign x=(b&assign x=(b&c)c);endmoduleendmoduleI/O

18、说明说明端口定义端口定义功能描述功能描述信号类型声明信号类型声明1234159.2 Verilog HDL9.2 Verilog HDL基本结构基本结构三、逻辑功能定义三、逻辑功能定义 在在Verilog Verilog 模块中有模块中有3 3种方法可以描述电路的逻辑功能种方法可以描述电路的逻辑功能:(1 1)用用assign 语句语句 assign x=(b&c);连续赋值语句连续赋值语句常用于描述组合组合逻辑门元件例化门元件例化模块元件例化模块元件例化例化元件名门元件关键字(2 2)用元件例化(用元件例化(instantiate)and myand3(f,a,b,c);v 注注1 1:元件

19、例化即是调用:元件例化即是调用Verilog HDLVerilog HDL提供的元件;提供的元件;v 注注2 2:元件例化包括:元件例化包括门门元件例化和元件例化和模块模块元件例化;元件例化;v 注注3 3:每个实例元件的名字必须每个实例元件的名字必须唯一唯一!以避免与其!以避免与其它调用元件的实例相混淆。它调用元件的实例相混淆。v 注注4 4:例化元件名也可以省略!例化元件名也可以省略!169.2 Verilog HDL9.2 Verilog HDL基本结构基本结构(3 3)用用 “alwaysalways”块语句块语句 always(posedge clk)/每当时钟上升沿到来时执行一遍块

20、内语句每当时钟上升沿到来时执行一遍块内语句 begin if(load)out=data;/同步预置数据同步预置数据 else out=data+1+cin;/加加1计数计数 end结构说明语句结构说明语句v注注1 1:“alwaysalways”块语句块语句常用于描述常用于描述时序时序逻辑,也逻辑,也可描述可描述组合组合逻辑。逻辑。v注注2 2:“alwaysalways”块块可用多种手段来表达逻辑关系可用多种手段来表达逻辑关系,如用,如用if-elseif-else语句或语句或casecase语句。语句。v注注3 3:“alwaysalways”块语句与块语句与assignassign语句

21、是并发执行语句是并发执行的,的,assignassign语句一定要放在语句一定要放在“alwaysalways”块语句之外块语句之外!179.2 Verilog HDL9.2 Verilog HDL基本结构基本结构v Verilog Verilog HDLHDL模块的模板(仅考虑用于逻辑综合的部分)模块的模板(仅考虑用于逻辑综合的部分)module ();output 输出端口列表;输出端口列表;input 输入端口列表输入端口列表;/(1)使用)使用assign语句定义逻辑功能语句定义逻辑功能 wire 结果信号名;结果信号名;assign =表达式表达式;/(2)使用)使用always块定

22、义逻辑功能块定义逻辑功能 always()begin /过程赋值语句过程赋值语句 /if语句语句 /case语句语句 /while,repeat,for循环语句循环语句 /task,function调用调用 end189.2 Verilog HDL9.2 Verilog HDL基本结构基本结构/(3)元件例化)元件例化 ();/模块元件例化模块元件例化 ();/门元件例化门元件例化endmodule例化元件名例化元件名也可以省略!也可以省略!199.2 Verilog HDL9.2 Verilog HDL基本结构基本结构四、关键字四、关键字 关键字关键字事先定义好的确认符,用来组织语言结构;事

23、先定义好的确认符,用来组织语言结构;或者用于定义或者用于定义Verilog HDLVerilog HDL提供的门元件(如提供的门元件(如andand,notnot,oror,bufbuf)。)。用用小写小写字母定义!字母定义!如如always,assign,begin,case,casex,else,end,for,function,if,input,output,repeat,table,time,while,wire 见见数字系统设计与数字系统设计与Verilog HDL P285附录附录A。用户程序中的用户程序中的变变量、节点等量、节点等名称名称不能与不能与关键字关键字同同名!名!209

24、.2 Verilog HDL9.2 Verilog HDL基本结构基本结构Verilog HDL关键字关键字edgeelseendendcaseendfunctionendprimitiveendmoduleendspecifyendtableendtaskeventforforceforeverforkfunction highz0highz1 ififnoneinitialinoutinputintegerjoinlargemacromodulemediummodulenandnegedgenor notnotif0notif1nmosoroutputparameterpmosposedg

25、eprimitivepulldownpulluppull0pull1andalwaysassignbeginbufbufif0bufif1casecasexcasezcmosdeassigndefaultdefparamdisable219.2 Verilog HDL9.2 Verilog HDL基本结构基本结构Verilog HDL关键字关键字(续)(续)tri0tri1 vectoredwaitwandweak0weak1whilewireworxnorxorrcmosrealrealtimeregreleaserepeatrnmosrpmosrtranrtranif0rtranif1sc

26、alaredsmallspecifyspecparamstrengthstrong0 strong1supply0supply1tabletasktrantranif0tranif1timetritriandtriortrireg229.2 Verilog HDL9.2 Verilog HDL基本结构基本结构五、标识符五、标识符 任何用任何用Verilog Verilog HDLHDL语言描述的语言描述的“东西东西”都通过其名字来识别,都通过其名字来识别,这个名字被称为这个名字被称为标识符标识符。如源文件名、模块名、端口名、变量名、常量名、实例名等。如源文件名、模块名、端口名、变量名、常量名、

27、实例名等。标识符可由字母、数字、下划线和标识符可由字母、数字、下划线和$符号构成;符号构成;但第一个字符但第一个字符必须是字母或下划线,不能是数字或必须是字母或下划线,不能是数字或$符号符号!在在Verilog Verilog HDLHDL中变量名是区分大小写的!中变量名是区分大小写的!合法合法的名字:的名字:A_99_ZReset_54MHz_Clock$Module 不合法不合法的名字:的名字:123a$datamodule7seg.v标识符标识符不能与不能与关键字关键字同名!同名!239.3 9.3 数据类型及常量、变量数据类型及常量、变量一、数据类型一、数据类型二、常量二、常量三、变量

28、三、变量 249.3 9.3 数据类型及常量、变量数据类型及常量、变量一、数据类型一、数据类型 数据类型是用来表示数字电路中的数据存储和传送单元。数据类型是用来表示数字电路中的数据存储和传送单元。Verilog Verilog HDLHDL中共有中共有19种数据类型;种数据类型;其中其中4个最基本的数据类型为:个最基本的数据类型为:integer型parameter型reg型wire型 其 它 数 据 类 型:其 它 数 据 类 型:large型、medium型、scalared型、small型、time型、tri型、tri0型、tri1型、triand型、trior型、trireg型、vec

29、tored型、wand型、wor型等二、常量二、常量 在程序运行过程中,其值不能被改变的量,称为在程序运行过程中,其值不能被改变的量,称为常量常量。数字数字(包括整数,x和z值,负数)parameterparameter常量常量(或称符号常量)259.3 9.3 数据类型及常量、变量数据类型及常量、变量整常数的整常数的3种表达方式:种表达方式:表表 达达 方方 式式说说 明明 举举 例例 完整的表达方式8b11000101或8 hc5 缺省位宽,则位宽由机器系统决定,至少32位hc5 缺省进制为十进制,位宽默认为32位197(1 1)整数型常量整数型常量(即(即整常数整常数)的)的4 4种进制

30、表示形式:种进制表示形式:二进制整数(b或B);十进制整数(d或D);十六进制整数(h或H);八进制整数(o或O)。v注:注:这里位宽指对应二进制数的宽度。这里位宽指对应二进制数的宽度。269.3 9.3 数据类型及常量、变量数据类型及常量、变量(2 2)x x和和z z值值x x表示不定值,表示不定值,z z表示高阻值;表示高阻值;8b1001xxxx或8 h9x8b1010zzzz或8 haz每个字符代表的二进制数的宽度取决于所用的进制;每个字符代表的二进制数的宽度取决于所用的进制;当用二进制表示时,已标明位宽的数若用当用二进制表示时,已标明位宽的数若用x x或或z z表示某些位,则只有在

31、表示某些位,则只有在最左边最左边的的x x或或z z具有具有扩展性扩展性!为清晰可见,最好直接写出每一位的值!为清晰可见,最好直接写出每一位的值!例8bzx=8bzzzz_zzzx 例8b1x=8b0000_001x“?”是是z z的另一种表示符号,建议在的另一种表示符号,建议在casecase语句中使用语句中使用?表示高阻态表示高阻态z 例 casez(select)4b?1:out=a;4b?1?:out=b;4b?1?:out=c;4b1?:out=d;endcase279.3 9.3 数据类型及常量、变量数据类型及常量、变量(3 3)负数负数在位宽前加一个减号,即表示负数在位宽前加一个

32、减号,即表示负数如:如:-8-8d5 /5的补数,的补数,=8b11111011减号不能放在位宽与进制之间,也不能放在进制减号不能放在位宽与进制之间,也不能放在进制与数字之间!与数字之间!8 d-5 /非法格式非法格式v 为提高可读性,在较长的数字之间可用下划线为提高可读性,在较长的数字之间可用下划线_ _隔开!但隔开!但不可以用在不可以用在和和之间。之间。如:如:1616b1010_1011_1100_1111/b1010_1011_1100_1111/合法合法 8 8b b_ _0011_1010/0011_1010/非法非法v当常量未指明位宽时,默认为当常量未指明位宽时,默认为3232位

33、。位。10=3210=32d10=32d10=32b1010b1010-1=-32-1=-32d1=32d1=32b1111b11111111=321111=32hFFFFFFFFhFFFFFFFF289.3 9.3 数据类型及常量、变量数据类型及常量、变量(4 4)parameterparameter常量(符号常量)常量(符号常量)用用parameterparameter来定义一个标识符,代表一个常量来定义一个标识符,代表一个常量称为称为符号符号常量。常量。参数型数据的确认符parameterparameter 参数名参数名1=1=表达式表达式,参数名参数名2=2=表达式表达式,;每个赋值语

34、句的右边必须为常数表达式,即只能包含数字或先前定义过的符号常量!parameter addrwidth=16;/合法格式 parameter addrwidth=datawidth*2;/非法格式常用参数来定义延迟时间和变量宽度。可用字符串表示的任何地方,都可以用定义的参数来代替。参数是本地的,其定义只在本模块内有效。在模块或实例引用时,可通过参数传递改变在被引用模块或实例中已定义的参数!赋值语句表299.3 9.3 数据类型及常量、变量数据类型及常量、变量三、变量三、变量 在程序运行过程中,其值可以改变的量,称为在程序运行过程中,其值可以改变的量,称为变量变量。其数据类型有其数据类型有191

35、9种,常用的有种,常用的有3 3种:种:网络型(nets type)寄存器型(register type)数组(memory type)s型变量型变量 定义定义输出始终随输入的变化而变化的变量输出始终随输入的变化而变化的变量。表示结构实体(如门)之间的表示结构实体(如门)之间的物理物理连接。连接。常用常用netsnets型变量:型变量:wire,tri:连线类型(两者功能一致)wor,trior:具有线或特性的连线(两者功能一致)wand,triand:具有线与特性的连线(两者功能一致)tri1,tri0:上拉电阻和下拉电阻supply1,supply0:电源(逻辑1)和地(逻辑0)netsn

36、ets型变量型变量不能储存值!不能储存值!309.3 9.3 数据类型及常量、变量数据类型及常量、变量 wire型变量型变量最常用的nets型变量,常用来表示以assign语句赋值的组合逻辑信号。模块中的输入/输出信号类型缺省为wire型。可用做任何方程式的输入,或“assign”语句和实例元件的输出。wirewire 数据名数据名1,1,数据名数据名2,2,数据名数据名n;n;wiren-1:0wiren-1:0 数据名数据名1,1,数据名数据名2,2,数据名数据名m;m;或或 wiren:1wiren:1 数据名数据名1,1,数据名数据名2,2,数据名数据名m;m;每条总线位宽为n共有m条

37、总线wirewire型向量(总线)型向量(总线)319.3 9.3 数据类型及常量、变量数据类型及常量、变量 定义定义对应对应具有状态保持作用具有状态保持作用的电路元件(如触发器、的电路元件(如触发器、寄存器等)寄存器等),常用来表示常用来表示过程块过程块语句(如语句(如initialinitial,alwaysalways,tasktask,functionfunction)内的指定信号)内的指定信号 。常用常用registerregister型变量:型变量:reg:常代表触发器integer:32位带符号整数型变量real:64位带符号实数型变量time:无符号时间变量纯数学的纯数学的抽象

38、描述抽象描述2.register2.register型变量型变量329.3 9.3 数据类型及常量、变量数据类型及常量、变量vregisterregister型变量与型变量与netsnets型变量的根本区别是:型变量的根本区别是:registerregister型型变量需要被明确地赋值,并且在被重新赋值前一直保持变量需要被明确地赋值,并且在被重新赋值前一直保持原值。原值。vregisterregister型变量必须通过型变量必须通过过程过程赋值语句赋值!不能通过赋值语句赋值!不能通过assignassign语句赋值!语句赋值!v在过程块内被赋值的每个信号必须定义成在过程块内被赋值的每个信号必须

39、定义成registerregister型!型!339.3 9.3 数据类型及常量、变量数据类型及常量、变量 reg型变量型变量定义定义在过程块中被赋值的信号在过程块中被赋值的信号,往往往往代表触发器,代表触发器,但但不一定不一定就是触发器(也可以是组合逻辑信号)!就是触发器(也可以是组合逻辑信号)!regreg 数据名数据名1,1,数据名数据名2,2,数据名数据名n;n;regn-1:0regn-1:0 数据名数据名1,1,数据名数据名2,2,数据名数据名m;m;或或 regn:1regn:1 数据名数据名1,1,数据名数据名2,2,数据名数据名m;m;每个向量位宽为n共有m个reg型向量 例

40、例 reg4:1 regc,regd;/reg4:1 regc,regd;/regc,regdregc,regd为为4 4位宽的位宽的regreg型向量型向量regreg型向量(总线)型向量(总线)349.3 9.3 数据类型及常量、变量数据类型及常量、变量用用regreg型变量生成型变量生成组合逻辑组合逻辑举举例例:module rw1(a,b,out1,out2);input a,b;output out1,out2;reg out1;wire out2;assign out2=a;always(b)out1=b;endmoduleaout2BUFFbINVout1过程赋值语句连续赋值语句

41、电平电平触发Verilog中中reg与与wire的区别的区别regreg型变量既可生成触发器,型变量既可生成触发器,也可生成组合逻辑;也可生成组合逻辑;wirewire型变量只能生成组合逻辑。型变量只能生成组合逻辑。359.3 9.3 数据类型及常量、变量数据类型及常量、变量用用regreg型变量生成型变量生成触发器触发器举举例例:module rw2(clk,d,out1,out2);input clk,d;output out1,out2;reg out1;wire out2;assign out2=d&out1;always(posedge clk)begin out1 b)&(bc)可

42、简写为:ab&bc (a=b)|(x=y)可简写为:a=b|x=y (!a)|(ab)可简写为:!a|ab为提高程序的可读性,明确表达各运算符之间为提高程序的可读性,明确表达各运算符之间的优先关系,建议使用的优先关系,建议使用括号括号!459.4 9.4 运算符及表达式运算符及表达式三、位运算符三、位运算符位运算符位运算符说明说明&|,按位取反按位与按位或按位异或按位同或双双目运算符单单目运算符 位运算其结果与操作数位数相同。位运算符中的双目位运算其结果与操作数位数相同。位运算符中的双目运算符要求对两个操作数的相应位运算符要求对两个操作数的相应位逐位逐位进行运算。进行运算。两个不同长度的操作数

43、进行位运算时,将自动按两个不同长度的操作数进行位运算时,将自动按右右端端对齐对齐,位数少的操作数会在高位用,位数少的操作数会在高位用0 0补齐。补齐。例 若A=5b11001,B=3b101,则A&B=(5b11001)&(5b0000101)=5b00001 469.4 9.4 运算符及表达式运算符及表达式 例例&运算符和运算符和&(按位与)的区别(按位与)的区别&运算的结果为运算的结果为1 1位的逻辑值位的逻辑值注意注意&和和&的区别!的区别!被认为是 1b1被认为是 1bx逻辑与结果为 1bx479.4 9.4 运算符及表达式运算符及表达式四、关系运算符四、关系运算符关系运算符关系运算符

44、说明说明=小于小于或等于大于大于或等于双双目运算符括号内先运算!括号内先运算!算术运算先运算!算术运算先运算!运算结果为运算结果为1 1位的逻辑值位的逻辑值1 1或或0 0或或x x。关系运算时,若关系为关系运算时,若关系为真真,则返回值为则返回值为1 1;若声明的关系为;若声明的关系为假假,则返回值为,则返回值为0 0;若某操作数为;若某操作数为不不定值定值x x,则返回值为,则返回值为x x。所有的关系运算符优先级别相同。所有的关系运算符优先级别相同。关系运算符的优先级关系运算符的优先级低于低于算术运算符。算术运算符。例 asize-1等同于:a(size-1)size-(1a)不等同于:

45、size-1 n An 或或 An A3=4b0001;4b10014=4b0000 4b10011=5b10010;4b10012=6b100100;16=32b1000000v将操作数右移或左移将操作数右移或左移n n位,相位,相当于将操作数除以或乘以当于将操作数除以或乘以2 2n n。右移位数不变,右移位数不变,但右移的数据但右移的数据会丢失!会丢失!529.4 9.4 运算符及表达式运算符及表达式八、条件运算符八、条件运算符三三目运算符in1outMUXin0sel信号信号 =条件条件?表达式表达式1 1:表达式表达式2 2 条件运算符为条件运算符为?:?:用法:用法:例例 数据选择器

46、数据选择器assign out=sel?in1:in0;当条件为当条件为真真,信号取表,信号取表达式达式1 1的值;为的值;为假假,则,则取表达式取表达式2 2的值。的值。sel=1sel=1时时out=in1out=in1;sel=0sel=0时时out=in0out=in0539.4 9.4 运算符及表达式运算符及表达式九、位拼接运算符九、位拼接运算符 位拼接运算符为位拼接运算符为 用于将两个或多个信号的某些位拼接起来,表示一个用于将两个或多个信号的某些位拼接起来,表示一个整体整体信号。信号。用法:用法:信号信号1 1的某几位,信号的某几位,信号2 2的某几位,的某几位,信号,信号n n的

47、某几位的某几位 例如在进行加法运算时,可将进位输出与和拼接在一起使用。例如在进行加法运算时,可将进位输出与和拼接在一起使用。例1 output 3:0 sum;/和 output cout;/进位输出进位输出 input3:0 ina,inb;input cin;assign cout,sum=ina+inb+cin;/进位与和拼接在一起进位与和拼接在一起 例2 a,b3:0,w,3b101 =a,b3,b2,b1,b0,w,1b1,1b0,1b1549.4 9.4 运算符及表达式运算符及表达式 可用重复法简化表达式,如:4w/等同于w,w,w,w 还可用嵌套方式简化书写,如:b,3a,b/等

48、同于b,a,b,a,b,a,b,也等同于b,a,b,a,b,a,b用于表示重复的表达式必须为常数常数表达式!v在位拼接表达式中,不允许存在没有指明位数的信号在位拼接表达式中,不允许存在没有指明位数的信号,必须指明信号的位数;若未指明,则,必须指明信号的位数;若未指明,则默认为默认为3232位的位的二进制数二进制数!v如如1,0=641,0=64h00000001_00000000h00000001_00000000,注意注意1,01,0不等于不等于2 2b10b10559.4 9.4 运算符及表达式运算符及表达式十、运算符的优先级十、运算符的优先级类类 别别运运 算算 符符优先级优先级逻辑、位

49、运算符!高低算术运算符*/%移位运算符关系运算符 =等式运算符=!=!=缩减、位运算符&|逻辑运算符&|条件运算符?:表表3-3 运算符的优先级运算符的优先级为提高程序的可读性,为提高程序的可读性,建议使用建议使用括号括号来控制来控制运算的优先级!运算的优先级!例(ab)&(bc)(a=b)|(x=y)(!a)|(ab)569.5 9.5 语句语句u赋值语句赋值语句u块语句块语句u条件语句条件语句u循环语句循环语句u结构说明语句结构说明语句u编译预处理语句编译预处理语句579.5 9.5 语句语句赋值语句赋值语句连续赋值语句过程赋值语句块语句块语句begin_end语句fork_join语句Q

50、uartus II不支持条件语句条件语句if_else语句case语句循环语句循环语句forever语句MAX+PLUS II不支持repeat语句MAX+PLUS II不支持while语句MAX+PLUS II不支持for语句结构说明语句结构说明语句initial语句Quartus II不支持always语句task语句MAX+PLUS II不支持function语句编译预处理语句编译预处理语句define语句include语句Quartus II不支持timescale语句Quartus II不支持表表3-4 Verilog HDL的语句的语句589.5 9.5 语句语句v注:注:上表中,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(第九章-硬件描述语言Verilog-HDL-(2课件.ppt)为本站会员(ziliao2023)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|