《高等院校电子信息科学与工程规划教材:EDA技术与Verilog HDL(第2版)》系统地介绍了EDA技术和VerilogHDL硬件描述语言,将VerilogHDL的基础知识、编程技巧和实用方法与实际工程开发技术在先进的EDA设计平台——QuartusII上很好地结合起来,使读者通过《高等院校电子信息科学与工程规划教材:EDA技术与Verilog HDL(第2版)》的学习能迅速了解并掌握EDA技术的基本理论和工程开发实用技术,为后续的深入学习和发展打下坚实的理论与实践基础。
作者依据高校课堂教学和实验操作的规律与要求,并以提高学生的实际工程设计能力和自主创新能力为目的,恰当编排了全书内容。全书共分为7个部分:EDA技术的概述、VerilogHDL语法知识及其实用技术、QuartusII及LPM宏模块的详细使用方法、基于Verilog的有限状态机设计技术、基于Verilog的16位实用CPU设计技术及创新实践项目、基于ModelSim的TestBench仿真技术,以及基于MATLAB和DSPBuilder平台的EDA设计技术及大量实用系统设计示例。除个别章节外,其余各章都安排了相应的习题和大量针对性强的实验与设计项目。书中列举的VerilogHDL示例都经编译通过或经硬件测试通过。
《高等院校电子信息科学与工程规划教材:EDA技术与Verilog HDL(第2版)》主要面向高等院校本、专科的EDA技术和VerilogHDL语言基础课,推荐作为电子工程、通信、工业自动化、计算机应用技术、电子对抗、仪器仪表、数字信号或图像处理等学科专业和相关实验指导课的教材用书或主要参考书,同时也可作为电子设计竞赛、FPGA开发应用的自学参考书。
与此教材配套的还有CAI教学课件、实验指导课件、实验源程序和实验设计项目相关的详细技术资料等,读者都可免费索取。
与第1版相比,新版的内容与结构都有了较大变化,主要表现在以下几个方面。
(1)为了突出重点、精简篇幅,将有关EDA技术、硬件描述语言导言的内容、EDA工具基本知识及FPGA与CPLD结构原理等基本概念的内容都放在了第1章。
(2)对硬件描述语言的讲述,改用了比较系统和循序渐进的讲述方法,确保了HDL基本内容的完整性和系统性。为了便于理解和提高学习效率,给出了大量有针对性的HDL设计示例。这部分内容主要包括在第2、第3和第5章中。
(3)为了能使读者尽快学到HDL知识并付诸实践,更好地从结合工程实际的层面来检验学习效果,本书在较早阶段就安排了对应的硬件设计技术的学习和丰富的实验内容,同时将HDL知识的学习有机地融入了实践中。这部分内容主要包括在第4和第6章中。
(4)第7章主要对之前章节内容进行了归纳综合,期待为后续的学习奠定更坚实的基础。其中许多内容是新加入的。
(5)第8章的内容有所扩充,主要是围绕有限状态机的设计,介绍了更为实用的EDA技术和HDL编程设计方法,其中增加了许多新的、更贴近工程实际的状态机设计与应用方面的实用知识。
(6)第9章的内容基本是新加入的。其中介绍了一个较大的设计项目,即一个有实用意义的16位CPU的设计。这对于之前的理论知识和实践能力的综合运用是一个很好的训练项目,特别是还可以将此章的内容作为一个创新设计竞赛项目。这其中首先给出一个完整的CPU设计原型和详细的设计流程,然后在这个基础上向参赛者提出不同层次要求的创新设计方案和系统设计。此类教学和实践内容在国外高等院校同类课程和教材中经常出现。
(7)第10章主要介绍基于ModelSim的Test Bench仿真技术。这部分内容也是新加入的,这主要考虑到Quartus II 10.0后不再支持内置的门级仿真器,而Test Bench仿真技术在EDA技术中更具一般性,适用领域更广,更实用。
(8)第11和第12章主要介绍基于DSP-Builder和MATLAB/Simulink的EDA技术,其中包括了大量设计示例和对应的实验。这部分内容主要是面向涉及复杂算法的EDA系统设计,如数字通信领域中的系统功能模块的设计和高速DSP硬件系统的设计,为EDA技术和复杂数字系统的设计和验证拓展了更广阔和更一般的领域,使不同的EDA工具轻易地融为一体,从而强化了各类EDA工具的优势。随着Quartus II和DSP-Builder版本的升级,这部分内容也有很大的变化和扩充,本书对原有的内容做了更新。
与本书的Verilog HDL内容相对应的VHDL教材是清华大学出版社出版的《EDA技术与VHDL》。
基于工程领域中的EDA技术的巨大实用价值,以及对EDA教学中实践能力和创新意识培养的极端重视,本书的特色主要体现在如下两个方面。
1.注重实践能力和创新能力的培养
在绝大部分章节中都安排了针对性较强的实验与设计项目,使学生对每一章的课堂教学内容和教学效果能及时通过实验得以消化和强化,并尽可能地从一开始学习就有机会将理论知识与实践、自主设计紧密联系起来。
全书包含数十个实验及其相关的设计项目,这些项目涉及的EDA工具软件类型较多、技术领域也较宽、知识涉猎密集、针对性强,而且自主创新意识的启示性好。与书中的示例相同,所有的实验项目都通过了EDA工具的仿真测试及FPGA平台的硬件验证。每一个实验项目除给出详细的实验目的、实验原理和实验报告要求外,都有2~5个子项目或子任务。它们通常分为:第一个层次的实验是与该章某个阐述内容相关的验证性实验,并通常提供详细的且被验证的设计源程序和实验方法。学生只需将提供的设计程序输入计算机,并按要求进行编译仿真,在实验系统上实现即可;使学生有一个初步的感性认识,这也提高了实验的效率;第二个层次的实验任务是要求在上一实验基础上做一些改进和发挥;第三个层次的实验通常是提出自主设计的要求和任务;第四、第五个实验层次则是在仅给出一些提示的情况下提出自主创新性设计的要求。因此,教师可以根据学时数、教学实验的要求以及不同的学生对象,布置不同层次含不同任务的实验项目。
2.注重教学选材的灵活性和完整性相结合
本教材的结构特点决定了授课学时数可十分灵活,即可长可短,应视具体的专业特点、课程定位及学习者的前期教育程度等因素而定,大致在30~54学时。考虑到EDA技术课程的特质和本教材的特色,具体教学可以是粗放型的,其中多数内容,特别是实践项目,都可放手让学生更多地自己去查阅资料、提出问题、解决问题,乃至创新与创造;而授课教师只需做一个启蒙者、引导者、鼓励者和学生成果的检验者与评判者。授课的过程多数情况只需点到为止,大可不必拘泥细节、面面俱到。但有一个原则,即安排的实验学时数应多多益善。
事实上,任何一门课程的学时数总是有限的,为了有效增加学生的实践和自主设计的时间,可以借鉴清华大学的一项教改措施,即其电子系本科生从一入学就每人获得一块FPGA实验开发板,可从本科一年级一直用到研究生毕业。这是因为EDA技术本身就是一个可把全部实验和设计带回家的课程。
我校对于这门课程也基本采用了这一措施,即每个上EDA课的同学都可借出一套EDA实验板,使他们能利用自己的计算机在课余时间完成自主设计项目,强化学习效果。实践表明,这种安排使得实验课时得到有效延长,教学成效自然显著。
我们建议积极鼓励学生利用课余时间尽可能学完本书的全部内容,掌握本书介绍的所有EDA工具软件和相关开发手段,并尽可能多地完成本书配置的实验和设计任务,甚至能参考教材中的要求,安排相关的创新设计竞赛,进一步激发同学的学习积极性和主动性,并强化他们的动手能力和自主创新能力的培养。
还有一个问题有必要在此探讨,即自主创新能力的培养尽管重要,但对其有效提高绝非一朝一夕之事。多年的教学实践告诉我们,针对这一问题的教改必须从两方面入手,一是教学内容,二是设课时间。二者密切联系,不可偏废。
前者主要指建立一个内在相关性好、设课时间灵活且易于将创新能力培养寓于知识传播之中的课程体系。
后者主要指在课程安排的时段上,将这一体系的课程尽可能地提前。这一举措是成功的关键,因为我们不可能到了本科三、四年级才去关注能力培养,并期待奇迹发生,更不可能指望一两门课程就能解决问题。
尤其是以卓越工程师为培养目标的工科高等教育,自主创新能力的培养本身就是一项教学双方必须投入密集实践和探索的创新活动。我校的EDA技术国家级精品课程正是针对这一教改目标建立的课程体系,而“数字电子技术基础”是这一体系的组成部分和先导课程。它的提前设课是整个课程体系提前的必要条件。
通过数年的试点教学实践和经验总结,现已成功在部分本科学生中将此课程的设课时间从原来的第四或第五学期提前到了第一或第二学期。而这一体系的其他相关课程,如EDA技术、单片机(相关教材是清华大学出版社的《单片机原理与应用技术》,潘明、黄继业等编著)、SOC片上系统、计算机接口、嵌入式系统和DSP等也相应提前,从而使学生到本科二年级时就具备了培养工程实践和自主开发能力的条件了。
不可否认,数字电路课程的大幅提前必须要以其教学内容改革为前提,否则将传统的教学内容强行提前必将归于失败。为此,在总结了数字电路多年教改成果的基础上,我们推出了适应新需求的教材,即电子工业出版社出版的《实用数字电子技术基础》一书。此书创新性地解决了传统教材中的手工数字技术与现代自动化数字技术间的关系,使此二者能平稳过渡且有机融合,在有效促进理论与实践紧密结合的同时,强化实践训练,突显了创新意识启蒙的良好效果,同时实现了与后续课程的良好衔接性,很好地适应了当前的教改目标。尽管这一切尚处于我校的局部教学实践中,但已清晰地展示了诸多颇具说服力的证明。
例如,相比于其他同类情况(如同年级、同专业、同授业课程等),那些曾经参加这一课程体系的同学在大学生电子设计竞赛、飞思卡尔车模大赛以及一些国外企业主导的自主设计赛事中,都获得了更多的奖项和更好的成绩。而且这些学生的获奖比例逐年提高,例如,在2011年我校的全国大学生电子设计竞赛的一、二等奖项(分别是3个和6个)的获奖同学中,本科二年级学生的比例高达80%(同年我校多数本科三年级学生选择考研复习,未参赛)。若按传统的工科本科教学流程,二年级学生就有能力获全国一等奖是不可想象的!
其实,类似的教改活动和教改成绩,我校远非唯一。国内早有不少院校将数字电路放在第一或第二学期,其实践训练的内容包括超过数万至数十万逻辑门规模的数字系统自主设计训练,不少受益的学生在各类电子设计竞赛中也都获得了好成绩。前面提到的清华大学的教改活动也说明,他们至少有部分学生于本科一年级就有数字系统设计方面的训练;后来的调研也证明了这一点,如该校计算机专业本科二年级学生就能自主设计出各种极具创新特色的数字系统,如语音处理及数字立体声播放、硬件超级玛丽游戏显示与控制系统等;又如东南大学在一次省级数字电路课程电子设计竞赛中,有一组同学完成了指纹识别数字锁的设计而获一等奖;再如美国Michigan大学本科一年级学生就能设计数字电子琴这样的复杂系统,其中包括用FPGA控制VGA显示五线谱,PS/2键盘作为琴键及数字立体声音乐播放等。
另外有两个问题必须在此说明。
第一是关于本教材对于Quartus II版本选择的问题。尽管目前Altera早已颁布了Quartus II?12.0,但本教材中示例的说明仍然选择Quartus II?9.x,这是因为Altera已将Quartus II?10.0及此后版本软件中曾经一贯内置的门级波形仿真器移除了,并推荐使用接口于Quartus II的ModelSim-Altera仿真器。然而这一举措对于初学者未必是一个好消息,因为必须承认,Quartus II?9.x及之前版本软件中一直内置的波形仿真器的易学、高效和便捷的巨大优势,对于EDA教学和初学者的学习是十分重要的。况且Quartus II?9.x与Quartus II 12.0相比,总体上变化不大,又好在本书在第10章中针对Test Bench仿真,重点介绍了ModelSim-Altera的使用方法。
第二是针对本教材中的实验和实践项目所能提供的演示示例原设计文件的问题。本书中多数实验都能提供经硬件验证调试好的演示示例原设计,目的是为读者能顺利完成实验验证和设计;有的示例的目的是希望能启发或引导读者完成更有创意的设计,其中一些示例尽管看上去颇有创意,但都不能说是最佳或最终结果,这给读者留有许多改进和发挥的余地。此外还有少数示例无法提供源代码(只能提供演示文件),是考虑到本书作者以外的设计者的著作权,但这些示例仍能在设计的可行性、创意和创新方面给读者以宝贵的启示。所有与此教材相关的设计示例和实验项目的原设计程序和工程项目(包括第9章的CPU设计和第11、第12章基于DSP-Builder/MATLAB的设计)都可浏览相关网址或与作者联系而免费索取。
为了尽可能降低本书的成本和售价,就不再配置光盘了。与本书相关的其他资料,包括本书的配套课件、实验示例源程序资料、相关设计项目的参考资料和附录中提到的mif文件编辑生成软件等文件资料都可免费索取;此外对于一些与本教材相关的工具软件,包括Quartus II、Synplify Pro、ModelSim-Atera和DSP-Builder/MATLAB等EDA软件的安装使用问题都可咨询www.kx-soc.com,或与作者探讨(pmr123@sina.cn);或直接与出版社联系(主要是索取教学课件)。
为了本书的顺利出版,杭州康芯公司的高级工程师姜兆刚先生在IP核的应用、大量实验设计项目的验证和各种EDA软件工具的安装调试等方面完成了大量的和无可替代的工作,在此表示诚挚的谢意!
清华大学出版社的网址和联系方式是:www.tup.com.cn,zzfangcn@vip.163.com。
编 者
于杭州电子科技大学
第1章 EDA技术概述
1.1 EDA技术
1.2 EDA技术应用对象
1.3 常用HDL和Verilog HDL
1.4 EDA技术的优势
1.5 面向FPGA的EDA开发流程
1.5.1 设计输入
1.5.2 综合
1.5.3 适配(布线布局)
1.5.4 仿真
1.5.5 RTL描述
1.6 可编程逻辑器件
1.6.1 PLD的分类
1.6.2 PROM可编程原理
1.6.3 GAL
1.7 CPLD的结构与可编程原理
1.8 FPGA的结构与工作原理
1.8.1 查找表逻辑结构
1.8.2 Cyclonelll系列器件的结构原理
1.9 硬件测试技术
1.9.1 内部逻辑测试
1.9.2 JTAG边界扫描测试
1.10 编程与配置
1.11 Quartus Ⅱ
1.12 IP核
1.13 EDA的发展趋势
习题
第2章 Verilog程序结构与数据类型
2.1 Verilog程序结构
2.1.1 Verilog的模块的表达方式
2.1.2 Verilog模块的端口信号名和端口模式
2.1.3 Verilog信号类型定义
2.1.4 Verilog模块功能描述
2.2 Verilog数据类型
2.2.1 net网线类型
2.2.2 wire网线型变量的定义方法
2.2.3 register寄存器类型
2.2.4 reg寄存器型变量的定义方法
2.2.5 integer整数型寄存器类型变量定义方法
2.2.6 存储器类型
2.3 Verilog基本要素与文字规则
2.3.1 Verilog的4种逻辑状态
2.3.2 Verilog的数字表达形式
2.3.3 数据类型表示方式
2.3.4 常量
2.3.5 标识符、关键词及其他文字规则
2.3.6 参数定义关键词parameter和localparam的用法
习题
第3章 Verilog行为语句
3.1 过程语句
3.1.1 always语句
3.1.2 always语句在D触发器设计中的应用
3.1.3 多过程应用与异步时序电路设计
3.1.4 简单加法计数器及其Verilog表述
3.1.5 initial语句
3.2 块语句
3.3 case条件语句
3.4 if祭件语句
3.4.1 if语句的一般表述形式
3.4.2 基于if语句的组合电路设计
3.4.3 基于if语句的时序电路设计
3.4.4 含异步复位和时钟使能的D触发器的设计
3.4.5 含同步复位控制的D触发器的设计
3.4.6 含清零控制的锁存器的设计
3.4.7 时钟过程表述的特点和规律
3.4.8 实用加法计数器设计
3.4.9 含同步预置功能的移位寄存器设计
3.4.10 关注if语句中的条件指示
……
第4章 时序仿真与硬件实现
第5章 Verilog运算符与结构描述语句
第6章 LPM宏模块的应用
第7章 Verilog设计深入
第8章 Verilog状态机设计技术
第9章 基于Verilog的实用CPU创新设计
第10章 Verilog Test Bench仿真
第11章 DSP Builder设计初步
第12章 DSP Bu.lder设计深入