版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2021/3/91工程学院工程学院 信息技术教研室信息技术教研室Verilog HDL与与FPGA数字系统设计数字系统设计2021/3/923.1 Verilog HDL基本语法规则基本语法规则3.2 Verilog HDL门级建模门级建模3.3 Verilog HDL数据流建模与运算符数据流建模与运算符3.4 组合电路的行为级建模组合电路的行为级建模3.5分层次的电路设计方法分层次的电路设计方法2021/3/933.1 Verilog HDL基本语法规则基本语法规则3.1.1 词法规定词法规定 3.1.2 逻辑值集合逻辑值集合3.1.3 常量及其表示常量及其表示3.1.4 数据类型数据类型3
2、2021/3/943.1.1 词法规定词法规定 为对数字电路进行描述为对数字电路进行描述, ,Verilog语言规定了一套完整的语法结语言规定了一套完整的语法结构。构。1间隔符间隔符: Verilog 的间隔符主要起分隔文本的作用,可以使的间隔符主要起分隔文本的作用,可以使文本错落有致,便于阅读与修改。文本错落有致,便于阅读与修改。间隔符包括空格符(间隔符包括空格符(b)、)、TAB 键(键(t)、换行符()、换行符(n)及换)及换页符。页符。2注释符注释符:注释只是为了改善程序可读性,编译时不起作用。注释只是为了改善程序可读性,编译时不起作用。多行注释符多行注释符(用于写多行注释用于写多行注
3、释): /* - */;单行注释符单行注释符 :以以/开始到行尾结束为注释文字。开始到行尾结束为注释文字。42021/3/95o任何用任何用Verilog HDLVerilog HDL语言描述的语言描述的“东西东西”都通过其名字来识别,都通过其名字来识别,这个名字被称为这个名字被称为标识符标识符。o如源文件名、模块名、端口名、变量名、常量名、实例名等。如源文件名、模块名、端口名、变量名、常量名、实例名等。o标识符可由字母、数字、下划线和标识符可由字母、数字、下划线和$ $符号构成;符号构成;但第一个字符但第一个字符必须是字母或下划线,不能是数字或必须是字母或下划线,不能是数字或$ $符号符号!
4、o在在Verilog HDLVerilog HDL中变量名是区分大小写的!中变量名是区分大小写的!o合法合法的名字:的名字:n A_99_Zn Resetn _54MHz_Clock$n Module 不合法的名字:不合法的名字:123a$datamodule7seg.v标识符标识符不能与不能与关键字关键字同名!同名!三、标识符和关键字三、标识符和关键字 52021/3/96o 关键字关键字事先定义好的确认符,用来组事先定义好的确认符,用来组织语言结构;或者用于定义织语言结构;或者用于定义Verilog HDLVerilog HDL提提供的门元件(如供的门元件(如andand,notnot,o
5、ror,bufbuf)。)。o 用用小写小写字母定义!字母定义! 如如always,assign,begin,case,casex,else,end,for,function,if,input,output,repeat,table,time,while,wire用户程序中的用户程序中的变变量、节点等量、节点等名称名称不能与不能与关键字关键字同同名!名!三、标识符和关键字三、标识符和关键字 62021/3/97为了表示数字逻辑电路的逻辑状态,为了表示数字逻辑电路的逻辑状态,Verilog语言规定了语言规定了4 4种基本的逻辑值。种基本的逻辑值。 0逻辑逻辑0、逻辑假逻辑假 1逻辑逻辑1、逻辑真
6、逻辑真 x或或X不确定的值(未知状态)不确定的值(未知状态) z或或Z高阻态高阻态3.1.2 逻辑值集合逻辑值集合72021/3/98o 数据类型是用来表示数字电路硬件中的数据数据类型是用来表示数字电路硬件中的数据存储和传送元素的。存储和传送元素的。o 常量是在程序运行过程中,其值不能被改变常量是在程序运行过程中,其值不能被改变的量。的量。3.1.3 常量及其表示常量及其表示82021/3/993.1.3 常量及其表示常量及其表示三种类型的常量三种类型的常量整数型常量整数型常量实数型常量实数型常量字符串型常量字符串型常量实数型常量实数型常量十进制记数法十进制记数法 如:如: 0.10.1、2.
7、02.0、5.675.67科学记数法科学记数法 如如: : 23_5.1e2、5E4 23510.0、 0.0005十进制数形式的表示方法十进制数形式的表示方法: :表示有符号表示有符号常量常量例如:例如:3030、2 2带基数形式的表示方法带基数形式的表示方法: :格式为:格式为: 整数型整数型常量常量例如:例如:3b101、5o37、8he3,8b1001_0011 92021/3/9103.1.3 常量及其表示常量及其表示;Verilog 允许用参数定义语句定义一个标识符来代表一个常量,允许用参数定义语句定义一个标识符来代表一个常量,称为称为符号常量符号常量。定义的格式为:。定义的格式为
8、: parameter 参数名参数名1 1常量表达式常量表达式1 1,参数名,参数名2 2常量表达式常量表达式2 2如如 parameter BIT=1, BYTE=8, PI=3.14;字符串常量字符串常量字符串是用双撇号括起来的字符序列,它必须包含在同一行字符串是用双撇号括起来的字符序列,它必须包含在同一行中,不能分成多行书写。例如:中,不能分成多行书写。例如: this is a string hello world!符号常量符号常量102021/3/9113.1.4 数据类型数据类型变量的数据类型变量的数据类型寄存器型寄存器型线网型线网型线网类线网类: :是指输出始终根据输入的变化而更
9、新其值的变量是指输出始终根据输入的变化而更新其值的变量, ,它一般指的是硬件电路中的各种物理连接它一般指的是硬件电路中的各种物理连接. . 常用的网络类型由关键词常用的网络类型由关键词wire定义定义, ,格式如下:格式如下:wire n n-1:0 -1:0 变量名变量名1 1,变量名,变量名2 2,变量名,变量名n;变量宽度变量宽度例例: :网络型变量网络型变量L的值由与门的驱动信号的值由与门的驱动信号a a和和b b所决定,即所决定,即La&b。a、b的值发的值发生变化,线网生变化,线网L L的值会立即跟着变化。的值会立即跟着变化。 B A L G1 112021/3/912o
10、wire型数据常用来表示用以型数据常用来表示用以assign关键字指定的关键字指定的组合逻辑信号。组合逻辑信号。o Verilog 程序模块中输入、输出信号类型默认时,程序模块中输入、输出信号类型默认时,自动定义为自动定义为wire型。型。o wire型信号可以用做任何方程式的输入,也可型信号可以用做任何方程式的输入,也可以用做以用做assign语句或实例元件的输出。语句或实例元件的输出。 wire a; /定义了一个定义了一个1位的位的wire型数据型数据 wire7:0 b; /定义了一个定义了一个8位的位的wire型数据型数据 wire4:1 c,d; /定义了二个定义了二个4位的位的w
11、ire型数据型数据wirewire型型122021/3/913表3.1.3 线网类型变量及其说明线网类型线网类型功能说明功能说明wire, tri用于表示单元(元件)之间的连线,wire为一般连线;tri用于描述由多个信号源驱动的线网,并没有其他特殊意义,两者的功能完全相同。wor, trior具有线或特性的线网,用于一个线网被多个信号驱动的情况wand, riand具有线与特性的线网,用于一个线网被多个信号驱动的情况trireg具有电荷保持特性的线网类型,用于开关级建模tri1上拉电阻,用于开关级建模tri0下拉电阻,用于开关级建模supply1用于对电源建模,高电平1 supply0用于对
12、地建模,低电平0 132021/3/914关于关于“多重驱动多重驱动”o 在写可综合的在写可综合的Verilog代码时,建议不要对同一个变量进代码时,建议不要对同一个变量进行多次赋值(简称多重驱动),以避免出现多个信号同行多次赋值(简称多重驱动),以避免出现多个信号同时驱动一个输出变量的情况。时驱动一个输出变量的情况。BLAC图图3.1.23.1.2多重驱动示意图多重驱动示意图o 例如,例如,A、B、C三个内部信号同时三个内部信号同时接到(驱动)一个输出端接到(驱动)一个输出端L。 或者说,输出或者说,输出L同时被三个内部信同时被三个内部信号所驱动。号所驱动。 此时此时L的逻辑值可能无法确定。
13、的逻辑值可能无法确定。142021/3/9153.1.4 数据类型数据类型变量的数据类型变量的数据类型寄存器型寄存器型线网型线网型寄存器型变量对应的是具有状态保持作用的电路等元件寄存器型变量对应的是具有状态保持作用的电路等元件, ,如触如触发器寄存器。寄存器型变量只能在发器寄存器。寄存器型变量只能在initial或或always内部被赋值。内部被赋值。152021/3/916寄存器变量类型寄存器变量类型寄存器类型功能说明reg常用的寄存器型变量integer32位带符号的整数型变量real/realtime64位带符号的实数型变量time64位无符号的时间变量表表3.1.5 寄存器变量类型及其
14、说明寄存器变量类型及其说明例:例: reg clock; /一个一个1位寄存器变量的声明位寄存器变量的声明 reg 3:0 counter; /一个一个4位位寄存器变量的声明寄存器变量的声明抽象描述抽象描述, ,不对应具不对应具体硬件体硬件end162021/3/9173.2 Verilog HDL门级建模门级建模3.2.1 多输入门多输入门3.2.4 门级建模举例门级建模举例3.2.2 多输出门多输出门3.2.3 三态门三态门172021/3/918基本概念:基本概念:o 结构级建模结构级建模: 就是根据逻辑电路的结构(逻辑就是根据逻辑电路的结构(逻辑图),实例引用图),实例引用Verilo
15、g HDL中内置的基本门级中内置的基本门级元件或者用户定义的元件或其他模块,来描述结元件或者用户定义的元件或其他模块,来描述结构图中的元件以及元件之间的连接关系。构图中的元件以及元件之间的连接关系。o 门级建模门级建模: Verilog HDL中内置了中内置了12个基本门级元个基本门级元件(件(Primitive,有的翻译为,有的翻译为“原语原语”)模型,引)模型,引用这些基本门级元件对逻辑图进行描述,也称为用这些基本门级元件对逻辑图进行描述,也称为门级建模门级建模。 182021/3/919原语原语 多输入门:多输入门:and、nand、or、nor、xor、xnor 只有单个输出只有单个输
16、出,1个或多个输入个或多个输入多输出门:多输出门:not、buf 允许有多个输出允许有多个输出,但只有一个输入但只有一个输入三态门:三态门:bufif0、bufif1、notif0、notif1 有一个输出有一个输出,一个数据输入和一个控制输入一个数据输入和一个控制输入上拉电阻上拉电阻pullup、下拉电阻、下拉电阻pulldown192021/3/9206.4.1 多输入门多输入门原语名称原语名称图形符号图形符号逻辑表达式逻辑表达式and(与门)(与门)L = A & Bnand(与非门)(与非门)L = (A & B)or(或门)(或门)L = A | Bnor(或非门)(
17、或非门)L =( A | B)xor(异或门)(异或门)L = A Bxnor(同或门)(同或门)L = A Bp 共共6个:个: and、nand、or、nor、xor、xnorp 特点:只有特点:只有1个输出个输出, 有多个输入有多个输入多输入门的一般引用格式为:多输入门的一般引用格式为:Gate_ name (OutputA, Input1, Input2, InputN);202021/3/921若同一个基本门在当前模块中被调用多次,可在一条调若同一个基本门在当前模块中被调用多次,可在一条调用语句中加以说明,用语句中加以说明,中间以逗号相隔中间以逗号相隔。 and A1(out,in1
18、,in2,in3););xnor NX1(out,in1,in2,in3,in4);); 对基本门级元件,调用名对基本门级元件,调用名A1A1、NX1NX1可以省略。可以省略。 212021/3/922真值表举例真值表举例表表3.2.2 and、nand真值表真值表and输入输入1nand输入输入101xz01xz输输入入200000输输入入201111101xx110 xxx0 xxxx1xxxz0 xxxz1xxx222021/3/9233.2.2 多输出门多输出门允许有多个输出,但只有一个输入。允许有多个输出,但只有一个输入。 not N1(out1,out2,in););xx10zx1
19、0输输 入入buf输输 出出 buf真值表真值表 输输 出出xx01zx10输输 入入notnot真值表真值表 buf B1(out1,out2,in););out1inout2outN232021/3/9243.2.3 三态门三态门有一个输出、一个数据输入和一个输入控制。有一个输出、一个数据输入和一个输入控制。如果输入控制信号无效,则三态门的输出为高阻态如果输入控制信号无效,则三态门的输出为高阻态z。 (a)bufif1 (b)notif1 in out ctrl in out ctrl 242021/3/925boutasel/Gate-level descriptionmodule _2
20、to1muxtri (a,b,sel,out); input a,b,sel; output out; tri out; bufif1 (out,b,sel); bufif0 (out,a,sel); endmodule 2选选1数据选择器数据选择器一些一些Verilog原型原型(Primitive)小结:小结:门级建模就是列出电路图结构中的元件,并按网表连接门级建模就是列出电路图结构中的元件,并按网表连接 。3.2.4 门级建模举例门级建模举例252021/3/926module addbit (a, b, ci, sum, co); input a, b, ci; output sum,
21、co; wire a, b, ci, sum, co, n1, n2, n3; xor u0(n1, a, b,), u1(sum, n1, ci); and u2(n2, a, b), u3(n3, n1, ci); or (co, n2, n3); endmodule 1位全加器位全加器3.2.4 门级建模举例门级建模举例262021/3/927门级描述小结:门级描述小结:1. 1.给电路图中的每个输入输出引脚给电路图中的每个输入输出引脚 赋以赋以 端口名端口名. .2. 2.给电路图中每条给电路图中每条内部连线内部连线 取上各自的连线名取上各自的连线名. .3. 3.给电路图中的每个逻辑
22、元件取一个编号给电路图中的每个逻辑元件取一个编号 ( (即即“调用名调用名”). ).4. 4.给所要描述的这个电路模块确定一个给所要描述的这个电路模块确定一个模块名模块名. .5. 5.用用modulemodule定义相应模块名的结构描述定义相应模块名的结构描述, ,并将逻辑图中所有的并将逻辑图中所有的输入输入输出端口名列入端口名表项输出端口名列入端口名表项中中, ,再完成对各端口的再完成对各端口的输入输出类型输入输出类型说明说明. .6. 6.依照电路图中的依照电路图中的连接关系连接关系, ,确定各单元之间端口信号的连接确定各单元之间端口信号的连接, ,完完成对电路图内部的结构描述成对电路
23、图内部的结构描述. .7. 7.最后用最后用endmoduleendmodule结束模块描述全过程结束模块描述全过程. .end272021/3/9283.3 Verilog HDL数据流建模与运算符数据流建模与运算符3.3.1 数据流建模数据流建模3.3.2 运算符及其优先级运算符及其优先级282021/3/929o 在在数字电路数字电路中,信号经过组合逻辑时会类似中,信号经过组合逻辑时会类似于数据流动,即信号从输入流向输出,并不于数据流动,即信号从输入流向输出,并不会在其中存储。当输入发生变化时,总会在会在其中存储。当输入发生变化时,总会在一定时间以后体现在输出端。一定时间以后体现在输出端
24、。o 同样,我们可以模拟同样,我们可以模拟数字电路数字电路的这一特性,的这一特性,对其进行建模,这种建模方式通常被称为数对其进行建模,这种建模方式通常被称为数据流建模。据流建模。3.3 Verilog HDL数据流建模与运算符数据流建模与运算符292021/3/9303.3 Verilog HDL数据流建模与运算符数据流建模与运算符对于基本单元逻辑电路,使用对于基本单元逻辑电路,使用Verilog语言提供的门级元件语言提供的门级元件模型描述电路非常方便。模型描述电路非常方便。 但随着电路复杂性的增加,使用的逻辑门较多时,使用但随着电路复杂性的增加,使用的逻辑门较多时,使用HDL门级描述的工作效
25、率就很低。门级描述的工作效率就很低。本节介绍的本节介绍的数据流建模数据流建模能够在较高的抽象级别描述电路的逻能够在较高的抽象级别描述电路的逻辑功能,并且通过辑功能,并且通过逻辑综合逻辑综合软件,能够自动地将数据流描述软件,能够自动地将数据流描述转换成为门级电路。转换成为门级电路。 数据流建模主要使用逻辑表达式,所以要了解各种运算符和数据流建模主要使用逻辑表达式,所以要了解各种运算符和表达式。表达式。302021/3/9313.3.1 数据流建模数据流建模p 数据流建模使用的连续赋值语句,由关键词数据流建模使用的连续赋值语句,由关键词assign开始,后面跟着由开始,后面跟着由操作数操作数和和运
26、算符运算符等组成的等组成的逻辑表达逻辑表达式式。p一般用法如下:一般用法如下: wire 位宽说明位宽说明 变量名变量名1,变量名,变量名2,变量名,变量名n; assign 变量名表达式;变量名表达式;p注意,注意,assign 语句只能对语句只能对wire型变量进行赋值,所以等号型变量进行赋值,所以等号左边变量名的数据类型必须是左边变量名的数据类型必须是wire型。型。312021/3/9323.3.1 数据流建模数据流建模p 数据流建模使用的连续赋值语句,由关键词数据流建模使用的连续赋值语句,由关键词assign开始,后面跟着由开始,后面跟着由操作数操作数和和运算符运算符等组成的等组成的
27、逻辑表达逻辑表达式式。p一般用法如下:一般用法如下: wire 位宽说明位宽说明 变量名变量名1,变量名,变量名2,变量名,变量名n; assign 变量名表达式;变量名表达式;p连续赋值语句的执行过程是:只要逻辑表达式右边变量的连续赋值语句的执行过程是:只要逻辑表达式右边变量的逻辑值发生变化,则等式左边的值立即被计算出来并赋给左逻辑值发生变化,则等式左边的值立即被计算出来并赋给左边的变量。边的变量。322021/3/933module mux2to1_dataflow(D0, D1, S, Y ); input D0, D1, S; output Y; wire Y ; /下面是逻辑功能描述
28、下面是逻辑功能描述 assign Y = (S & D0) | (S & D1); /表达式左边表达式左边Y必须是必须是wire型型endmodule 端口类型说明端口类型说明电路结构描述电路结构描述数据类型说明数据类型说明例例 用数据流描述方式建立模型用数据流描述方式建立模型SDSDY10332021/3/934module mux2x1_df (D0,D1,S,L); input D0,D1,S; output L; assign L = S ? D1 : D0;endmodule 例:用条件运算符描述了一个例:用条件运算符描述了一个2选选1的数据选择器。的数据选择器。条件
29、运算符:如果条件运算符:如果S1,则输出,则输出LD1;否则否则LD0。342021/3/935 Y2 A1 A0 Y1 Y0 Y3 E 例:用数据流建模方法对例:用数据流建模方法对2线线-4线译码器的行为进行描述。线译码器的行为进行描述。 213012011010 , , AAEYAAEYAAEYAAEYnnnn352021/3/936module decoder_df (A1,A0,E,Y); input A1,A0,E; output 3:0 Y; assign Y0 = (A1 & A0 & E); assign Y1 = (A1 & A0 & E);
30、assign Y2 = (A1 & A0 & E); assign Y3 = (A1 & A0 & E);endmodule Y2 A1 A0 Y1 Y0 Y3 E 例:用数据流建模方法对例:用数据流建模方法对2线线-4线译码器的行为进行描述。线译码器的行为进行描述。 362021/3/937例:用数据流描述风格对一个例:用数据流描述风格对一个4位二进制数的加法器建模。位二进制数的加法器建模。 module adder4(Cout,Sum,A,B,Cin); parameter width=4; outputwidth-1:0 Sum; output Cout;
31、 inputwidth-1:0 A,B; input Cin; assign Cout,Sum=A+B+Cin;endmodule372021/3/9383.3.1 数据流建模数据流建模数据流建模提供了用逻辑表达式描述电路的一数据流建模提供了用逻辑表达式描述电路的一种方式。不必考虑电路的组成以及元件之间的种方式。不必考虑电路的组成以及元件之间的连接,是描述组合逻辑电路常用的一种方式。连接,是描述组合逻辑电路常用的一种方式。382021/3/9393.3.2 表达式与操作数表达式与操作数表达式由运算符合操作数构成,其目的是根据运算符的含义表达式由运算符合操作数构成,其目的是根据运算符的含义计算出
32、一个结果值。计算出一个结果值。AB;Add131:20+Add231:20操作数可以是常数、整数、实数、线网、寄存器、时间操作数可以是常数、整数、实数、线网、寄存器、时间等任何数据类型。等任何数据类型。392021/3/940o运算符按运算符按功能功能分为分为9 9类类:n 算术算术运算符n 逻辑逻辑运算符n 关系关系运算符n 等式等式运算符n 缩减缩减运算符n 条件条件运算符n 位位运算符n 移位移位运算符n 位拼接位拼接运算符 运算符按运算符按操作数的个数操作数的个数分为分为3 3类类:单目单目运算符带一个操作数 逻辑非!,按位取反,缩减运算符,移位运算符双目双目运算符带两个操作数 算术、
33、关系、等式运算符,逻辑、位运算符的大部分三目三目运算符带三个操作数 条件运算符3.3.3 运算符及其优先级运算符及其优先级402021/3/9413.3.3 运算符及其优先级运算符及其优先级1.运算符运算符 (9类类)?:条件运算符条件运算符 连接运算符连接运算符逻辑移位运算符逻辑移位运算符=, !=, =, !=相等与全等运算符相等与全等运算符, =关系运算符(双目)关系运算符(双目)!, &, |逻辑运算符逻辑运算符&, &, |,|, , or 缩位运算符缩位运算符(单目单目),&,|,or位运算符位运算符+, -, *, /, %算术运算符算术运算符所含
34、运算符所含运算符运算符分类运算符分类412021/3/942一、算术运算符一、算术运算符算术运算符算术运算符说明说明 */%加减乘除求模双双目运算符 进行整数除法运算时,结果值略去小数部分,只取整数部分!进行整数除法运算时,结果值略去小数部分,只取整数部分! % %称为称为求模求模(或(或求余求余)运算符,要求)运算符,要求% %两侧均为两侧均为整型整型数据;数据; 求模运算结果值的符号位取第一个操作数的符号位!求模运算结果值的符号位取第一个操作数的符号位! 例例 -11%3 -11%3 结果为结果为-2-2 进行算术运算时,若某操作数为不定值进行算术运算时,若某操作数为不定值x x,则整个结
35、果也为,则整个结果也为x x。 MAX + PLUS IIMAX + PLUS II不支持不支持“/ /” 和和“%”运算!运算!Quartus IIQuartus II都支持!都支持!422021/3/943o 例例 除法和求模运算的区别除法和求模运算的区别注意注意/ /和和% %的区别!的区别!432021/3/9449/4 = 29%4 =1arithmetic.vwfarithmetic.vwf442021/3/945二、关系运算符二、关系运算符关系运算符关系运算符说明说明= 小于小于或等于大于大于或等于双双目运算符括号内先运算!括号内先运算!算术运算先运算!算术运算先运算! 运算结果
36、为运算结果为1 1位的逻辑值位的逻辑值1 1或或0 0或或x x。关系运算时,若关系为关系运算时,若关系为真真,则返回值为则返回值为1 1;若声明的关系为;若声明的关系为假假,则返回值为,则返回值为0 0;若某操作数为;若某操作数为不不定值定值x x,则返回值为,则返回值为x x。所有的关系运算符优先级别相同。所有的关系运算符优先级别相同。关系运算符的优先级关系运算符的优先级低于低于算术运算符。算术运算符。 例 asize - 1等同于: a(size - 1) size -(1a)不等同于: size-1b)&(bc) 可简写为: ab & bc (a= =b)|(x= =
37、y) 可简写为: a= =b|x= = y (!a)|(ab)可简写为: !a|ab为提高程序的可读性,明确表达各运算符之间为提高程序的可读性,明确表达各运算符之间的优先关系,建议使用的优先关系,建议使用括号括号!502021/3/951五、位运算符五、位运算符位运算符位运算符说明说明 &|,按位取反按位与按位或按位异或按位同或双双目运算符单单目运算符 位运算其结果与操作数位数相同。位运算符中的双目位运算其结果与操作数位数相同。位运算符中的双目运算符要求对两个操作数的相应位运算符要求对两个操作数的相应位逐位逐位进行运算。进行运算。 两个不同长度的操作数进行位运算时,将自动按两个不同长度
38、的操作数进行位运算时,将自动按右右端端对齐对齐,位数少的操作数会在高位用,位数少的操作数会在高位用0 0补齐。补齐。 例 若A = 5b11001,B = 3b101, 则A & B = (5b11001)&(5b0000101)= 5b00001 512021/3/952六、缩减运算符六、缩减运算符缩减运算符缩减运算符说明说明& &| |,与与非或或非异或同或单单目运算符 运算法则与位运算符类似,但运算过程不同!运算法则与位运算符类似,但运算过程不同! 对对单单个操作数进行个操作数进行递推递推运算运算, ,即先将操作数的最低位与第即先将操作数的最低位与第二位进
39、行与、或、非运算,再将运算结果与第三位进行二位进行与、或、非运算,再将运算结果与第三位进行相同的运算,依次类推,直至最高位相同的运算,依次类推,直至最高位 。 运算结果缩减为运算结果缩减为1 1位二进制数。位二进制数。 例例reg3:0 a; b=|a; /等效于 b =( (a0 | a1) | a(2) | a3注意注意缩减运算符缩减运算符和和位运算符位运算符的区别!的区别!522021/3/953位运算符与缩位运算的比较位运算符与缩位运算的比较 A:4b1010 、B:4b1111,AB= 1010 AB= 0101A|B= 1111 A&B= 1010A = 0101B = 0
40、000 位运算位运算A=1B=1A=0B=0|A=1|B=0&A=1&B=1&A=1&0&1&0=0 缩位运算缩位运算532021/3/954七、移位运算符七、移位运算符移位运算符移位运算符说明说明 n An 或或 An A3 = 4b0001; 4b10014 = 4b0000 4b10011 = 5b10010; 4b10012 = 6b100100; 1 关系关系 =等于等于= !=缩位缩位& & | |逻辑逻辑&|条件条件?:end为提高程序的可读性,为提高程序的可读性,建议使用建议使用括号括号来控制来控制运算的优
41、先级!运算的优先级!例(ab)&(bc) (a= =b)|(x= = y) (!a)|(ab)572021/3/9583.4 组合电路的行为级建模组合电路的行为级建模p行为建模是行为建模是Verilog HDLVerilog HDL行为建模的主要方法,也是行为建模的主要方法,也是Verilog HDLVerilog HDL最能体现其高级编程语言之处,如果学过其他最能体现其高级编程语言之处,如果学过其他高级变成语言(如高级变成语言(如C C语言),就会对本节介绍的诸如语言),就会对本节介绍的诸如if-if-elseelse、forfor循环之类的语法结构非常熟悉。循环之类的语法结构非常熟
42、悉。p此外,本节还将介绍过程赋值的特点和用法。就像连续赋此外,本节还将介绍过程赋值的特点和用法。就像连续赋值用于数据流行为建模一样,过程赋值用于顺序行为建模。值用于数据流行为建模一样,过程赋值用于顺序行为建模。2021/3/9593.4 Verilog HDL行为级建模行为级建模行为级建模就是描述数字逻辑电路的行为级建模就是描述数字逻辑电路的功能和算法功能和算法。在在Verilog中,行为级描述主要使用由关键词中,行为级描述主要使用由关键词initial或或always定定义的两种结构类型的语句。一个模块的内部可以包含多个义的两种结构类型的语句。一个模块的内部可以包含多个initial或或al
43、ways语句语句。 initial语句是一条初始化语句,仅执行一次,经常用于测试模语句是一条初始化语句,仅执行一次,经常用于测试模块中,对激励信号进行描述,在硬件电路的行为描述中,有块中,对激励信号进行描述,在硬件电路的行为描述中,有时为了仿真的需要,也用时为了仿真的需要,也用initial语句给寄存器变量赋初值。语句给寄存器变量赋初值。initial语句主要是一条面向语句主要是一条面向仿真仿真的过程语句,不能用于逻辑的过程语句,不能用于逻辑综合综合 。在在always结构型语句内部有一系列过程性赋值语句,用来描结构型语句内部有一系列过程性赋值语句,用来描述电路的功能(行为)。述电路的功能(行
44、为)。592021/3/9603.5 Verilog HDL行为级建模行为级建模o 在详细解释二者的使用方法之前,可以仅从在详细解释二者的使用方法之前,可以仅从其英文单词的字面意思来了解一下它们的作其英文单词的字面意思来了解一下它们的作用:用:initialinitial用于做用于做 “ “初始化初始化”操作,操作,alwaysalways则则“始终始终”在执行某些操作。在执行某些操作。o 作为顺序行为建模的两条基本语句,作为顺序行为建模的两条基本语句,initialinitial和和alwaysalways存在一些共同的特点:存在一些共同的特点:602021/3/961o 所有的所有的ini
45、tialinitial和和alwaysalways语句都是在时刻语句都是在时刻0 0(仿(仿真刚开始)开始执行;真刚开始)开始执行;o initialinitial和和alwaysalways之后都跟随着一段程序,这段之后都跟随着一段程序,这段程序会被封装成一个程序会被封装成一个“程序块程序块”,可以用,可以用begin-endbegin-end(顺序语句块)封装,也可以用(顺序语句块)封装,也可以用fork-joinfork-join(并行语句块)封装。如果这段程序(并行语句块)封装。如果这段程序只有只有1 1条语句,可以不用封装;条语句,可以不用封装;o 一个模块中可以包含任意多个一个模块
46、中可以包含任意多个initialinitial或或alwaysalways语句,这些语句,这些initialinitial语句和语句和alwaysalways语句彼此之间语句彼此之间都是并行执行的,即这些语句的执行顺序与其都是并行执行的,即这些语句的执行顺序与其在模块中书写的顺序无关。在模块中书写的顺序无关。612021/3/9623.4.1 行为级建模基础行为级建模基础下面介绍行为级建模中经常使用的语句:下面介绍行为级建模中经常使用的语句:1.initial语句结构及过程赋值语句语句结构及过程赋值语句2. always语句结构及过程赋值语句语句结构及过程赋值语句3. 条件语句(条件语句(if
47、-else)4. 多路分支语句(多路分支语句(case-endcase)5. for循环语句(例如循环语句(例如 for等)等)622021/3/9631. initial语句的一般用法:语句的一般用法:所有在所有在initialinitial语句内的语句构成了一个语句内的语句构成了一个initialinitial块。块。initialinitial块从仿真块从仿真0 0时刻开始执行,在整个仿真过程中时刻开始执行,在整个仿真过程中只执行一次。只执行一次。如果一个模块中包括了若干个如果一个模块中包括了若干个initialinitial块,则这些块,则这些initialinitial块从仿真块从仿
48、真0 0时刻开始并发执行,且每个块的执时刻开始并发执行,且每个块的执行是各自独立的。行是各自独立的。如果在块内包含了多条行为语句,那么需要将这些语如果在块内包含了多条行为语句,那么需要将这些语句组成一组,一般是使用关键字句组成一组,一般是使用关键字beginbegin和和endend将它们组将它们组合为一个块语句;如果块内只有一条语句,则不必使合为一个块语句;如果块内只有一条语句,则不必使用用beginbegin和和endend。由于由于initialinitial块语句在整个仿真期间只能执行一次,因块语句在整个仿真期间只能执行一次,因此它一般被用于初始化、信号监视、生成仿真波形等此它一般被用
49、于初始化、信号监视、生成仿真波形等目的。目的。632021/3/964642021/3/965o 可以发现,可以发现,initial语句执行时可以通过指定时语句执行时可以通过指定时延而控制某个信号的值不断变化。延而控制某个信号的值不断变化。o 如果这个变化是很有规律的,而且所有时延如果这个变化是很有规律的,而且所有时延值都相同,并且值只在值都相同,并且值只在0和和1之间交替变换,之间交替变换,就可以在这个信号上形成一个时钟波形。就可以在这个信号上形成一个时钟波形。o 通过改变时延值和不同的变化值,可以生成通过改变时延值和不同的变化值,可以生成任意的波形信号。可见任意的波形信号。可见initia
50、l语句主要用于初语句主要用于初始化和波形生成。始化和波形生成。652021/3/966o alwaysalways语句包括的所有行为语句构成了一个语句包括的所有行为语句构成了一个alwaysalways语句块。该语句块。该alwaysalways语句块从仿真语句块从仿真0 0时时刻开始顺序执行其中的行为语句;在最后一刻开始顺序执行其中的行为语句;在最后一条执行完成后,再次开始执行其中的第一条条执行完成后,再次开始执行其中的第一条语句,如此循环往复,直至整个仿真结束。语句,如此循环往复,直至整个仿真结束。o alwaysalways语句通常用于对数字电路中一组反复语句通常用于对数字电路中一组反复
51、执行的活动进行建模。例如时钟信号发生器执行的活动进行建模。例如时钟信号发生器,每半个时钟周期时钟信号翻转一次。在现,每半个时钟周期时钟信号翻转一次。在现实电路中只要电源接通,时钟信号发生器从实电路中只要电源接通,时钟信号发生器从时刻时刻0 0就有效,一直工作下去。就有效,一直工作下去。2. always语句的一般用法:语句的一般用法:662021/3/9672. always语句的一般用法:语句的一般用法:always (事件控制表达式事件控制表达式)begin:块名:块名 块内局部变量的定义;块内局部变量的定义; 过程赋值语句过程赋值语句(包括高级语句)(包括高级语句);endbeginen
52、d 之间只有一条语句时,关键词可以省略;之间只有一条语句时,关键词可以省略;beginend 之间的多条语句被称为之间的多条语句被称为顺序语句块。顺序语句块。可以给可以给语句语句块块取一个名字,称为取一个名字,称为有名块有名块。 “”称为事件控制运算符,称为事件控制运算符,用于挂起某个动作,直到事件用于挂起某个动作,直到事件发生发生。“事件控制表达式事件控制表达式”也称为敏感事件表也称为敏感事件表,它是后面,它是后面begin和和end之间的语句执行的条件。当事件发生或某一特定之间的语句执行的条件。当事件发生或某一特定的条件变为的条件变为“真真”时,后面的过程赋值语句就会被执行。时,后面的过程
53、赋值语句就会被执行。672021/3/968o 时延控制时延控制“#10”,always语句从时刻语句从时刻0开始,每隔开始,每隔10个单个单位时间就把位时间就把Clk上的值翻转一次,这样就在上的值翻转一次,这样就在Clk上得到了一上得到了一个周期为个周期为20的波形信号。的波形信号。o always中的时序控制可以是上例中的时延控制,也可以是中的时序控制可以是上例中的时延控制,也可以是事件控制。事件控制就是等待某一事件发生,该事件的事件控制。事件控制就是等待某一事件发生,该事件的发生将执行发生将执行always语句。语句。682021/3/969o例例用符号用符号“”定义了事件控制的定义了事
54、件控制的always语句。语句。reg 0:5 InstrReg;reg 3:0 Accum;wire ExecuteCycle;always (EcecuteCycle) /always语句开始执行的条件是事件语句开始执行的条件是事件EcecuteCycle的发生的发生begin /顺序语句块开始顺序语句块开始case(InstrReg 0 : 1 ) /顺序语句块内的顺序语句块内的case开始开始 2b00: Store (Accum, InstrReg2:5 ) ; /Store是用户在别处自定义的是用户在别处自定义的任务任务 2b11: Load (Accum, InstrReg2:5
55、 ) ; /Load是用户在别处自定义的是用户在别处自定义的任务任务 2b01: Jump (InstrReg2:5 ) ; /Jump是用户在别处自定义的任是用户在别处自定义的任务务 2b10 : ; /不做任何操作不做任何操作 endcase /顺序语句块内的顺序语句块内的case结构开始结构开始end /顺序语句块结束顺序语句块结束692021/3/970o 这个这个always语句用到了符号语句用到了符号,意思是只要,意思是只要ExecuteCycle上有事件发生(值的变化),上有事件发生(值的变化),就执行顺序语句块中的语句。就执行顺序语句块中的语句。o 符号符号“”定义的是触发事件
56、,一旦检测到定义的是触发事件,一旦检测到ExecuteCycle上的电平跳变时的边沿,就执上的电平跳变时的边沿,就执行行always语句。语句。o 事件控制事件控制”缺省为缺省为“电平敏感事件电平敏感事件”,若使用关键词若使用关键词“posedge”和和“negedge”定定义边沿触发。义边沿触发。702021/3/971module DFF(Clk, D, Set, Q, Qbar ) ;input Clk, D, Set;output Q, Qbar;reg Q, Qbar;always (negedge Clk) begin if (Set!= 1) begin #5 Q = D; #1
57、 Qbar =Q; end else begin #3 Q = 1; #2 Qbar = 0; end endendmodule 例例 一个边沿敏感事件控制的一个边沿敏感事件控制的alwaysalways语句语句712021/3/972beginbegin 语句语句1 1; 语句语句2 2; 语句语句n n;endendbeginbegin:块名:块名 块内声明语句;块内声明语句; 语句语句1 1; 语句语句2 2; 语句语句n n;endend注:块内声明语句可以是注:块内声明语句可以是参数参数声明、声明、regreg型型变量声明变量声明、integerinteger型型变量声明、变量声明、
58、realreal型型变量声明语句。变量声明语句。或或722021/3/973 例例1 1 例例2 #10注注:这里标识符:这里标识符“# #”表示延迟;表示延迟; 在模块调用中在模块调用中“# #”表示参数的传递表示参数的传递732021/3/974 例例 使用行为描述风格对下图所示的使用行为描述风格对下图所示的2 2线线4 4线译码器进行建模线译码器进行建模 Y2 A1 A0 Y1 Y0 Y3 E 213012011010 , , AAEYAAEYAAEYAAEYnnnn742021/3/975752021/3/9764 4、 条件语句条件语句一、一、if-else语句语句o 判定所给条件是
59、否满足,根据判定的结果(真或假)判定所给条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。决定执行给出的两种操作之一。o if-elseif-else语句有语句有3 3种形式种形式n 其中其中“表达式表达式”为为逻辑逻辑表达式或表达式或关系关系表达式,或表达式,或一一位位的的变量变量。n 若表达式的值为若表达式的值为0 0、x x或或z z,则判定的结果为,则判定的结果为“假假”;若为若为1 1,则结果为,则结果为“真真”。n 语句可为单句,也可为多句;多句时一定要用语句可为单句,也可为多句;多句时一定要用“begin_endbegin_end”语句括起来,形成一个复合块语句。
60、语句括起来,形成一个复合块语句。对于每个判定对于每个判定只有只有两两个分支个分支 条件语句分为两种:条件语句分为两种:if-elseif-else语句和语句和casecase语句;语句; 它们都是顺序语句,应放在它们都是顺序语句,应放在“alwaysalways”块内!块内!762021/3/9774 4、 条件语句条件语句o 允许一定形式的表达式简写方式,如:允许一定形式的表达式简写方式,如:n if(expression) if(expression) 等同于等同于if(expression = = 1) if(expression = = 1) n if(if(!expression) expression) 等同于等同于if(expression if(expression != 1) = 1) ifif(表达式)(表达式) 语句语句1 1;ifif(表达式(表达式1 1) 语句语句1 1;elseelse 语句语句2 2;ifif
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 厨房清洁工作制度范本
- 县级医院消防工作制度
- 孵化器孵化人员考核制度
- 司机送货工作制度及流程
- 吉利会议规范制度
- 员工打分考核制度
- 商业服务类公司财务制度
- 啤酒企业采购管理制度及流程
- 团委档案保管三合一制度
- 国内大学国际生考核制度
- 2025届浙江省杭二中化学高一下期末质量跟踪监视试题含解析
- QGDW1392-2015风电场接入电网技术规定
- 2025年中级制冷工(四级)技能认定理论考试指导题库(含答案)
- 浙江省衢州市衢江区2023-2024学年五年级下学期语文期中试卷(含答案)
- 四川开放大学2024年秋《土木工程CAD》形考作业1-2终考答案
- T-CSAE 176-2021 电动汽车电驱动总成噪声品质测试评价规范
- 敦煌曲子词地域文化研究
- 雷雨-剧本原文-高中语文雷雨剧本原文
- 网络机房日巡检记录表
- 2024年广东佛山市南海区大沥镇镇属企业招聘笔试参考题库含答案解析
- 地理景观实地考察报告
评论
0/150
提交评论