首页 Verilog HDL 华为入门教程.pdf

Verilog HDL 华为入门教程.pdf

Verilog HDL 华为入门教程.pdf

上传者: wanghao198901 2013-12-08 评分1 评论0 下载0 收藏0 阅读量621 暂无简介 简介 举报

简介:本文档为《Verilog HDL 华为入门教程pdf》,可适用于硬件技术领域,主题内容包含共页资源类别:HDL语言内部公开密级版本文档编号文档中心VerilogHDL入门教程(仅供内部使用)yyyymmdd日期:批准:日期:中研基础批准:符等。

共页资源类别:HDL语言内部公开密级版本文档编号文档中心VerilogHDL入门教程(仅供内部使用)yyyymmdd日期:批准:日期:中研基础批准:日期:中研基础拟制:版权所有不得复制修订记录初稿完成作者描述修订版本日期绝密请输入文档编号VerilogHDL入门教程第页共页版权所有侵权必究目录结构建模case语句条件语句连接运算符条件运算符按位逻辑运算符逻辑运算符关系运算符算术运算符运算符和表达式寄存器类型线网类型数据类型常量值集合数字值集合格式注释书写规范建议关键词定义标识符VerilogHDL基本语法混合设计描述行为描述方式数据流描述方式结构化描述方式三种建模方式时延模块语法模块的结构简单事例模块VerilogHDL建模概述能力历史VerilogHDL简介设计方法学硬件描述语言数字电路设计方法HDL设计方法学简介前言绝密请输入文档编号VerilogHDL入门教程第页共页版权所有侵权必究附录AVerilog保留字习题其他方面行为建模具体实例过程赋值语句顺序语句块简介行为建模数据流建模具体实例阻塞赋值语句连续赋值语句数据流建模结构化建模具体实例实例化语句模块端口模块定义结构绝密请输入文档编号VerilogHDL入门教程第页共页版权所有侵权必究VerilogHDL入门教程关键词:摘要:本文主要介绍了VerilogHDL语言的一些基本知识目的是使初学者能够迅速掌握HDL设计方法初步了解并掌握VerilogHDL语言的基本要素能够读懂简单的设计代码并能够进行一些简单设计的VerilogHDL建模。缩略语清单:对本文所用缩略语进行说明要求提供每个缩略语的英文全名和中文解释。参考资料清单:请在表格中罗列本文档所引用的有关参考文献名称、作者、标题、编号、发布日期和出版单位等基本信息。机械工业出版社图书馆JBhasker著徐振林等译VerilogHDL硬件描述语言苏文彪AMBITDesignSystemQuisckReferenceforVerilogHDL出版单位(若不为本公司发布的文献请填写此列)查阅地点或渠道发布日期编号作者名称参考资料清单前言当前业界的硬件描述语言中主要有VHDL和VerilogHDL。公司根据本身ASIC设计现有的特点、现状主推VerilogHDL语言逐渐淡化VHDL语言从而统一公司的ASICFPGA设计平台简化流程。为使新员工在上岗培训中能迅速掌握ASICFPGA设计的基本技能中研基础部ASIC设计中心开发了一系列的培训教材。该套HDL语言培训系列包括如下教程:《VerilogHDL入门教程》《VerilogHDL代码书写规范》《Verilog基本电路设计指导书》《TestBench编码技术》系列教材完成得较匆忙本身尚有许多不完善的地方同时可能还需要其他知识方面的培训但没有形成培训教材希望大家在培训过程中多提宝贵意见以便我们对它进行修改和完善。HDL设计方法学简介绝密请输入文档编号VerilogHDL入门教程第页共页版权所有侵权必究数字电路设计方法当前的数字电路设计从层次上分可分成以下几个层次:算法级设计:利用高级语言如C语言及其他一些系统分析工具(如MATLAB)对设计从系统的算法级方式进行描述。算法级不需要包含时序信息。RTL级设计:用数据流在寄存器间传输的模式来对设计进行描述。门级:用逻辑级的与、或、非门等门级之间的连接对设计进行描述。开关级:用晶体管和寄存器及他们之间的连线关系来对设计进行描述。算法级是高级的建模一般对特大型设计或有较复杂的算法时使用特别是通讯方面的一些系统通过算法级的建模来保证设计的系统性能。在算法级通过后再把算法级用RTL级进行描述。门级一般对小型设计可适合。开关级一般是在版图级进行。硬件描述语言在传统的设计方法中当设计工程师设计一个新的硬件、一个新的数字电路或一个数字逻辑系统时他或许在CAE工作站上做设计为了能在CAE工作站做设计设计者必须为设计画一张线路图通常地线路图是由表示信号的线和表示基本设计单元的符号连在一起组成线路图符号取自设计者用于构造线路图的零件库。若设计者是用标准逻辑器件(如系列等)做板极设计线路图那么在线路图中符号取自标准逻辑零件符号库若设计是进行ASIC设计则这些符号取自ASIC库的可用的专用宏单元。这就是传统的原理图设计方法。对线路图的逻辑优化设计者或许利用一些EDA工具或者人工地进行逻辑的布尔函数逻辑优化。为了能够对设计进行验证设计者必须通过搭个硬件平台(如电路板)对设计进行验证。随着电子设计技术的飞速发展设计的集成度、复杂度越来越高传统的设计方法已满足不了设计的要求因此要求能够借助当今先进的EDA工具使用一种描述语言对数字电路和数字逻辑系统能够进行形式化的描述这就是硬件描述语言。硬件描述语言HDL(HardwareDescriptionLanguage)是一种用形式化方法来描述数字电路和数字逻辑系统的语言。数字逻辑电路设计者可利用这种语言来描述自己的设计思想然后利用EDA工具进行仿真再自动综合到门级电路最后用ASIC或FPGA实现其功能。举个例子在传统的设计方法中对输入的与门我们可能需到标准器件库中调个系列的器件出来但在硬件描述语言中“”就是一个与门的形式描述“C=AB”就是一个输入与门的描述。而“and”就是一个与门器件。硬件描述语言发展至今已有二十多年历史当今业界的标准中(IEEE标准)主要有VHDL和VerilogHDL这两种硬件描述语言。设计方法学当前的ASIC设计有多种设计方法但一般地采用自顶向下的设计方法。随着技术的发展一个芯片上往往集成了几十万到几百万个器件传统的自底向上的设计方法已不太现实。因此一个设计往往从系统级设计开始把系统划分成几个大的基本的功能模块每个功能模块再按一定的规则分成下一个层次的基本单元如此一直划分下去。自顶向下的设计方法可用下面的树状结构表示:绝密请输入文档编号VerilogHDL入门教程第页共页版权所有侵权必究系统级的顶层模块模块A模块B模块C模块B模块B模块C图TOPDOWN设计思想通过自顶向下的设计方法可实现设计的结构化使一个复杂的系统设计可由多个设计者分工合作还可以实现层次化的管理。VerilogHDL简介VerilogHDL是一种硬件描述语言用于从算法级、RTL级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可介于简单的门级和完整的电子数字系统之间。数字系统可按层次描述。历史VerilogHDL语言最初是于年由GatewayDesignAutomation公司为其模拟器产品开发的硬件建模语言。那时它只是一种专用语言。由于他们的模拟、仿真器产品的广泛使用VerilogHDL作为一种便于使用且实用的语言逐渐为众多设计者所接受。在一次努力增加语言普及性的活动中VerilogHDL语言于年被推向公众领域。OpenVerilogInternational(OVI)是促进Verilog发展的国际性组织。年OVI决定致力于推广VerilogOVI标准成为IEEE标准。这一努力最后获得成功Verilog语言于年成为IEEE标准称为IEEEStd-。完整的标准在Verilog硬件描述语言参考手册中有详细描述。能力对初学者可先大致了解一下VerilogHDL所提供的能力掌握VerilogHDL语言的核心子集就可以了。概述VerilogHDL语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。所有这些都使用同一种建模语言。此外VerilogHDL语言提供了编程语言接口通过该接口可以在模拟、验证期间从设计外部访问设计包括模拟的具体控制和运行。VerilogHDL语言不仅定义了语法而且对每个语法结构都定义了清晰的模拟、仿真语义。因此用这种语言编写的模型能够使用Verilog仿真器进行验证。语言从C编程语言中继承了多种操作符和结构。VerilogHDL提供了扩展的建模能力其中许多扩展最初很难理解。但是Verilog绝密请输入文档编号VerilogHDL入门教程第页共页版权所有侵权必究HDL语言的核心子集非常易于学习和使用这对大多数建模应用来说已经足够。当然,完整的硬件描述语言足以对从最复杂的芯片到完整的电子系统进行描述。主要功能listy基本逻辑门例如and、or和nand等都内置在语言中。y开关级基本结构模型例如pmos和nmos等也被内置在语言中。y可采用三种不同方式或混合方式对设计建模。这些方式包括:行为描述方式使用过程化结构建模数据流方式使用连续赋值语句方式建模结构化方式使用门和模块实例语句描述建模。yVerilogHDL中有两类数据类型:线网数据类型和寄存器数据类型。线网类型表示构件间的物理连线而寄存器类型表示抽象的数据存储元件。y能够描述层次设计可使用模块实例结构描述任何层次。y设计的规模可以是任意的语言不对设计的规模(大小)施加任何限制。yVerilogHDL不再是某些公司的专有语言而是IEEE标准。y人和机器都可阅读Verilog语言因此它可作为EDA的工具和设计者之间的交互语言。y设计能够在多个层次上加以描述从开关级、门级、寄存器传送级(RTL)到算法级。y能够使用内置开关级原语在开关级对设计完整建模。y同一语言可用于生成模拟激励和指定测试的验证约束条件例如输入值的指定。yVerilogHDL能够监控模拟验证的执行即模拟验证执行过程中设计的值能够被监控和显示。这些值也能够用于与期望值比较在不匹配的情况下打印报告消息。y在行为级描述中VerilogHDL不仅能够在RTL级上进行设计描述而且能够在体系结构级描述及其算法级行为上进行设计描述。y能够使用门和模块实例化语句在结构级进行结构描述。y对高级编程语言结构例如条件语句、情况语句和循环语句语言中都可以使用。下图显示了VerilogHDL的混合方式建模能力即在一个设计中每个模块均可以在不同设计层次上建模。开关算法RTL门门开关图混合设计层次建模示意图绝密请输入文档编号VerilogHDL入门教程第页共页版权所有侵权必究VerilogHDL建模概述在数字电路设计中数字电路可简单归纳为两种要素:线和器件。线是器件管脚之间的物理连线器件也可简单归纳为组合逻辑器件(如与或非门等)和时序逻辑器件(如寄存器、锁存器、RAM等)。一个数字系统(硬件)就是多个器件通过一定的连线关系组合在一块的。因此VerilogHDL的建模实际上就是如何使用HDL语言对数字电路的两种基本要素的特性及相互之间的关系进行描述的过程。下面通过一些实例以便对VerilogHDL的设计建模有个大概的印象。模块模块(module)是Verilog的基本描述单位用于描述某个设计的功能或结构及与其他模块通信的外部端口。模块在概念上可等同一个器件就如我们调用通用器件(与门、三态门等)或通用宏单元(计数器、ALU、CPU)等因此一个模块可在另一个模块中调用。一个电路设计可由多个模块组合而成因此一个模块的设计只是一个系统设计中的某个层次设计模块设计可采用多种建模方式。简单事例下面先介绍几个简单的VerilogHDL程序。例加法器moduleaddr(a,b,cin,count,sum)input:ainput:binputcinoutputcountoutput:sumassign{count,sum}=abcinendmodule该例描述一个位加法器从例子可看出整个模块是以module开始endmodule结束。例比较器modulecompare(equalab)input:a,bdeclaretheinputsignaloutputequaredeclaretheoutputsignalassignequare=(a==b):*ifa=b,output,otherwise*endmodule绝密请输入文档编号VerilogHDL入门教程第页共页版权所有侵权必究该例描述一个比较器从上可看到**和表示注释部分。注释只是为了方便设计者读懂代码对编译并不起作用。例三态驱动器modulemytri(din,den,dout)inputdininputdenoutputdoutEnteryourstatementshereassigndout=dendin:'bzendmodulemoduletrist(din,den,dout)inputdininputdenoutputdoutstatementsheremytriumytri(din,den,dout)endmodule该例描述了一个三态驱动器。其中三态驱动门在模块mytri中描述而在模块trist中调用了模块mytri。模块mytri对trist而言相当于一个已存在的器件在trist模块中对该器件进行实例化实例化名umytri。模块的结构通过上面的实例可看出一个设计是由一个个模块(module)构成的。一个模块的设计如下:、模块内容是嵌在module和endmodule两个语句之间。每个模块实现特定的功能模块可进行层次的嵌套因此可以将大型的数字电路设计分割成大小不一的小模块来实现特定的功能最后通过由顶层模块调用子模块来实现整体功能这就是TopDown的设计思想如的例。、模块包括接口描述部分和逻辑功能描述部分。这可以把模块与器件相类比。模块的端口定义部分:如上例:moduleaddr(a,b,cin,count,sum)其中module是模块的保留字addr是模块的名字相当于器件名。()内是该模块的端口声明定义了该模块的管脚名是该模块与其他模块通讯的外部接口相当于器件的pin。模块的内容包括IO说明内部信号、调用模块等的声明语句和功能定义语句。IO说明语句如:input:ainput:binputcinoutputcount其中的input、output、inout是保留字定义了管脚信号的流向n:表示该信号的位宽(总线或单根信号线)。绝密请输入文档编号VerilogHDL入门教程第页共页版权所有侵权必究逻辑功能描述部分如:assigndout=dendin:'bzmytriumytri(din,den,dout)功能描述用来产生各种逻辑(主要是组合逻辑和时序逻辑可用多种方法进行描述具体的用法下面章节有介绍)还可用来实例化一个器件该器件可以是厂家的器件库也可以是我们自己用HDL设计的模块(相当于在原理图输入时调用一个库元件)。在逻辑功能描述中主要用到assign和always两个语句。、对每个模块都要进行端口定义并说明输入、输出口然后对模块的功能进行逻辑描述当然对测试模块可以没有输入输出口。、VerilogHDL的书写格式自由一行可以写几个语句也可以一个语句分几行写。具体由代码书写规范约束。、除endmodule语句外每个语句后面需有分号表示该语句结束。模块语法一个模块的基本语法如下:一个模块的基本语法如下:modulemodulename(port,port,)Declarations:input,output,inout,reg,wire,parameter,function,task,Statements:InitialstatementAlwaysstatementModuleinstantiationGateinstantiationContinuousassignmentendmodule模块的结构需按上面的顺序进行声明区用来对信号方向、信号数据类型、函数、任务、参数等进行描述。语句区用来对功能进行描述如:器件调用(Moduleinstantiation)等。书写语法建议一个模块用一个文件模块名与文件名要同名一行一句语句。信号方向按输入、输出、双向顺序描述。设计模块时可尽量考虑采用参数化提高设计的重用。以上是初学者的建议具体的或深入的方面可看相关的文档。下面的有关语法建议类似。时延绝密请输入文档编号VerilogHDL入门教程第页共页版权所有侵权必究信号在电路中传输会有传播延时等如线延时、器件延时。时延就是对延时特性的HDL描述。举例如下:assign#B=A表示B信号在个时间单位后得到A信号的值。如下图:A:B:图在VerilogHDL中所有时延都必须根据时间单位进行定义定义方式为在文件头添加如下语句:`timescalensps其中’timescale是VerilogHDL提供的预编译处理命令ns表示时间单位是nsps表示时间精度是ps。根据该命令编译工具才可以认知#为ns。在VerilogHDL的IEEE标准中没有规定时间单位的缺省值由各模拟工具确定。因此在写代码时必须确定。三种建模方式在HDL的建模中主要有结构化描述方式、数据流描述方式和行为描述方式下面分别举例说明三者之间的区别。结构化描述方式结构化的建模方式就是通过对电路结构的描述来建模即通过对器件的调用(HDL概念称为例化)并使用线网来连接各器件的描述方式。这里的器件包括VerilogHDL的内置门如与门and异或门xor等也可以是用户的一个设计。结构化的描述方式反映了一个设计的层次结构。例:一位全加器图一位全加器的结构图代码:moduleFAstruct(A,B,Cin,Sum,Count)inputAinputBinputCin绝密请输入文档编号VerilogHDL入门教程第页共页版权所有侵权必究outputSumoutputCountwireS,T,T,Tstatementsxorx(S,A,B)xorx(Sum,S,Cin)andA(T,A,B)andA(T,B,Cin)andA(T,A,Cin)orO(Cout,T,T,T)endmodule该实例显示了一个全加器由两个异或门、三个与门、一个或门构成。S、T、T、T则是门与门之间的连线。代码显示了用纯结构的建模方式其中xor、and、or是VerilogHDL内置的门器件。以xorx(S,A,B)该例化语句为例:xor表明调用一个内置的异或门器件名称xor代码实例化名x(类似原理图输入方式)。括号内的SAB表明该器件管脚的实际连接线(信号)的名称其中A、B是输入S是输出。其他同。例:两位的全加器两位的全加器可通过调用两个一位的全加器来实现。该设计的设计层次示意图和结构图如下:FourbitFAFAstructFAstructABCinSumCountFAABCinSumCountFAFourbitFAFAstructstructFCinFBFSumFCount图两位全加器的结构示意图代码:moduleFourbitFA(FA,FB,FCin,FSum,FCout)parameterSIZE=inputSIZE:FA绝密请输入文档编号VerilogHDL入门教程第页共页版权所有侵权必究inputSIZE:FBinputFCinoutputSIZE:FSumoutputFCoutwireFTempFAstructFA(A(FA),B(FB),Cin(FCin),Sum(FSum),Cout(Ftemp))FAstructFA(A(FA),B(FB),Cin(FTemp),Sum(FSum),Cout(FCount))endmodule该实例用结构化建模方式进行一个两位的全加器的设计顶层模块FourbitFA调用了两个一位的全加器FAstruct。在这里以前的设计模块FAstruct对顶层而言是一个现成的器件顶层模块只要进行例化就可以了。注意这里的例化中端口映射(管脚的连线)采用名字关联如A(FA)其中A表示调用器件的管脚A括号中的信号表示接到该管脚A的电路中的具体信号。wire保留字表明信号Ftemp是属线网类型(下面有具体描述)。另外在设计中尽量考虑参数化的问题。器件的端口映射必须采用名字关联。数据流描述方式数据流的建模方式就是通过对数据流在设计中的具体行为的描述的来建模。最基本的机制就是用连续赋值语句。在连续赋值语句中某个值被赋给某个线网变量(信号)语法如下:assigndelaynetname=expression如:assign#A=B绝密请输入文档编号VerilogHDL入门教程第页共页版权所有侵权必究在数据流描述方式中还必须借助于HDL提供的一些运算符如按位逻辑运算符:逻辑与()逻辑或(|)等。以上面的全加器为例可用如下的建模方式:图一位全加器的结构图`timescalenspsmoduleFAflow(A,B,Cin,Sum,Count)inputA,B,CinoutputSum,CountwireS,T,T,Tassign#S=A^Bassign#Sum=S^Cinassign#T=ABassign#T=ACinassign#T=BCinendmodule注意在各assign语句之间是并行执行的即各语句的执行与语句之间的顺序无关。如上当A有个变化时S、T、T将同时变化S的变化又会造成Sum的变化。行为描述方式行为方式的建模是指采用对信号行为级的描述(不是结构级的描述)的方法来建模。在表示方面类似数据流的建模方式但一般是把用initial块语句或always块语句描述的归为行为建模方式。行为建模方式通常需要借助一些行为级的运算符如加法运算符()减法运算符()等。以下举个例子对initial和always语句的具体应用可看相关章节的介绍这里先对行为建模方式有个概念。例一位全加器的行为建模moduleFAbehav(A,B,Cin,Sum,Cout)inputA,B,CinoutputSum,Cout绝密请输入文档编号VerilogHDL入门教程第页共页版权所有侵权必究regSum,CoutregT,T,Talways(AorBorCin)beginSum=(A^B)^CinT=ACinT=BCinT=ABCout=(T|T)|Tendendmodule需要先建立以下概念:、只有寄存器类型的信号才可以在always和initial语句中进行赋值类型定义通过reg语句实现。、always语句是一直重复执行由敏感表(always语句括号内的变量)中的变量触发。、always语句从时刻开始。、在begin和end之间的语句是顺序执行属于串行语句。例:一位全加器的行为建模moduleFAbehav(A,B,Cin,Sum,Cout)inputA,B,CinoutputSum,CoutregSum,Coutalways(AorBorCin)begin{CountSum}=ABCinendendmodule在例中采用更加高级(更趋于行为级)描述方式即直接采用“”来描述加法。{CountSum}表示对位数的扩展因为两个bit相加和有两位低位放在Sum变量中进位放在Count中。混合设计描述绝密请输入文档编号VerilogHDL入门教程第页共页版权所有侵权必究在实际的设计中往往是多种设计模型的混合。一般地对顶层设计采用结构描述方式对低层模块可采用数据流、行为级或两者的结合。如上面的两bit全加器对顶层模块(FourbitFA)采用结构描述方式对低层进行例化对低层模块(FA)可采用结构描述、数据流描述或行为级描述。VerilogHDL基本语法本节介绍VerilogHDL语言的一些基本要素包括标识符、注释、格式、数字值集合、两种数据类型、运算符和表达式和一些基本的语句如IF语句等。标识符定义标识符(identifier)用于定义模块名、端口名、信号名等。VerilogHDL中的标识符(identifier)可以是任意一组字母、数字、$符号和(下划线)符号的组合但标识符的第一个字符必须是字母或者下划线。另外标识符是区分大小写的。以下是标识符的几个例子:CountCOUNT与Count不同。RFIVE$关键词VerilogHDL定义了一系列保留字叫做关键词附录A列出了语言中的所有保留字。注意只有小写的关键词才是保留字。例如标识符always(这是个关键词)与标识符ALWAYS(非关键词)是不同的。书写规范建议以下是一些书写规范的要求可参考公司的《Verilog代码书写规范》。、用有意义的有效的名字如Sum、CPUaddr等。、用下划线区分词。、采用一些前缀或后缀如时钟采用Clk前缀:ClkClkCPU低电平采用n后缀:Enablen、统一一定的缩写如全局复位信号Rst。、同一信号在不同层次保持一致性如同一时钟信号必须在各模块保持一致。、自定义的标识符不能与保留字同名。、参数采用大写如SIZE。注释VerilogHDL中有两种注释的方式一种是以“*”符号开始“*”结束在两个符号之间的语句都是注释语句因此可扩展到多行。如:绝密请输入文档编号VerilogHDL入门教程第页共页版权所有侵权必究*statementstatementstatementn*以上n个语句都是注释语句。另一种是以开头的语句它表示以开始到本行结束都属于注释语句。格式VerilogHDL是区分大小写的即大小写不同的标识符是不同的。另外VerilogHDL的书写格式是自由

职业精品

指纹打卡考勤细则1.doc

员工考勤及打卡管理规定(2015年新版).doc

打卡考勤管理制度.doc

Office使用技巧.ppt

用户评论

0/200
    暂无评论
上传我的资料

精彩专题

相关资料换一换

资料评价:

/ 41
所需积分:1 立即下载

意见
反馈

返回
顶部