内容简介
《EDA技术与实验》共分9章,分别介绍了Ahera公司迄今为止最新器件的结构、Ahera公司没计套件Quartus Ⅱ 7.0和基于NiosⅡ的SOPC系统构建方法,给出了基于台湾友晶公司DE2和康芯公司GW48实验板的设计实例。第4章从实例人手,介绍了Verilog语言常用的命令及语法结构。第5章给出了HDL编码优化方法和编码规范。第6章的DSP硬件实现算法和第9章的FPGA工程应用实例来源于作者及所在的课题组多年来的工程实际开发项目。
《EDA技术与实验》总结了近几年FPGA开发设计的经验,力求给出FPGA设计的一些较高级设计技巧和实用的设计方法,使设计人员和学生在科研开发、毕业设计及电子竞赛中获得启发和帮助。
内页插图
目录
第1章 概述
1.1 EDA技术的发展
1.1.1 EDA技术的基本特征
1.1.2 EDA技术的发展
1.2 嵌入式系统简介
1.2.1 嵌入式系统定义
1.2.2 嵌入式系统分类
1.3 IP核
1.4 SOPC技术
第2章 Ahera公司可编程逻辑器件简介
2.1 CycloneⅡ器件
2.2 CycloneⅢ器件
2.3 StratixⅢ器件
第3章 QuartusⅡ
3.1 QuartusⅡ软件介绍
3.1.1 QuartusⅡ的主要功能
3.1.2 QuartusⅡ的设计流程
3.2 DE2介绍
3.2.1 DE2开发平台
3.2.2 DE2控制面板
3.3 应用实例一:4位加法器
3.4 应用实例二:正弦信号发生器
3.4.1 顶层VHDL文件设计
3.4.2 正弦信号数据ROM定制
3.5 应用实例三:VGA显示及SRAM读写实例
第4章 Verilog语言
4.1 Verilog概述
4.1.1 VerilogHDL简介
4.1.2 VerilogHDL语言的特点
4.1.3 VerilogHDL的描述风格
4.2 VerilogHDL结构
4.3 运算符
4.4 数据选择器
4.5 编码器和译码器
4.6 数字相关器
4.7 计数器
4.8 状态机
第5章 HDL编码指南
5.1 概述
5.2 基本编码方法
5.3 可移植性编码
5.4 时钟和Reset信号设计指南
5.5 可综合性编码
5.6 可综合划分
第6章 DSP硬件算法实现
6.1 数字滤波算法FPGA实现
6.1.1 FIR滤波器
6.1.2 IIR滤波器
6.1.3 FIR及IIR数字滤波器实现
6.2 FFT和DCT变换
6.2.1 FFl算法
6.2.2 DCT变换的FPGA实现
6.3 双模式CORDIC算法的FPGA实现
6.3.1 CORDIC算法简介
6.3.2 CORDIC算法原理
6.3.3 CORDIC算法的FPGA实现
6.3.4 仿真结果与分析
6.4 全数字锁相环(DPLL)FPGA实现
6.4.1 数字锁相环简介
6.4.2 数字锁相环原理
6.4.3 数字锁相环的实现
6.5 CRC校验
6.5.1 CRC校验码原理
6.5.2 CRC校验码编码
6.5.3 CRC校验码的Verilgo实现
第7章 基于NiosⅡ的SOPC系统
7.1 SOPC简介
7.2 NiosⅡ嵌入式软核处理器
7.2.1 NiosⅡ处理器特性
7.2.2 可配置软核处理器
7.3 NiosⅡ处理器架构
7.3.1 寄存器文件
7.3.2 ALU算术逻辑单元
7.3.3 异常控制器和中断控制器
7.3.4 存储器和I/O组织
7.4 Avalon存储器映射桥接器
第8章 NiosⅡ系统设计实验
8.1 NiosⅡ系统设计所需要的开发工具
8.2 开发平台及工具简要介绍
8.3 设计实例一:点亮7段LED数码管
8.4 设计实例二:自定义PWM组件设计
第9章 FPGA工程应用实例
9.1 数据采集与滤波系统
9.2 电机控制器模块设计
9.2.1 SPWM技术
9.2.2 SPWM技术的FPGA实现
9.2.3 数字PID控制模块设计
9.3 DDS设计计
9.3.1 DDS技术原理
9.3.2 DDS模块的1WGA实现
9.4 图像处理算法设计
9.4.1 数字图像采集FPGA实现
9.4.2 3×3中值滤波算法的FPGA实现
9.4.3 简单图像增强算法的FPGA实现
9.5 ModelSim仿真实验:三角波发生器
附录
附录1GW48教学实验系统简介
附录2DE2实验板引脚对照表
附录3Xinlinx公司FPGA器件配置电路
附录4Altera公司FPGA配置电路原理图
参考文献
精彩书摘
第1章 概述
内容提要
本章主要介绍EDA技术的发展概况,可编程逻辑器件的发展概况,PLD和其他技术的比较,硬件描述语言,EDA与传统电子设计方法的比较,IP核的概念。通过本章的学习,使大家对EDA技术有一个初步的了解。
1.1 EDA技术的发展
电子设计技术的核心就是EDA技术,EDA是指以计算机为工作平台,融合应用电子技术、计算机技术、智能化技术最新成果而研制成的电子CAD通用软件包,主要能辅助进行三方面的设计工作,即IC设计、电子电路设计和PCB设计。EDA技术已有30多年的发展历程,大致可分为三个阶段。20世纪70年代为计算机辅助设计(CAD)阶段,人们开始用计算机辅助进行IC版图编辑、PCB布局布线,取代了手工操作。20世纪80年代为计算机辅助工程(CAE)阶段。与CAD相比,CAE除了有纯粹的图形绘制功能外,又增加了电路功能设计和结构设计,并且通过电气连接网络表将两者结合在一起,实现了工程设计。CAE的主要功能是:原理图输入,逻辑仿真,电路分析,自动布局布线等。20世纪90年代为电子系统设计自动化(EDA)阶段。
1.1.1 EDA技术的基本特征
EDA代表了当今电子设计技术的最新发展方向,它的基本特征是:设计人员按照“自顶向下”的设计方法,对整个系统进行方案设计和功能划分,系统的关键电路用一片或几片专用集成电路(AsIC)实现,然后采用硬件描述语言(HDL)完成系统行为级设计,最后通过综合器和适配器生成最终的目标器件,这样的设计方法被称为高层次的电子设计方法。下面介绍与EDA基本特征有关的几个概念。
1.“自顶向下”的设计方法
10年前,电子设计的基本思路还是选用标准集成电路“自底向上”地构造出一个新的系统,这样的设计方法就如同一砖一瓦建造金字塔,不仅效率低、成本高,而且容易出错。
高层次设计是一种“自顶向下”的全新设计方法,这种设计方法首先从系统设计人手,在顶层进行功能方框图的划分和结构设计。在方框图一级进行仿真、纠错,并用硬件描述语言对高层次的系统行为进行描述,在系统一级进行验证。然后,用综合优化工具生成具体门电路的网络表,其对应的物理实现级可以是印刷电路板或专用集成电路。由于设计的主要仿真和调试过程是在高层次上完成的,这既有利于早期发现结构设计上的错误,避免工作时间的浪费,又减少了逻辑功能仿真的工作量,提高了设计的一次成功率。
2.ASIC设计
现代电子产品的复杂度日益提高,一个电子系统可能由数万个中小规模集成电路构成,这就带来了体积大、功耗大、可靠性差的问题。解决这一问题的有效方法就是采用ASIC芯片进行设计。ASIC按照设计方法的不同可分为全定制ASIC、半定制ASIC和可编程ASIC(也称为可编程逻辑器件)。
设计全定制ASIC芯片时,设计师首先要定义芯片上所有晶体管的几何图形和工艺规则,然后将设计结果交由厂家去做出产品。这种设计方法的优点是芯片可以获得最优的性能,即面积利用率高、速度快、功耗低,而缺点是开发周期长、费用高,只适合大批量产品开发。
半定制ASIC芯片的版图设计方法分为门阵列设计法和标准单元设计法,这两种方法都是约束性的设计方法,其主要目的就是简化设计,以牺牲芯片性能为代价来缩短开发时间。
可编程逻辑芯片与上述掩模ASIC的不同之处在于:设计人员完成版图设计后,在实验室内就可以烧制出自己的芯片,无须IC厂家的参与,大大缩短了开发周期。
可编程逻辑器件自20世纪70年代以来,经历了PAL、GAL CPLD、FPGA几个发展阶段,其中CPLD/FPGA为高密度可编程逻辑器件,目前集成度已高达200万门/片,它将ASIC集成度高的优点和可编程逻辑器件设计生产方便的特点结合在一起,特别适合于样品研制或小批量产品开发,使产品能以最快的速度上市,而当市场扩大时,它可以很容易地转由掩模ASIC实现,因此开发风险也大为降低。
上述ASIC芯片,尤其是CPLD/FPGA器件,已成为现代高层次电子设计方法的实现载体。
3.硬件描述语言
硬件描述语言(HDL)是一种用于设计硬件电子系统的计算机语言,它用软件编程的方式来描述电子系统的逻辑功能、电路结构和连接形式,与传统的门级描述方式相比,它更适合大规模系统的设计。例如一个32位的加法器,利用图形输入软件需要输入500~1 000+fl,而利用VHDL语言只需要书写一行“A=B+C”即可。而且VHDL语言可读性强,易于修改和发现错误。早期的硬件描述语言,如ABEL、HDL、AHDL,由不同的EDA厂商开发,互不兼容,而且不支持多层次设计,层次间翻译工作要由人工完成。为了克服以上不足,l985年美国国防部正式推出了高速集成电路硬件描述语言VHDL。1987年,IEEE采纳VHDL为硬件描述语言标准(IEEE srID一1076)。
VHDL是一种全方位的硬件描述语言,包括系统行为级、寄存器传输级和逻辑门级多个设计层次,支持结构、数据流和行为三种描述形式的混合描述,因此VHDL几乎覆盖了以往各种硬件描述语言的功能,整个“自顶向下”或“自底向上”的电路设计过程都可以用VHDL完成。VHDL还具有以下优点:
(1)VHDL的宽范围描述能力使它成为高层次设计的核心,将设计人员的工作重心提高到了系统功能的实现与调试,而花较少的精力用于物理实现。
(2)VHDL可以用简洁明确的代码描述来进行复杂控制逻辑设计,灵活且方便,而且也便于设计结果的交流、保存和重用。
(3)VHDL的设计不依赖于特定的器件,方便了工艺的转换。
(4)VHDL是一个标准语言,为众多的EDA厂商支持,因此移植性好。
4.EDA系统框架结构
EDA系统框架结构(Fr踟ework)是一套配置和使用EDA软件包的规范。目前主要的EDA系统都建立了框架结构,如CADENCE公司的Design Framework,Mentor公司的FalconFramework,而且这些框架结构都遵守国际CFl组织制定的统一技术标准。框架结构能将来自不同EDA厂商的工具软件进行优化组合,集成在一个易于管理的统一的环境之下,而且还支持任务之间、设计师之间以及整个产品开发过程中的信息传输与共享,是并行工程和“自顶向下”设计实现的基础。
1.1.2 EDA技术的发展
EDA技术的每一次进步,都引起了设计层次上的一次飞跃,从设计层次上分,20世纪70年代为物理级设计(CAD),20世纪80年代为电路级设计(CAE),20世纪90年代进入到系统级设计(EDA)。物理级设计主要指IC版图设计,一般由半导体厂家完成,对电子工程师没有太大的意义,因此本文重点介绍电路级设计和系统级设计。
1.电路级设计
电子工程师接受系统设计任务后,首先确定设计方案,并选择能实现该方案的合适元器件,然后根据具体的元器件设计电路原理图,进行第一次仿真,其中包括数字电路的逻辑模拟、故障分析,模拟电路的交直流分析、瞬态分析。在进行系统仿真时,必须有元件模型库的支持,计算机上模拟的输出波形代替了实际电路调试中的信号源和示波器。这一次仿真主要是检验设计方案在功能方面的正确性。
仿真通过后,根据原理图产生的电气连接网络表进行PCB板的自动布局布线。在制作PCB板之前还可以进行PEB后分析,其中包括热分析、噪声及窜扰分析、电磁兼容分析、可靠性分析等,并可将分析后的结果参数反标回电路图,进行第二次仿真,也称为后仿真。后仿真主要是检验PCB板在实际工作环境中的可行性。
由此可见,电路级的EDA技术使电子工程师在实际的电子系统产生前,就可以全面地了解系统的功能特性和物理特性,从而将开发风险消灭在设计阶段,缩短了开发时间,降低了开发成本。
2.系统级设计
进入20世纪90年代以来,电子信息类产品的开发明显呈现两个特点:一是产品复杂程度提高;二是产品上市时限紧迫。然而,电路级设计本质上是基于门级描述的单层次设计,设计的所有工作(包括设计输入、仿真和分析、设计修改等)都是在基本逻辑门这一层次上进行的,显然这种设计方法不能适应新的形势,一种高层次的电子设计方法,即系统级设计方法应运而生。
高层次设计是一种“概念驱动式”设计,设计人员无须通过门级原理图描述电路,而是针对设计目标进行功能描述。由于摆脱了电路细节的束缚,设计人员可以把精力集中于创造性的方案与概念的构思上,一旦这些概念构思以高层次描述的形式输入计算机,EDA系统就能以规则驱动的方式自动完成整个设计。
……
前言/序言
深入解析EDA技术:理论、方法与实践 导论 在当今高速发展的电子信息时代,集成电路(IC)的设计与制造是推动科技进步的核心驱动力。电子设计自动化(EDA)技术,作为一种高度集成化的软件工具和方法论,极大地革新了集成电路的设计流程,从概念提出到最终芯片的诞生,EDA技术扮演着不可或缺的角色。它不仅能够缩短产品开发周期,降低设计成本,更重要的是,它能够帮助工程师们驾驭日益复杂的电路设计,实现前所未有的功能和性能。 本书旨在为读者提供一个全面而深入的EDA技术学习平台,从基础理论到高级实践,层层递进,帮助读者构建坚实的知识体系,掌握实际操作技能。我们将探索EDA技术的核心组成部分,解析其背后的数学原理和算法模型,并结合丰富的实验案例,让读者在动手实践中深化理解,学以致用。本书尤其注重理论与实践的结合,力求让读者不仅知其然,更能知其所以然,最终成为一名合格的EDA技术应用工程师。 第一部分:EDA技术基础 本部分将为读者建立对EDA技术的宏观认知,介绍其发展历程、重要性以及在现代电子设计中的地位。 EDA技术概述与发展历程: 追溯EDA技术从早期手工绘图到如今智能化、自动化设计工具的发展脉络。我们将讨论不同历史时期EDA技术所面临的挑战和突破,以及它们如何塑造了今天的集成电路产业。从最初的逻辑设计工具到如今的系统级设计(SoC)和人工智能驱动的设计平台,EDA技术的演进史本身就是一部集成电路技术史的缩影。 EDA在集成电路设计中的作用: 详细阐述EDA工具如何在集成电路设计的各个阶段发挥关键作用,包括功能设计、逻辑综合、物理设计、验证和测试等。我们将分析EDA工具如何帮助工程师管理复杂性,优化性能,降低功耗,并确保设计的可靠性。例如,在功能设计阶段,EDA工具能够提供高级抽象建模能力;在物理设计阶段,EDA工具则负责将逻辑网表转化为可制造的物理版图。 EDA工具链与主流工具介绍: 介绍当前业界主流的EDA工具厂商及其代表性产品,如Synopsys、Cadence、Mentor Graphics(现西门子EDA)等。我们将简要介绍这些工具在逻辑综合、布局布线、静态时序分析、功耗分析、形式验证等方面的功能特点。读者将对EDA工具生态系统有一个初步的了解,为后续深入学习特定工具打下基础。 集成电路设计流程概览: 绘制一幅完整的集成电路设计流程图,并逐一介绍每个阶段的关键任务和输出。从需求分析、架构设计、 RTL设计、综合、布局布线、时序收敛、功耗分析、物理验证(DRC、LVS)到流片前的最终验证。本节将为读者建立一个全局观,理解EDA工具如何在整个流程中协同工作。 第二部分:硬件描述语言(HDL)与逻辑综合 硬件描述语言是实现电子设计自动化的基石,而逻辑综合则是将抽象的HDL代码转化为实际电路的关键步骤。 Verilog HDL基础: 深入讲解Verilog HDL的语法、数据类型、运算符、过程语句、模块、端口、信号等基本概念。我们将通过丰富的代码示例,演示如何使用Verilog描述组合逻辑和时序逻辑电路,包括寄存器、计数器、状态机等。重点将放在如何编写可综合(Synthesizable)的Verilog代码,使其能够被逻辑综合工具正确解析。 SystemVerilog增强特性: 介绍SystemVerilog作为Verilog的超集,在验证和设计方面的强大扩展。包括数据类型、类、接口、约束随机化、断言(Assertions)等,这些特性极大地提高了设计的效率和验证的完备性。 VHDL基础(可选,或作为对比): 简要介绍VHDL语言,并与Verilog进行对比,说明其在语法结构、表达方式上的异同,以及在不同应用场景下的适用性。 逻辑综合原理与流程: 详细解析逻辑综合的过程,包括从HDL代码到逻辑门网表的映射。我们将探讨逻辑综合的目标(面积、速度、功耗优化),以及常用的综合算法,如寄存器分配、逻辑化简、门级优化等。 逻辑综合工具的使用与约束: 介绍主流逻辑综合工具(如Synopsys Design Compiler, Cadence Genus)的基本使用方法。重点讲解如何编写和应用综合约束文件(SDC),如时钟定义、输入输出时序约束、逻辑优化目标设置等,这些约束直接影响综合结果的质量。 综合后的逻辑网表分析: 讲解如何分析逻辑综合后的门级网表,理解其结构,并进行初步的时序和面积评估。 第三部分:物理设计(布局与布线) 本部分将聚焦于集成电路的物理实现,即如何将逻辑网表转化为最终可制造的芯片版图。 物理设计流程概述: 介绍物理设计的主要流程,包括放置(Placement)、时钟树综合(CTS)、布线(Routing)和优化(Optimization)等。我们将深入理解每个环节的目标和挑战。 Floorplanning与宏单元放置: 讲解Floorplanning的重要性,即对芯片整体布局的规划,包括芯片尺寸、I/O Pad的放置、宏单元(如PLL、SRAM)的布局等。 标准单元放置(Placement): 详细介绍标准单元(Standard Cells)放置的算法和技术,包括全局放置和详细放置。讨论影响放置质量的因素,如布线拥塞、时序路径等。 时钟树综合(Clock Tree Synthesis, CTS): 讲解CTS的目标是为所有寄存器提供低skew(偏差)、低延迟的时钟信号。我们将探讨CTS的算法和技术,以及如何处理时钟树的功耗和驱动能力问题。 布线(Routing): 介绍布线的目标是将所有信号线连接起来,使其符合设计规则。我们将讨论两阶段布线(全局布线和详细布线)以及不同的布线算法,并分析布线拥塞对设计的影响。 物理优化与时序收敛: 讲解在布局布线过程中如何进行各种优化,以满足时序要求。包括逻辑优化、布线优化、重排(Resynthesis)、重布线(Rerouting)等。 物理验证(Physical Verification): 介绍物理验证的重要性,包括设计规则检查(DRC)、版图与原理图一致性检查(LVS)、寄生参数提取(Extraction)等。阐述这些检查如何确保芯片能够被成功制造且功能正确。 主流物理设计工具的使用: 介绍业界主流物理设计工具(如Cadence Innovus, Synopsys IC Compiler II)的基本操作和流程,以及如何应用约束文件进行物理设计。 第四部分:电路仿真与验证 验证是确保集成电路设计正确性的关键环节,本部分将深入探讨各种仿真和验证技术。 仿真基础与类型: 介绍仿真在IC设计中的作用,包括行为级仿真、RTL级仿真、门级仿真以及SPICE级电路仿真。 RTL级仿真: 详细讲解RTL级仿真的流程,包括testbench的编写、testcase的设计、仿真器的使用。强调testbench的重要性,以及如何编写高效、可复用的testbench。 门级仿真: 讲解门级仿真及其相对于RTL级仿真的优势(更精确)和劣势(速度慢)。介绍如何结合时序库进行门级仿真,以验证设计的时序性能。 形式验证(Formal Verification): 介绍形式验证的概念和方法,包括等价性检查(Equivalence Checking)和模型检查(Model Checking)。阐述形式验证如何在无需仿真向量的情况下,提供数学上的证明,从而更全面地验证设计。 Assertion-Based Verification (ABV): 详细介绍基于断言的验证方法,包括SystemVerilog Assertions (SVA)。讲解如何编写断言来描述设计的预期行为和属性,并利用断言进行仿真和形式验证。 覆盖率驱动验证(Coverage-Driven Verification): 介绍覆盖率的概念(功能覆盖率、代码覆盖率、断言覆盖率)及其在验证过程中的重要性。讲解如何通过收集和分析覆盖率来指导验证工作的开展,确保设计被充分验证。 测试向量生成与故障仿真: 介绍如何生成用于芯片测试的测试向量,以及故障仿真在评估测试向量有效性方面的作用。 第五部分:EDA实验与实践 本部分将通过一系列具体的实验项目,让读者将理论知识付诸实践,掌握EDA工具的实际应用。 实验环境搭建: 指导读者如何搭建EDA实验环境,包括安装和配置主流EDA工具、Linux操作系统以及相关的脚本语言(如Tcl, Perl, Python)。 简单数字电路设计与仿真: 设计一个简单的组合逻辑电路(如算术逻辑单元ALU)和时序逻辑电路(如带预置/清零功能的寄存器),并使用Verilog HDL进行描述。然后,编写testbench,利用仿真工具进行功能仿真和验证。 状态机的HDL描述与仿真: 设计一个有限状态机(FSM),例如交通灯控制器或序列检测器,并用Verilog HDL实现。编写testbench,进行状态迁移的时序仿真。 逻辑综合与约束应用实验: 将之前编写的HDL代码导入逻辑综合工具,学习如何设置时钟、IO约束,以及优化目标。分析综合后的网表,评估设计性能。 基于FPGA的实现实验: 将设计的HDL代码下载到FPGA开发板上,进行硬件实现和调试。学习FPGA的开发流程,包括综合、实现、配置。 简单物理设计流程实践: (视工具和复杂度而定)指导读者进行一个简单的标准单元设计的Floorplanning、Placement和Routing,并进行初步的物理验证。 测试bench的进阶设计: 学习如何编写更复杂的testbench,例如采用事务级建模(Transaction-Level Modeling, TLM)的思想,以及如何利用约束随机化技术生成大量的测试向量。 高级EDA工具功能探索(选讲): 根据读者兴趣和工具可用性,可选择性地介绍一些高级EDA工具的功能,如功耗分析、信号完整性分析、跨时钟域(CDC)分析等。 结语 EDA技术是集成电路设计领域的关键驱动力,它不断革新着设计方法,推动着芯片性能的飞跃。本书通过理论讲解与实践操作相结合的方式,旨在为读者提供一条清晰的学习路径,从入门到精通。我们相信,通过对本书内容的深入学习和反复实践,读者将能够掌握EDA的核心技能,为未来在集成电路设计、验证、前端/后端设计等领域的工作打下坚实的基础。愿本书成为您探索EDA技术奥秘的得力助手,开启您在数字世界中的无限可能。