1、2022-6-2计算机科学与技术学院1Verilog语言语言 设计设计 参考教材:Verilog 数字系统设计教程 夏宇闻编著计算机科学与技术学院22022-6-2n 课程的基本描述课程名称:Verilog语言设计课程编号:0401CA0参考教材:夏宇闻. Verilog数字系统设计教程. 航空航天出版社,2008总 学 时:32学时 理论学时:24学时实验学时:8学时学 分:2学分 开课学期:第四学期前导课程:数字逻辑、C语言程序设计后续课程:数字系统设计、 SOPC原理及应用计算机科学与技术学院32022-6-2Verilog 语言设计 第第1 1章章 Verilog Verilog 的基
2、本知识的基本知识第第2 2章章 Verilog Verilog 的结构、数据类型、变量和基本运算符号的结构、数据类型、变量和基本运算符号第第3 3章章 Verilog Verilog 语句语句第第4 4章章 Verilog HDLVerilog HDL的建模方式的建模方式第第5 5章章 有限状态机有限状态机 FSMFSM第第6 6章章 Verilog Verilog 综合设计与仿真综合设计与仿真计算机科学与技术学院42022-6-2第1章Verilog的基本知识1. 硬件描述语言 Verilog HDL2. 采用Verilog的设计流程3. 简单的Verilog HDL例子4. Verilog
3、用于模块的测试计算机科学与技术学院52022-6-2 硬件描述语言(英文: Hardware Description Language ,简称: HDL )是电子系统硬件行为描述、结构描述、数据流描述的语言。利用这种语言,数字电路系统的设计可以从顶层到底层(从抽象到具体)逐层描述自己的设计思想,用一系列分层次的模块来表示极其复杂的数字系统。然后,利用电子设计自动化( EDA )工具,逐层进行仿真验证,再把其中需要变为实际电路的模块组合,经过自动综合工具转换到门级电路网表。接下去,再用专用集成电路 ASIC 或现场可编程门阵列 FPGA 自动布局布线工具,把网表转换为要实现的具体电路布线结构。1
4、.1 硬件描述语言 Verilog HDL计算机科学与技术学院62022-6-2nVerilog HDL语言是基于C语言发展起来的硬件描述语言,于1983年由GDA公司首创。n1995年Verilog HDL语言成为IEEE标准,编号:IEEE Std1364-1995。nVerilog HDL语言具有简捷、高效、易学易用、功能强大等优点,逐步为设计人员所接收和喜爱。nVerilog语言支持的EDA工具较多,适合于寄存器传输级(RTL)和门电路级的描述,其综合过程比VHDL简单,但在高级描述方面不如VHDL。nVHDL比Verilog HDL早几年成为I EEE标准;nVHDL语法/结构比较严
5、格,因而编写出的模块风格比较清晰;nVHDL比较适合由较多的设计人员合作完成的特大型项目。1.1 硬件描述语言 Verilog HDL计算机科学与技术学院72022-6-2 Verilog HDL 公开发表 CADENCE公司 购买Verilog版权 1990 1989 1980s Verilog-XL 诞生 模拟和数字都适用的Verilog标准公开发表 VerilogIEEE1364-1995 标准公开发表 有关VerilogHDL 的全部权利都移交给 OVI ( Open Verilog International) 1995 2001 1999 Verilog IEEE1364-2001
6、 标准公开发表 1990 Verilog HDL的发展历史1.1 硬件描述语言 Verilog HDL计算机科学与技术学院82022-6-21.1 硬件描述语言 Verilog HDL计算机科学与技术学院92022-6-2nVerilog HDL模型可以是实际电路的不同级别的抽象。抽象级别可分为五级:系统级(system level): 用高级语言结构(如用高级语言结构(如casecase语句)实语句)实现的设计模块外部性能的模型;现的设计模块外部性能的模型;算法级(algorithmic level): 用高级语言结构实现的设计算用高级语言结构实现的设计算法模型(写出逻辑表达式);法模型(写
7、出逻辑表达式);RTL级(register transfer level): 描述数据在寄存器之间描述数据在寄存器之间流动和如何处理这些数据的模型;流动和如何处理这些数据的模型;门级(gate level): 描述逻辑门(如与门、非门、或门、与描述逻辑门(如与门、非门、或门、与非门、三态门等)以及逻辑门之间连接的模型;非门、三态门等)以及逻辑门之间连接的模型;开关级(switch level): 描述器件中三极管和储存节点及其描述器件中三极管和储存节点及其之间连接的模型。之间连接的模型。1.1 硬件描述语言 Verilog HDL计算机科学与技术学院102022-6-2语法结构上的主要特点:形
8、式化地表示电路的行为和结构;借用C语言的结构和语句;可在多个层次上对所设计的系统加以描述,语言对设计规模不加任何限制;具有混合建模能力:一个设计中的各子模块可用不同级别的抽象模型来描述;基本逻辑门、开关级结构模型均内置于语言中,可直接调用;易创建用户定义原语(UDP,User Designed Primitive) 。易学易用,功能强.1.1 硬件描述语言 Verilog HDL计算机科学与技术学院112022-6-2传统的设计方法传统的设计方法-电路原理图输入法电路原理图输入法1.1 硬件描述语言 Verilog HDL计算机科学与技术学院122022-6-2 采用Verilog HDL输入
9、法时,由于Verilog HDL的标准化,可以很容易把完成的设计进行移植到不同厂家的不同芯片。采用Verilog HDL输入法最大的优点是其与工艺无关性。 Verilog 的标准化的标准化软核、固核和硬核软核、固核和硬核 IP核是具有知识产权核的集成电路芯核总称,是经过反复验证过的、具有特定功能的宏模块。从IP核的提供方式上,通常将其分为软核、固核和硬核这3类。软核(软核(Soft CoreSoft Core):):用Verilog HDL (Hardware Description Language) 描述的功能块。经过验证的、可综合的HDL模型。固核(固核(Firm CoreFirm Co
10、re):):完成了综合的功能块。有较大的设计深度,以网表文件的形式提交客户使用。硬核(硬核(Hard CoreHard Core):):它提供设计的最终阶段产品:掩模。1.1 硬件描述语言 Verilog HDL计算机科学与技术学院132022-6-2系统级设计模块A模块B模块C模块A1模块A2模块A3模块B1模块B2模块B3模块C1模块C2Top-Down自顶向下的设计概念自顶向下的设计概念 1.2 采用Verilog的设计流程计算机科学与技术学院142022-6-2电路图设计HDL设计电路功能仿真HDL功能仿真逻辑综合、时序验证优化、布局布线布线后门级仿真工艺文件电路制造版图或FPGA 码
11、流文件设计要求实现1.2 采用Verilog的设计流程计算机科学与技术学院152022-6-2例 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语句:无论右边表达式操作数何时发生变化,右边表达式都会重新计算,并且在指定的延迟后给左边表达式赋值。I/O说明说明端口定义端口定义功能描述功能描述模块名(文件名)整个整个Verilog HDLV
12、erilog HDL程序嵌套在程序嵌套在modulemodule和和endmoduleendmodule声明语句中。声明语句中。每条语句相对每条语句相对modulemodule和和endmoduleendmodule最好缩进最好缩进2 2格或格或4 4格!格!/ / 表示注释部分,一般只占据表示注释部分,一般只占据一一行。对编译不起作用!行。对编译不起作用!单行注释符1.3 简单的Verilog HDL例子计算机科学与技术学院162022-6-2 例 8位计数器module counter8 ( out,cout,data,load, cin,clk ); output 7:0 out; ou
13、tput 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说明说明端口定义端口定义功能描述功能描述信号类型声明信号类型声明缩减运算符位运算符1.3 简单的Verilog HDL例子计算机科学与技术学院172022-6-2 例
14、 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连续赋值语句连续赋值语句条件运算符条件运算符/ / * * * * / /内表示注释部分,一般可占据内表示注释部分,一般可占据多多行。行。对编译不起作用!对编译不起作用!多行注释符多行注释符1.3 简单的Verilog HDL例子计算机科学与技术学院182022-6-2 Verilog 用于模块的测试Verilog 还可以用
15、于描述变化的测试信号。描述测试信号的变化和测试过程的模块叫做测试平台(Testbench或Testfixture),它可以对上面介绍的电路模块(无论是行为的或结构的)进行动态的全面测试。通过观测被测试模块的输出信号是否符合要求,可以调试和验证逻辑系统的设计和结构正确与否,并发现问题及时修改。1.4 Verilog HDL用于模块的测试计算机科学与技术学院192022-6-2Verilog模块测试原理图1.4 Verilog HDL用于模块的测试计算机科学与技术学院202022-6-2例 测试include “muxtwo.v”module t; reg ain,bin,select; reg
16、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(bin),.sl(select);endmodule1.4 Verilog HDL用于模块的测试计算机科学与技术学院212022-6-21.Verilog HDL模块的结构2.数
17、据类型、变量3.基本运算符号及表达式4.关键字5.标识符第2章 Verilog的结构、数据类型、变量和基本运算符号计算机科学与技术学院222022-6-2nVerilog的基本设计单元是“模块 (block) ” 。nVerilog 模块的结构由在module和endmodule关键词之间的4个主要部分组成:module block(a,b,c,d); input a,b;output c,d;wire c;wire d;assign c=a|b;assign d=a&b;endmoduleI/O说明说明端口定义端口定义逻辑功能描述逻辑功能描述信号类型声明信号类型声明12342.1 Veril
18、og HDL模块的结构abcd计算机科学与技术学院232022-6-22.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,sin,ena); nmytri tri_inst(.out(sout),enable(ena ),.in(sin);2.1 Verilog HDL模块的结构计算机科学与技术
19、学院242022-6-22.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 信号类型声明信号类型声明计算机科学与技术学院252022-6-2(1)用assign 语句 assign x = ( b & c );连续赋值语句连续赋值语句常用于描述组合组合逻辑门元件例化门元件例化模块元件例化模块元件例化例化元件名门元件关键字(2 2)用元件例化(用元件例化(instantiate)and myan
20、d3( f,a,b,c);v 注注1 1:元件例化即是调用:元件例化即是调用Verilog HDLVerilog HDL提供的元件;提供的元件;v 注注2 2:元件例化包括:元件例化包括门门元件例化和元件例化和模块模块元件例化;元件例化;v 注注3 3:每个实例元件的名字必须:每个实例元件的名字必须唯一唯一!以避免与其!以避免与其它调用元件的实例相混淆。它调用元件的实例相混淆。v 注注4 4:例化元件名也可以省略!:例化元件名也可以省略!2.1 Verilog HDL模块的结构2.1.4逻辑功能描述逻辑功能描述功能定义(有3种方法实现逻辑功能)计算机科学与技术学院262022-6-2(3)用
21、“always” 块语句 always (posedge clk) / 每当时钟上升沿到来时执行一遍块内语句 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
22、 3: “alwaysalways” 块语句与块语句与assignassign语句是并发执行语句是并发执行的,的, assignassign语句一定要放在语句一定要放在“alwaysalways” 块语句之外块语句之外!2.1 Verilog HDL模块的结构计算机科学与技术学院272022-6-2数据类型n数据类型是用来表示数字电路中的数据存储和传送单元。nVerilog HDL中共有19种数据类型;n其中4个最基本的数据类型为:integerinteger型型parameterparameter型型regreg型型wirewire型型 其 它 数 据 类 型 :其 它 数 据 类 型 :l
23、arge型、medium型、 scalared型、 small型、time型、tri型、tri0型、tri1型、triand型、trior型、trireg型、vectored型、wand型、wor型等2.2数据类型及其常量和变量计算机科学与技术学院282022-6-22.2.12.2.1常量常量 在程序运行过程中,其值不能被改变的量,称为在程序运行过程中,其值不能被改变的量,称为常量常量。数字数字(包括整数,x和z值,负数)parameterparameter常量常量(或称符号常量)2.2数据类型及其常量和变量计算机科学与技术学院292022-6-2整常数的3种表达方式:表 达 方 式说 明
24、举 例 完整的表达方式完整的表达方式8b11000101或或8 hc5 缺省位宽,则位宽由机器缺省位宽,则位宽由机器系统决定,至少系统决定,至少32位位hc5缺省进制为十进制,位宽缺省进制为十进制,位宽默认为默认为32位位1971.1.数字数字(1 1)整数型常量整数型常量(即(即整常数整常数)的)的4 4种进制表示形式:种进制表示形式:二进制整数(b或B);十进制整数(d或D);十六进制整数(h或H);八进制整数(o或O)。v注:这里位宽指对应二进制数的宽度。注:这里位宽指对应二进制数的宽度。2.2数据类型及其常量和变量计算机科学与技术学院302022-6-2(2)x和z值x表示不定值,z表
25、示高阻值;8b1001xxxx或8 h9x8b1010zzzz或8 haz每个字符代表的二进制数的宽度取决于所用的进制;每个字符代表的二进制数的宽度取决于所用的进制;当用二进制表示时,已标明位宽的数若用当用二进制表示时,已标明位宽的数若用x x或或z z表示某些位,则只有在表示某些位,则只有在最左边最左边的的x x或或z z具有具有扩展性扩展性!为清晰可见,最好直接写出每一位的值!为清晰可见,最好直接写出每一位的值! 例8bzx = 8bzzzz_zzzx 例8b1x = 8b0000_001x“?”是是z z的另一种表示符号,建议在的另一种表示符号,建议在casecase语句中使用语句中使用
26、?表示高阻态表示高阻态z 例 casez (select) 4b?1: out = a; 4b?1?: out = b; 4b?1?: out = c; 4b1?: out = d; endcase2.2数据类型及其常量和变量计算机科学与技术学院312022-6-2(3)负数在位宽前加一个减号,即表示负数如:-8d5 /5的补数,= 8b11111011减号不能放在位宽与进制之间,也不能放在进制与数字之间!8 d-5 /非法格式v 为提高可读性,在较长的数字之间可用下划线为提高可读性,在较长的数字之间可用下划线_ _隔开!但隔开!但不可以用在不可以用在和和之间。之间。 如:如:1616b101
27、0_1011_1100_1111 /b1010_1011_1100_1111 /合法合法 8 8b b_ _0011_1010 /0011_1010 /非法非法v当常量未指明位宽时,默认为当常量未指明位宽时,默认为3232位。位。10 = 3210 = 32d10 = 32d10 = 32b1010b1010-1 = -32-1 = -32d1 = 32d1 = 32b1111b11111111 = 321111 = 32hFFFFFFFFhFFFFFFFF2.2数据类型及其常量和变量计算机科学与技术学院322022-6-2 2.parameter2.parameter常量(符号常量)常量(符
28、号常量)用parameter来定义一个标识符,代表一个常量称为符号常量。参数型数据的确认符parameterparameter 参数名参数名1 = 1 = 表达式表达式, ,参数名参数名2 = 2 = 表达式表达式, , ;赋值语句表2.2数据类型及其常量和变量计算机科学与技术学院332022-6-2每个赋值语句的右边必须为常数表达式,即只能包含数字或先前定义过的符号常量! parameter addrwidth = 16; /合法格式 parameter addrwidth = datawidth*2; /非法格式常用参数来定义延迟时间和变量宽度。可用字符串表示的任何地方,都可以用定义的参数
29、来代替。参数是本地的,其定义只在本模块内有效。在模块或实例引用时,可通过参数传递改变在被引用模块或实例中已定义的参数!2.2数据类型及其常量和变量计算机科学与技术学院342022-6-2模块实例引用时参数的传递方法之一:利用利用defparamdefparam定义参数声明语句!定义参数声明语句!defparam 例化模块名例化模块名.参数名参数名1 = 常数常数表达式表达式, 例化模块名例化模块名.参数名参数名2 = 常数常数表达式表达式, ; defparamdefparam语句在编译时可重新定义参数值。语句在编译时可重新定义参数值。 可综合性问题:一般情况下是不可综合的。可综合性问题:一般
30、情况下是不可综合的。2.2数据类型及其常量和变量计算机科学与技术学院352022-6-2 例例 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”; / 参数的传递参数的传递 endmo
31、dule被引用模块参数名参数名例化模块名例化模块名2.2数据类型及其常量和变量计算机科学与技术学院362022-6-2 例例 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模块实例引用时参数的传递方法之
32、二:利用特殊符号“# #” 被引用模块参数的传递参数的传递必须与被引用模块中的参数一一对应!必须与被引用模块中的参数一一对应!建议用此建议用此方法!方法!被引用模块名被引用模块名 # # (参数参数1,参数参数2,)例化模块名(端口列表)例化模块名(端口列表);2.2数据类型及其常量和变量计算机科学与技术学院372022-6-22.2.2变量n在程序运行过程中,其值可以改变的量,称为变量。n其数据类型有19种,常用的有3种:网络型(网络型(nets typenets type)寄存器型(寄存器型(register type register type )数组(数组(memory typemem
33、ory type)2.2数据类型及其常量和变量计算机科学与技术学院382022-6-21. nets1. nets型变量型变量 定义定义输出始终随输入的变化而变化的变量输出始终随输入的变化而变化的变量。 表示结构实体(如门)之间的表示结构实体(如门)之间的物理物理连接。连接。常用常用netsnets型变量:型变量:wire,tri:连线类型(两者功能一致)wor,trior:具有线或特性的连线(两者功能一致)wand,triand:具有线与特性的连线(两者功能一致)tri1,tri0:上拉电阻和下拉电阻supply1,supply0:电源(逻辑1)和地(逻辑0)netsnets型变量型变量不能
34、储存值!不能储存值!2.2数据类型及其常量和变量计算机科学与技术学院392022-6-2nwire型变量最常用的最常用的netsnets型变量,常用来表示以型变量,常用来表示以assignassign语句赋值的语句赋值的组合组合逻辑信号。逻辑信号。模块中的输入模块中的输入/ /输出信号类型输出信号类型缺省缺省为为wirewire型。型。可用做任何方程式的输入,或可用做任何方程式的输入,或“assignassign”语句和实例元件的输出。语句和实例元件的输出。wirewire 数据名数据名1,1,数据名数据名2, 2, , ,数据名数据名n;n;wiren-1:0wiren-1:0 数据名数据名
35、1,1,数据名数据名2, 2, , ,数据名数据名m;m;或或 wiren:1wiren:1 数据名数据名1,1,数据名数据名2, 2, , ,数据名数据名m;m;每条总线位宽为n共有m条总线wirewire型向量(总线)型向量(总线)2.2数据类型及其常量和变量计算机科学与技术学院402022-6-2n定义对应具有状态保持作用的电路元件(如触发器、寄存器等),常用来表示过程块语句(如initial,always,task,function)内的指定信号 。n常用register型变量:regreg:常代表触发器:常代表触发器integerinteger:3232位带符号整数型变量位带符号整数
36、型变量realreal:6464位带符号实数型变量位带符号实数型变量timetime:无符号时间变量:无符号时间变量纯数学的纯数学的抽象描述抽象描述2. register2. register型变量型变量2.2数据类型及其常量和变量计算机科学与技术学院412022-6-2vregisterregister型变量与型变量与netsnets型变量的根本区别是:型变量的根本区别是: registerregister型型变量需要被明确地赋值,并且在被重新赋值前一直保持变量需要被明确地赋值,并且在被重新赋值前一直保持原值。原值。vregisterregister型变量必须通过型变量必须通过过程过程赋值语
37、句赋值!不能通过赋值语句赋值!不能通过assignassign语句赋值!语句赋值!v在过程块内被赋值的每个信号必须定义成在过程块内被赋值的每个信号必须定义成registerregister型!型!2.2数据类型及其常量和变量计算机科学与技术学院422022-6-2nreg型变量定义在过程块中被赋值的信号,往往代表触发器,但不一定就是触发器(也可以是组合逻辑信号)!regreg 数据名数据名1,1,数据名数据名2, 2, , ,数据名数据名n;n;regn-1:0regn-1:0 数据名数据名1,1,数据名数据名2, 2, , ,数据名数据名m;m;或或 regn:1regn:1 数据名数据名1
38、,1,数据名数据名2, 2, , ,数据名数据名m;m;每个向量位宽为n共有m个reg型向量 例例 reg4:1 regc,regd; / reg4:1 regc,regd; /regc,regdregc,regd为为4 4位宽的位宽的regreg型向量型向量regreg型向量(总线)型向量(总线)2.2数据类型及其常量和变量计算机科学与技术学院432022-6-2用reg型变量生成组合逻辑举例:module rw1( a, b, out1, out2 ) ; input a, b; output out1, out2; reg out1; wire out2; assign out2 = a
39、 ; always (b) out1 = b; endmoduleaout2BUFFbINVout1过程赋值语句连续赋值语句电平电平触发Verilog中中reg与与wire的区别的区别regreg型变量既可生成触发器,也可型变量既可生成触发器,也可生成组合逻辑;生成组合逻辑; wire wire型变量只能型变量只能生成组合逻辑。生成组合逻辑。2.2数据类型及其常量和变量计算机科学与技术学院442022-6-2用reg型变量生成触发器举例:module rw2( clk, d, out1, out2 ); input clk, d; output out1, out2; reg out1; wi
40、re out2; assign out2 = d & out1 ; always (posedge clk) begin out1 b)&(bc) ab)&(bc) 可简写为:可简写为: 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 运算符及表达式计算机科学与技术学
41、院562022-6-22.3.4关系运算符关系运算符说明= 小于小于小于或等于小于或等于大于大于大于或等于大于或等于双双目运算符括号内先运算!括号内先运算!算术运算先运算!算术运算先运算! 运算结果为运算结果为1 1位的逻辑值位的逻辑值1 1或或0 0或或x x。关系运算时,若关系为关系运算时,若关系为真真,则返回值为则返回值为1 1;若声明的关系为;若声明的关系为假假,则返回值为,则返回值为0 0;若某操作数为;若某操作数为不不定值定值x x,则返回值为,则返回值为x x。所有的关系运算符优先级别相同。所有的关系运算符优先级别相同。关系运算符的优先级关系运算符的优先级低于低于算术运算符。算术
42、运算符。 例 asize - 1等同于: a(size - 1) size -(1a)不等同于: size-1 n An 或或 An A3 = 4b0001; 4b10014 = 4b0000 4b10011 = 5b10010; 4b10012 = 6b100100; 16 = 7b1000000v将操作数右移或左移将操作数右移或左移n n位,相位,相当于将操作数除以或乘以当于将操作数除以或乘以2 2n n。右移位数不变,右移位数不变,但右移的数据但右移的数据会丢失!会丢失!2.3 运算符及表达式计算机科学与技术学院602022-6-22.3.7位拼接运算符n位拼接运算符为 n用于将两个或多
43、个信号的某些位拼接起来,表示一个整体信号。n用法: 信号信号1 1的某几位,信号的某几位,信号2 2的某几位,的某几位,信号,信号n n的某几位的某几位 例如在进行加法运算时,可将进位输出与和拼接在一起使用。例如在进行加法运算时,可将进位输出与和拼接在一起使用。例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,1b
44、0,1b12.3 运算符及表达式计算机科学与技术学院612022-6-2n可用可用重复法重复法简化表达式,如:简化表达式,如: 4 4w /w /等同于等同于w,w,w,ww,w,w,wn还可用还可用嵌套方式嵌套方式简化书写,如:简化书写,如: b,b, 3 3 a,ba,b / /等同于等同于b,b, a,ba,b , , a,ba,b , , a,ba,b ,也等同于,也等同于b,a,b,a,b,a,bb,a,b,a,b,a,b用于表示重复的表达式必须为常数常数表达式!v在位拼接表达式中,不允许存在没有指明位数的信号在位拼接表达式中,不允许存在没有指明位数的信号,必须指明信号的位数;若未指
45、明,则,必须指明信号的位数;若未指明,则默认为默认为3232位的位的二进制数二进制数!v如如1,0 = 641,0 = 64h00000001_00000000h00000001_00000000, 注意注意1,01,0不等于不等于2 2b10b102.3 运算符及表达式计算机科学与技术学院622022-6-22.3.8 缩减运算符缩减运算符说明& &| |,与与与非与非或或或非或非异或异或同或同或单单目运算符运算法则与位运算符类似,但运算过程不同!运算法则与位运算符类似,但运算过程不同!对对单单个操作数进行个操作数进行递推递推运算运算, ,即先将操作数的最低位与第二位进行与即先将操作数的最低
46、位与第二位进行与、或、非运算,再将运算结果与第三位进行相同的运算,依次类推、或、非运算,再将运算结果与第三位进行相同的运算,依次类推,直至最高位,直至最高位 。运算结果缩减为运算结果缩减为1 1位二进制数。位二进制数。例例reg3:0 a; b=|a /等效于 b =( (a0 | a1) | a(2) | a3注意注意缩减运算符缩减运算符和和位运算符位运算符的区别!的区别!2.3 运算符及表达式计算机科学与技术学院632022-6-22.3.9 条件运算符三三目运算符in1outMUXin0sel信号信号 = = 条件条件?表达式表达式1 1:表达式表达式2 2 条件运算符为条件运算符为?:
47、?: 用法:用法: 例例 数据选择器数据选择器assign out = sel? in1:in0;当条件为当条件为真真,信号取表,信号取表达式达式1 1的值;为的值;为假假,则,则取表达式取表达式2 2的值。的值。sel=1sel=1时时out=in1out=in1; sel=0sel=0时时out=in0out=in02.3 运算符及表达式计算机科学与技术学院642022-6-22.3.10 运算符的优先级类 别运 算 符优先级逻辑、位运算符逻辑、位运算符! 高高低低算术运算符算术运算符* / % 移位运算符移位运算符关系运算符关系运算符 =等式运算符等式运算符= = ! = = !=缩减、
48、位运算符缩减、位运算符& & | |逻辑运算符逻辑运算符&|条件运算符条件运算符?:?:运算符的优先级运算符的优先级为提高程序的可读性,为提高程序的可读性,建议使用建议使用括号括号来控制来控制运算的优先级!运算的优先级!例(ab)&(bc) (a= =b)|(x= = y) (!a)|(ab)2.3 运算符及表达式计算机科学与技术学院652022-6-2n关键字事先定义好的确认符,用来组织语言结构;或者用于定义Verilog HDL提供的门元件(如and,not,or,buf)。n用小写字母定义! 如always,assign,begin,case,casex,else,end,for,fun
49、ction,if,input,output,repeat,table,time,while,wiren见数字系统设计与Verilog HDL P285附录A。用户程序中的用户程序中的变变量、节点等量、节点等名称名称不能与不能与关键字关键字同同名!名!2.4 关键字计算机科学与技术学院662022-6-2Verilog HDL关键字edgeelseendendcaseendfunctionendprimitiveendmoduleendspecifyendtableendtaskeventforforceforeverforkfunction highz0highz1 ififnoneiniti
50、alinoutinputintegerjoinlargemacromodulemediummodulenandnegedgenor notnotif0notif1nmosoroutputparameterpmosposedgeprimitivepulldownpulluppull0pull1andalwaysassignbeginbufbufif0bufif1casecasexcasezcmosdeassigndefaultdefparamdisable2.4 关键字计算机科学与技术学院672022-6-2tri0tri1 vectoredwaitwandweak0weak1whilewire