《数字逻辑与EDA设计》课件-第5章_第1页
《数字逻辑与EDA设计》课件-第5章_第2页
《数字逻辑与EDA设计》课件-第5章_第3页
《数字逻辑与EDA设计》课件-第5章_第4页
《数字逻辑与EDA设计》课件-第5章_第5页
已阅读5页,还剩270页未读 继续免费阅读

下载本文档

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

文档简介

第5章基于EDA的数字逻辑电路设计基础

5.1EDA技术简介5.2EDA设计流程及工具5.3FPGA简介5.4IP核基础5.5EDA开发综合实例1:Modelsim的使用5.6EDA开发综合实例2:LiberoIDE完整设计流程5.7EDA开发综合实例3:SmartDesign的使用5.8本章小结过去40年,数字逻辑电路经历了巨大改进和提高,现实的需求促使数字逻辑电路的结构和功能变得越来越复杂,传统的基于中小规模集成电路(如74系列)及基于原理图的设计方法已经无法适应数字逻辑电路在功能、体积以及成本等方面的需要,同时也促使设计方法发生了巨大变化。因此,从20世纪70年代末期开始,在各大电子设计自动化(ElectronicDesignAutomation,EDA)公司、大学以及研究机构的共同努力下,出现了多种类型的硬件描述语言(HardwareDescriptionLanguage,HDL),用来描述数字逻辑电路的结构和功能。设计者采用HDL从更高的抽象层次对数字逻辑电路进行建模,使用EDA软件获得实际电路结构并对其功能和时序进行仿真和验证,已经成为现代数字逻辑电路设计的最佳方式。现场可编程门阵列(FieldProgrammableGateArray,FPGA)是一种半导体器件,可以在制造完成后进行编程。FPGA的硬件功能不是预先确定好的,而是支持对产品特性和功能进行编程,以适应新标准,即使产品已经在现场使用了,也可以针对某些应用重新配置硬件,故称为“现场可编程”。可以使用FPGA来实现专用集成电路(ApplicationSpecificIntegratedCircuit,ASIC)或专用标准产品(ApplicationSpecificStandardProduct,ASSP)完成的任何逻辑功能,而且在产品发售后也能够对功能进行更新,在很多应用中都具有一定优势。5.1EDA技术简介

5.1.1EDA技术及其发展

最早的电子设计自动化EDA软件仅仅是一些绘图软件,包括绘制电路原理图、印刷电路板图、集成电路芯片板图的软件,并能进行一些简单的数值计算等,随后又出现了自动布局布线工具,这类软件被称为第一代EDA软件。后来又出现了第二代EDA软件,可以通过硬件描述语言输入生成设计,它包括逻辑综合、仿真等。近年来又出现了第三代EDA软件,称为电子系统设计自动化(ESDA),可以通过概念输入(框图、公式等)自动生成各种设计结果,包括ASIC芯片设计结果、电路原理图、印刷电路板(PrintedCircuitBoard,PCB)板图以及软件等,并且可以进行机电一体化设计。与传统的设计方法不同,现代电子工程师们设计系统的过程首先是描述系统,然后用EDA工具在计算机上进行系统级仿真,设计适合自己用的ASIC芯片;用通用和专用芯片构成系统,进行功能模拟和带延时的仿真;布PCB板,对PCB板进行仿真,最终生产调试成功。

在计算机技术的推动下,电子技术在20世纪末获得了飞速的发展,现代电子产品几乎渗透于社会的各个领域,有力地推动了社会生产力的发展和信息化程度的提高,同时又促使现代电子产品性能的进一步提高,产品更新换代的节奏也越来越快。电子技术发展的根基是微电子技术的进步,它表现在大规模集成电路加工技术,即半导体工艺技术的发展上。表征半导体工艺水平的线宽已经达到28nm以下,并还在不断地缩小;在硅片单位面积上集成了更多的晶体管;集成电路设计在不断地向超大规模、极低功耗和超高速的方向发展。同时,这些专用集成电路(ASIC)的设计成本还在不断降低,而在功能和结构上,现代的集成电路已能实现片上系统(SystemonaChip,SoC)。

EDA技术利用计算机完成电子系统设计,是一种节省设计而又高效率的现代设计理念。尤其是可编程器件和软件仿真模拟方法的使用,给传统的电路设计方法带来了重大的变革,使得设计工程师们从繁杂而凌乱的工作中解脱出来,而把重点放在电路的设计上。EDA工具以计算机为工具,设计者只需要完成对系统功能的HDL描述,就可以由计算机软件完成数字系统的逻辑化简、逻辑分割、逻辑综合、结构综合(布局布线)以及逻辑优化和仿真测试等功能,直至实现既定性能的电子线路系统。EDA技术使得设计者的工作仅限于利用软件的方式,即利用HDL和EDA软件来完成对系统硬件功能的实现。5.1.2EDA技术实现的目标

一般来说,利用EDA技术进行数字逻辑电路设计的最后目标是完成ASIC或PCB的设计和实现,如图5-1所示。其中,PCB设计指的是电子系统的印刷电路板设计,从电路原理图到PCB上元件的布局、布线、阻抗匹配、信号完整性分析及板级仿真,到最后的电路板机械加工文件生成,这些都需要相应的计算机EDA工具软件辅助设计者来完成,这仅是EDA技术应用的一个重要方面。ASIC作为最终的物理平台,集中容纳了用户通过EDA技术将电子应用系统的既定功能和技术指标具体实现的硬件实体。图5-1EDA技术实现的目标5.1.3EDA和传统设计方法的比较

在传统的数字逻辑电路或集成电路(IntegratedCircuit,IC)设计中,手工设计占有较大的比例。手工设计一般先按电子系统的具体功能要求进行功能划分,然后对每个子模块画出真值表,用卡诺图进行手工逻辑化简,写出布尔表达式,画出相应的逻辑线路图,再据此选择元器件,设计电路板,最后进行实测与调试。手工设计方法的缺点是:

(1)对于复杂电路的设计、调试十分困难。

(2)由于无法进行硬件系统仿真,如果某一过程存在错误,则查找和修改十分不便。

(3)设计过程中产生大量文档,不易管理。

(4)对于IC设计而言,设计实现过程与具体生产工艺直接相关,因此可移植性差。

(5)只有在设计出样机或生产出芯片后才能进行实测。

相比之下,EDA技术有着很大的不同:

(1)用HDL对数字逻辑电路进行抽象的行为与功能描述,以及具体的内部线路结构描述,从而可以在电子设计的各个阶段、各个层次进行计算机模拟验证,保证设计过程的正确性,大大降低设计成本,缩短设计周期。

(2) EDA工具之所以能够完成各种自动设计过程,关键是有各类库的支持,如逻辑仿真时的模拟库、逻辑综合时的综合库、版图综合时的版图库、测试综合时的测试库等。这些库都是EDA公司与半导体生产厂商紧密合作、共同开发的。

(3) HDL也大多是文档型的语言(如VerilogHDL),极大简化了设计文档的管理。

(4) EDA技术中最具现代电子设计技术特征的功能,是日益强大的逻辑设计仿真测试技术。使用EDA仿真测试技术,只需通过计算机模拟,就能对所设计的电子系统从各种不同层次的系统性能特点,完成一系列准确的测试与仿真操作;在完成实际系统的安装后,还能对系统上的目标器件进行所谓的“边界扫描测试”。这一切都极大地提高了大规模系统电子设计的自动化程度。

(5)无论传统的应用电子系统设计得如何完美,使用了多么先进的功能器件,都掩盖不了一个无情的事实,就是该系统对于设计者来说,没有任何自主知识产权可言,因为系统中的关键性器件往往并非出自设计者之手,这将导致该系统的应用直接受到限制。基于EDA技术的设计则不同,使用HDL表达的专用功能设计在实现目标方面有很大的可选性,它既可以用不同来源的通用FPGA/CPLD实现,也可以直接以ASIC来实现,设计者拥有完全的自主权,不再处处受到限制。

(6)传统的电子设计方法至今没有任何标准加以约束,因此设计效率低、系统性能差、开发成本高、市场竞争力小。而EDA技术的设计语言是标准化的,不会由于设计对象的不同而改变;其开发工具是规范化的,EDA软件平台支持任何标准化的设计语言;其设计成果是通用的,具有规范的接口协议;具有良好的可移植性与可测试性,为系统开发提供了可靠的保证。

(7)从电子设计方法学来看,EDA技术最大的优势就是能将所有的设计环节纳入统一的自顶向下的设计方案中。

(8) EDA不但在整个设计流程上充分利用计算机的自动设计能力、在各个设计层次上利用计算机完成不同内容的仿真模拟,而且在系统板设计结束后仍可利用计算机对硬件系统进行完整的测试。而传统的设计方法只能在最后完成的系统上进行局部的且仅限于软件的仿真调试,在整个设计的中间过程是无能为力的。5.1.4EDA技术的发展趋势

随着市场需求的增长、集成工艺水平及计算机自动化设计技术的不断提高,单片系统成为IC设计的发展方向。这一发展趋势具体表现在如下几个方面:

(1)超大规模集成电路的集成度和工艺水平不断提高,深亚微米(Deep-Submicron)工艺(如65nm、45nm、28nm)已经走向成熟,在一个芯片上完成系统级的集成已成为可能。

(2)由于工艺线宽的不断减小,在半导体材料上的许多寄生效应已经不能简单地被忽略,这就对EDA工具提出了更高的要求,同时也使得IC生产线的投资更为巨大,这一变化使得可编程逻辑器件开始进入传统的ASIC市场。

(3)市场对电子产品提出了更高的要求,如进一步降低成本、减小系统的体积等,从而对系统的集成度不断提出更高的要求;同时,设计的速度也成为一个产品能否成功的关键因素,从而促使EDA工具应用更为广泛。

(4)高性能的EDA工具得到长足的发展,其自动化和智能化程度不断提高,为嵌入式系统设计提供了功能强大的开发环境。

(5)计算机硬件平台性能大幅度提高,为复杂的SoC设计提供了物理基础。

此外,随着系统开发对EDA技术的目标器件各种性能要求的提高,ASIC和FPGA将更大程度地相互融合,在新一代的ASIC器件中留有FPGA的空间。如果希望改变设计,或者由于开始工作时没有条件完成足够的验证测试,以后也可以根据要求对其进行编程,这就使得ASIC设计人员有了一定的再修改自由度。可重构计算的概念已逐渐明晰,它试图在通用的计算机体系架构中引入新的计算模式,通过CPU加入可以动态重构的可编程逻辑,为每一个不同应用加载不同的可编程逻辑配置,以优化计算速度,这种模糊软硬件界限的技术或将获得长足的发展。

现在,传统ASIC与FPGA之间的界限正变得日益模糊,系统级芯片不仅集成了RAM和微处理器,也集成了FPGA。整个EDA和IC设计工业都在朝这个方向发展。

5.2EDA设计流程及工具

5.2.1数字系统设计的一般步骤

数字系统的设计分为多个步骤,一般包括如图5-2所示的过程。

EDA工具的设计就是按照数字逻辑的设计流程进行的。由于数字系统设计的过程有多个步骤,因此需要用到多个EDA工具。图5-2数字系统一般设计流程5.2.2EDA工具及其作用

EDA工具在EDA技术应用中占据着极其重要的位置。EDA的核心是利用计算机完成电子设计全程自动化,因此基于计算机环境的EDA软件的支持是必不可少的。

在数字系统设计的不同阶段和层次,需要使用不同的EDA软件工具。在这里,结合本书配套的实验设备对相应的EDA工具进行介绍。

1.设计输入

设计输入编辑器在多样性、易用性和通用性方面的功能不断增强,标志着EDA技术中自动化设计程度的不断提高。在EDA软件平台上开发时,首先要将数字系统以一定的表达方式输入计算机。通常,EDA工具的设计输入可分为以下类型:

(1)图形输入。图形输入通常包括原理图输入、状态图输入和波形图输入等方法。

状态图输入方法就是根据电路的控制条件和不同的转换方式,用绘图的方法在EDA工具的状态图编辑器上绘出状态图,然后由EDA编译器和综合器将此状态图编译、综合成电路网表。波形图输入方法则是将待设计的电路看成是一个黑盒子,只需告诉EDA工具该黑盒子电路的输入和输出时序波形图,EDA工具就可以完成黑盒子电路的设计。

原理图输入方法是一种类似于传统电子设计方法的原理图编辑输入方式,即在EDA软件的图形编辑界面上绘制能完成特定功能的电路原理图。原理图由逻辑器件(符号)和连接线构成,图中的逻辑器件可以是EDA软件库中预制的功能模块,如与门、非门、或门、触发器、各种宏功能模块。

(2) HDL文本输入。这种方式与传统的计算机软件语言编辑输入基本一致,就是将使用了某种HDL的电路设计文本,如VHDL或VerilogHDL的源程序进行输入编辑。

2.综合

综合(Synthesis)就是把设计抽象层次中的一种表述转化成另一种表述的过程。进一步讲,综合就是将用行为和功能层次表达的数字逻辑电路转换为由低层次的便于具体实现的模块组合而成的系统的过程。

设计过程通常从高层次的行为描述开始,以最底层的结构描述结束,每个步骤都是一个综合过程。这些步骤包括:

(1)从自然语言表述转换到HDL算法表述,是自然语言综合。

(2)从算法表述转换到RTL表述,即从行为域到结构域的综合,是行为综合。

(4)从逻辑门表述转换到版图表述(ASIC设计),或转换到FPGA的配置网表文件,可称为版图综合或结构综合。

一般地,综合是仅对应于HDL而言的。利用HDL综合器对设计进行综合是十分重要的一步,因为这一综合过程将把软件设计的HDL描述与硬件结构联系起来,是将软件转化为硬件电路的关键步骤,是文字描述与硬件实现的一座桥梁。因此,综合就是将电路的高级语言(如行为描述)转换成低级的、可与FPGA/CPLD的基本结构相映射的网表文件或程序的过程。当输入的HDL文件在EDA工具中检测无误后,首先面临的是逻辑综合,因此要求HDL源文件中的语句都是可综合的。

在综合之后,HDL综合器一般都可以生成一种或多种文件格式的网表文件,如EDIF、VHDL、VerilogHDL等标准格式,在网表文件中用各自的格式描述电路的结构,如在HDL网表文件中采用HDL的语法,用结构描述的风格重新诠释综合后的电路结构。整个综合过程就是将设计者在EDA平台上编辑输入的HDL文本、原理图或状态图描述,依据给定的硬件结构组件和约束控制条件进行编译、优化、转换和综合,最终获得门级电路甚至更底层的电路描述网表文件。由此可见,综合器工作前,必须给定最后实现的硬件结构参数,它的功能就是将软件描述与给定的硬件结构用某种网表文件的方式对应起来,形成相应的映射关系。如果把综合理解为映射过程,那么显然这种映射不是唯一的,并且综合的优化也不是单纯的或一个方向的。为达到速度、面积、性能的要求,往往需要对综合加以约束,称为综合约束。

3.布局布线(适配)

适配器也称为结构综合器,它的功能是将由综合器产生的网表文件配置于指定的目标器件中,使之产生最终的下载文件,如sof、pof格式的文件。适配所选定的目标器件必须属于原综合器指定的目标器件系列。通常,EDA软件中的综合器可由专业的第三方EDA公司提供,而适配器则须由FPGA/CPLD供应商提供,因为适配器的适配对象直接与器件的结构细节相对应。

适配器的功能就是将综合后的网表文件针对某一具体的目标器件进行逻辑映射操作,其中包括底层器件配置、逻辑分割、优化、布局布线操作。适配完成后可以利用适配所产生的仿真文件作精确的时序仿真,同时产生可用于编程的文件。

4.仿真

仿真就是让计算机根据一定的算法和一定的仿真库对EDA设计进行模拟,以验证设计,排除错误。仿真是EDA设计过程中的重要步骤,它包括两种不同级别的仿真测试。

(1)功能仿真:就是直接对HDL、原理图描述或其他描述形式的逻辑功能进行测试模拟,以了解其实现的功能是否满足原设计要求的过程。功能仿真过程不涉及任何具体器件的硬件特性,不经历适配阶段,在设计项目编辑、编译(或综合)后即可进入门级仿真器进行模拟测试。直接进行功能仿真的好处是设计耗时短,对硬件库、综合器等没有任何要求。

(2)时序仿真,就是接近真实器件运行特性的仿真,仿真文件中已包含了器件的硬件特性参数,因而仿真精度高。但时序仿真的仿真文件必须来自针对具体器件的适配器。综合后所得到的EDIF等网表文件通常作为FPGA适配器的输入文件,FPGA适配器输出的仿真网表文件中包含了精确的硬件延时信息。

5.下载和硬件测试

把适配后生成的下载或配置文件,通过编程器或编程电缆向FPGA或CPLD进行下载,以便最终验证设计项目在目标系统上的实际工作情况,以排除错误,改进设计。

5.3FPGA简介

1984年,Xilinx公司发布了第一个FPGA,当时的应用只是用这些器件去实现粘合逻辑(glue-logic)、非常简单的状态机和相当有限的数据处理等。而今天,FPGA已经是最令人激动的器件类型之一。除了具有可编程的体系结构外,它们还包含大量的存储单元和成百上千的硬宏(hard-macro),例如乘法器、加法器和数字信号处理(DSP)模块等。各种类型的FPGA器件的应用范围之广让人难以置信,从电池供电的便携式手持设备,到自动控制和娱乐系统,再到SETI(搜索地外文明)计划中用于搜寻外太空生命的每秒万亿次的计算引擎等。采用FPGA(而不是ASIC或者ASSP)进行设计的优势包括:

迅速进行原型开发;

缩短产品面市时间;

能够在现场重新编程,进行调试;

较低的一次性工程费用(Non-RecurringEngineering,NRE)成本;

较长的产品生命周期,降低了产品过时的风险。

目前以HDL所完成的电路设计,可以经过简单的综合与布局,快速地烧录至FPGA上进行测试,是现代IC设计验证的技术主流。

FPGA含有名为逻辑单元(LogicElement,LE)的可编程逻辑,以及分层的可配置互联,支持LE的物理连接。这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如AND、OR等)或者更复杂一些的组合功能(如解码器、数学方程式)。在大多数的FPGA里面,这些可编辑的元件里也包含记忆元件如触发器(Flip-flop)或者其他更加完整的记忆块。

系统设计师可以根据需要通过可编辑的连接把FPGA内部的逻辑块连接起来,就好像一个电路试验板被放在了一个芯片里。一个出厂后的成品FPGA的逻辑块连接可以按照设计者的想法而改变,完成所需要的逻辑功能。5.3.1关于FPGA

在此引用两个来自互联网的对FPGA的定义。

维基百科的定义:现场可编程逻辑门阵列(FPGA),是一个含有可编辑元件的半导体设备,是可供使用者现场程式化的逻辑门阵列元件。

百度百科的定义:FPGA即现场可编程门阵列,它是在可编程逻辑阵列(ProgrammableArrayLogic,PAL)、通用阵列逻辑(GenericArrayLogic,GAL)、复杂可编程逻辑设备(ComplexProgrammableLogicDevice,CPLD)等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。在介绍FPGA的教科书及参考文献中,经常会出现的一些词汇:

(1)结构(Fabric):针对硅半导体芯片来说,它是指器件的基础结构。

(2)几何结构:指的是建造在芯片上的独立结构的尺寸,比如场效应管(FET)的沟道。这些结构小到令人难以置信。在20世纪80年代的早中期,器件是基于3μm的几何结构,这意味着它们的最小结构在尺寸上只有1m的百万分之三(简称“基于3μm技术”的IC)。

(3)工艺节点:指新的几何结构。在20世纪90年代,基于1μm几何结构的器件开始出现,而且特征尺寸在这十年中持续快速减小。21世纪,高性能IC已经具有0.18μm的几何结构了。2002年,发展到了0.13μm;2003年,基于0.09μm的器件开始出现。目前,28nm的器件也已应用到实际的产品中了。

所有小于0.5μm的几何结构被划分为深亚微米(Deepsub-micron,DSM),按照流行的说法,我们正在向超深亚微米(UltraDeepsub-micron,UDSM)领域迈进。5.3.2FPGA的基本分类

按照原理和技术,FPGA可分为以下三类:

(1)基于静态内存(StaticAccessMemory,SRAM)技术的FPGA:系统内可编程和再程式化(re-programmable),需要外部启动元件(externalbootdevices),属于CMOS器件。

(2)基于反熔丝(Antifuse)技术的FPGA:可烧录一次,通常为CMOS器件。其最大的优点是:它的内部互联结构是“防辐射的”,也就是说,它相对不受电磁辐射的影响。这对军事和宇航应用具有特别的吸引力。

(3)基于EEPROM(ElectricallyErasablePROM)/FLASH技术的FPGA:编程之后,它们的内部数据就不会丢失,所以系统第一次上电时,这些器件将会“立即”运行。5.3.3FPGA的体系结构

FPGA主要由大量相对较小的可编程逻辑块“岛”嵌入在可编程互联“海”里构成,如图5-3所示。

可编程逻辑块按照粒度分为细粒度、中等粒度和粗粒度三种。细粒度逻辑块实现非常简单的逻辑,如3输入函数、基本门电路或存储元件(触发器等);粗粒度逻辑块包含的逻辑数量比细粒度要多很多,如可能包含4个多路复用器、4个D触发器等;而中等粒度的逻辑块则处于两者之间。图5-3FPGA结构

1.基于多路复用器(MUX)的体系结构

例如一个3输入函数y=(a&b)|c,可利用包含多路复用器的逻辑块实现,如图5-4所示。

逻辑块的每个输入都有一个逻辑0,一个逻辑1,或者一个来自其他逻辑块或器件基本输入信号(a、b或c)的真值或反值,这就允许每个逻辑块可以用多种方式来配置,以实现多种可能的功能(图中的x表示这个输入不管与0连接还是与1连接都无所谓)。

2.基于查找表(LUT)的体系结构

LUT的输入信号作为其索引(指针),然后从查找表得到相应的输出。查找表的内容是按照每种输入组合对应的期望输出编排的。如针对y=(a&b)|c的实现,其查找表数据如图5-5所示。图5-4多路复用器图5-5查找表5.3.4FPGA主流厂商简介

FPGA的主流厂商包括:

(1) Xilinx和Altera:是目前FPGA的领导厂商。

(2) Actel:生产基于Flash架构的FPGA,具有单芯片、低成本、高可靠性、高安全性、低功耗等特征。

(3) LatticeSemiconductor:包括SRAM以及non-volatile、flash-basedFPGAs。本书所有例子均是基于ActelFPGA及相应软件环境进行设计及验证的,爱特公司(ActelCorporation,现被Microsemi收购)是非易失性、低功耗及混合信号FPGA,以及可编程逻辑解决方案的全球领导厂商。爱特公司致力通过运用业界最低功耗的FPGA系列,以及独有的混合信号FPGA,在芯片及系统级上进行功耗管理,为系统设计人员提高竞争优势。ActelFPGA的主要产品包括FlashFPGA产品、反熔丝FPGA产品、大规模系统级FPGA和为之服务的相关产品。读者可以访问爱特公司的网站()以获得更为全面的技术支持。5.3.5集成开发环境LiberoIDE

LiberoIDE是Actel公司的FPGA集成开发环境,提供了完整的FPGA设计工具,支持原理图、HDL输入,并以GUI方式显示FPGA的设计过程。LiberoIDE不仅带有Actel自身高性能的布局布线工具(Designer),还集合了业界极具影响力的仿真(Modelsim)、综合(Synplify)等工具。

LiberoIDE的优势是能简化设计过程,方便用户使用,使设计得到最佳优化,提高系统性能。如图5-6所示,LiberoIDE提供了清晰明了的开发流程,并提供了一些Actel特有的资源。图5-6LiberoIDE运行界面在根据开发流程进行开发时,LiberoIDE会根据需要调用不同的工具。除了集成了Modelsim和Synplify外,LiberoIDE还集成了以下的软件:

(1) HDLEditer:可通过HDLEditer输入HDL语言代码,支持VerilogHDL和VHDL两种语言的输入。HDL语言输入最常用,移植性也最好。

(2) SmartDesign:可基于原理图和模块输入设计,采用图形化的输入方式,方便连接和直观地校验设计的正确性。

(3) Designer:Actel公司自身提供的针对FPGA的高效布局布线工具,可实现网表到实际目标器件(FPGA)的变换,将电路方案中的逻辑元件分解布局,确定如何布线,如何连接逻辑元件等设计。还可通过Designer生成反标注文件和最终的编程下载文件,可用图形化方式管理约束管脚、提供时序约束和功耗分析功能。

(4) FlashPro:Actel公司提供的编程下载软件,支持所有的ActelFPGA器件,可执行下载文件、设置/擦除密码、校验、读取配置信息等任务。

5.4IP核基础

IP(IntellectualProperty)就是常说的知识产权,是指完成某种功能的虚拟电路模块,也称之为虚拟部件。它是指利用硬件描述语言(如VerilogHDL等)描述的,经过严格验证的具有一定功能的电路模块。

美国著名的Dataquest咨询公司将半导体产业的IP定义为“用于ASIC或FPGA中的预先设计好的电路功能模块”。百度百科的定义是:IP核(IntellectualPropertycore)是一段具有特定电路功能的硬件描述语言程序,该程序与集成电路工艺无关,可以移植到不同的半导体工艺中去生产集成电路芯片。

IP的内涵有如下明确的界定:

(1)基于易于重用而专门设计。

(2)基于最优化指标而设计。优化的目标包括芯片的面积最小、运算速度最快、功耗最低、工艺容差最大。

(3)基于标准而设计。包括IP重用所需的参数、文档、检验方式、接口、片内总线协议等。5.4.1IP技术概述

1.IP技术

IP的概念早已在数字系统设计中得以使用,标准单元库(StandardCellLibrary)中的功能单元就是IP的一种形式。IC生产厂商(Foundry)为了扩大业务,通常会提供精心设计并经过工业验证的标准单元,以吸引IC设计公司(Fabless)成为其客户。

IP核的优化设计和重用就是IP技术,还包括设计思想、设计方法、设计工具、工艺与布局布线等的设计重用(DesignbyReuse)以及可重用性设计(DesignforReuse),即所有的包含了智力因素的设计结果都在重用之列。

IP技术包括IP开发及IP复用两个方面:

(1) IP开发:首先要求整个设计流程一致性要好,从规格定义到产品化每一个设计阶段、每一个步骤都必须严格遵循已经定义的设计规则和操作规范,同时要求每一个项目的开发环境,包括设计策略、流程和EDA开发工具都要保持高度的一致性以便于交流和复用。其次,IP开发强调没有文档的工作是无效的工作。

(2) IP复用:指利用预先设计好和预先充分验证的IP模块进行功能组装来设计IC的方法。

IP技术的本质特征是功能模块的可复用性,其基本要求是可移植性好,而设计文档的质量(IP核的应用特点和限制条件需在设计文档中详细说明)是可移植性好坏的重要体现。设计复用的最终目标是建立一个包含软硬件模块的资源库。该库的模块包含各个层次(从物理层到系统层)的描述。

2.IP核的分类

(1)硬IP模块(HardCore)。IP硬核是基于半导体工艺的物理设计,已有固定的拓扑布局和具体工艺,并已经过工艺验证,具有可保证的性能。其提供给用户的形式是电路物理结构掩膜版图和全套工艺文件,是可以拿来就用的全套技术。硬IP是IP模块的最深层次,涉及内容广泛,它也是最主要的形式。

硬核提供设计的最终产品:掩膜,以经过完全的布局布线的网表形式提供。这种硬核既具有可预见性,同时还可以针对特定工艺或购买商进行功耗和尺寸上的优化。尽管硬核由于缺乏灵活性而可移植性差,但由于无须提供寄存器传输级(RTL)文件,因而更易于实现IP保护。其电路布局和工艺是固定的,有全物理的晶体管和互连掩膜信息,完成了全部的前端和后端设计,制造也已固定。硬IP模块可提供可预测的性能和快速的设计。

(2)软IP模块(SoftCore)。软核是用Verilog或VHDL等硬件描述语言描述的功能块,在抽象的较高层次上对电路用硬件描述语言进行描述,包括逻辑描述、网表和用于测试的文档。软IP模块需要综合和布局布线才能完成核的设计,但是并不涉及用什么具体电路元件实现这些功能。软IP通常是以HDL源文件的形式出现的,应用开发过程与普通的HDL设计也十分相似,只是所需的开发硬软件环境比较昂贵。软IP的设计周期短,设计投入少;由于不涉及物理实现,为后续设计留有很大的发挥空间,增大了IP的灵活性和适应性。其主要缺点是在一定程度上使后续工序无法适应整体设计,从而需要一定程度的软IP修正,在性能上也不可能获得全面的优化。由于软核是以源代码的形式提供,尽管源代码可以采用加密方法,但其知识产权保护问题不容忽视。

软IP是设计投入最少,只完成RTL级的行为设计,以HDL描述文本的形式提交使用。在使用前,这个HDL描述一定经过仿真验证,使用者可以用它综合出正确的门级网表。软IP一定是优化的行为级设计,与其它设计相比,它所需的硬件数量最小。

(3)固IP模块(FirmCore)。固核则是软核和硬核的折衷,除了完成软核所有的设计外,还完成了门级电路综合和时序仿真等设计环节,一般以门级电路网表的形式提供给用户。

大多数应用于FPGA的IP内核均为软核,软核有助于用户调节参数并增强可复用性。软核通常以加密形式提供,这样实际的RTL对用户是不可见的,但布局和布线灵活。在这些加密的软核中,如果对内核进行了参数化,那么用户就可通过头文件或图形用户接口(GUI)方便地对参数进行操作。对于那些对时序要求严格的内核(如PCI接口内核),可预布线特定信号或分配特定的布线资源,以满足时序要求。这些内核可归类为固核,由于内核是预先设计的代码模块,因此这有可能影响包含该内核的整体设计。由于内核的建立、保持时间和握手信号都可能是固定的,因此其它电路的设计都必须考虑与该内核进行正确的接口。如果内核具有固定布局或部分固定的布局,那么还将影响其它电路的布局。

固核是以RTL代码和对应具体工艺网表的混合形式提供的,是一种可综合的并带有布局规划的软核。目前的设计复用方法在很大程度上要依靠固核,将RTL描述结合具体标准单元库进行逻辑综合优化,形成门级网表,再通过布局布线工具最终形成设计所需的硬核。

3.IP核的特征

(1)可读性:只有详细了解固核软核的功能和算法,才能正确使用和充分发挥IP核的优点。

(2)设计的延展性和工艺适应性:当IP核被用到不同的领域时,不需要做重大的修改,就能方便地使用。同时,当采用新工艺和工艺改进时,IP核能较容易地进行设计改进或不需做修改。

(3)可测性:除了对IP核进行单独的测试外,还要能够在IP核应用到的系统环境中进行测试。

(4)端口定义标准化:IP核的端口需进行严格的定义,主要包括端口信号的逻辑值、物理值、信号传输频率、传输机制等。

(5)版权保护:采用加密技术或在工艺实现时添加保密技术。5.4.2ActelIP核简介

在Actel免费的开发工具LiberoIDE中提供了常用的IP核,包括:

ActelMacros:包括针对ActelFPGA的基本单元电路模块;

BasicBlocks:包括几乎所有的常用中规模数字逻辑器件;

BusInterfaces:包括ARM总线及PCI总线标准单元;

Clock&Management:包括CCC及PLL单元电路;

DSP:包含经过验证的常用DSP单元;

Memory&Controllers:包括各种存储器的布署及控制器;

Peripherals:包括几乎所有常用的IO设备接口;

Processors:包括针对不同器件适用的CoreABC,Core8051s,CoreMP7,CortexM1,CortexM3。

由于IP核的内容非常丰富,其详细的介绍请参考ACTEL()的官方网站及LiberoIDE的说明文档。

5.5EDA开发综合实例1:Modelsim的使用

在此讨论实现1位全加器的多种方法,并使用Modelsim进行功能仿真。本例与4.2节讨论的2选1MUX例子相比,增添了更多内容:

设计难度更大一些,更具代表性;

列举了多种实现方法,增加了混合编程风格的内容;

Modelsim的使用和操作方式与4.2.5节中的不同,虽然都可以达到仿真的目的,但此例的操作更详细和规范。5.5.1门级(结构)风格的描述

在此使用门级风格描述一个全加器电路,该实例基于图5-7所示的结构图。

以下使用内置门原语对一位全加器的结构进行门级风格描述:

moduleFA_struct(A,B,Cin,Sum,Cout);

inputA,B,Cin;

outputSum,Cout;

wireS1,T1,T2,T3;

图5-7一位全加器的结构图

xorX1(S1,A,B);

//调用一个内置的异或门,器件名为xor,代码实例化名为X1;

//S1,A,B表明该器件管脚的实际连接线的名称,A、B是输入,S1是输出。

xorX2(Sum,S1,Cin);

andA1(T3,A,B);

andA2(T2,B,Cin);

andA3(T1,A,Cin);

orO1(Cout,T1,T2,T3);

endmodule

该一位全加器由两个异或门、三个与门、一个或门构成。S1、T1、T2、T3则是门与门之间的连线;xor、and、or是VerilogHDL内置的门器件。

5.5.2数据流风格的描述

以下使用数据流风格描述一位全加器:

moduleFA_flow1(A,B,Cin,Sum,Cout);

inputA,B,Cin;

outputSum,Cout;

wireS1,T1,T2,T3;

assignS1=A^B;

assignSum=S1^Cin;

/*以上2句可合并为1句:

ssignSum=A^B^Cin; */

assignT1=A&Cin;

assignT2=B&Cin;

assignT3=A&B;

assignCout=T1|T2|T3;

/*以上4句可合并为1句:

assignCout=(A&Cin)|(B&Cin)|(A&B);*/

endmodule

各assign语句是并行执行的,即各语句的执行与语句的编写顺序无关。如上代码中,当A有变化时,S1、T3、T1将同时变化,S1的变化又会造成Sum的变化。

以上代码中包含6个assign连续赋值,是为了更直观地描述其电路结构,但对于抽象层次更高的数据流风格,可以不按结构的方式进行描述。

以下为第2种描述方法,采用更加高级(更趋于行为逻辑)的描述方式:

moduleFA_flow2(A,B,Cin,Sum,Cout);

inputA,B,Cin;

outputSum,Cout;

wireSum,Cout;

assign{Cout,Sum}=A+B+Cin;

endmodule5.5.3行为风格的描述

以下使用行为风格描述方式给一位全加器建模:

moduleFA_behav1(A,B,Cin,Sum,Cout);

inputA,B,Cin;

outputSum,Cout;

regSum,Cout;

always@(AorBorCin) //敏感表,A、B、Cin发生变化时触发运行

begin//begin和end之间的语句顺序执行,属于串行语句

Sum=(A^B)^Cin;

Cout=(A&Cin)|(B&Cin)|(A&B);

end

endmodule相对于数据流风格的第2种方法,行为风格的程序如下:

moduleFA_behav2(A,B,Cin,Sum,Cout);

inputA,B,Cin;

outputSum,Cout;

regSum,Cout;

always

@(AorBorCin)begin

{Cout,Sum}=A+B+Cin;//使用拼接运算符

end

endmodule

{Cout,Sum}表示对位数的扩展,两个1bit相加,和有两位,低位放在Sum变量中,进位放在Cout中。此段代码更接近我们的语言风格,更容易理解,并不需要画出结构图就可以写出实现的代码。

5.5.4混合风格的描述

在模块中,结构的和行为的编程风格可以自由混合,模块描述中可以包含门的实例引用、模块实例化语句、连续赋值语句、always语句和initial语句的混合。来自门或连续赋值语句的值能够用于触发always语句和initial语句;来自always语句和initial语句的值能够驱动门或开关。以下为混合设计方式的一位全加器的描述。

moduleFA_Mix(A,B,Cin,Sum,Cout);

inputA,B,Cin;

outputSum,Cout;

regCout;

regT1,T2,T3; //在always块中被赋值的变量应定义为reg型

wireS1;

xorX1(S1,A,B); //门实例语句

@(AorBorCin)

begin

T1=A&Cin;

T2=B&Cin;

T3=A&B;

Cout=(T1|T2)|T3;

end

assignSum=S1^Cin; //连续赋值语句

endmodule

只要A或B上有事件发生,门实例语句即被执行。只要A、B或Cin上有事件发生,就执行always语句,并且只要S1或Cin上有事件发生,就执行连续赋值语句。5.5.5编写测试平台

测试平台程序如下:

moduletestFA;

regpa,pb,pCin;

wireSum,Cout;

FA_behav2fadd(pa,pb,pCin,Sum,Cout);//调用FA_behav2模块,按端口顺序对应方式连接initial

begin

pa=0;pb=0;pCin=0;

#5pCin=1;

#5pb=1;

#5pCin=0;

#5pa=1;

#5pCin=1;

#5pb=0;

#5pCin=0;

end

initial

$monitor(“time=%t,a=%b,b=%b,Cin=%b,Sum=%b,

Cout=%b”,$time,pa,pb,pCin,Sum,Cout);

//调用系统任务$monitor,当pa、pb、pCin、py中任一个发生变化时就输出显示

endmodule

代码中所调用模块为“FA_behav2”,是根据实际代码中所定义的全加器模块名称进行调用的;中间从“begin”到“end”部分的代码,实现每过5个单位时间改变一下输入,实现“pa”、“pb”、“pCin”的值按照“000-001-011-010-110-111-101-100”的顺序发生变化。5.5.6在Modelsim中进行仿真

在此使用前述的代码(1位全加器及测试平台),在Modelsim中进行仿真,验证是否能得到正确的运行结果。

1.新建工程

运行Modelsim软件,选择“File”→“New”菜单中的“Project”,在弹出的对话框中输入项目名称和项目保存路径,如图5-8所示。

2.创建程序文件(1位全加器)

在接下来弹出的“AdditemstotheProject”对话框中选择“CreateNewFile”,输入文件名,语言类型选择“Verilog”,如图5-9所示。图5-8建立新工程图5-9创建文件在此可继续选择添加其它文件,在本例中选择关闭“AdditemstotheProject”对话框。可在“Project”窗口看到刚创建的“Fadd1.v”文件,如图5-10所示。

双击打开“FAdd1.v”文件,输入以下代码并保存。以下代码与前述行为风格描述代码一致,也可使用其它模块,如“FA_behav1”等。

moduleFA_behav2(A,B,Cin,Sum,Cout);

inputA,B,Cin;

outputSum,Cout;

regSum,Cout;

always@(AorBorCin)

begin

{Cout,Sum}=A+B+Cin;

end

endmodule

界面效果如图5-10所示。图5-10ModelSim界面

3.创建测试平台文件

在4.2.5节的例子中,把功能实现的模块和测试用的模块放在同一个文件中,在实际开发中应分为两个不同的文件。功能实现模块是真正要设计实现的内容,而测试平台只是用于检验设计正确与否的仿真程序。

点击“Project”窗口,此时菜单中会出现“Project”菜单,选择“Project”→“AddtoProject”菜单中的“NewFile”,在弹出的对话框中输入文件名“testFA.v”,语言类型选择“Verilog”。

双击打开“testFA.v”文件,输入5.5.5节中的测试平台代码,该段代码调用“FA_behav2”模块,如果使用了其它模块(如数据流风格),则做相应的修改即可。

4.编译

选择“Compile”菜单的“CompileAll”命令,或工具栏的

图标,系统提示编译结果,如果正常,则在Transcript窗口中出现如图5-11所示的结果。

如果只需对部分文件进行编译(如“FAdd1.v”文件被修改过,而其它文件无变化),则可选择需要编译的文件,选择“Compile”菜单的“CompileSelected”命令。图5-11编译结果

5.创建仿真配置(非必须进行步骤)

一个设计可能包含多个测试平台和仿真过程,可以每次仿真时选择仿真对象,也可以事先把仿真内容配置并保存下来。

选择“Project”→“AddtoProject”菜单中的“SimulationConfiguration”,弹出如图5-12所示的对话框,选择“work”库下的“testFA”模块,可以更改仿真配置名称,在此采用默认名称“Simulation1”。

在“Project”窗口中可看到新建的“Simulation1”,如图5-13所示。“testFA.v”和“FAdd1.v”文件的状态显示绿色的钩,表示已编译。图5-12仿真配置图5-13编译成功

6.选择仿真对象

可以用以下两种方式选择仿真对象:

如果在第5步创建了仿真配置,可以直接双击“Project”窗口中的仿真配置“Simulation1”,因为该仿真配置已经设置好仿真的启动文件为“testFA.v”,故Modelsim首先执行“testFA.v”模块中的代码,再由“testFA.v”调用“FAdd1.v”文件中的“FA_behav2”模块。

如果没有创建仿真配置,可选择“Simulate”菜单的“StartSimulation”,或工具栏的图标,在弹出的对话框中选择“Work”下面的“testFA”模块,点击“OK”,如图5-14所示。图5-14选择仿真对象

Modelsim界面发生变化,出现“sim”窗口,在“Objects”窗口中也显示该模块中的变量,如图5-15所示。图5-15Modelsim界面

7.配置波形显示内容图

点击“Objects”窗口(只有点击该窗口后才会出现后面的菜单内容),选择“Add”→“ToWave”菜单中的“SignalsinRegion”命令,可以显示所有的信号;如果要选择性地挑选显示的内容,可在选择“Objects”窗口中一个或多个信号后,选择“Add”→“ToWave”菜单中的“SelectedSignals”命令(或直接拖拽至“Wave”窗口的“Message”栏)。“Wave”窗口如图5-16所示。5-16波形窗口

8.运行仿真并查看结果

选择“Simulate”→“Run”菜单中的“Run-All”命令,或工具栏的图标,Transcript窗口将显示运行结果:

#time=0,a=0,b=0,Cin=0,Sum=0,Cout=0

#time=5,a=0,b=0,Cin=1,Sum=1,Cout=0

#time=10,a=0,b=1,Cin=1,Sum=0,Cout=1

#time=15,a=0,b=1,Cin=0,Sum=1,Cout=0

#time=20,a=1,b=1,Cin=0,Sum=0,Cout=1

#time=25,a=1,b=1,Cin=1,Sum=1,Cout=1

#time=30,a=1,b=0,Cin=1,Sum=0,Cout=1

#time=35,a=1,b=0,Cin=0,Sum=1,Cout=0

Wave窗口将显示波形图,点击Zoom工具栏图标可调整波形查看效果,如图5-17所示。图5-17仿真波形图说明:

前面给出了多种1位全加器的实现代码,读者只需把代码中的“FA_behav2”模块替换为其它模块代码(如“FA_flow”),并把“testFA”模块中的文本“FA_behav2”改过来,可得到同样的运行结果。

如果选择“FA_behav2”模块进行仿真,会出现什么结果呢?仿真将提示正常运行,但没有结果显示。请读者进行尝试并思考原因。

5.6EDA开发综合实例2:LiberoIDE完整设计流程

如果需要将设计烧录到FPGA中,则需要综合使用多个不同的EDA工具。本综合实例以开发2-4译码器为例,使用Libero集成开发环境(本书配套实验环境为LiberoIDE9.0),让读者了解简单的VerilogHDL编程和FPGA设计的完整流程。

5.6.1真值表

2-4译码器真值表如表5-1所示,应注意y作了反相处理。表5-12-4译码器真值表

5.6.2逻辑表达式

根据真值表可得出以下逻辑表达式(为避免混淆,表5-1中的en,在逻辑表达式中记为“en”):5.6.3用Verilog描述2-4译码器

以下用三种不同风格的Verilog语句来描述2-4译码器,在本例中可任选其中一种来实现。

1.行为风格的描述

moduledecoder2x4(a,b,en,y);

inputa,b,en;

outputreg[0:3]y;

regaf,bf;always

@(aorboren) //当a、b、en发生变化时执行后面的代码

begin

af=~a; //a取反后赋值给af

bf=~b;

//非阻塞赋值,以下4句同时执行

y[0]<=~(af&bf&en); //根据逻辑表达式写出

y[1]<=~(af&b&en);

y[2]<=~(a&bf&en);

y[3]<=~(a&b&en);

end

endmodule

2.数据流风格的描述

moduledecoder2x4(a,b,en,y);

inputa,b,en;

output[0:3]y;

wireaf,bf;

//assign连续赋值,以下各语句并发执行

assignaf=~a;

assignbf=~b;

assigny[0]=~(af&bf&en);

assigny[1]=~(af&b&en);

assigny[2]=~(a&bf&en);

assigny[3]=~(a&b&en);

endmodule

3.门级风格的描述

moduledecoder2x4(a,b,en,y);

inputa,b,en;

output[0:3]y;

wireaf,bf;

not

u0not(af,a),

u1not(bf,b);

nand

u0nand(y[0],en,af,bf),

u1nand(y[1],en,af,b),

u2nand(y[2],en,a,bf),

u3nand(y[3],en,a,b);

endmodule

行为风格和数据流风格均可根据逻辑表达式写出,不需自行画出逻辑结构图;门级风格建模直接描述门结构,故应先画出逻辑图。5.6.4编写测试平台

测试平台编写如下:

`timescale1ns/1ns//单位时间为1纳秒

moduletestdecoder2x4;

regpa,pb,pen;

wire[0:3]py;

decoder2x4u1(pa,pb,pen,py);//调用decoder2x4模块,按端口顺序对应方式连接

initial

begin

pa=0;pb=0;pen=0;//赋予初值

#5pen=1; //5个单位时间延迟后进行赋值#10pa=1;

#5pb=1;

#5pa=0;

#10pb=0;

end

initial

$monitor("time=%t,a=%b,b=%b,en=%b,y=%b",$time,pa,pb,pen,py);

//调用系统任务monitor,使得pa、pb、pen、py当中任一个发生变化时就输出显示

endmodule5.6.5FPGA开发完整流程

1.新建工程

打开LiberoIDE,选择“Project”菜单的“NewProject”命令,输入项目名称,选择项目存放路径,选择语言Verilog(如图5-18所示)。每一个项目使用一个目录进行存放,项目中各操作的结果将存放于项目文件夹下不同子目录下。

选择实际使用的设备型号、系列和封装,点击“Finish”。本书配套实验环境为ProASIC3型号A3P030系列100引脚的FPGA芯片(如图5-19所示)。如果不需要烧录到FPGA,选择随意一个也没问题。图5-18新建工程图5-19选择设备

2.输入设计代码

“ProjectManager”被打开,界面中间显示了基本项目流程,可以看到综合及仿真都是不可用状态,如图5-20所示。

点击“HDLEditor”按钮,在弹出的对话框中选择“VerilogSourceFile”,输入源程序文件名(扩展名为 .v),如图5-21所示。

输入2-4译码器的功能描述代码(在此采用前述的行为风格代码),保存(如图5-22所示),该文件将保存于项目文件夹的“\hdl”子目录下。图5-20ProjectManager窗口图5-21添加源程序文件

图5-22输入程序代码

3.输入测试平台代码

点击“ProjectFlow”切换回项目流程,再次点击“HDLEditor”按钮,在打开的对话框中选择“HDLStimulusFile”,输入激励程序的文件名(后缀也为 .v),如图5-23所示。

在打开的编辑器中输入激励程序代码,保存(如图5-24所示),该文件将保存于项目文件夹的“\stimulus”子目录下。图5-23新建激励程序文件图5-24输入激励程序代码

4.代码检查及修改

在代码编辑器中单击右键,在弹出的菜单中选择“CheckHDLfile”,可检查程序是否有语法错误,如图5-25所示。

在LogWindow中可看到是否有错误信息(如图5-26所示),如有错误,程序将无法通过编译,可在代码编辑窗口中进行修改。

以上操作可检查语法错误,但非语法错误就需要自行检查发现,如在此应检查功能模块的名称(“decoder2x4”)与测试平台中调用的名称是否相同。图5-25语法检查

图5-26检查结果

5.Options设置

点击“ProjectFlow”切换回项目流程,有一个重要参数应首先设置:对着“Simulation”按钮按右键,在弹出的菜单中选择“Options”(如图5-27所示)。

激励模块名称和实例名须与代码中的一致。在弹出的“ProjectSettings”对话框中,将“Testbenchmodulename”值修改为激励模块的名称,将“Toplevelinstancenameinthetestbench”值修改为所使用的实例名,如图5-28所示。图5-27选项设置图5-28项目设置

6.仿真(综合前)

在“ProjectFlow”中,点击“Simulation”按钮,进行综合前的仿真。弹出消息框提示没有关联激励程序(如图5-29所示),点击“是”,在弹出的对话框中把激励程序“testbench.v”加入到关联文件中,如图5-30所示。

ModelSim软件被打开,正常情况下(无程序错误,没有打开多个ModelSim程序等),ModelSim会自动执行刚才关联的激励程序,通过激励程序调用2x4译码器程序,并显示仿真结果,如图5-31所示。

对于“Wave”窗口显示的波形,波形显示可能会太宽或太窄而影响查看,可通过工具栏进行缩放显示,如图5-32所示。图5-29没有关联激励程序图5-30关联激励程序图5-31仿真结果图5-32波形显示在Transcript小窗口显示了执行情况及执行结果:

#Loadingpresynth.testdecoder2x4

#Loadingpresynth.decoder2x4

#**Warning:(vsim-3009)[TSCALE]-Module‘decoder2x4’doesnothavea`timescaledirectiveineffect,butpreviousmodulesdo.

#Region:/testdecoder2x4/u1

#time=0,a=0,b=0,en=0,y=1111

#time=5000,a=0,b=0,en=1,y=0111

#time=15000,a=1,b=0,en=1,y=1101

#time=20000,a=1,b=1,en=1,y=1110

#time=25000,a=0,b=1,en=1,y=1011

time=35000,a=0,b=0,en=1,y=0111

验证输出结果和波形是否正确,验证后关闭ModelSim。其它说明:

(1)激励程序(testbench.v)中的延迟设置为1纳秒(ns),而2-4译码器的程序(dec2x4.v)中没有指定(如图5-33所示)。“Transcript”窗口中也有相应提示信息“Module‘decoder2x4’doesnothavea`timescaledirectiveineffect,butpreviousmodulesdo.”。

(2)当前显示的单位时间为1皮秒(1ns=1000ps),所以在结果中显示的时间为“0、5000、15000、…、35000”,而不是激励程序中的“0、5…”。图5-33`timescale设置

(3)某些情况下进入ModelSim后未必能正常显示仿真结果,如程序错误、参数设置错误等,可以点击工具栏图标执行“Restart”操作,清除之前的显示(不清除的话可能影响后面的显示),然后点击重新执行(Run–All)。

(4)如运行不正常又觉得代码没问题,可尝试

温馨提示

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

评论

0/150

提交评论