1、2024/4/15 周一计算机科学与技术学院1Verilog语言语言 设计设计 参考教材:Verilog 数字系统设计教程 夏宇闻编著计算机科学与技术学院22024/4/15 周一n 课程的基本描述课程名称:Verilog语言设计课程编号:0401CA0参考教材:夏宇闻.Verilog数字系统设计教程.航空航天出版社,2008总 学 时:32学时 理论学时:24学时实验学时:8学时学 分:2学分 开课学期:第四学期前导课程:数字逻辑、C语言程序设计后续课程:数字系统设计、SOPC原理及应用计算机科学与技术学院32024/4/15 周一Verilog 语言设计 第第1 1章章 Verilog V
2、erilog 的基本知识的基本知识第第2 2章章 Verilog Verilog 的结构、数据类型、变量和基本运算符号的结构、数据类型、变量和基本运算符号第第3 3章章 Verilog Verilog 语句语句第第4 4章章 Verilog HDLVerilog HDL的建模方式的建模方式第第5 5章章 有限状态机有限状态机 FSMFSM第第6 6章章 Verilog Verilog 综合设计与仿真综合设计与仿真内容概要内容概要计算机科学与技术学院42024/4/15 周一第1章Verilog的基本知识1.硬件描述语言 Verilog HDL2.采用Verilog的设计流程3.简单的Veril
3、og HDL例子4.Verilog用于模块的测试内容概要内容概要计算机科学与技术学院52024/4/15 周一 硬件描述语言(英文:Hardware Description Language,简称:HDL)是电子系统硬件行为描述、结构描述、数据流描述的语言。利用这种语言,数字电路系统的设计可以从顶层到底层(从抽象到具体)逐层描述自己的设计思想,用一系列分层次的模块来表示极其复杂的数字系统。然后,利用电子设计自动化(EDA)工具,逐层进行仿真验证,再把其中需要变为实际电路的模块组合,经过自动综合工具转换到门级电路网表。接下去,再用专用集成电路 ASIC 或现场可编程门阵列 FPGA 自动布局布线
4、工具,把网表转换为要实现的具体电路布线结构。1.1 硬件描述语言 Verilog HDL计算机科学与技术学院62024/4/15 周一nVerilog HDL语言是基于C语言发展起来的硬件描述语言,于1983年由GDA公司首创。n1995年Verilog HDL语言成为IEEE标准,编号:IEEE Std1364-1995。nVerilog HDL语言具有简捷、高效、易学易用、功能强大等优点,逐步为设计人员所接收和喜爱。nVerilog语言支持的EDA工具较多,适合于寄存器传输级(RTL)和门电路级的描述,其综合过程比VHDL简单,但在高级描述方面不如VHDL。nVHDL比Verilog HD
5、L早几年成为I EEE标准;nVHDL语法/结构比较严格,因而编写出的模块风格比较清晰;nVHDL比较适合由较多的设计人员合作完成的特大型项目。1.1 硬件描述语言 Verilog HDL计算机科学与技术学院72024/4/15 周一 Verilog HDL 公开发表 CADENCE公司 购买Verilog版权 1990 1989 1980s Verilog-XL 诞生 模拟和数字都适用的Verilog标准公开发表 VerilogIEEE1364-1995 标准公开发表 有关VerilogHDL 的全部权利都移交给 OVI(Open Verilog International)1995 200
6、1 1999 Verilog IEEE1364-2001 标准公开发表 1990 Verilog HDL的发展历史1.1 硬件描述语言 Verilog HDL计算机科学与技术学院82024/4/15 周一ASIC ASIC 和和FPGAFPGA设计师可用它来编写可综合的代码。设计师可用它来编写可综合的代码。描述系统的结构,做高层次的仿真。描述系统的结构,做高层次的仿真。验证工程师编写各种层次的测试模块对具体电路设计工程师所设验证工程师编写各种层次的测试模块对具体电路设计工程师所设计的模块进行全面细致的验证。计的模块进行全面细致的验证。库模型的设计:可以用于描述库模型的设计:可以用于描述ASIC
7、 ASIC 和和FPGAFPGA的基本单元(的基本单元(CellCell)部)部件,也可以描述复杂的宏单元(件,也可以描述复杂的宏单元(Macro CellMacro Cell)。)。1.1 硬件描述语言 Verilog HDL计算机科学与技术学院92024/4/15 周一nVerilog HDL模型可以是实际电路的不同级别的抽象。抽象级别可分为五级:系统级(system level):用高级语言结构(如用高级语言结构(如casecase语句)实语句)实现的设计模块外部性能的模型;现的设计模块外部性能的模型;算法级(algorithmic level):用高级语言结构实现的设计算用高级语言结构
8、实现的设计算法模型(写出逻辑表达式);法模型(写出逻辑表达式);RTL级(register transfer level):描述数据在寄存器之间描述数据在寄存器之间流动和如何处理这些数据的模型;流动和如何处理这些数据的模型;门级(gate level):描述逻辑门(如与门、非门、或门、与描述逻辑门(如与门、非门、或门、与非门、三态门等)以及逻辑门之间连接的模型;非门、三态门等)以及逻辑门之间连接的模型;开关级(switch level):描述器件中三极管和储存节点及其描述器件中三极管和储存节点及其之间连接的模型。之间连接的模型。1.1 硬件描述语言 Verilog HDL计算机科学与技术学院1
9、02024/4/15 周一语法结构上的主要特点:形式化地表示电路的行为和结构;借用C语言的结构和语句;可在多个层次上对所设计的系统加以描述,语言对设计规模不加任何限制;具有混合建模能力:一个设计中的各子模块可用不同级别的抽象模型来描述;基本逻辑门、开关级结构模型均内置于语言中,可直接调用;易创建用户定义原语(UDP,User Designed Primitive)。易学易用,功能强.1.1 硬件描述语言 Verilog HDL计算机科学与技术学院112024/4/15 周一传统的设计方法传统的设计方法-电路原理图输入法电路原理图输入法查用器件手册;查用器件手册;选用合适的微处理器和电路芯片;选
10、用合适的微处理器和电路芯片;手工布线调试;手工布线调试;定型;定型;设计复杂的数字系统(几十万门以上)极其困难!设计复杂的数字系统(几十万门以上)极其困难!1.1 硬件描述语言 Verilog HDL计算机科学与技术学院122024/4/15 周一 采用Verilog HDL输入法时,由于Verilog HDL的标准化,可以很容易把完成的设计进行移植到不同厂家的不同芯片。采用Verilog HDL输入法最大的优点是其与工艺无关性。Verilog 的标准化的标准化软核、固核和硬核软核、固核和硬核 IP核是具有知识产权核的集成电路芯核总称,是经过反复验证过的、具有特定功能的宏模块。从IP核的提供方
11、式上,通常将其分为软核、固核和硬核这3类。软核(软核(Soft CoreSoft Core):):用Verilog HDL(Hardware Description Language)描述的功能块。经过验证的、可综合的HDL模型。固核(固核(Firm CoreFirm Core):):完成了综合的功能块。有较大的设计深度,以网表文件的形式提交客户使用。硬核(硬核(Hard CoreHard Core):):它提供设计的最终阶段产品:掩模。1.1 硬件描述语言 Verilog HDL计算机科学与技术学院132024/4/15 周一系统级设计模块A模块B模块C模块A1模块A2模块A3模块B1模块B
12、2模块B3模块C1模块C2Top-Down自顶向下的设计概念自顶向下的设计概念 1.2 采用Verilog的设计流程计算机科学与技术学院142024/4/15 周一电路图设计HDL设计电路功能仿真HDL功能仿真逻辑综合、时序验证优化、布局布线布线后门级仿真工艺文件电路制造版图或FPGA 码流文件设计要求实现1.2 采用Verilog的设计流程计算机科学与技术学院152024/4/15 周一例 8位全加器module adder8(cout,sum,a,b,cin);output cout;/输出端口声明 output 7:0 sum;input 7:0 a,b;/输入端口声明 input ci
13、n;assign cout,sum=a+b+cin;endmodule assign语句:无论右边表达式操作数何时发生变化,右边表达式都会重新计算,并且在指定的延迟后给左边表达式赋值。I/O说明说明端口定义端口定义功能描述功能描述模块名(文件名)整个整个Verilog HDLVerilog HDL程序嵌套在程序嵌套在modulemodule和和endmoduleendmodule声明语句中。声明语句中。每条语句相对每条语句相对modulemodule和和endmoduleendmodule最好缩进最好缩进2 2格或格或4 4格!格!/表示注释部分,一般只占据表示注释部分,一般只占据一一行。对编
14、译不起作用!行。对编译不起作用!单行注释符1.3 简单的Verilog HDL例子计算机科学与技术学院162024/4/15 周一 例 8位计数器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
15、,cin为1,则cout为1endmoduleI/O说明说明端口定义端口定义功能描述功能描述信号类型声明信号类型声明缩减运算符位运算符1.3 简单的Verilog HDL例子计算机科学与技术学院172024/4/15 周一 例 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连续赋值语句连续赋值语句条件运算符条件运算符/*/*/*/内表示注释部分,一般可占据内表示注释部分,一般可占据多多行。行。对编译不起作用!对
16、编译不起作用!多行注释符多行注释符1.3 简单的Verilog HDL例子计算机科学与技术学院182024/4/15 周一 Verilog 用于模块的测试Verilog 还可以用于描述变化的测试信号。描述测试信号的变化和测试过程的模块叫做测试平台(Testbench或Testfixture),它可以对上面介绍的电路模块(无论是行为的或结构的)进行动态的全面测试。通过观测被测试模块的输出信号是否符合要求,可以调试和验证逻辑系统的设计和结构正确与否,并发现问题及时修改。1.4 Verilog HDL用于模块的测试计算机科学与技术学院192024/4/15 周一Verilog模块测试原理图1.4 V
17、erilog HDL用于模块的测试计算机科学与技术学院202024/4/15 周一例 测试include “muxtwo.v”module t;reg ain,bin,select;reg clock;wire outw;initial begin ain=0;bin=0;select=0;clock=0;endalways#50 clock=clock;always(posedge clock)begin ain=$random%2;#3 bin=$random%2;endalways#10000 select=select;muxtwo m(.out(outw),.a(ain),.b(bi
18、n),.sl(select);endmodule1.4 Verilog HDL用于模块的测试计算机科学与技术学院212024/4/15 周一1.Verilog HDL模块的结构2.数据类型、变量3.基本运算符号及表达式4.关键字5.标识符第2章 Verilog的结构、数据类型、变量和基本运算符号内容概要内容概要计算机科学与技术学院222024/4/15 周一nVerilog的基本设计单元是“模块(block)”。nVerilog 模块的结构由在module和endmodule关键词之间的4个主要部分组成:module block(a,b,c,d);input a,b;output c,d;wi
19、re c;wire d;assign c=a|b;assign d=a&b;endmoduleI/O说明说明端口定义端口定义逻辑功能描述逻辑功能描述信号类型声明信号类型声明12342.1 Verilog HDL模块的结构abcd计算机科学与技术学院232024/4/15 周一2.1.1模块的端口定义格式:module 模块名(口模块名(口1,口,口2,);例:例:module mytri(out,in,enable);output out;input in,enable;assign out=enable?In:bz;endmodule调用:调用:nmytri tri_inst(sout,si
20、n,ena);nmytri tri_inst(.out(sout),enable(ena),.in(sin);2.1 Verilog HDL模块的结构计算机科学与技术学院242024/4/15 周一2.12 I/O说明例如:input k1,k2,in0;input 7:0 data;output 3:0 out;inout 15:0 db;2.1 Verilog HDL模块的结构例如:reg2:0 a;wire b,c,d;2.13 信号类型声明信号类型声明计算机科学与技术学院252024/4/15 周一(1)用assign 语句 assign x=(b&c);连续赋值语句连续赋值语句常用于
21、描述组合组合逻辑门元件例化门元件例化模块元件例化模块元件例化例化元件名门元件关键字(2 2)用元件例化(用元件例化(instantiate)and myand3(f,a,b,c);v注注1 1:元件例化即是调用:元件例化即是调用Verilog HDLVerilog HDL提供的元件;提供的元件;v注注2 2:元件例化包括:元件例化包括门门元件例化和元件例化和模块模块元件例化;元件例化;v注注3 3:每每个个实实例例元元件件的的名名字字必必须须唯唯一一!以以避避免免与与其其它调用元件的实例相混淆。它调用元件的实例相混淆。v注注4 4:例化元件名也可以省略!:例化元件名也可以省略!2.1 Veri
22、log HDL模块的结构2.1.4逻辑功能描述逻辑功能描述功能定义(有3种方法实现逻辑功能)计算机科学与技术学院262024/4/15 周一(3)用“always”块语句 always(posedge clk)/每当时钟上升沿到来时执行一遍块内语句 begin if(load)out=data;/同步预置数据 else out=data+1+cin;/加1计数 end结构说明语句结构说明语句v注注1 1:“alwaysalways”块块语语句句常常用用于于描描述述时时序序逻逻辑辑,也也可描述可描述组合组合逻辑。逻辑。v注注2 2:“alwaysalways”块块可可用用多多种种手手段段来来表表
23、达达逻逻辑辑关关系系,如用如用if-elseif-else语句或语句或casecase语句。语句。v注注3 3:“alwaysalways”块块语语句句与与assignassign语语句句是是并并发发执执行行的的,assignassign语语句句一一定定要要放放在在“alwaysalways”块块语语句句之之外外!2.1 Verilog HDL模块的结构计算机科学与技术学院272024/4/15 周一数据类型n数据类型是用来表示数字电路中的数据存储和传送单元。nVerilog HDL中共有19种数据类型;n其中4个最基本的数据类型为:integerinteger型型parameterparam
24、eter型型regreg型型wirewire型型 其其 它它 数数 据据 类类 型型:large型、medium型、scalared型、small型、time型、tri型、tri0型、tri1型、triand型、trior型、trireg型、vectored型、wand型、wor型等2.2数据类型及其常量和变量计算机科学与技术学院282024/4/15 周一2.2.12.2.1常量常量在程序运行过程中,其值不能被改变的量,称为在程序运行过程中,其值不能被改变的量,称为常量常量。数字数字(包括整数,x和z值,负数)parameterparameter常量常量(或称符号常量)2.2数据类型及其常量
25、和变量计算机科学与技术学院292024/4/15 周一整常数的3种表达方式:表 达 方 式说 明 举 例 完整的表达方式完整的表达方式8b11000101或或8 hc5 缺省位宽,则位宽由机器缺省位宽,则位宽由机器系统决定,至少系统决定,至少32位位hc5缺省进制为十进制,位宽缺省进制为十进制,位宽默认为默认为32位位1971.1.数字数字(1 1)整数型常量整数型常量(即(即整常数整常数)的)的4 4种进制表示形式:种进制表示形式:二进制整数(b或B);十进制整数(d或D);十六进制整数(h或H);八进制整数(o或O)。v注:这里位宽指对应二进制数的宽度。注:这里位宽指对应二进制数的宽度。2
26、.2数据类型及其常量和变量计算机科学与技术学院302024/4/15 周一(2)x和z值x表示不定值,z表示高阻值;8b1001xxxx或8 h9x8b1010zzzz或8 haz每个字符代表的二进制数的宽度取决于所用的进制;每个字符代表的二进制数的宽度取决于所用的进制;当当用用二二进进制制表表示示时时,已已标标明明位位宽宽的的数数若若用用x x或或z z表表示示某某些些位位,则则只只有有在在最左边最左边的的x x或或z z具有具有扩展性扩展性!为清晰可见,最好直接写出每一位的值!为清晰可见,最好直接写出每一位的值!例8bzx=8bzzzz_zzzx 例8b1x=8b0000_001x“?”是
27、是z z的另一种表示符号,建议在的另一种表示符号,建议在casecase语句中使用语句中使用?表示高阻态表示高阻态z例 casez(select)4b?1:out=a;4b?1?:out=b;4b?1?:out=c;4b1?:out=d;endcase2.2数据类型及其常量和变量计算机科学与技术学院312024/4/15 周一(3)负数在位宽前加一个减号,即表示负数如:-8d5 /5的补数,=8b11111011减号不能放在位宽与进制之间,也不能放在进制与数字之间!8 d-5 /非法格式v为为提提高高可可读读性性,在在较较长长的的数数字字之之间间可可用用下下划划线线_ _隔隔开开!但但不可以用
28、在不可以用在和和之间。之间。如:如:1616b1010_1011_1100_1111/b1010_1011_1100_1111/合法合法 8 8b b_ _0011_1010/0011_1010/非法非法v当常量未指明位宽时,默认为当常量未指明位宽时,默认为3232位。位。10=3210=32d10=32d10=32b1010b1010-1-1=-32-32d1 d1=3232b1111b11111111 1111=3232hFFFFFFFFhFFFFFFFF2.2数据类型及其常量和变量计算机科学与技术学院322024/4/15 周一 2.parameter2.parameter常量(符号常量
29、)常量(符号常量)用parameter来定义一个标识符,代表一个常量称为符号常量。参数型数据的确认符parameterparameter 参数名参数名1=1=表达式表达式,参数名参数名2=2=表达式表达式,;赋值语句表格式格式格式格式2.2数据类型及其常量和变量计算机科学与技术学院332024/4/15 周一每个赋值语句的右边必须为常数表达式,即只能包含数字或先前定义过的符号常量!parameter addrwidth=16;/合法格式 parameter addrwidth=datawidth*2;/非法格式常用参数来定义延迟时间和变量宽度。可用字符串表示的任何地方,都可以用定义的参数来代替
30、。参数是本地的,其定义只在本模块内有效。在模块或实例引用时,可通过参数传递改变在被引用模块或实例中已定义的参数!2.2数据类型及其常量和变量计算机科学与技术学院342024/4/15 周一模块实例引用时参数的传递方法之一:利用利用defparamdefparam定义参数声明语句!定义参数声明语句!defparam 例化模块名例化模块名.参数名参数名1=常数常数表达式表达式,例化模块名例化模块名.参数名参数名2=常数常数表达式表达式,;格式格式格式格式defparamdefparam语句在编译时可重新定义参数值。语句在编译时可重新定义参数值。可综合性问题:一般情况下是不可综合的。可综合性问题:一
31、般情况下是不可综合的。2.2数据类型及其常量和变量计算机科学与技术学院352024/4/15 周一 例例 module mod(out,ina,inb);parameter cycle=8,real_constant=2.039,file=“/user1/jmdong/design/mem_file.dat”;endmodulemodule test;mod mk(out,ina,inb);/对模块对模块modmod的实例引用的实例引用 defparam mk.cycle=6,mk.file=“./my_mem.dat”;/参数的传递参数的传递 endmodule被引用模块参数名参数名例化模块
32、名例化模块名2.2数据类型及其常量和变量计算机科学与技术学院362024/4/15 周一 例例 module mod(out,ina,inb);parameter cycle=8,real_constant=2.039,file=“/user1/jmdong/design/mem_file.dat”;endmodulemodule test;mod#(5,3.20,“./my_mem.dat”)mk(out,ina,inb);/对模块对模块modmod的实例引用的实例引用 endmodule模块实例引用时参数的传递方法之二:利用特殊符号“#”被引用模块参数的传递参数的传递必须与被引用模块中的参
33、数一一对应!必须与被引用模块中的参数一一对应!建议用此建议用此方法!方法!被引用模块名被引用模块名#(参数参数1,参数参数2,)例化模块名(端口列表)例化模块名(端口列表);格式格式格式格式2.2数据类型及其常量和变量计算机科学与技术学院372024/4/15 周一2.2.2变量n在程序运行过程中,其值可以改变的量,称为变量。n其数据类型有19种,常用的有3种:网络型(网络型(nets typenets type)寄存器型(寄存器型(register type register type)数组(数组(memory typememory type)2.2数据类型及其常量和变量计算机科学与技术学院
34、382024/4/15 周一s型变量型变量定义定义输出始终随输入的变化而变化的变量输出始终随输入的变化而变化的变量。表示结构实体(如门)之间的表示结构实体(如门)之间的物理物理连接。连接。常用常用netsnets型变量:型变量:wire,tri:连线类型(两者功能一致)wor,trior:具有线或特性的连线(两者功能一致)wand,triand:具有线与特性的连线(两者功能一致)tri1,tri0:上拉电阻和下拉电阻supply1,supply0:电源(逻辑1)和地(逻辑0)netsnets型变量型变量不能储存值!不能储存值!2.2数据类型及其常量和变量计算机科学与技术学院392024/4/1
35、5 周一nwire型变量最常用的最常用的netsnets型变量,常用来表示以型变量,常用来表示以assignassign语句赋值的语句赋值的组合组合逻辑信号。逻辑信号。模块中的输入模块中的输入/输出信号类型输出信号类型缺省缺省为为wirewire型。型。可用做任何方程式的输入,或可用做任何方程式的输入,或“assignassign”语句和实例元件的输出。语句和实例元件的输出。wirewire 数据名数据名1,1,数据名数据名2,2,数据名数据名n;n;wiren-1:0wiren-1:0 数据名数据名1,1,数据名数据名2,2,数据名数据名m;m;或或 wiren:1wiren:1 数据名数据
36、名1,1,数据名数据名2,2,数据名数据名m;m;每条总线位宽为n共有m条总线wirewire型向量(总线)型向量(总线)格式格式格式格式2.2数据类型及其常量和变量计算机科学与技术学院402024/4/15 周一n定义对应具有状态保持作用的电路元件(如触发器、寄存器等),常用来表示过程块语句(如initial,always,task,function)内的指定信号。n常用register型变量:regreg:常代表触发器:常代表触发器integerinteger:3232位带符号整数型变量位带符号整数型变量realreal:6464位带符号实数型变量位带符号实数型变量timetime:无符号
37、时间变量:无符号时间变量纯数学的纯数学的抽象描述抽象描述2.register2.register型变量型变量2.2数据类型及其常量和变量计算机科学与技术学院412024/4/15 周一vregisterregister型型变变量量与与netsnets型型变变量量的的根根本本区区别别是是:registerregister型型变变量量需需要要被被明明确确地地赋赋值值,并并且且在在被被重重新新赋赋值值前前一一直直保保持持原值。原值。vregisterregister型型变变量量必必须须通通过过过过程程赋赋值值语语句句赋赋值值!不不能能通通过过assignassign语句赋值!语句赋值!v在过程块内被
38、赋值的每个信号必须定义成在过程块内被赋值的每个信号必须定义成registerregister型!型!2.2数据类型及其常量和变量计算机科学与技术学院422024/4/15 周一nreg型变量定义在过程块中被赋值的信号,往往代表触发器,但不一定就是触发器(也可以是组合逻辑信号)!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型向量 例例 reg4:1 re
39、gc,regd;/reg4:1 regc,regd;/regc,regdregc,regd为为4 4位宽的位宽的regreg型向量型向量regreg型向量(总线)型向量(总线)格式格式格式格式2.2数据类型及其常量和变量计算机科学与技术学院432024/4/15 周一用reg型变量生成组合逻辑举例:module rw1(a,b,out1,out2);input a,b;output out1,out2;reg out1;wire out2;assign out2=a;always(b)out1=b;endmoduleaout2BUFFbINVout1过程赋值语句连续赋值语句电平电平触发Veri
40、log中中reg与与wire的区别的区别regreg型变量既可生成触发器,也可型变量既可生成触发器,也可生成组合逻辑;生成组合逻辑;wire wire型变量只能型变量只能生成组合逻辑。生成组合逻辑。2.2数据类型及其常量和变量计算机科学与技术学院442024/4/15 周一用reg型变量生成触发器举例: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)ab)&(bc)可简写为:可简写
41、为:ab&bcab&bc (a=b)|(x=y)a=b)|(x=y)可简写为:可简写为:a=b|x=y a=b|x=y (!a)|(ab)!a)|(ab)可简写为:可简写为:!a|ab!a|ab为为提提高高程程序序的的可可读读性性,明明确确表表达达各各运运算算符符之之间间的优先关系,建议使用的优先关系,建议使用括号括号!2.3 运算符及表达式计算机科学与技术学院562024/4/15 周一2.3.4关系运算符关系运算符说明=小于小于小于或等于小于或等于大于大于大于或等于大于或等于双双目运算符括号内先运算!括号内先运算!算术运算先运算!算术运算先运算!运运算算结结果果为为1 1位位的的逻逻辑辑值
42、值1 1或或0 0或或x x。关关系系运运算算时时,若若关关系系为为真真,则则返返回回值值为为1 1;若若声声明明的的关关系系为为假假,则则返返回回值值为为0 0;若若某某操操作作数数为为不不定定值值x x,则返回值为,则返回值为x x。所有的关系运算符优先级别相同。所有的关系运算符优先级别相同。关系运算符的优先级关系运算符的优先级低于低于算术运算符。算术运算符。例 asize-1等同于:a(size-1)size-(1a)不等同于:size-1 n An 或或 An A3=4b0001;4b10014=4b0000 4b10011=5b10010;4b10012=6b100100;16=7b
43、1000000v将将操操作作数数右右移移或或左左移移n n位位,相相当于将操作数除以或乘以当于将操作数除以或乘以2 2n n。右移位数不变,右移位数不变,但右移的数据但右移的数据会丢失!会丢失!2.3 运算符及表达式计算机科学与技术学院602024/4/15 周一2.3.7位拼接运算符n位拼接运算符为 n用于将两个或多个信号的某些位拼接起来,表示一个整体信号。n用法:信号信号1 1的某几位,信号的某几位,信号2 2的某几位,的某几位,信号,信号n n的某几位的某几位 例如在进行加法运算时,可将进位输出与和拼接在一起使用。例如在进行加法运算时,可将进位输出与和拼接在一起使用。例1 output
44、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,1b12.3 运算符及表达式计算机科学与技术学院612024/4/15 周一n可用可用重复法重复法简化表达式,如:简化表达式,如:4 4w/w/等同于等同于w,w,w,ww,w,w,wn还可用还可用嵌套方式嵌套方式简化书写,如:简化书写,如:b,b,3 3 a,ba,b /等同于等同于b,b,a,b
45、a,b,a,ba,b,a,ba,b ,也等同于,也等同于b,a,b,a,b,a,bb,a,b,a,b,a,b用于表示重复的表达式必须为常数常数表达式!v在在位位拼拼接接表表达达式式中中,不不允允许许存存在在没没有有指指明明位位数数的的信信号号,必必须须指指明明信信号号的的位位数数;若若未未指指明明,则则默默认认为为3232位位的的二二进制数进制数!v如如1,0=641,0=64h00000001_00000000h00000001_00000000,注意注意1,01,0不等于不等于2 2b10b102.3 运算符及表达式计算机科学与技术学院622024/4/15 周一2.3.8 缩减运算符缩减
46、运算符说明&|,与与与非与非或或或非或非异或异或同或同或单单目运算符运算法则与位运算符类似,但运算过程不同!运算法则与位运算符类似,但运算过程不同!对对单单个个操操作作数数进进行行递递推推运运算算,即即先先将将操操作作数数的的最最低低位位与与第第二二位位进进行行与与、或或、非非运运算算,再再将将运运算算结结果果与与第第三三位位进进行行相相同同的的运运算算,依依次次类类推推,直至最高位直至最高位 。运算结果缩减为运算结果缩减为1 1位二进制数。位二进制数。例例reg3:0 a;b=|a /等效于 b=(a0|a1)|a(2)|a3注意注意缩减运算符缩减运算符和和位运算符位运算符的区别!的区别!2
47、.3 运算符及表达式计算机科学与技术学院632024/4/15 周一2.3.9 条件运算符三三目运算符in1outMUXin0sel信号信号 =条件条件?表达式表达式1 1:表达式表达式2 2条件运算符为条件运算符为?:?:用法:用法:例例 数据选择器数据选择器assign out=sel?in1:in0;当条件为当条件为真真,信号取表,信号取表达式达式1 1的值;为的值;为假假,则,则取表达式取表达式2 2的值。的值。sel=1sel=1时时out=in1out=in1;sel=0sel=0时时out=in0out=in02.3 运算符及表达式计算机科学与技术学院642024/4/15 周一
48、2.3.10 运算符的优先级类 别运 算 符优先级逻辑、位运算符逻辑、位运算符!高高低低算术运算符算术运算符*/%移位运算符移位运算符关系运算符关系运算符 =等式运算符等式运算符=!=!=缩减、位运算符缩减、位运算符&|逻辑运算符逻辑运算符&|条件运算符条件运算符?:?:运算符的优先级运算符的优先级为提高程序的可读性,为提高程序的可读性,建议使用建议使用括号括号来控制来控制运算的优先级!运算的优先级!例(ab)&(bc)(a=b)|(x=y)(!a)|(ab)2.3 运算符及表达式计算机科学与技术学院652024/4/15 周一n关键字事先定义好的确认符,用来组织语言结构;或者用于定义Veri
49、log HDL提供的门元件(如and,not,or,buf)。n用小写字母定义!如always,assign,begin,case,casex,else,end,for,function,if,input,output,repeat,table,time,while,wiren见数字系统设计与Verilog HDL P285附录A。用户程序中的用户程序中的变变量、节点等量、节点等名称名称不能与不能与关键字关键字同同名!名!2.4 关键字计算机科学与技术学院662024/4/15 周一Verilog HDL关键字edgeelseendendcaseendfunctionendprimitivee
50、ndmoduleendspecifyendtableendtaskeventforforceforeverforkfunction highz0highz1 ififnoneinitialinoutinputintegerjoinlargemacromodulemediummodulenandnegedgenor notnotif0notif1nmosoroutputparameterpmosposedgeprimitivepulldownpulluppull0pull1andalwaysassignbeginbufbufif0bufif1casecasexcasezcmosdeassignd