本书是为本科生和研究生撰写的教材,主要讲述了VHDL的全部特征,也包含了有关数字系统设计的知识。全书共分为13章,内容包括电子设计自动化工具的使用、CMOS和可编程逻辑工艺,布尔代数和组合逻辑设计的基本原则,各种建模的技术,有限状态机的设计,以及三个重要的可测试性设计:扫描路径、内置自检和边界扫描等。最后介绍了VHDL-AMS和混合信号建模。本书与前一版相比的不同之处是在相关章节中包含了写测试基准的小节,同时增加了有关VHDL-AMS和混合信号建模的一章。本书可用做大学电子、电气和计算机专业本科生、硕士生的教材,也可用做相关工程技术人员的参考书。前言关于本书当本书第一版出版时,写一本结合VHDL和数字设计的书似乎是新颖的想法。就在这时,几本相近主题的书出版了。本书现在已被几所大学用做教材。此外,本书第一版已被翻译为波兰语并在中华人民共和国出版了英文影印本。这些使我确信写一本结合VHDL和数字系统设计的书的想法是很好的,但是我不能确定第一版是否完美。本版(也就是第二版)修改了一些到目前为止所发现的前一版中的错误并增加了两个重要的主题(这些将在后面说明)。本书是作为本科生和研究生所用的教材编写的。大多数讲述VHDL的图书以工程师作为对象,因此,并不讲述VHDL的全部特征。同样,本书所包含的有关数字系统设计方面的内容在其他典型的VHDL书中也不会涉及。在不同的国家、大学或者学院,电气、电子和计算机工程学位的教学大纲有很大的不同。本书的内容是通过数届二年级、三年级本科生和研究生的教学和使用发展而来的。我们假设学生对布尔代数和组合逻辑设计的原则非常熟悉。在南安普敦大学,一年级本科生的教学大纲也包括了同步时序设计和可编程逻辑的介绍。因此本书是建立在这些基础上的。过去我们经常认为像VHDL这样的专题对于二年级的教学来说太专业化,最好能在本科最后一年讲述或者作为研究生课程。有几个很好的原因使得我们应该在课程计划中更早地介绍VHDL。随着集成电路复杂度的增加,工业的发展要求毕业生具有VHDL以及相关设计工具的知识。如果将上述课程放在本科生的最后一年,学生只有很少、甚至没有时间来将知识应用到实际工作中去。第二,从与其他国家同行的交流中可知,现在的学生在电气或电子工程以及计算机科学或计算机工程的选择上,都更倾向于后者。VHDL在硬件设计方面给计算机方向的学生提供了一个很好的方法。最后,仿真和综合工具目前比较成熟,在教学中使用PC机构建的工作平台也相对比较便宜和容易获得。第二版中的变化现在看来,前一版的错误是在大多数的例子中用std_ulogic代替了std_logic。从纯教学的观点来看,这个决定是正确的,因为这样的用法会清楚地在仿真中指出什么时候块的输出被不经意地连在一起。从实用的观点来看,这样的用法与大多数业界的实际使用不一致,并可能在EDA(electronicdesignautomation)工具中导致一些问题。所有的例题已经修正为使用std_logic,好几个例题也被简化了(例如,通过使用直接实例化来简化)。在第一版出版时,有一些EDA工具只支持VHDL1987标准。现在这种情况有了大的改变,因此笔者在第二版中倾向于优先使用新的1993标准。当然也有一个22的修订版。虽然在本书写作时几乎没有工具支持新的标准,但标准的变化很小并且只在附录C中讨论了重大的变化(共享变量的形式)。虽然笔者也反对坚持使用IEEEnumeric_std包(与std_logic_arith对立的包)的倾向,但是业已证明笔者选择的正确性。所增加的两个主要内容有两种形式。第一,有几个章节现在包括了写测试基准的小节。通过仿真验证VHDL模型对于生产正确的硬件是不可缺少的。据可靠估计,至少一半的VHDL是为了验证模型的某种形式而编写的测试基准。因为这方面是如此重要,所以这些资料已经包括在需要它们的章节中,而没有单独的一个有关测试基准的章节。笔者强烈建议读者用文本仿真模型,并使用这些测试基准的例子以得到帮助。第二,新增了有关VHDL-AMS和混合信号建模的一章。所有的数字设备硬件不得不和“真实”世界在某一个方面相互影响。虽然混合信号仿真器已经存在了15年,但是它们的使用因为在数字部分和模拟部分之间书写接口模块的困难而受到限制。VHDL-AMS集成这两个世界并提供了几个混合信号仿真器。这一章并不是想要成为在转换设计方面的一个全面的指导,也没有描述VHDL-AMS的所有细节,但是笔者希望它将会鼓励设计者尝试将他们的系统作为一个整体来建模。本书的结构第1章介绍了本书的一些概念,即电子设计自动化工具的使用、CMOS和可编程逻辑工艺。我们也考虑了一些工程问题,像噪声容限和扇出。在第2章,我们回顾了一下布尔代数和组合逻辑设计的基本原则。我们也将讨论时序和冒险相关的问题,以及一些数据表示的基本技巧。第3章通过基本逻辑门模型介绍VHDL,强调了一些重要文档代码。我们将展示怎样构造基本门的网表以及怎样通过门模拟延时。我们也将讨论参数化的模块、常量和未连接的输入、输出。通过使用测试基准介绍用VHDL验证VHDL模块的设计观念。最后,我们简要介绍一下配置的概念。第4章描述了各种建模的技术。组合逻辑块、缓冲、编码器、解码器、多路选择器、加法器和奇偶检查器都用一定的并行和顺序VHDL代码结构进行了建模。本章、第5章、第6章和第7章中我们仍将从设计原则、可综合方面介绍硬件的VHDL模型,虽然到底什么样的模型和设计才可以支持这些特性的讨论推迟到第9章才会介绍。另外,我们也将介绍IEEE相关符号。第5章可能是全书最重要的章节。在此我们将讨论被认为是数字系统设计的基石:有限状态机的设计。我们使用了ASM图表符号,描述了从ASM图表符号到D触发器、次态和输出逻辑的设计过程。介绍了状态机的VHDL模型。第6章介绍了各种时序构件块:锁存器、触发器、寄存器、计数器、存储器和一个时序乘法器。对IEEE相关符号、测试基准设计,以及VHDL代码结构的引入,我们使用与第4章一样的格式。第7章把前面三章介绍的概念组合起来。ASM图标符号被扩展到包括两个状态机和寄存器的输出,因此有了数据通路控制器的划分。从这里,我们用硬件术语解释了指令集的思想,并进一步用VHDL对一个非常简单的微处理器建模。这也提供了介绍VHDL子程序和包的方法。VHDL仍然是一个建模语言。第8章描述了一个VHDL仿真器的操作。最先介绍事件驱动仿真的思想,同时讨论VHDL仿真器的特性。虽然整个VHDL语言都能被仿真,但是某些结构体的仿真效率高于其他的结构体;因此,在此我们也讨论如何编写更加高效的模块。因为文件操作只适合于仿真模块,所以在本章也对之加以讨论。另外,就像我们在第9章中讨论的,VHDL作为描述可综合模型的语言的作用将越来越重要。现在主要的综合工具的类型是针对RTL级别的综合。这样的工具能从VHDL模块描述中推理出需要哪些触发器和锁存器。我们描述了这样的结构体。相反,如果语言描述得非常差,那么可能会错误地建立触发器。我们也描述了一些常见的陷阱。综合进程能被一些约束条件控制,因为这些约束条件不属于VHDL语言,所以我们使用普通的术语来讨论。我们讨论了一些适合于FPGA综合的结构体。最后,我们简单地考察一下有希望成为一项重要设计技术的行为级综合。第1章和第11章关注测试和可测试性设计的主题。这个领域过去经常被忽略,但是现在大家已经认识到测试是设计过程中很重要的一部分。第1章介绍了故障模型化的思想,接着介绍测试生成方法。测试的效率由故障仿真来决定。在写作本书时,市场上还没有商业化的基于VHDL的故障仿真器。这一章的最后一部分展示什么样的故障模型和故障仿真能使用标准的VHDL仿真器来执行。本章的VHDL代码也介绍指针和全局变量等结构。在第11章中,我们描述了三个重要的可测试性设计:扫描路径、内置自检(BIST,built-inself-test)和边界扫描。虽然这些一直是非常枯燥的题目,但是可以使用VHDL仿真器展示一个内置自检(BIST)结构怎样为无故障电路和故障电路生成不同的特征值。边界扫描使用一个VHDL的子集来描述在芯片上使用的测试结构。本书给出了一个例子。在第12章中,我们使用VHDL作为工具来研究和探索异步时序电路中的不规则行为。虽然主要的设计模式是同步并发模式,但是由同步电路组成的数字系统大量增加了彼此之间的异步通信。我们介绍了基本模式的概念并说明了怎样分析和设计异步电路。我们使用VHDL仿真功能来说明冒险问题、竞争问题、建立和保持时间违法问题。我们也将讨论亚稳性的问题。最后一章介绍了VHDL-AMS和混合信号建模。简要介绍了数模转换器(DAC)和模数转换器(ADC),给出了用VHDL-AMS结构来对这些转换的建模。我们也在此介绍锁相环(PLL)的思想,并给出一个简单的混合信号模型。本书后面有三个附录。附录A列出了各种VHDL相关的标准和未来VHDL发展的一些问题。附录B简要描述了Verilog硬件描述语言。Verilog是相对于VHDL的另一个主要选择,两者非常相似。附录C涵盖了一些共享变量的说明,特别是在1993版和22版之间的区别。在每一章的末尾都有一定数量的习题。这些习题都是一些将该章所涉及的指令恰当运用而形成的可综合的VHDL例子。为了执行这些模拟仿真和综合的任务,读者可能不得不写出自己的测试基准和约束文件。这些例子都能够在“Web资源”一节中提供的网站上找到。怎样使用本书很明显,本书根据课程级别的不同可以有很多种使用方法。在南安普敦大学,笔者像下面这样使用本书。电子工程和计算机工程系二年级学生第1章和第2章是复习内容,我们希望学生能够独立阅读。讲义中应该包括书中第3章~第7章的内容。其中的某些章节是可选的,例如3.8节、6.3节和6.7节。另外,如果时间紧张,某些结构体,例如withselect结构,可以省略。但是讲稿中应该包括1.2节的单一固定故障模型、1.3节的测试原型生成的基本原则与11.2节中所讲述的扫描设计的基本原则等内容。电子工程和计算机工程系三年级学生我们希望学生能独立阅读第3章到第7章的内容。讲义中应该包括书中第8章~第12章的内容。第13章、VHDL-AMS现在包括在四年级学生的课程中。在整个学习过程中,学生需要能够掌握VHDL仿真器和RTL综合工具,从而能学习和使用书中的例子。在二年级学生的课程中,一组包括在FPGA中进行综合的设计习题是对本书内容的非常好的补充。在南安普敦大学的三年级课程中,所有学生都要做一个独立的项目。本书没有安排其他正式的实验课程,一些独立的项目将包括VHDL语言的使用。Web资源本书配套的网站为www.booksites.net/Zwolinski。该网站提供了有价值的教学与自学材料,如书中所有的VHDL示例,以及至VHDL工具的链接。