2020/4/7计算机科学与技术学院1Verilog语言设计参考教材:《Verilog数字系统设计》教程夏宇闻编著计算机科学与技术学院22020/4/7课程的基本描述课程名称:Verilog语言设计课程编号:0401CA0参考教材:夏宇闻.Verilog数字系统设计教程.航空航天出版社,2008总学时:32学时理论学时:24学时实验学时:8学时学分:2学分开课学期:第四学期前导课程:数字逻辑、C语言程序设计后续课程:数字系统设计、SOPC原理及应用计算机科学与技术学院32020/4/7Verilog语言设计第1章Verilog的基本知识第2章Verilog的结构、数据类型、变量和基本运算符号第3章Verilog语句第4章VerilogHDL的建模方式第5章有限状态机FSM第6章Verilog综合设计与仿真内容概要计算机科学与技术学院42020/4/7第1章Verilog的基本知识1.硬件描述语言VerilogHDL2.采用Verilog的设计流程3.简单的VerilogHDL例子4.Verilog用于模块的测试内容概要计算机科学与技术学院52020/4/7硬件描述语言(英文:HardwareDescriptionLanguage,简称:HDL)是电子系统硬件行为描述、结构描述、数据流描述的语言。利用这种语言,数字电路系统的设计可以从顶层到底层(从抽象到具体)逐层描述自己的设计思想,用一系列分层次的模块来表示极其复杂的数字系统。然后,利用电子设计自动化(EDA)工具,逐层进行仿真验证,再把其中需要变为实际电路的模块组合,经过自动综合工具转换到门级电路网表。接下去,再用专用集成电路ASIC或现场可编程门阵列FPGA自动布局布线工具,把网表转换为要实现的具体电路布线结构。1.1硬件描述语言VerilogHDL计算机科学与技术学院62020/4/7VerilogHDL语言是基于C语言发展起来的硬件描述语言,于1983年由GDA公司首创。1995年VerilogHDL语言成为IEEE标准,编号:IEEEStd1364-1995。VerilogHDL语言具有简捷、高效、易学易用、功能强大等优点,逐步为设计人员所接收和喜爱。Verilog语言支持的EDA工具较多,适合于寄存器传输级(RTL)和门电路级的描述,其综合过程比VHDL简单,但在高级描述方面不如VHDL。VHDL比VerilogHDL早几年成为IEEE标准;VHDL语法/结构比较严格,因而编写出的模块风格比较清晰;VHDL比较适合由较多的设计人员合作完成的特大型项目。1.1硬件描述语言VerilogHDL计算机科学与技术学院72020/4/7VerilogHDL公开发表CADENCE公司购买Verilog版权199019891980’sVerilog-XL诞生模拟和数字都适用的Verilog标准公开发表VerilogIEEE1364-1995标准公开发表有关VerilogHDL的全部权利都移交给OVI(OpenVerilogInternational)199520011999VerilogIEEE1364-2001标准公开发表1990VerilogHDL的发展历史1.1硬件描述语言VerilogHDL计算机科学与技术学院82020/4/7ASIC和FPGA设计师可用它来编写可综合的代码。描述系统的结构,做高层次的仿真。验证工程师编写各种层次的测试模块对具体电路设计工程师所设计的模块进行全面细致的验证。库模型的设计:可以用于描述ASIC和FPGA的基本单元(Cell)部件,也可以描述复杂的宏单元(MacroCell)。1.1硬件描述语言VerilogHDL计算机科学与技术学院92020/4/7VerilogHDL模型可以是实际电路的不同级别的抽象。抽象级别可分为五级:系统级(systemlevel):用高级语言结构(如case语句)实现的设计模块外部性能的模型;算法级(algorithmiclevel):用高级语言结构实现的设计算法模型(写出逻辑表达式);RTL级(registertransferlevel):描述数据在寄存器之间流动和如何处理这些数据的模型;门级(gatelevel):描述逻辑门(如与门、非门、或门、与非门、三态门等)以及逻辑门之间连接的模型;开关级(switchlevel):描述器件中三极管和储存节点及其之间连接的模型。1.1硬件描述语言VerilogHDL计算机科学与技术学院102020/4/7语法结构上的主要特点:形式化地表示电路的行为和结构;借用C语言的结构和语句;可在多个层次上对所设计的系统加以描述,语言对设计规模不加任何限制;具有混合建模能力:一个设计中的各子模块可用不同级别的抽象模型来描述;基本逻辑门、开关级结构模型均内置于语言中,可直接调用;易创建用户定义原语(UDP,UserDesignedPrimitive)。易学易用,功能强.1.1硬件描述语言VerilogHDL计算机科学与技术学院112020/4/7传统的设计方法-电路原理图输入法查用器件手册;选用合适的微处理器和电路芯片;手工布线调试;定型;设计复杂的数字系统(几十万门以上)极其困难!1.1硬件描述语言VerilogHDL计算机科学与技术学院122020/4/7采用VerilogHDL输入法时,由于VerilogHDL的标准化,可以很容易把完成的设计进行移植到不同厂家的不同芯片。采用VerilogHDL输入法最大的优点是其与工艺无关性。Verilog的标准化软核、固核和硬核IP核是具有知识产权核的集成电路芯核总称,是经过反复验证过的、具有特定功能的宏模块。从IP核的提供方式上,通常将其分为软核、固核和硬核这3类。软核(SoftCore):用VerilogHDL(HardwareDescriptionLanguage)描述的功能块。经过验证的、可综合的HDL模型。固核(FirmCore):完成了综合的功能块。有较大的设计深度,以网表文件的形式提交客户使用。硬核(HardCore):它提供设计的最终阶段产品:掩模。1.1硬件描述语言VerilogHDL计算机科学与技术学院132020/4/7系统级设计模块A模块B模块C模块A1模块A2模块A3模块B1模块B2模块B3模块C1模块C2Top-Down—自顶向下的设计概念1.2采用Verilog的设计流程计算机科学与技术学院142020/4/7电路图设计HDL设计电路功能仿真HDL功能仿真逻辑综合、时序验证优化、布局布线布线后门级仿真工艺文件电路制造版图或FPGA码流文件设计要求实现1.2采用Verilog的设计流程计算机科学与技术学院152020/4/7[例]8位全加器moduleadder8(cout,sum,a,b,cin);outputcout;//输出端口声明output[7:0]sum;input[7:0]a,b;//输入端口声明inputcin;assign{cout,sum}=a+b+cin;endmoduleassign语句:无论右边表达式操作数何时发生变化,右边表达式都会重新计算,并且在指定的延迟后给左边表达式赋值。I/O说明端口定义功能描述模块名(文件名)整个VerilogHDL程序嵌套在module和endmodule声明语句中。每条语句相对module和endmodule最好缩进2格或4格!//……表示注释部分,一般只占据一行。对编译不起作用!单行注释符1.3简单的VerilogHDL例子计算机科学与技术学院162020/4/7[例]8位计数器modulecounter8(out,cout,data,load,cin,clk);output[7:0]out;outputcout;input[7:0]data;inputload,cin,clk;reg[7:0]out;always@(posedgeclk)beginif(load)out=data;//同步预置数据elseout=out+1+cin;//加1计数endassigncout=&out&cin;//若out为8‘hFF,cin为1,则cout为1endmoduleI/O说明端口定义功能描述信号类型声明缩减运算符位运算符1.3简单的VerilogHDL例子计算机科学与技术学院172020/4/7[例]2位比较器modulecompare2(equal,a,b);outputequal;input[1:0]a,b;assignequal=(a==b)?1:0;/*如果a等于b,则equal为1,否则为0*/endmodule连续赋值语句条件运算符/*……*/内表示注释部分,一般可占据多行。对编译不起作用!多行注释符1.3简单的VerilogHDL例子计算机科学与技术学院182020/4/7Verilog用于模块的测试Verilog还可以用于描述变化的测试信号。描述测试信号的变化和测试过程的模块叫做测试平台(Testbench或Testfixture),它可以对上面介绍的电路模块(无论是行为的或结构的)进行动态的全面测试。通过观测被测试模块的输出信号是否符合要求,可以调试和验证逻辑系统的设计和结构正确与否,并发现问题及时修改。1.4VerilogHDL用于模块的测试计算机科学与技术学院192020/4/7Verilog模块测试原理图1.4VerilogHDL用于模块的测试计算机科学与技术学院202020/4/7例测试`include“muxtwo.v”modulet;regain,bin,select;regclock;wireoutw;initialbeginain=0;bin=0;select=0;clock=0;endalways#50clock=~clock;always@(posedgeclock)beginain={$random}%2;#3bin={$random}%2;endalways#10000select=~select;muxtwom(.out(outw),.a(ain),.b(bin),.sl(select));endmodule1.4VerilogHDL用于模块的测试计算机科学与技术学院212020/4/71.VerilogHDL模块的结构2.数据类型、变量3.基本运算符号及表达式4.关键字5.标识符第2章Verilog的结构、数据类型、变量和基本运算符号内容概要计算机科学与技术学院222020/4/7Verilog的基本设计单元是“模块(block)”。Verilog模块的结构由在module和endmodule关键词之间的4个主要部分组成:moduleblock(a,b,c,d);inputa,b;outputc,d;wirec;wired;assignc=a|b;assignd=a&b;endmoduleI/O说明端口定义逻辑功能描述信号类型声明12342.1VerilogHDL模块的结构abcd计算机科学与技术学院232020/4/72.1.1模块的端口定义格式:module模块名(口1,口2,……);例:modulemytri(out,in,enable);outputout;inputin,enable;assignout=enable?In:’bz;endmodule调用:mytritri_inst(sout,sin,ena);mytritri_inst(.out(sout),enable(ena),.in(sin));2.1VerilogHDL模块的结构计算机科学与技术学院242020/4/72.12I/O说明例如:inputk1,k2,in0;input[7:0]data;output[3:0]out;inout[15:0]db;2.1VerilogHDL模块的结构例如:reg[2:0]a;wireb,c,d;2.13信号类型声明计算机科学与技术学院252020/4/7(1)用assign语句assignx=(b&~c);连续赋