
本书除了对语法进行全面、详尽的介绍之外,还对数字系统的仿真验证方法进行了深入讨论。全书共16章,前3章概括介绍了VHDL/PLD设计方法的特点、VHDL程序的基本结构和程序风格、测试平台以及VHDL中的信号。第4章至第7章介绍了组合逻辑电路的设计与验证。第8章至第11章介绍了时序电路的设计方法。第12章至第14章介绍了子程序和程序包。第15章讨论了如何采用层次化和模块化方法实现复杂数字系统。第16章给出了多个具有一定规模和复杂度的程序,通过这些程序集中展现本书所重点阐述的语法要点和设计方法。 读者对象:本书可作为通信工程、电子工程及相关专业高年级本科生和研究生的教材,还适合从事相关领域科研开发工作的工程师参考使用。
译 者 序 VHDL是一种标准硬件描述语言,广泛应用于数字系统的建模和仿真。设计者可以使用VHDL在不同抽象层次上对数字系统进行描述(建模)。通过使用VHDL,设计者可以快速设计大规模、复杂的数字系统。 本书关注的重点是如何采用VHDL编写可以综合出目标逻辑的设计程序,同时也非常关注如何使用VHDL编写测试平台程序,以便对目标程序进行功能仿真和定时仿真。VHDL的基本概念和可综合的VHDL语法结构是学习重点。全书共16章,前面3章概括介绍了VHDL/PLD设计方法的特点、VHDL程序的基本结构和程序风格、测试平台以及VHDL中的信号。第4章至7章介绍了组合逻辑电路的设计方法,其中第6章介绍了事件驱动的仿真器的工作原理,第7章专门介绍了验证组合逻辑电路的测试平台的编写方法。这两章内容在其他同类教材中很少涉及。第8章至11章介绍了时序电路的设计方法。第12章至14章介绍了子程序和程序包,目的是提高设计的模块化水平和可重用性。其中第14章专门介绍了时序电路的测试平台的编写方法,显示了对数字系统验证的高度关注。第15章和第16章给出了多个具有一定复杂度的设计实例,用于提高读者对前面知识的综合运用能力。 另外,本书还非常关注VHDL/PLD设计方法中不同设计阶段所需使用的设计工具,对不同类别PLD器件的结构特征和差异进行了全面介绍,这为读者从事实际开发工作提供了直接帮助。 解放军理工大学通信工程学院的乔庐峰、尹廷辉、李永成、牛燚坤和管海亮对全书进行了翻译。 鉴于本书内容涵盖范围广,时间紧迫和译者水平有限,译文中难免有错误之处,敬请读者批评指正。 前 言 VHDL/PLD设计方法学 本书的学习重点是数字系统的设计与实现。VHDL作为硬件描述语言的一种, 目前被广泛应用于数字系统的设计与验证之中。可编程逻辑器件(PLD, Programmable Logic Device)目前被大量应用于数字系统的硬件设计中。从采用VHDL设计数字逻辑电路到采用PLD实现其功能, 需要多种EDA工具的支持。这些工具可以自动完成很多原来以手工方式进行的工作。作为VHDL/PLD设计方法学(采用VHDL完成设计, 采用PLD加以具体实现)的一个重要部分, 本书将对这些工具及其特点进行讨论。 VHDL是一种标准硬件描述语言, 广泛应用于数字系统的建模和仿真。设计者可以使用VHDL在不同抽象层次上以结构方式或行为方式来描述数字系统, 或者说为数字系统建模。通过使用VHDL, 设计者可以快速设计大规模、复杂的数字系统。 采用VHDL描述数字系统的最初目的是对设计进行管理以及仿真验证。设计者可以对采用VHDL描述的数字系统进行仿真以验证其功能正确性。使用VHDL编写的测试平台(testbench)产生被测系统所需要激励波形, 通过分析被测系统的输出结果来实现功能验证。使用VHDL可以同时实现对设计本身的描述和编写测试平台, 因此可提高设计效率。 随着VHDL的广泛使用, 可以对VHDL程序进行综合, 并且其目标数字逻辑电路的综合工具也被开发和广泛应用。这使得设计的自动化水平不断提高, 设计周期不断缩短。 PLD是用户可以通过编程实现所需功能的特殊数字集成电路。通过对PLD进行编程来定义其内部逻辑单元的连接关系。通过擦除和重新对其编程, 可以修改PLD的逻辑功能。 不同厂家提供了大量不同结构的PLD器件, 包括简单PLD器件(SPLD)、复杂PLD器件(CPLD), 以及现场可编程门阵列(FPGA, Field Programmable Gate Array)。不同类型器件的逻辑容量差异很大, 可以从100门到800万门不等。 本书所述各种实际设计方法的运用是以现有的功能强大且价格相对便宜的计算机辅助设计工具为基础的。在整个设计流程中所使用的CAE(ComputerAided Engineering)工具包括编译器、仿真器以及布局布线器等。 综合工具可以将用户采用高级语言描述的电路功能转换为具体可实现的门级网表。布局布线工具可以将综合后的门级网表适配到具体的PLD器件中以实现所期望的目标功能, 还可以根据具体的实现情况产生电路的时序模型, 仿真器使用该模型对设计进行精确的时序仿真以验证其是否满足设计的时序要求。布局布线工具还可以产生用于对PLD进行编程刻录的配置文件。 与传统设计技术相比, VHDL/PLD设计方法有很多优点。具体包括以下几点:● 设计者不需要实际搭试电路就可以完成实验工作。 ● 设计的综合过程是自动的。 ● 使用语言可以进行设计和验证两项工作。 ● VHDL是一种标准语言, 设计者可以将程序方便地移植到其他公司的设计平台上, 在其他公司的PLD上实现。在实际应用中, 数字系统越来越复杂, 从立项到完成设计所要求的时间越来越短。使用VHDL/PLD设计方法可以帮助设计者在最短时间内完成从设计、验证到布局布线的全部设计流程。 本书的重点 本书关注的重点是如何采用VHDL编写可以综合出目标逻辑的设计程序, 同时也非常关注如何使用VHDL编写测试平台程序, 以便对目标程序进行功能仿真和定时仿真。 VHDL的基本概念和可综合的VHDL语法结构是学习的重点。本书无意对VHDL语法进行全方位的详细阐述, 对于不可综合的、同时在编写测试平台时很少使用的语法结构在各章节中很少涉及。 本书非常关注VHDL/PLD设计方法中不同设计阶段所需要使用的CAE工具。本书对不同类别PLD器件的结构特征和差异进行了全面介绍。采用PLD和专用集成电路(ASIC, ApplicationSpecific Integrated Circuit)实现同一目标功能时, 二者在流程和使用工具的类别上有相似之处, 书中对此进行了说明。因此, 本书也可以用于基于VHDL的ASIC设计。 本书提供的设计方法和众多例题与具体的CAE工具和PLD器件无关。前面章节的例题一般较为简单, 主要是为了清晰地阐述相关概念。后面章节中的一些例题会调用前面例题以实现较为复杂的设计。 目标 通过学习本书, 希望实现以下目标:● 掌握VHDL设计流程:设计描述、功能仿真、综合、布局布线、时序仿真、PLD编程。 ● 掌握VHDL程序结构和功能。 ● 理解物理逻辑结构与VHDL语法结构之间的对应关系。 ● 理解PLD的器件结构与工作原理。 ● 通过综合和仿真获得数字系统的设计经验。 ● 编写可以有效综合和易于在PLD中实现的VHDL程序。 ● 编写VHDL测试平台, 对设计进行功能和时序验证。 内容组织方法 VHDL是一种复杂语言, 它包括在传统编程语言中很少使用的一些语法结构, 例如信号、并行语句和时间类型。 需要说明的是, 不是所有VHDL语言都是可综合的。在设计简单的数字系统之前, 也不一定需要对所有可综合的VHDL语言进行详细掌握。VHDL语言构成及其语法、语义在本书中根据章节安排依次给出。以简单的设计开始, 随着语法学习的深入, 设计复杂度不断加大。语法的学习是根据不同类型、不同难度数字系统的设计需求而逐渐展开和深入的。 VHDL语言中有很大一部分是用于编写测试平台的。类似地, 本书在前面章节介绍的也是较为简单的测试平台的编写方法, 在后面章节会不断引入用于编写复杂测试平台的语法结构。 语法的讲解是以帮助读者尽快掌握可综合的VHDL程序编写为目标的。这意味着语法专题中的内容不一定在单一章节中讲解。例如, bit、std_logic、integer、physical、floating等类型不是在一个章节中集中介绍的, 而是根据设计与验证的需要在不同章节中分别加以介绍。在学习了前面几章后, 就可以设计简单的组合逻辑电路了。 各个章节都给出了一些有针对性的程序。这些程序都是采用符合IEEE标准(例如IEEE 1076和IEEE 1076.6)的语法编写的, 并且是可以综合的。这些标准的一些重要内容在不同章节进行了穿插介绍。在程序中会经常使用IEEE标准程序包, 可以使程序更加易于维护, 也可以使它便于在不同CAE工具以及PLD器件之间进行移植。 适用范围和基础知识要求 本书适用于本科高年级学生、研究生和从事数字系统设计的工程师。在学习本书之前, 读者应该具备基本的数字逻辑电路知识, 对采用高级语言(如C语言或Pascal语言)进行编程有一定了解。读者不需要具备VHDL和PLD的基础知识。 章节介绍 本书共包含16章。 前面3章概括介绍了VHDL/PLD设计方法的特点、VHDL程序的基本结构和程序风格、测试平台以及VHDL中的信号。● 第1章是“使用VHDL和PLD进行数字系统设计”, 介绍了VHDL/PLD设计方法的具体设计流程, 以简单的组合逻辑电路为例对每一个阶段进行了介绍。 ● 第2章是“实体、结构体和程序风格”, 详细说明了VHDL的实体和结构体, 简单介绍了VHDL的库单元, 介绍了VHDL的三种基本程序风格(编程方式):数据流风格(方式)、行为风格(方式)和结构风格(方式), 介绍通过采用不同的风格描述同一个电路时各自的特点。 ● 第3章是“信号和数据类型”, 信号是硬件描述语言中特有的概念, 本章对其进行了详细讨论。它们就如同硬件电路中的信号连线一样, VHDL中的信号连接并行的进程。介绍了标量和总线信号。与其他VHDL对象一样, 信号也有所属类型。介绍了std_logic类型, 它是可综合程序中信号的常用类型。第4章至第7章重点介绍了组合逻辑电路的设计与验证。● 第4章是“数据流风格的组合逻辑电路设计”, 介绍了几种并行信号赋值语句的基本形式, 以及其在数据流风格的组合逻辑电路设计中的特点。以数据流风格实现了多个常用的组合逻辑函数。讨论了无关项对应的输入、输出条件和它们在设计描述中的应用。介绍了VHDL中三态门的描述方法。 ● 第5章是“行为风格的组合逻辑电路设计”, 介绍了如何使用行为风格的VHDL程序设计组合逻辑电路。行为风格的程序使用进程结构, 在进程内部是一个或多个顺序执行的语句。顺序执行语句与常见的高级语言有相似之处。顺序语句if、case、loop常常被用于组合逻辑设计中。本章介绍了在进程中常常说明和使用的变量。进程被综合后所得到的逻辑功能与其内部程序顺序执行后得到的结果相一致。 ● 第6章是“事件驱动的仿真”, 描述了事件驱动的仿真器的工作特点。VHDL参考手册(LRM, Language Reference Manual)根据具体程序在VHDL仿真器中所执行的操作对其语义进行了定义。掌握事件驱动的仿真器中, VHDL程序所执行的具体操作有助于清晰理解程序的语义。 ● 第7章是“组合逻辑电路的测试平台”, 介绍了用于对组合逻辑电路进行验证的单一进程测试平台和查找表测试平台。介绍了在测试平台中常用的断言(assertion)语句和报告(report)语句。介绍了使用这两条语句编写具有自动检查功能的测试平台的方法。第8章至第11章重点介绍了时序电路的设计方法。● 第8章是“锁存器与触发器”, 介绍了不同类型的锁存器和触发器及其对应的VHDL程序, 介绍了时序要求和同步输入数据。 ● 第9章是“多位锁存器、触发器、计数器和存储器”, 介绍了多位锁存器、移位寄存器、计数器和存储器, 给出了具有计算机接口的脉冲宽度调制器程序。 ● 第10章是“有限状态机”, 介绍了摩尔型和米利型有限状态机(FSM, Finite State Machine), 讨论了用于FSM状态图的建立方法, 介绍了FSM程序中枚举型状态的定义与使用方法以及状态编码和状态赋值。 ● 第11章是“ASM图和RTL设计”, 介绍了另一种采用图形方式表示FSM的方法, 它采用的是算法状态机流程图法(ASM, Algorithmic State Machine)。ASM通常在寄存器传输级(RTL, Register Transfer Level)使用, 此时数字系统被划分为数据路径部分和控制部分。数据路径部分包括实现系统任务的设计实体, 控制部分包括控制状态机的实体。第12章至第14章介绍了子程序和程序包, 目的是提高设计的模块化水平和可重用性, 介绍了时序系统测试平台的编写方法, 其中用到了子程序和程序包的调用。● 第12章是“子程序”, 使用子程序、函数、过程可以使程序的可读性大大提高, 可以避免完成同一功能的VHDL程序在同一设计中不断重复出现, 从而可以大大提高程序的模块化水平和可读性。 ● 第13章是“程序包”, 将子程序置于程序包中可以使之被不同的其他设计调用。程序包可以使其中的子程序在后续设计中被方便调用。很多标准程序包中都预先编写了一些常用子程序, 这可以加快后续程序的开发进程。 ● 第14章是“时序电路的测试平台”, 由于时序系统的输出与其当前输入和历史输入都有关, 并且和历史输入的出现顺序也有关, 所以时序电路的验证比组合逻辑电路的验证更为复杂。本章针对时序系统给出了多种产生激励和验证输出结果的方法。第15章重点讨论了如何采用层次化和模块化方法实现复杂数字系统。第16章给出了多个具有一定规模和复杂度的程序, 通过这些程序集中展现本书所重点阐述的语法要点和设计方法。● 第15章是“模块化和层次化设计”, 有效的分割和层次划分可以使复杂的设计更容易实现和被有效管理。结构化的VHDL描述方式允许复杂的设计被划分成更容易实现和验证的低层次的子系统。同样的层次化概念也适用于测试平台的编写。 ● 第16章是“设计实例”, 本章给出了三个规模较大的参数化设计实例。 本书在课程体系中的应用 本书可以在一个学期或两个学期内进行讲授。在Stony Brook大学的计算机与电子工程专业, 本书在一个学期内完成讲授。此课程开课前, 学生需要学习数字逻辑电路及高级计算机语言方面的课程。 作为课程的实践环节, 学生需要编写设计程序及对应的测试平台, 对设计进行功能和时序验证。学生需要将设计下载到PLD开发板中进行原型验证。 自学使用 本书同样适于自学。为了充分理解本书中的知识要点, 应对本书中给出的程序进行仿真和综合。每章结束时给出的习题中, 有一些要求编写程序并进行功能仿真, 建议予以重视。这需要读者掌握VHDL仿真器的使用方法。如果读者拥有综合工具, 那么可以对某些设计进行综合。为了对综合后的网表进行时序仿真, 需要使用布局布线工具。 ActiveHDL学生版开发工具 本书中的设计在Aldec公司的ActiveHDL集成开发环境下建立与仿真。综合工具采用的是Synplicity的Synplify。如果要进行时序仿真, 则需要使用不同PLD厂商的布局布线工具提供时序模型。 Aldec公司提供了学生版仿真器, 它保留了专业版的大部分功能, 只是在仿真能力和性能上存在差异。本书使用的是ActiveHDL 7.2学生版, 读者在没有专业版工具的情况下可以使用学生版来创建设计并进行仿真有需该学生版仿真器的读者, 可在http://www.phei.com.cn的相关网页上下载——编者注。。Aldec公司的ActiveHDL集成开发环境是一个非常好的VHDL设计和验证平台。 致谢 首先要感谢的是Tom Robbins先生。作为Prentice Hall电子与计算机类书籍的出版商, 他在几年前和我签约要出版此书。非常感激他耐心的等待与支持, 因为本书的编写时间大大超过了预期。 感谢Prentice Hall为此书的出版做出了辛勤努力的Jane Bonnell、Scott Disanno、Alice Dworkin和William Opaluch, 以及Pine Tree Composition的Kate Boilard。 对初稿的审阅对本书改进起到了非常重要作用, 在此对Loyola Marymount 大学的Nazmul Ula, Johns Hopkins大学的Richard C.Meitzler, 以及一些我不知道姓名的评阅者对此书所付出的时间和努力表示感谢。 感谢Aldec公司允许将ActiveHDL学生版(7.2版)作为本书教学使用的工具。 特别感谢Stony Brook大学的电子与计算机工程系的Scott Tierno。他和我已经共同工作了25年, 在Stony Brook大学, 我们共同从事嵌入式系统设计开发和VHDL教学和实验工作。Scott阅读了本书最初的草稿并给出了很多有价值的建议及修改意见, 是他建议本书取名为“VHDL for Engineers”。 本书草稿中的很多内容已经在Stony Brook大学本科生的数字系统设计相关课程中使用。学生们给出的反馈意见已经在书中加以体现, 对此表示敬意和感谢。 最后感谢我的朋友Patricia Long提供的精美封面照片。
目 录 第1章 使用VHDL和PLD进行数字系统设计 1.1 VHDL/PLD设计方法 1.2 需求分析与规范制定 1.3 VHDL设计描述 1.4 通过仿真进行验证 1.5 测试平台 1.6 功能(行为)仿真 1.7 可编程逻辑器件(PLD) 1.8 SPLD和22V10 1.9 目标器件的逻辑综合 1.10布局布线和时序仿真 1.11编程和目标器件的验证 1.12VHDL/PLD设计方法的优点 1.13VHDL的发展 1.14VHDL在仿真和综合中的应用 1.15本书的主要目标 习题 第2章 实体、结构体和编程风格 2.1 设计单元、库单元和设计实体 2.2 实体说明 2.3 VHDL语法定义 2.4 端口模式 2.5 结构体 2.6 编程风格 2.7 综合结果与程序风格的关系 2.8 抽象和综合的层次 2.9 层次化设计与电路的结构描述 习题 第3章 信号和数据类型 3.1 对象分类和对象类型 3.2 信号对象 3.3 标量类型 3.4 STD_LOGIC类型 3.5 标量文字(scalar literal)和标量常量(scalar constant) 3.6 复合类型 3.7 数组 3.8 无符号和有符号类型 3.9 复合文字和复合常量 3.10整型 3.11可综合的端口类型 3.12操作符(算子)和表达式 习题 第4章 数据流风格的组合逻辑电路设计 4.1 逻辑操作符 4.2 数据流方式结构体中的信号赋值 4.3 选择型信号赋值 4.4 布尔型及相关的操作符 4.5 条件(型)信号赋值 4.6 优先级编码器 4.7 输入无关项与输出无关项 4.8 译码器 4.9 查表法 4.10三态缓冲器 4.11避免组合(逻辑)环路 习题 第5章 行为风格的组合逻辑电路设计 5.1 行为风格的结构体 5.2 进程语句 5.3 顺序语句 5.4 case 语句 5.5 if语句 5.6 loop语句 5.7 变量 5.8 例题:奇偶校验检测器电路 5.9 描述组合逻辑电路的进程综合 习题 第6章 事件驱动的仿真 6.1 仿真器类型 6.2 精确化(elaboration) 6.3 信号驱动器 6.4 仿真器内核进程 6.5 仿真初始化 6.6 仿真周期 6.7 信号和变量 6.8 δ延迟 6.9 δ延迟和组合环路 6.10多重驱动器 6.11信号属性 习题 第7章 组合逻辑电路的测试平台 7.1 设计验证 7.2 组合逻辑电路的功能验证 7.3 一个简单的测试平台 7.4 物理类型 7.5 单进程测试平台 7.6 等待语句 7.7 断言(assert)和报告(report)语句 7.8 基于记录和查找表的测试平台 7.9 计算激励和期望结果的测试平台 7.10预定义的移位操作符 7.11根据UUT的功能安排激励顺序 7.12将UUT与等效模型进行比较 7.13代码覆盖率和分支覆盖率 7.14组合逻辑电路的网表验证和时序验证 7.15使用VITAL和SDF的时序模型 习题 第8章 锁存器与触发器 8.1 时序系统及其存储元件 8.2 D锁存器 8.3 检测时钟边沿 8.4 D触发器 8.5 使能(门控)触发器 8.6 其他类型的触发器 8.7 PLD中的基本存储元件 8.8 定时需求与同步输入数据 习题 第9章 多位锁存器、寄存器、计数器和存储器 9.1 多位锁存器与寄存器 9.2 移位寄存器 9.3 移位寄存式计数器 9.4 计数器 9.5 检测非时钟信号的边沿 9.6 具有微处理器接口的脉宽调制器 9.7 存储器 习题 第10章 有限状态机 10.1 有限状态机 10.2 FSM的状态图 10.3 三进程FSM的VHDL模型 10.4 创建状态图 10.5 OSE 译码器 10.6 状态编码与状态分配 10.7 状态机可靠性 10.8 禁止逻辑FSM举例 10.9 用摩尔型FSM实现的计数器 习题 第11章 ASM图和RTL设计 11.1 算法状态图 11.2 将ASM图转换成VHDL 11.3 系统结构 11.4 连续逼近寄存器设计举例 11.5 时序乘法器设计 习题 第12章 子程序 12.1 子程序 12.2 函数 12.3 过程 12.4 数组特性和非受约束数组 12.5 子程序和操作符过载 12.6 类型转换 习题 第13章 程序包 13.1 包头和包体 13.2 标准程序包和实际存在的标准程序包 13.3 STD_LOGIC_1164程序包 13.4 NUMERIC_STD程序包(IEEE STD 1076.3) 13.5 STD_LOGIC_ARITH程序包 13.6 VHDL文本输出程序包 习题 第14章 时序系统的测试平台 14.1 简单时序电路的测试平台 14.2 生成系统时钟 14.3 生成系统复位信号 14.4 同步激励的产生和监控 14.5 连续逼近寄存器的测试平台 14.6 时序系统测试平台激励的选择 14.7 使用过程产生激励 14.8 激励过程中的输出验证 14.9 总线功能建模 14.10响应监控 习题 第15章 模块化和层次化设计 15.1 模块和层次的划分 15.2 设计单元和库单元 15.3 设计库 15.4 库单元的使用 15.5 设计实体的直接例化 15.6 元件和设计实体的间接例化 15.7 配置说明 15.8 元件连接 15.9 参数化的设计实体 15.10参数化的模块库(LPM) 15.11生成语句 习题 第16章 设计实例 16.1 与微处理器兼容的正交译码器/计数器设计 16.2 正交译码/计数器的验证 16.3 参数化的正交译码/计数器 16.4 电子安全锁设计 16.5 电子安全锁的验证 16.6 RF发射器编码器的设计 习题 附录 参考文献
http://www.hxedu.com.cn/hxedu/fg/book/bookinfo.html?code=G0146030