EDA原理及应用课件_第1页
EDA原理及应用课件_第2页
EDA原理及应用课件_第3页
EDA原理及应用课件_第4页
EDA原理及应用课件_第5页
已阅读5页,还剩257页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、EDA原理及应用马冬梅2019.1.17 内容: 一、EDA设计导论 二、可编程逻辑器件设计方法 三、Verilog HDL语言基础 EDA技术综述;EDA技术发展历史EDA技术涵义EDA技术主要内容PLD设计方法学;PLD设计概论PLD设计流程SOPC设计流程HDL硬件描述语言HDL硬件描述语言概念HDL语言特点和比较HDL语言最新发展一、EDA设计导论 EDA技术随着计算机、集成电路、电子系统设计的发展,经历了三个发展阶段: 1、计算机辅助设计(CAD) 2、计算机辅助工程设计(CAE) 3、电子设计自动化(EDA)EDA技术发展历史1、计算机辅助设计(CAD)硬件设计发展的初级阶段。在此

2、阶段,大量选用中小规模标准集成电路,将产品设计过程中高度重复性的布图布线工作,采用二维图形编辑与分析的CAD工具。由于PCB布图布线工具受到计算机工作平台的制约,其支持的设计工作有限且性能比较差。2、计算机辅助工程(CAE) 采用少数几种通用的标准芯片实现电子系统的设计。 CAE阶段的EDA工具已经可以进行设计描述、综合与优化和设计结果验证。但是,大部分从原理图出发的EDA工具仍然不能适应复杂电子系统的设计要求,而具体化的元件图形制约着优化设计。3、电子系统设计自动化阶段各种规模的可编程逻辑器件和EDA工具的发展,通过一些简单标准化的设计过程,利用微电子厂家提供的设计库来完成数万门ASIC和集

3、成系统的设计与验证。在此阶段,硬件描述语言HDL的出现使得EDA设计进入到抽象描述的设计层次。现在,EDA设计进入了片上系统设计SOPC(System On Programmable Chip)阶段,可编程逻辑器件内集成了数字信号处理器的内核、微处理器的内核等,使得可编程逻辑器件不再只是完成复杂的逻辑功能,而是具有了强大的信号处理和控制功能。 EDA技术包括狭义EDA技术和广义EDA技术。狭义EDA技术指以大规模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件方式设计的电子

4、系统到硬件系统的逻辑编译、逻辑化简、逻辑分割、逻辑综合及优化、逻辑布局布线、逻辑仿真,直至对于特定目标芯片的适配编译、逻辑映射、编程下载等工作,最终形成集成电子系统或专用集成芯片的技术,或称为IES/ASIC自动设计技术。EDA技术含义广义EDA技术,是通过计算机及其电子系统的辅助分析和设计软件,完成电子系统某一部分的设计过程。因此,广义EDA技术除了包含狭义的EDA技术外,还包括计算机辅助分析CAA技术(如PSPICE,EWB,MATLAB等),印刷电路板计算机辅助设计PCB-CAD技术(如PROTEL,ORCAD等)和其它高频和射频设计和分析的工具等。EDA技术的共同特点:1、通过使用相应

5、的电路分析和设计软件,完成电子系统各部分的设计;2、在电子系统设计中所使用的EDA软件基本都符合自顶向下的设计流程的理念;3、使用EDA软件设计电子系统,都需要分工设计,团体协作;4、使用EDA软件设计电子系统,提高了设计的效率,缩短了设计周期;5、使用EDA软件设计电子系统,采用了模块化和层次化的设计方法;6、大多数EDA软件都具有仿真和模拟功能;基于狭义EDA技术进行可编程逻辑器件的设计应掌握以下几个方面的内容:、大规模可编程逻辑器件PLD,是利用EDA技术进行电子系统设计的载体;、硬件描述语言HDL,是利用EDA技术进行电子系统设计的主要表达手段;、EDA设计软件EDAS:是利用EDA技

6、术进行电子系统设计的自动化设计工具;、相关的硬件平台,是利用EDA技术进行电子系统设计的下载工具及硬件验证工具;EDA技术的主要内容、大规模可编程逻辑器件PLDPLD器件一般包含现场可编程门阵列(FPGA)和复杂可编程逻辑器件(CPLD)。由于EDA开发工具的通用性、设计语言的标准化以及设计过程几乎与所用器件的硬件结构无关,因而设计开发成功的各类逻辑功能块软件有很好的兼容性和可移植性。与ASIC设计相比,PLD显著的优势是开发周期短、投资风险小、产品上市速度快、市场适应能力强和硬件升级回旋余地大,而且当产品定型和产量扩大后,可将在生产中达到充分检验的VHDL设计迅速实现ASIC投产。2、硬件描

7、述语言常用硬件描述语言有VHDL、Verilog和ABEL语言。下面从使用方面对这三种语言进行简要的对比:(1)逻辑描述层次:一般的硬件描述语言可以在三个层次上进行电路描述,其层次由高到低依次可分为行为级、寄存器传输级RTL和门电路级。VHDL语言是一种高级描述语言,适用于行为级和RTL级的描述,最适于描述电路的行为;Verilog语言和ABEL语言是一种较低级的描述语言,适用于RTL级和门电路级的描述,最适于描述门级电路。(2)设计要求:VHDL进行电子系统设计时可以不了解电路的结构细节,Verilog和ABEL语言进行电子系统设计时需了解电路的结构细节。(3)综合过程:任何一种语言源程序,

8、最终都要转换成门电路级才能被布线器或适配器所接受。因此,VHDL语言源程序的综合要经过行为级RTL级门电路级的转化,VHDL几乎不能直接控制门电路的生成。而Verilog语言和ABEL语言源程序的综合过程只经过RTL级门电路级的转化,易于控制电路资源。(4)对综合器的要求:VHDL描述语言层次较高,不易控制底层电路,因而对综合器的性能要求较高,Verilog和ABEL对综合器的性能要求较低。(5)支持的EDA工具:支持VHDL和Verilog的EDA工具很多,但支持ABEL的综合器仅仅Dataio一家。(6)国际化程度:VHDL和Verilog已成为IEEE标准,而ABEL正朝国际化标准努力。

9、现在,VHDL与Verilog语言将承担几乎全部的数字系统设计任务。3、软件开发工具基于高复杂度PLD器件的开发,在很大程度上依靠EDA软件完成。PLD的EDA工具以计算机软件为主,将典型的单元电路封装起来形成固定模块并形成标准的硬件开发语言(如HDL语言)供设计人员使用。PLD开发软件需要自动地完成逻辑编译、化简、分割、综合及优化、布局布线、仿真以及对于特定目标芯片的适配编译和编程下载等工作。典型的EDA工具中必须包含两个特殊的软件包,即综合器和适配器。综合器的功能就是将设计者在EDA平台上完成的针对某个系统项目的HDL、原理图或状态图形描述,针对给定的硬件系统组件,进行编译、优化、转换和综

10、合。、硬件开发平台硬件开发平台提供芯片下载电路及EDA实验/开发的外围资源,以供硬件验证。硬件开发平台一般包括:)实验或开发所需的各类基本信号发生模块,包括时钟、脉冲、高低电平等;)PLD输出信息显示模块,包括数码显示、发光管显示、声响指示等;)监控程序模块,提供“电路重构软配置”;)目标芯片适配座以及上面的FPGA/CPLD目标芯片和编程下载电路。 传统上的设计方法是自下而上的设计方法,是以固定功能元件为基础,基于电路板的设计方法。这种设计方法有下面的缺点:设计依赖于设计人员的经验。设计依赖于通用元器件。设计后期的仿真不易实现,并且调试复杂。设计实现周期长,灵活性差,耗时耗力,效率低下。 系

11、统调试、测试与性能分析完整系统构成电路板设计固定功能元件系统功能需求传统设计方法PLD设计方法学设计目标设计输入功能级仿真网表转换、映射、布局布线(CPLD为适配)时序仿真系统验证系统产品原理图输入,文本输入(包括器件选择、元件库的建立、原理图或状态机设计、VHDL语言设计)网表转换、映射、布局布线、产生时序数据、产生配置文件配置文件加载后,用示波器、逻辑分析仪、软件程序观察FPGA开发的一般流程综合优化行为仿真生成网表文件PLD设计流程1、设计目标在系统设计之前,首先要进行的是方案论证、系统设计和FPGA芯片选择等准备工作。根据任务要求,如系统的指标和复杂度,对工作速度和芯片本身的各种资源、

12、成本等方面进行权衡,选择合理的设计方案和合适的器件类型。一般都采用自顶向下的设计方法,把系统分成若干个基本单元,然后再把每个基本单元划分为下一层次的基本单元,直到可以直接使用EDA元件库为止。 PLD设计流程2、设计输入 设计输入是将所设计的系统或电路以开发软件要求的某种形式表示出来,并输入EDA工具的过程。常用的方法有硬件描述语言(HDL)和原理图输入方法等。原理图输入方式是一种最直接的描述方式,在可编程芯片发展的早期应用较广,它将所需的器件从元件库中调出来,画出原理图。这种方法虽然直观并易于仿真,但效率低,且不易维护。更主要的缺点是可移植性差。HDL语言输入法利用文本描述设计,主要使用行为

13、级HDL,其主流语言是Verilog HDL和VHDL。3、功能仿真 功能仿真也称为前仿真,是在编译之前对用户所设计的电路进行逻辑功能验证,此时的仿真没有延迟信息,仅对初步的功能进行检测。仿真前,要先利用波形编辑器和HDL等建立波形文件和测试向量(即将所关心的输入信号组合成序列),仿真结果将会生成报告文件和输出信号波形,从中便可以观察各个节点信号的变化。如果发现错误,则返回设计修改逻辑设计。常用的工具有Model Tech公司的ModelSim、Sysnopsys公司的VCS和Cadence公司的NC-Verilog, 以及NC-VHDL等软件。 4、综合优化 所谓综合就是将较高级抽象层次的描

14、述转化成较低层次的描述。综合优化根据目标与要求优化所生成的逻辑连接,使层次设计平面化,供FPGA布局布线软件进行实现。综合优化是指将设计输入编译成由与门、或门、非门、RAM、触发器等基本逻辑单元组成的逻辑连接网表,而并非真实的门级电路。真实具体的门级电路需要利用FPGA制造商的布局布线功能,根据综合后生成的标准门级结构网表来产生。由于门级结构、RTL级的HDL程序的综合是很成熟的技术,所有的综合器都可以支持到这一级别的综合。 常用的综合工具有Synplicity公司Synplify/ Synplify Pro软件以及各个FPGA厂家自己推出的综合开发工具。 5、综合后仿真 综合后仿真检查综合结

15、果是否和原设计一致。在仿真时,把综合生成的标准延时文件反标注到综合仿真模型中去,可估计门延时带来的影响。但这一步骤不能估计线延时,因此和布线后的实际情况还有一定的差距,并不十分准确。目前的综合工具较为成熟,对于一般的设计可以省略这一步,但如果在布局布线后发现电路结构和设计意图不符,则需要回溯到综合后仿真来确认问题之所在。在功能仿真中介绍的软件工具一般都支持综合后仿真。6、实现与布局布线 将综合生成的逻辑网表配置到具体的FPGA芯片上,布局布线是其中最重要的过程。布局将逻辑网表中的硬件原语和底层单元合理地配置到芯片内部的固有硬件结构上,并且往往需要在速度最优和面积最优之间作出选择。布线根据布局的

16、拓扑结构,利用芯片内部的各种连线资源,合理正确地连接各个元件。布线结束后,软件工具会自动生成报告,提供有关设计中各部分资源的使用情况。 由于只有FPGA芯片生产商对芯片结构最为了解,所以布局布线必须选择芯片开发商提供的工具。7、时序仿真也称为后仿真,是指将布局布线的延时信息反标注到设计网表中来检测有无时序违规(即不满足时序约束条件或器件固有的时序规则,如建立时间、保持时间等)现象。时序仿真包含的延迟信息最全,也最精确,能较好地反映芯片的实际工作情况。由于不同芯片的内部延时不一样,不同的布局布线方案也给延时带来不同的影响。因此在布局布线后,通过对系统和各个模块进行时序仿真,分析其时序关系,估计系

17、统性能,以及检查和消除竞争冒险是非常有必要的。在功能仿真中介绍的软件工具一般都支持综合后仿真。 8、板级仿真与验证 板级仿真主要应用于高速电路设计中,对高速系统的信号完整性、电磁干扰等特征进行分析,一般都以第三方工具进行仿真和验证。 9、芯片编程与调试 设计的最后一步就是芯片编程与调试。芯片编程是指产生使用的数据文件,然后将编程数据下载到FPGA芯片中。 其中,芯片编程需要满足一定的条件,如编程电压、编程时序和编程算法等方面。目前,主流的FPGA芯片生产商都提供了内嵌的在线逻辑分析仪来解决上述矛盾,它们只需要占用芯片少量的逻辑资源,具有很高的实用价值。 硬件描述语言(Hardware Desc

18、ription Language)是硬件设计人员和电子设计自动化(EDA)工具之间的界面,其主要目的是用来编写设计文件,建立电子系统行为级的仿真模型。即利用计算机的巨大能力对Verilog HDL或VHDL建模的复杂数字逻辑进行仿真,然后再自动综合,生成符合要求且在电路结构上可以实现的数字逻辑网表(Netlist),根据网表和某种工艺的器件自动生成具体电路,最后生成该工艺条件下这种具体电路的时延模型。仿真验证无误后,该模型可用于制造ASIC芯片或写入CPLD和FPGA器件中。HDL硬件描述语言 在HDL语言出现之前,已有了许多程序设计语言,如汇编、C、Pascal、Fortran、Prolog

19、等。它们适合于描述过程和算法,不适合作硬件描述。在使用EDA工具进行电子系统设计时,就需要一种硬件描述语言来作为EDA工具的工作语言。因此,众多的EDA工具软件开发者相继推出了自己的HDL语言。HDL硬件描述语言概念 在HDL语言的发展过程中,美国国防部起了非常重要的作用。美国国防部电子系统项目有众多的承包公司,他们使用各自的HDL语言,造成了信息交换困难和维护困难。美国政府为了降低开发费用,避免重复设计,国防部为他们的超高速集成电路提供了一种硬件描述语言,以期望VHDL功能强大、严格、可读性好。政府要求各公司的合同都用它来描述,以避免产生歧义。HDL语言的特点主要体现在以下几个方面:1、HD

20、L语言既包含一些高层程序设计语言的结构形式,同时也兼顾描述硬件线路连接的具体构件。、HDL语言是并发的,即具有在同一时刻执行多任务的能力。一般来讲编程语言是非并行的,但在实际硬件中许多操作都是在同一时刻发生的,所以HDL语言具有并发的特征。、HDL语言有时序的概念。一般来讲,编程语言是没有时序概念的,但在硬件电路中从输入到输出总是有延迟存在的,为描述这些特征,HDL语言需要建立时序的概念。 因此,使用HDL除了可以描述硬件电路的功能外,还可以描述其时序要求。HDL语言特点和比较、通过使用结构级或行为级描述可以在不同的抽象层次描述设计,HDL语言采用自顶向下的数字电路设计方法,主要包括3个领域5

21、个抽象层次,如下表所示:行为领域结构领域物理领域系统级性能描述部件及它们之间的逻辑连接方式芯片、模块、电路板和物理划分的子系统算法级I/O应答算法级硬件模块数据结构部件之间的物理连接、电路板、底盘等寄存器传输级并行操作寄存器传输、状态表算术运算部件、多路选择器、寄存器总线、微定序器、微存储器之间的物理连接方式芯片、宏单元逻辑级用布尔方程叙述门电路、触发器、锁存器标准单元布图电路级微分方程表达晶体管、电阻、电容、电感元件晶体管布图总的来说,它们有以下几点不同:、VHDL偏重于标准化的考虑,Verilog HDL则和EDA工具结合得更为紧密。VHDL是为了实现美国国防部VHSIC计划所推出的各个电

22、子部件供应商具有统一数据交换格式标准的要求。Verilog HDL是在全球最大的EDA/ESDA供应商Cadence公司的支持下针对EDA工具专门开发的硬件描述语言。、Verilog HDL拥有广泛的设计群体,成熟的资源远比VHDL丰富。同时Verilog HDL是从高级设计语言C语言发展而来的,比VHDL而言更容易上手,其编码风格也更为简洁明了,是一种非常容易掌握的硬件描述语言。Verilog和VHDL比较、Verilog HDL和VHDL在行为级抽象建模的覆盖范围方面也有所不同。一般认为Verilog HDL在系统抽象方面比VHDL要强一些,Verilog HDL比较适合算法级(Algor

23、ithm)、寄存器传输级(RTL)、逻辑级(Logic)以及门级(Gate)的设计,而VHDL更适合特大型系统级(System)的设计。目前对于一个系统芯片设计项目,可以采用的方案包括以下几种: 1、在系统级采用VHDL,在软件级采用C语言,在实现级采用Verilog。目前,软件与硬件的协调设计还是一个很具挑战性的工作,因为软件越来越成为SoC设计的关键。该方案的特点是:风险小,集成难度大,与原有方法完全兼容,有现成的开发工具,但工具集成由开发者自行负责完成。、系统级及软件级采用Superlog,硬件级和实现级均采用Verilog HDL描述,这样和原有的硬件设计可以兼容。该方案特点是风险较小

24、,易于集成,与原硬件设计兼容性好,有集成开发环境。HDL语言最新发展3、系统级和软件级采用SystemC,硬件级采用Verilog HDL,SystemC与常规的Verilog HDL互相转换,与原来的软件编译环境完全兼容。开发者只需要一组描述类库和一个包含仿真核的库,就可以在通常ANSI C+编译环境下开发,但硬件描述与原有方法完全不兼容。该方法特点是风险较大,与原软件开发兼容性好,硬件开发有风险。 IC(Integrated Circuit)设计方法一般分为6类: 1、全定制法:如ROM,RAM或PLA等; 2、定制法:通常包括标准单元和通用单元; 3、半定制法:通常包括数字电路门阵列和线

25、性阵列; 4、模块编译法:对设计模块进行描述,然后通过编译直接得到电路掩膜版图; 5、可编程逻辑器件法:通常是指PAL、PLA、GAL器件和CPLD器件; 6、逻辑单元阵列法:通常是指现场可编程门阵列FPGA器件。二、可编程逻辑器件设计方法 可编程逻辑器件(Programmable Logic Device,PLD)起源于20世纪70年代,是在专用集成电路(ASIC)的基础上发展起来的一种数字系统设计的主要硬件平台。 其主要特点: 1、由用户通过软件进行配置和编程,从而完成某种特定的功能,且可以反复擦写; 2、在修改和升级PLD时,不需额外地改变PCB电路板,只是在计算机上修改和更新程序,使硬

26、件设工作成为软件开发工作,缩短了系统设计的周期,提高了实现的灵活性并降低了成本。可编程逻辑器件概述PLD器件包括4种基本类型:编程只读存储器(Programmable Read Only Memory,PROM);现场可编程逻辑阵列(Field Programmable Logic Array,FPLA);可编程阵列逻辑(Programmable Array Logic,PAL);通用阵列逻辑(Generic Array Logic,GAL);按照颗粒度可以分为3类:小颗粒度(“门海(sea of gates)”架构)中等颗粒度(如:FPGA)大颗粒度(如:CPLD)PLD产品分类按编程工艺可

27、以分为四类:熔丝(Fuse)和反熔丝(Antifuse)编程器件可擦除的可编程只读存储器(UEPROM)编程器件电信号可擦除的可编程只读存储器(EEPROM)编程器件SRAM编程器件。 前3类为非易失性器件,编程后,配置数据保留在器件上;第4类为易失性器件,掉电后配置数据会丢失,因此在每次上电后需要重新进行数据配置。可编程逻辑器件的发展可以划分为4个阶段:第1阶段的可编程器件只有简单的可编程只读存储器(PROM)、紫外线可擦除只读存储器(EPROM)和电可擦只读存储器(EEPROM)3种,由于结构的限制,只能完成简单的数字逻辑功能。第2阶段出现了结构上稍微复杂的可编程阵列逻辑(PAL)和通用阵

28、列逻辑(GAL)器件,正式被称为PLD,能够完成各种逻辑运算功能。典型的PLD由“与”、“非”阵列组成,用“与或”表达式来实现任意组合逻辑,所以PLD能以乘积和形式完成大量的逻辑组合。可编程逻辑器件的发展历史第3阶段Xilinx和Altera分别推出了与标准门阵列类似的FPGA和类似于PAL结构的扩展性CPLD,提高了逻辑运算的速度,具有体系结构和逻辑单元灵活、集成度高以及适用范围宽等特点,兼容了PLD和通用门阵列的优点,能够实现超大规模的电路,编程方式也很灵活,成为产品原型设计和中小规模(一般小于10000)产品生产的首选。第4阶段出现了SOPC和SOC技术,是PLD和ASIC技术融合的结果

29、,涵盖了实时化数字信号处理技术、高速数据收发器、复杂计算以及嵌入式系统设计技术的全部内容。超越了ASIC器件的性能和规模,也超越了传统意义上FPGA的概念,使PLD的应用范围从单片扩展到系统级。CPLD更适合完成各种算法和组合逻辑,FPGA更适合于完成时序逻辑。换句话说, FPGA更适合于触发器丰富的结构,而CPLD更适合于触发器有限而乘积项丰富的结构。CPLD的连续式布线结构决定了它的时序延迟是均匀的和可预测的,而FPGA的分段式布线结构决定了其延迟的不可预测性。在编程上FPGA比CPLD具有更大的灵活性。CPLD通过修改具有固定内连电路的逻辑功能来编程,FPGA主要通过改变内部连线的布线来

30、编程;FPGA可在逻辑门下编程,而CPLD是在逻辑块下编程。CPLD和FPGA的比较FPGA的集成度比CPLD高,具有更复杂的布线结构和逻辑实现。CPLD比FPGA使用起来更方便。CPLD的编程采用E2PROM或FASTFLAS技术,无需外部存储器芯片,使用简单。而FPGA的编程信息需存放在外部存储器上,使用方法复杂。CPLD的速度比FPGA快,并且具有较大的时间可预测性。这是由于FPGA是门级编程,并且CLB(可配置逻辑模块 Configurable Logic Block)之间采用分布式互联,而CPLD是逻辑块级编程,并且其逻辑块之间的互联是集总式的。在编程方式上,CPLD主要是基于E2P

31、ROM或FLASH存储器编程,编程次数可达1万次,优点是系统断电时编程信息也不丢失。CPLD又可分为在编程器上编程和在系统编程两类。FPGA大部分是基于SRAM编程,编程信息在系统断电时丢失,每次上电时,需从器件外部将编程。数据重新写入SRAM中。其优点是可以编程任意次,可在工作中快速编程,从而实现板级和系统级的动态配置。 CPLD保密性好,FPGA保密性差。 一般情况下,CPLD的功耗要比FPGA大,且集成度越高越明显。Verilog HDL语言基础 Verilog语言概述Verilog HDL(以下简称Verilog)是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系

32、统建模。Verilog HDL语言具有下述描述能力:设计的行为特性:使用过程化结构建模设计的数据流特性:使用连续赋值语句方式建模设计的结构组成:使用门和模块实例语句建模包含响应监控和设计验证方面的时延和波形产生机制。Verilog HDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。Verilog 语言从C编程语言中继承了多种操作符和结构。并提供了扩展的建模能力。Verilog语言是IEEE标准,为IEEE Std13642019。Verilog硬件描述语言的主要功能包括:基本逻辑门,如and、or和nand等内置在语言中。用户定义原语(U

33、DP)创建的灵活性。用户定义的原语既可以是组合逻辑原语,也可以是时序逻辑原语。开关级基本结构模型,例如pmos和nmos等也内置在语言中。提供显式语言结构指定设计中的端口到端口的时延及路径时延和设计的时序检查。可采用三种不同方式或混合方式对设计建模:行为描述方式使用过程化结构建模;数据流方式使用连续赋值语句方式建模;结构化方式使用门和模块实例语句描述建模。Verilog HDL硬件描述语言功能Verilog HDL中有两类数据类型:网络类型表示构件间的物理连线寄存器类型表示抽象的数据存储元件能够描述层次设计,可使用模块实例结构描述任何层次。设计的规模可以是任意的,语言不对设计的规模(大小)施加

34、任何限制。Verilog HDL语言的描述能力能够通过使用编程语言接口(PLI)机制进一步扩展。PLI是允许外部函数访问Verilog模块内信息、允许设计者与模拟器交互的例程集合。人和机器都可阅读Verilog 语言,因此可作为EDA工具和设计者之间的交互语言。设计能够在多个层次上加以描述,从开关级、门级、寄存器传送级(RTL)到算法级,包括进程和队列级。能够使用内置开关级原语在开关级对设计完整建模。同一语言可用于生成模拟激励和指定测试的验证约束条件,例如输入值的指定。Verilog HDL能够监控模拟验证的执行,即模拟验证执行过程中设计的值能够被监控和显示。这些值也能够用于与期望值比较,在不

35、匹配的情况下,打印报告消息。一个复杂电路系统的完整Verilog HDL模型是由若干个Verilog HDL模块构成的,每一个模块又可以由若干个子模块构成。Verilog使用大约100个预定义的关键词定义该语言的结构。用Verilog 描述的电路设计就是该电路的 Verilog 模型,也称为模块,是Verilog的基本描述单位。一般来说一个模块可以是一个元件或者是一个更低层设计模块的集合。模块是并行运行的,通常需要一个高层模块通过调用其他模块的实例来定义一个封闭的系统,包括测试数据和硬件描述。Verilog程序结构Verilog模块结构module 模块名(端口列表); endmodule 端

36、口定义 input 输入端口 output 输出端口 inout 输入/输出端口 数据类型说明 wire reg parameter 逻辑功能定义 assign always function task .Verilog结构位于module和endmodule声明语句之间,每个Verilog程序包括端口定义、数据类型说明和逻辑功能定义部分。是模块唯一的标识符;是由模块各个输入、输出和双向端口组成,这些端口用来与其他模块进行通信;数据类型说明部分用来指定模块内用到的数据对象为寄存器型、存储器型还是连线型;逻辑功能定义部分通过使用逻辑功能语句来实现具体的逻辑功能。每个Verilog 程序源文件都以

37、.v作为文件扩展名;Verilog HDL区分大小写,每条语句以分号结束,endmodule语句后不加分号。白空(新行、制表符和空格)没有特殊意义。模块声明包括模块名字,模块的输入,输出端口类表。模块的定义格式如下:module (port_name1,port_namen);. endmodule; 其中: module_name为模块名,是该模块的唯一标识。port_name为端口名,这些端口名使用“,”分割。端口是模块与外部其它模块进行信号传递的通道(信号线),模块端口分为输入、输出或双向端口。端口的定义格式为: input , .;input为关键字,用于声明后面的端口为输入口;inp

38、ut_port_name为输入端口名字;other_inputs为用逗号分割的其它输入端口的名字; output ,.;output为关键字,用于声明后面的端口为输出端口;output_port_name为输出端口名字;other_outputs为逗号分割的其它输出端口的名字; inout ,.;inout为关键字,用于声明后面端口为输入/输出类型;other_inouts为输入/输出端口的名字;other_inouts为逗号分割的其它输入/输出端口的名字;在声明输入/输出时,还要声明其数据类型;默认的端口类型为wire类型。输入和双向端口不能声明为寄存器型。【例3.1】端口说明实例modul

39、e addr(cout,sum,ina,inb,cin)input cin;input7:0 ina,inb;output7:0 sum;output cout;endmodule注意,在verilog中,也可以使用ANSI C风格进行端口声明。可避免端口名在端口列表和端口声明语句中的重复。如果声明中未指明端口的数据类型,那么默认端口具有wire数据类型。【例3.2】 ANSI C风格的端口说明实例 module fulladd4(output reg3:0 sum, output reg c_out, input3:0 a,b, input c_in); endmodule 对模块中所用到的

40、所有信号(包括端口信号)都必须进行数据类型的定义。Verilog HDL语言提供了各种信号类型,分别模拟实际电路中的各种物理连接和物理实体。【例3.3】信号类型声明 reg cout; /定义信号cout的数据类型为reg reg7:0 out; /定义信号out的数据类型为8位reg wire A,B,C,D,F /定义信号A,B,C,D,F为wire(连线)型 信号类型声明 逻辑功能定义用于实现模块中的具体的功能。主要的方法有:赋值语句实现逻辑定义:用assign赋值语句【例3.4】assign F=(A&B)|(C&D);模块调用:指从模块模板生成实际的电路结构对象的操作,这样的电路结构

41、对象被称为模块实例,模块调用也被称为实例化。一个Verilog模块可以被任意多个其他模块调用。在Verilog 语言中,模块不能被嵌套定义,但是却可以包含其他模块的拷贝,即调用其他模块的实例。模块的定义和模块的实例是两个不同的概念,在一个设计中,只有通过模块调用(实例化)才能使用一个模块。逻辑功能定义always过程赋值:always块经常用来描述逻辑功能,实现时序逻辑电路。【例3.5】always过程实现计数器的过程。 always (posedge clk) /正沿触发 begin if(reset) out=0; else out=out+1; end函数和任务调用:模块调用和函数调用非

42、常相似,但是在本质上又有很大差别:一个模块代表拥有特定功能的一个电路块,每当一个模块在其他模块内被调用一次,被调用模块所表示的电路结构就会在调用模块代表的电路内部被复制一次(即生成被调用模块的一个实例);但是模块调用不能像函数调用一样具有“退出调用”的操作,因为硬件电路结构不会随着时间而发生变化,被复制的电路块将一直存在。Verilog语言要素 注释,在Verilog HDL中有两种格式的注释:/*第一种形式:可以扩展至多行* / /第二种形式:在本行结束。间隔符:包括空格字符(b)、制表符(t)、换行符(n)以及换页符。标识符:Verilog HDL中的标识符(identifier)可以是任

43、意一组字母、数字、$符号和_(下划线)符号的组合。标识符的第一个字符必须是字母或者下划线。另外,标识符是区分大小写的。关键字:所有的关键字都使用小写字母。运算符:Verilog提供了丰富的运算符。 Verilog常量Verilog HDL中有三类常量:整型;实数型;字符串型。整数型常量可以按如下两种方式描述:简单的十进制格式 +32 十进制数32 -15 十进制数-15基数表示法:;:定义以位计的常量的位长;:单引号是指定位宽格式表示法的固有字符,不能省略。:是基于base的值的数字序列,由相应基数格式的数字串组成。值x和z以及十六进制中的a到f不区分大小写。【例3.6】下面给出基数表示的具体

44、实例。 5O37 5位八进制数 4D2 4位十进制数 4B1x_01 4位二进制数 7Hx 7位x(扩展的x),即xxxxxxx 4hZ 4位z(扩展的z),即zzzz 4d-4 非法,数值不能为负 8 h 2A 8位十六进制数 3 b001 非法,和基数b之间不允许出现空格 (2+3)b10 非法,位长不能够为表达式整数型常量【例3.7】采用不同基数表示的例子 o721 9位八进制数 hAF 8位十六进制数【例3.8】补零填充的例子 10b10,左边添0占位,0000000010 10bx0 x1,左边添x占位, xxxxxxx0 x1【例3.9】数据被截断的例子 3b1001_0011与3

45、b011相等 5H0FFF与5H1F相等实数可以用下列两种形式描述:十进制计数法【例3.10】十进制计数法表示实数常量的例子 2.0,5.678,11572.12,0.1 2.为非法,因为小数点两侧必须要有1位数字科学计数法【例3.11】科学计数法表示实数常量的例子 23_5.1e2其值为23510.0;忽略下划线 3.6E2其值为360.0e(与E相同) 5E-4其值为0.0005 Verilog语言定义了实数如何隐式地转换为整数:实数通过四舍五入被转换为最相近的整数。实数型常量【例3.12】对实数四舍五入后的表示 42.446,42.45转换为整数42 92.5,92.699转换为整数93

46、 -15.62转换为整数-16 -26.22转换为整数-26字符串是双引号内的字符序列,用一串8位二进制ASC码的形式表示,每一个8位二进制ASC码代表一个字符。例如:字符串“ab”等价于16h 5758。如果字符串被用作Verilog表达式或复制语句的操作数,则字符串被看做无符号整数序列。字符串变量声明:字符串变量是寄存器型变量,它具有与字符串的字符数乘以8相等的位宽。字符串常量【例3.13】字符串变量的声明。 存储12个字符的字符串“Hello China!”需要8*12(即96位)宽的寄存器。 reg 8*12:1 str; initial begin str =“Hello China

47、!”; end字符串操作 可以使用Verilog HDL的操作符对字符串进行处理,被操作符处理的数据是8位ASC码的序列。在操作过程中,如果声明的字符串变量位数大于字符串实际长度,则在赋值操作后,字符串变量的左端(即高位)补0。【例3.14】字符串操作的例子module string_test; reg8*14:1 stringvar;initialbegin stringvar=“Hello China”; $display(“%s is stored as %h”,stringvar,stringvar); stringvar=stringvar.“!”; $display(“%s is

48、stored as %h”,stringvar,stringvar);endendmoduleVerilog常量-字符串常量输出结果为:Hello China is stored as 00000048656c6c6f20776f726c64Hello China! is stored as 48656c6c6f20776f726c64212121特殊字符:在某些字符之前加上一个引导性的字符(转移字符),这些的字符只能用于字符串中。 下表列出了这些特殊字符的表示和意义。字符意义 n换行符tTab键符号”符号”ddd3位八进制数表示的ASCII值(0d7)Verilog HDL有下列四种基本的值

49、:1)0:逻辑0或“假”状态;2)1:逻辑1或“真”状态;3)x(X):未知状态,对大小写不敏感;4)z(Z):高阻状态,对大小写不敏感。Verilog数据类型 在Verilog HDL中,根据赋值和对值保持方式不同,可将数据类型主要分为两大类:网络(net)型和变(Variable)型。这两类数据也代表了不同的硬件结构。网络和变量net表示器件之间的物理连接,需要门和模块的驱动。网络数据类型是指输出始终根据输入的变化而更新其值的变量,它一般指的是硬件电路中的各种物理连接。 没有声明的net的默认类型为1位(标量)wire类型。Verilog HDL禁止对已经声明过的网络、变量或参数再次声明。

50、 net(网络)型下面给出net声明的语法格式: range delay ,net_name; net_type:表示网络型数据数据的类型。range:指定数据为标量或矢量。默认为1位的标量;反之,由该项指定数据的矢量形式。delay:指定仿真延迟时间。net_name:net名称,一次可定义多个net,用逗号分开。【例3.15】网络的声明wand w; / 一个标量wand类型net tri 15: 0 bus; / 16位三态总线 wire 0: 31 w1, w2; / 两个32位wire,MSB为bit0 类型功能可综合性wire,tri标准内部连接线supply1,supply0电源

51、和地wor,trior多驱动源线或wand,triand多驱动源线与trireg能保存电荷的nettri1,tri0无驱动时上拉/下拉 常用的net型变量 网络和变量 -net(网络)型网络数据类型包含多种不同种类的网络子类型: wire型,tri型,wor型,trior型,wand型,triand型,trireg型,tri1型,tri0型,supply0型,supply1型。简单的网络类型说明语法为: net_kindmsb:lsbnet1,net2, . . . , netN; 网络型数据的默认初始化值为Z。带有驱动的网络型数据应当为它们的驱动输出指定默认值。trireg网络型数据时一个例

52、外。它的默认初始值为x,而且在声明语句中应当为其指定电荷量强度。 在一个网络型数据类型声明中,可以指定两类强度:电荷量强度(charge strength)驱动强度(drive strength)。 1)电荷量强度(charge strength)一个trireg网络型数据用于模拟电荷存储。电荷量强度可由下面的关键字来制定电容量的相对大小:small、medium、large。默认的电荷强度为medium。一个trireg网络型数据能够模拟一个电荷存储节点,该节点的电荷量将随时间而逐渐衰减。对于一个trireg网络型数据在仿真时,其电荷衰减时间应当制定为延迟时间。2)驱动强度(drive st

53、rength)在一个网络型数据的声明语句中如果对数据对象进行了连续赋值,就可以为声明的数据对象指定驱动强度。1wire和tri网络类型用于连接单元的连线wire是最常见的网络类型。连线与三态线(tri)网语法和语义一致;三态线可以用于描述多个驱动源驱动同一根线的网络类型;并没有其他特殊的意义。多个驱动源驱动一个连线(或三态网络),其有效值由下表确定。wire或tri01xz00 xx01x1x1XxxxxZ01xzwire型变量的定义格式如下:wire n-1:0 ,;其中name1,namen表示wire型名字。【例3.16】wire型变量的说明 wire L; /将电路的输出信号L声明为网

54、络型变量 wire 7:0 data bus; /声明一个8bit宽的网络型总线变量2wor和trior网络类型wor和trior用于连线型逻辑结构建模。当有多个驱动源驱动wor和trior型数据时,将产生线或结构。如果驱动源中任一个为1,那么网络型数据的值也为1。线或和三态线或(trior)在语法和功能上是一致的。如果多个驱动源驱动这类网,网的有效值由下表决定。wor或trior01xz001x011111xx1xxz01xz3wand和triand网络类型当有多个驱动源驱动线与网wand和triand时,网络的值为0。线与和三态线与(triand)网在语法和功能上是一致的。如果这类网络存在

55、多个驱动源,网络的有效值由下表决定。Wand或triand01xz00000101x1X0 xxxZ01xz4Trireg网络类型一个trireg网络型数据可以处于以下两种状态之一:1)驱动状态:当至少被一个驱动源驱动时,trireg网型数据有一个值(1、0、x)。判决值被导入trireg型数据,也就是trireg型网络的驱动值。2)电容性状态:如果所有驱动源都处于高阻状态(z),trireg网络型数据则保持它最后的驱动值。高阻值不会从驱动源导入trireg网络型数据。5tri0和tri1网络类型若无驱动源驱动,tri0的值为0,tri1的值为1。网络值的驱动强度都为pull。tri0相当于这

56、样一个wire型网络:有一个强度为pull的0值连续驱动该wire。同样,tri1相当于这样一个wire型网络:有一个强度为pull的1值连续驱动该wire。下表给出在多个驱动源情况下tri0或tri1网的有效值。tri0或tri101xZ00 xx01x1x1XxxxXZ01x0或16supply0和supply1网络类型supply0用于对“地”建模,即低电平0;supply1网用于对电源建模,即高电平1。 【例3.17】supply0和supply1网络类型描述 supply0 Gnd,ClkGnd; supply1 2:0 Vcc;7未说明的网络在Verilog HDL中,可不必声明某

57、种网络类型,默认为1位wire网络。可以使用default_nettype编译器指令改变这一隐式网络说明方式。使用方法如下: default_nettypenet_kind 例如,带有下列编译器指令 default_nettype wand 任何未被说明的网默认为1位线与网。1整型变量声明整型变量常用于对循环控制变量的说明,在算术运算中被视为二进制补码形式的有符号数。整型数据与32位的寄存器型数据在实际意义上相同,只是寄存器型数据被当做无符号数来处理。 【例3.18】整数变量的声明 integer i,j; integer31:0 D;需要注意的是虽然interger有位宽度的声明,但是int

58、eger型变量不能作为位向量访问。D6和D16:0的声明都是非法的。在综合时,integer型变量的初始值是x。变量数据类型2实数型变量声明 实数型数据在机器码表示法中是浮点型数值,可用于对延迟时间的计算。实数型变量是不可综合的。3时间型变量声明 时间型变量与整型变量类似,只是它是64位的无符号数。时间型变量主要用于对仿真时间的存储与计算处理,常与系统函数$time一起使用。4寄存器型变量声明 寄存器型变量对应的是具有状态保持作用的硬件电路,如触发器、锁存器等。寄存器型变量与网络络数据的区别主要在于:寄存器型变量保持最后一次的赋值,而wire型数据需要有连续的驱动。寄存器型变量只能在initi

59、al或always内部被赋值。寄存器型变量声明的格式如下: range , reg_name; reg_type为寄存器类型;range为矢量范围,MSB:LSB格式,只对reg类型有效;reg_name为reg型变量的名字,一次可定义多个reg型变量,使用逗号分开。 【例3.19】寄存器型变量的声明及使用module mult(clk, rst, A_IN, B_OUT);input clk,rst,A_IN;output B_OUT;reg arb_onebit = 1b0;always (posedge clk or posedge rst)begin if (rst) arb_oneb

60、it = 1b1; else arb_onebit = A_IN; endend B_OUT = arb_onebit;endmoduleVerilog HDL中的参数(parameter)既不属于变量类型也不属于网络类型范畴。参数不是变量,而是常量。用参数声明一个可变常量,常用于定义延时及宽度等参数。参数定义的格式:parameter par_name1=expression1, , par_namen=expression;par_name1,.par_namen为参数的名字;expression1,.,expression为表达式。参数【例3.20】参数的声明及使用parameter B

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论