"十二五"普通高等教育本科国家级规划教材

计数器代码  时间:2021-04-12  阅读:()
EDA技术实用教程——VerilogHDL版(第五版)潘松黄继业潘明编著北京内容简介本书根据课堂教学和实验操作的要求,以提高实际工程设计能力为目的,深入浅出地对EDA技术、VerilogHDL硬件描述语言、FPGA开发应用及相关知识做了系统和完整的介绍,使读者通过本书的学习并完成推荐的实验,能初步了解和掌握EDA的基本内容及实用技术.
本书包括EDA的基本知识、常用EDA工具的使用方法和目标器件的结构原理、以向导形式和实例为主的方法介绍的多种不同的设计输入方法、对Verilog的设计优化以及基于EDA技术的典型设计项目.
各章都安排了习题或针对性较强的实验与设计.
书中列举的大部分Verilog设计实例和实验示例实现的EDA工具平台是QuartusII,硬件平台是CycloneIII系列FPGA,并在EDA实验系统上通过了硬件测试.
本书可作为高等院校电子工程、通信、工业自动化、计算机应用技术、电子对抗、仪器仪表、数字信号或图像处理等学科的本科生或研究生的电子设计、EDA技术课程和VerilogHDL硬件描述语言的教材及实验指导书,同时也可作为相关专业技术人员的自学参考书.
图书在版编目(CIP)数据EDA技术实用教程:VerilogHDL版/潘松,黄继业,潘明编著.
—5版.
—北京:科学出版社,2013.
11"十二五"普通高等教育本科国家级规划教材ISBN978-7-03-038782-0Ⅰ.
①E…Ⅱ.
①潘…②黄…③潘…Ⅲ.
①电子电路-电路设计-计算机辅助设计-高等学校-教材Ⅳ.
①TN702中国版本图书馆CIP数据核字(2013)第235322号责任编辑:赵卫江/责任校对:马英菊责任印制:吕春珉/封面设计:曹来印刷科学出版社发行各地新华书店经销*2002年10月第一版2013年11月第五版2005年2月第二版2013年11月第一次印刷2006年9月第三版开本:787*10921/162010年6月第四版印张:251/4字数:580000定价:42.
00元(如有印装质量问题,我社负责调换〈〉)销售部电话010-62134988编辑部电话010-62138017(HI01)版权所有,侵权必究举报电话:010-64030229;010-64034315;13501151303前言在现代电子设计领域,VerilogHDL作为IEEE标准的两大主流HDL之一,相比于VHDL,具有易学易用和享有ASIC设计领域的主导地位等诸多优势,在全球范围内其用户覆盖率一直处于上升趋势;统计资料表明VerilogHDL现已超过80%的行业覆盖率,例如美国使用VerilogHDL的工程师占HDL设计行业工程师的90%以上,并仍有上升趋势.
由此势必导致我国VerilogHDL工程师和相关就业领域人才需求的不断增加.
本书以VerilogHDL作为基本硬件描述语言来介绍EDA技术.
作为教科书,与科学出版社出版的《EDA技术实用教程——VHDL版》构成了姐妹篇.
为了适应EDA技术在高新技术行业就业中的需求和高校教学的要求,突出EDA技术的实用性,以及面向工程实际的特点和自主创新能力的培养,作者力图将EDA技术最新的发展成果、现代电子设计最前沿的理论和技术、国际业界普遍接受和认可的EDA软硬件开发平台的实用方法,通过本书合理的综合和萃取,奉献给广大读者.
随着EDA技术的发展和应用领域的扩大,EDA技术在电子信息、通信、自动控制及计算机应用等领域的重要性日益突出.
同时随着技术市场与人才市场对EDA技术需求的不断提高,产品的市场效率和技术要求也必然会反映到教学和科研领域中来.
以最近几届全国大学生电子设计竞赛为例,涉及EDA技术的赛题从未缺席过.
对诸如斯坦福大学、麻省理工学院等美国一些著名院校的电子与计算机实验室建设情况的调研也表明,其EDA技术的教学与实践的内容也十分密集,在其本科和研究生教学中有两个明显的特点:其一,各专业中EDA教学实验课程的普及率和渗透率极高;其二,几乎所有实验项目都部分或全部地融入了EDA技术,其中包括数字电路、计算机组成与设计、计算机接口技术、数字通信技术、嵌入式系统、DSP等实验内容,并且更多地注重创新性实验.
这显然是科技发展和市场需求双重影响下自然产生的结果.
基于工程领域中的EDA技术应用的巨大实用价值,以及重视EDA教学中实践能力和创新意识培养的极端重要性,我们对本书各章节做了相应的安排,其特点有以下三个.
1.
注重实践和创新能力的培养除在各章中安排了许多习题外,绝大部分章节还安排了针对性较强的实验与设计项目,使学生对每一章的课堂教学内容和教学效果能及时通过实验得以消化和强化,并尽可能地从学习一开始就有机会将理论知识与实践、自主设计紧密联系起来.
全书包含数十个实验及其相关的设计项目,这些项目涉及的技术领域宽,知识涉猎密集、针对性强,而且自主创新意识的启示性好.
与本书的示例一样,所有的实验项目都通过了EDA工具的仿真测试并通过FPGA平台的硬件验证.
每一个实验项目除给出详细的实验目的、实验原理和实验报告要求外,都含2~5个子项目或子任务.
它们通常分为:第一(层次)实验任务是与该章某个阐述内容相关的验证性实验,通常提供详细的并被验证的设计源程序和实验方法,学生只需将提供的设计程序输入计算机,并按要求进行编译仿真,在实验系统上实现即可,使学生有一个初步的感性认识,这也提高了实验的效率;第二(层ii前言EDA技术实用教程(第五版)次)实验任务是要求在上一实验基础上做一些改进和发挥;第三个层次的实验通常是提出自主设计的要求和任务;第四、第五个实验层次则在仅给出一些提示的情况下提出自主创新性设计的要求.
因此,教师可以根据学时数、教学实验的要求以及不同的学生对象,布置不同层次、含不同任务的实验项目.
此外,在第五版增加的诸多内容中,第11章的内容进一步强化了本教材注重实践和创新能力培养的特色.
目前北美许多著名高校,如斯坦福大学、麻省理工学院、多伦多大学等高校的电子信息与工程专业中,都将CPU的组成及设计作为EDA技术课程、硬件描述语言课程或数字系统设计课程中必不可少的教学内容和自主实践项目.
而第11章的内容很好地体现了EDA技术教学的课程要求和发展趋势.
2.
高效的教学模式成就速成一般认为EDA技术的难点和学习费时的根源在于硬件描述语言.
对此,全书做了有针对性的安排:根据专业特点,摒弃传统的计算机语言的教学模式,打破目前HDL教材通行的编排形式,而以电子线路设计为基点,从实例的介绍中引出Verilog语句语法内容.
同时为了尽快进入EDA技术的实践阶段,熟悉EDA开发工具及其相关软硬件的使用方法,及时安排了大量有针对性的实验项目,以便读者能尽早进入数字系统工程设计经验的积累和能力提高阶段,并能通过这些面向实际的实践和实验活动,快速深化对硬件描述语言的理解和掌握对应的设计技巧.
本书通过一些简单而典型的VerilogHDL设计示例和电路模型,从具体电路和实用背景下引出相关的VerilogHDL语言现象和语句规则,并加以深入浅出的说明,使得读者仅通过前期一些内容的学习便能迅速了解并掌握VerilogHDL描述与逻辑电路间的基本关系,从而极大地降低了HDL的学习难度,大幅提高了学习效率,快速实现了学以致用的目的.
我们过去多年的实践已证明这是一种高效学习硬件描述语言和EDA技术的好方法.
这种学习流程也是目前国外流行的基于情景和工作过程的教学和学习模式,是一种自顶向下的新的学习模式.
3.
注重教学选材的灵活性和完整性相结合本书的结构特点决定了授课课时数可十分灵活,即可长可短,视具体的专业特点、课程定位及学习者的前期教育力度等因素而定,在20~50学时之间选择.
由于本书的特色和定位,加之EDA技术课程的特质,具体教学可以是粗放型的,其中多数内容,包括实践项目可直接放手于学生,更多地让他们自己去查阅资料、提出问题、解决问题,乃至创新与创造;而授课教师,甚至实验教师只需做一个启蒙者、引导者、鼓励者和学生成果的检验者和评判者.
授课的过程多数只需点到为止,大可不必拘泥细节,面面俱到.
但有一个原则,即实验学时数应多多益善.
事实上,现在任何一门课程的学时数总是有限的,为了有效倍增学生的实践和自主设计的时间,可以借鉴清华大学的一项教改措施,即其电子系本科生从一入学就人手获得一块FPGA实验开发板,可从本科一年级一直用到研究生毕业.
这是因为EDA技术本身就是一个可把全部实验和设计带回家的课程.
我校对于这门课也基本采用了这一措施:每个上EDA课的学生都可借出一套EDA实验板,使他们能利用自己前言iiiEDA技术实用教程(第五版)的计算机在课余时间完成自主设计项目,强化学习效果.
实践表明,这种安排使得实验课时得到有效延长,教学成效非常明显.
本书的定位目标是,基于全书给出的完整的知识结构,注重实践第一的观念,强化创新意识的培养,通过课堂合理的教学安排,结合学生明晰的求知觉悟和踏实的实践精神,为了即将离开学校面向招聘者、面向研究生导师、面向社会、面向未来的学生能多一份自信、多一点信心和多一线希望.
因此我们建议应该积极鼓励学生利用课余时间尽可能学完本书的全部内容,掌握本书介绍的所有EDA工具软件和相关开发手段,并尽可能多地完成本书配置的实验和设计任务.
还有一个问题有必要在此探讨,就是在前面曾提到的,本书的定位之说.
事实上,自主创新能力的提高绝非一朝一夕之事.
多年的教学实践告诉我们,针对这一命题的教改必须从两方面入手,一是教学内容,二是设课时间;两者互为联系,不可偏废.
前者主要指建立一个内在相关性好、设课时间灵活,且易于将创新能力培养寓于知识传播之中的课程体系.
后者主要指在课程安排的时段上,将这一体系的课程尽可能地提前.
这一举措是成功的关键,因为我们不可能想象到了本科三、四年级才去关注能力培养会有奇迹发生,更不可能指望一两门课程就能解决问题.
尤其是以卓越工程师为培养目标的工科高等教育,自主创新能力的培养本身就是一项教学双方必须投入密集实践和探索的创新活动.
我校的EDA技术国家级精品课程正是针对这一教改目标建立的课程体系,而"数字电子技术基础"是这一体系的组成部分和先导课程.
它的提前设课是整个课程体系提前的必要条件.
通过数年的试点性教学实践和经验总结,现已成功在部分本科学生中将此课程的设课时间从原来的第4或第5学期提前到了第1或第2学期.
而这一体系的其他相关课程,如EDA技术、单片机、SOC片上系统、计算机接口、嵌入式系统和DSP等也相应提前,从而使学生到二年级时就具备了培养工程实践和自主开发能力的条件.
不可否认,数字电路课程的大幅提前必须要以改革其教学内容为前提,否则将传统的教学内容强行提前必将归于失败.
为此,在总结了数字电路多年教改成果的基础上,我们推出了适应新需求的教材,即科学出版社出版的《数字电子技术基础》一书,很好地满足了当前的教改要求.
此书创新性地解决了传统教材中的手工数字技术与现代自动化数字技术间的关系,使两者能平稳过渡,且有机融合,在有效促进理论与实践紧密结合的同时,强化实践训练,突显了创新意识启蒙的良好效果,同时实现了与后续课程的良好衔接.
尽管这一切尚处于我校的局部教学实践中,但已清晰地展示了诸多颇具说服力的证明.
例如相比于其他同类情况(如同年级,同专业,同授业课程等),那些曾经参加这一课程体系的学生在大学生电子设计竞赛、飞思卡尔车模大赛,以及一些国外企业主导的自主设计赛事中,都获得了更多的奖项和更好的成绩.
而且这些学生的获奖比例逐年提高,例如我校在2011年全国大学生电子设计竞赛获一、二等奖项(分别是3个和6个)的学生中,本科二年级学生的比例高达80%(这年我校多数三年级学生选择考研复习,未参赛).
若按传统的工科本科教学流程,二年级就有能力获全国一等奖是不可想象的事!
其实,类似的教改活动和教改成绩,我校远非唯一.
国内早有不少院校将数字电路放在第1或第2学期,其实践训练的内容包括超过数万至数十万逻辑门规模的数字系统自主设计训练,不少受益的学生在各类电子设计竞赛中也都获得了好成绩.
前面提到的清华大iv前言EDA技术实用教程(第五版)学的教改活动也说明,他们至少有部分学生于本科一年级就有数字系统设计方面的训练;后来的调研也证明了这一点,如该校计算机专业本科二年级学生就能自主设计出各种极具创新特色的数字系统,如语音处理及数字立体声播放、硬件超级玛丽游戏显示与控制系统等;又如东南大学在一次省级数字电路课程(尚未学EDA)电子设计竞赛中,有一组同学完成了指纹识别数字锁的设计而获一等奖;再如美国密歇根大学本科一年级学生就能设计数字电子琴这样的复杂系统,其中包括用FPGA控制VGA显示五线谱,PS2键盘作为琴键及数字立体声音乐播放等.
有两个问题必须在此说明,第一个问题是关于本书对于QuartusII版本选择的问题.
尽管目前Altera公司早已颁布了QuartusII12.
0,但本书中的示例说明仍然选择QuartusII9.
x.
这是因为Altera公司已将QuartusII10.
0及此后版本的软件中曾经一贯内置的门级波形仿真器移除了,并推荐使用接口于QuartusII的ModelSim-Altera仿真器.
然而这一举措对于初学者并不是好消息.
因为必须承认,QuartusII9.
x及之前版本软件中一直内置的波形仿真器的易学、高效和便捷的巨大优势,对于EDA教学和初学者的学习是十分重要的.
况且QuartusII9.
x与QuartusII12.
0相比,总体上变化不大,而且本书在第14章中针对TestBench仿真,重点介绍了ModelSim-Altera的使用方法.
第二个问题是针对本书中的实验和实践项目所能提供的演示示例源设计文件的问题.
本书中多数实验能够提供经硬件验证调试好的演示示例源设计文件,目的是为读者能顺利完成实验验证和设计;有的示例的目的是希望能启发或引导读者完成更有创意的设计,其中一些示例尽管看上去颇有创意,但都不能说是最佳或最终结果,这给读者留有许多改进和发挥的余地.
此外还有少数示例无法提供源代码(只能提供演示文件),这是考虑到本书作者以外的设计者的著作权,但这些示例仍能给读者在设计的可行性、创意和创新方面以宝贵的启示.
为了本书的顺利出版,杭州康芯电子有限公司的高级工程师姜兆刚先生在IP核的应用、实验设计项目的验证和各种EDA软件工具的安装调试等方面完成了大量的和无可替代的工作,在此表示诚挚的谢意!
为了尽可能降低成本和售价,本书未配置光盘.
与本书相关的资料,包括配套课件、实验示例源程序资料、相关设计项目的参考资料和附录中提到的mif文件编辑生成软件等文件资料都可免费索取,此外,对于一些与本书相关的工具软件,包括QuartusII、SynplifyPro、ModelSim-Altera和DSP-Builder/MATLAB等EDA软件的安装使用问题的咨询都可浏览网址www.
kx-soc.
com,或与作者探讨(pmr123@sina.
cn).
所有这些(主要是教学课件)也可直接与科学出版社联系(www.
abook.
cn).
本书第一、二作者是杭州电子科技大学教师,第三作者是桂林电子科技大学教师.
现代电子设计技术是发展的,相应的教学内容和教学方法也应不断地改进,还有许多问题值得深入探讨,我们真诚地欢迎读者对书中的错误与有失偏颇之处给予批评指正.
作者2013年5月于杭州电子科技大学目录第1章EDA技术概述.
11.
1EDA技术及其发展.
11.
2EDA技术实现目标.
31.
3硬件描述语言VerilogHDL.
41.
4其他常用HDL.
51.
5HDL综合61.
6自顶向下的设计技术.
81.
7EDA技术的优势111.
8EDA设计流程.
121.
8.
1设计输入(原理图/HDL文本编辑)131.
8.
2综合.
141.
8.
3适配.
151.
8.
4时序仿真与功能仿真151.
8.
5编程下载151.
8.
6硬件测试161.
9ASIC及其设计流程.
161.
9.
1ASIC设计简介161.
9.
2ASIC设计一般流程简述181.
10常用EDA工具.
191.
10.
1设计输入编辑器191.
10.
2HDL综合器.
201.
10.
3仿真器211.
10.
4适配器221.
10.
5下载器221.
11QuartusII概述.
231.
12IP核.
241.
13EDA技术发展趋势管窥26习题27第2章FPGA与CPLD的结构原理.
282.
1PLD概述.
282.
1.
1PLD的发展历程.
282.
1.
2PLD分类.
29vi目录EDA技术实用教程(第五版)2.
2简单PLD结构原理302.
2.
1逻辑元件符号表示302.
2.
2PROM结构原理.
312.
2.
3PLA结构原理.
332.
2.
4PAL结构原理342.
2.
5GAL结构原理352.
3CPLD的结构原理.
372.
4FPGA的结构原理.
402.
4.
1查找表逻辑结构402.
4.
2CycloneIII系列器件的结构原理412.
5硬件测试.
452.
5.
1内部逻辑测试462.
5.
2JTAG边界扫描.
462.
6PLD产品概述.
482.
6.
1Altera公司的PLD器件.
482.
6.
2Lattice公司的PLD器件.
502.
6.
3Xilinx公司的PLD器件.
512.
6.
4Actel公司的PLD器件522.
6.
5Altera的FPGA配置方式522.
7CPLD/FPGA的编程与配置522.
7.
1CPLD在系统编程532.
7.
2FPGA配置方式532.
7.
3FPGA专用配置器件542.
7.
4使用单片机配置FPGA552.
7.
5使用CPLD配置FPGA57习题.
57第3章组合电路的Verilog设计583.
1半加器电路的Verilog描述593.
2多路选择器的Verilog描述633.
2.
14选1多路选择器及case语句表述方式.
633.
2.
24选1多路选择器及assign语句表述方式.
693.
2.
34选1多路选择器及条件赋值语句表述方式.
713.
2.
44选1多路选择器及条件语句表述方式.
723.
3Verilog加法器设计743.
3.
1全加器设计及例化语句应用.
743.
3.
2半加器的UDP结构建模描述方式.
773.
3.
3利用UDP元件设计多路选择器.
78目录viiEDA技术实用教程(第五版)3.
3.
48位加法器设计及算术操作符应用.
793.
3.
5算术运算操作符803.
3.
6BCD码加法器设计813.
4组合逻辑乘法器设计.
823.
4.
1参数定义关键词parameter和localparam823.
4.
2整数型寄存器类型定义.
833.
4.
3for语句用法.
833.
4.
4移位操作符及其用法843.
4.
5两则乘法器设计示例853.
4.
6repeat语句用法.
853.
4.
7while语句用法863.
4.
8parameter的参数传递功能.
873.
5RTL概念88习题89第4章时序仿真与硬件实现.
914.
1Verilog程序输入与仿真测试.
914.
1.
1编辑和输入设计文件914.
1.
2创建工程924.
1.
3全程编译前约束项目设置.
934.
1.
4全程综合与编译944.
1.
5时序仿真964.
1.
6RTL图观察器应用984.
2引脚锁定与硬件测试984.
2.
1引脚锁定984.
2.
2编译文件下载994.
2.
3AS直接编程模式1014.
2.
4JTAG间接编程模式.
1014.
2.
5USB-Blaster驱动程序安装方法1024.
3电路原理图设计流程1024.
4利用属性表述实现引脚锁定.
1064.
5keep属性应用.
1074.
6SignalProbe使用方法.
1084.
7宏模块逻辑功能查询.
109习题110实验与设计1114-1多路选择器设计实验1114-28位加法器设计实验111viii目录EDA技术实用教程(第五版)4-38位硬件乘法器设计实验1124-4十六进制7段数码显示译码器设计112第5章时序电路的Verilog设计1145.
1基本时序元件的Verilog表述.
1145.
1.
1基本D触发器及其Verilog表述.
1145.
1.
2用UDP表述D触发器.
1155.
1.
3含异步复位和时钟使能的D触发器及其Verilog表述.
1165.
1.
4含同步复位控制的D触发器及其Verilog表述1175.
1.
5基本锁存器及其Verilog表述.
1185.
1.
6含清0控制的锁存器及其Verilog表述.
1195.
1.
7异步时序电路的Verilog表述特点.
1205.
1.
8时钟过程表述的特点和规律.
1215.
2二进制计数器及其Verilog表述.
1225.
2.
1简单加法计数器及其Verilog表述.
1225.
2.
2实用加法计数器设计1245.
3移位寄存器的Verilog表述与设计.
1255.
3.
1含同步预置功能的移位寄存器设计.
1255.
3.
2使用移位操作符设计移位寄存器.
1265.
4可预置型计数器设计.
1275.
4.
1同步加载计数器1275.
4.
2异步加载计数器1285.
4.
3异步清0加载计数器.
1295.
4.
4同步清0加载计数器.
1305.
5时序电路硬件设计与仿真示例.
1315.
5.
1编辑电路、创建工程和仿真测试.
1315.
5.
2FPGA硬件测试132习题132实验与设计1345-1应用宏模块设计数字频率计1345-2计数器设计实验.
1385-3数码扫描显示电路设计1395-4模可控计数器设计.
1395-5串行静态显示控制电路设计1405-6高速硬件除法器设计1405-7不同类型的移位寄存器设计141第6章QuartusII应用深入.
1426.
1SignalTapII的使用方法.
142目录ixEDA技术实用教程(第五版)6.
2编辑SignalTapII的触发信号.
1466.
3FitterSettings项设置.
1476.
4功能块ChipPlanner应用.
1476.
4.
1ChipPlanner应用流程说明.
1486.
4.
2ChipPlanner说明1496.
5Synplify的应用及接口方法1506.
5.
1Synplify使用流程.
1506.
5.
2SynplifyPro与QuartusII接口.
153习题.
154实验与设计1556-1VGA彩条信号显示控制电路设计.
1556-2移位相加型8位硬件乘法器设计1586-3半整数与奇数分频器设计1596-4基于Verilog代码的频率计设计.
161第7章LPM宏模块的应用.
1637.
1计数器LPM宏模块调用1637.
1.
1计数器LPM模块文本代码的调用.
1637.
1.
2LPM计数器代码与参数传递语句.
1657.
1.
3创建工程与仿真测试1667.
2利用属性控制乘法器的构建.
1677.
3LPM_RAM宏模块的设置与使用.
1687.
3.
1初始化文件及其生成1687.
3.
2以原理图方式对LPM_RAM进行设置和调用.
1707.
3.
3测试LPM_RAM.
1727.
3.
4存储器的Verilog代码描述.
1737.
3.
5存储器设计的结构控制.
1767.
4LPM_ROM的定制和使用示例.
1777.
4.
1LPM_ROM的调用1777.
4.
2简易正弦信号发生器设计.
1787.
4.
3正弦信号发生器硬件实现和测试.
1797.
5在系统存储器数据读写编辑器应用.
1807.
6LPM嵌入式锁相环调用.
1817.
7In-SystemSourcesandProbesEditor使用方法.
1847.
8数控振荡器核使用方法.
1867.
9FIR核使用方法.
1887.
10DDS实现原理与应用.
1907.
10.
1DDS原理190x目录EDA技术实用教程(第五版)7.
10.
2DDS信号发生器设计示例.
192习题193实验与设计1947-1查表式硬件运算器设计1947-2正弦信号发生器设计1947-3简易逻辑分析仪设计1957-4DDS正弦信号发生器设计1967-5移相信号发生器设计1977-616位*16位高速硬件乘法器设计197第8章Verilog设计深入.
1998.
1过程中的两类赋值语句.
1998.
1.
1未指定延时的阻塞式赋值语句.
1998.
1.
2指定了延时的阻塞式赋值.
2008.
1.
3未指定延时的非阻塞式赋值.
2018.
1.
4指定了延时的非阻塞式赋值.
2028.
1.
5深入认识阻塞与非阻塞式赋值的特点.
2048.
1.
6不同的赋初值方式导致不同综合结果的示例.
2058.
2过程语句归纳2078.
2.
1过程语句应用总结2078.
2.
2深入认识不完整条件语句与时序电路的关系.
2098.
3if语句归纳.
2108.
3.
1if语句的一般表述形式.
2118.
3.
2关注if语句中的条件指示2138.
4三态与双向端口设计.
2148.
4.
1三态控制电路设计2148.
4.
2双向端口设计2158.
4.
3三态总线控制电路设计.
216习题218实验与设计2198-1硬件消抖动电路设计2198-24*4阵列键盘键信号检测电路设计2208-3直流电机综合测控系统设计2228-4VGA简单图像显示控制模块设计.
2238-5乐曲硬件演奏电路设计225第9章Verilog系统设计优化2299.
1资源优化.
229目录xiEDA技术实用教程(第五版)9.
1.
1资源共享2299.
1.
2逻辑优化2319.
1.
3串行化2319.
2速度优化.
2329.
2.
1流水线设计2329.
2.
2寄存器配平2349.
2.
3关键路径法2359.
2.
4乒乓操作法2369.
2.
5加法树法236习题.
237实验与设计2389-1采用流水线技术设计高速数字相关器2389-2线性反馈移位寄存器设计2389-3基于UART串口控制的模型电子琴设计.
2399-4PS2键盘控制模型电子琴电路设计.
2419-5AM幅度调制信号发生器设计.
244第10章Verilog状态机设计技术.
24610.
1Verilog状态机的一般形式24610.
1.
1状态机的特点与优势.
24710.
1.
2状态机的一般结构24810.
1.
3初始控制与表述25210.
2Moore型状态机及其设计25310.
2.
1多过程结构状态机25310.
2.
2序列检测器及其状态机设计.
25710.
3Mealy型状态机设计25810.
4状态机图形编辑设计26210.
5不同编码类型状态机26310.
5.
1直接输出型编码26310.
5.
2用宏定义语句定义状态编码.
26510.
5.
3宏定义命令语句26610.
5.
4顺序编码26710.
5.
5一位热码编码26710.
5.
6状态编码设置26810.
6异步有限状态机设计26910.
7安全状态机设计.
27210.
7.
1状态导引法27310.
7.
2状态编码监测法274xii目录EDA技术实用教程(第五版)10.
7.
3借助EDA工具自动生成安全状态机.
27410.
8硬件数字技术排除毛刺.
27510.
8.
1延时方式去毛刺27510.
8.
2逻辑方式去毛刺276习题.
278实验与设计27810-1序列检测器设计.
27810-2ADC采样控制电路设计.
27810-3数据采集模块设计.
28010-4五功能智能逻辑笔设计282第11章16位实用CPU创新设计.
28511.
1KX9016的结构与特色28511.
2KX9016基本硬件系统设计.
28811.
2.
1单步节拍发生模块.
28811.
2.
2ALU模块28911.
2.
3比较器模块28911.
2.
4基本寄存器与寄存器阵列组.
29011.
2.
5移位器模块29311.
2.
6程序与数据存储器模块.
29311.
3KX9016v1指令系统设计.
29411.
3.
1指令格式29411.
3.
2指令操作码29511.
3.
3软件程序设计实例.
29611.
3.
4KX9016v1控制器设计.
29811.
3.
5指令设计实例详解.
30211.
4KX9016的时序仿真与硬件测试.
30311.
4.
1时序仿真与指令执行波形分析.
30311.
4.
2CPU工作情况的硬件测试.
30511.
5KX9016应用程序设计实例和系统优化.
30811.
5.
1乘法算法及其硬件实现.
30811.
5.
2KX9016v1的硬件系统优化.
309习题.
311实验与设计31111-116位CPU验证性设计综合实验.
31111-2新指令设计及程序测试实验31211-316位CPU的优化设计与创新.
313目录xiiiEDA技术实用教程(第五版)11-4CPU创新设计竞赛314第12章MCU与FPGA片上系统开发31512.
1FPGA扩展MCU开发技术31512.
1.
1FPGA扩展方案及其系统设计技术.
31612.
1.
2基于单片机IP软核的SOC设计方案.
31912.
2FPGA扩展方案设计实例.
32212.
2.
1串进并出/并进串出双向端口扩展模块设计.
32212.
2.
28位四通道数据交换扩展模块设计.
32312.
2.
3存储器读写的FPGA扩展模块设计.
32512.
2.
4四通道PWM信号发生器接口模块设计32612.
2.
5李萨如图波形发生器扩展模块设计.
32712.
3基于单片机核的FPGA片上系统设计.
32812.
3.
1单片机扩展串进并出/并进串出模块的SOC设计32912.
3.
2扩展SRAM模块的片上系统设计33312.
3.
3扩展移相信号发生器模块的片上系统设计.
333实验与设计33412-1单片机串口扩展FPGA片上系统设计33412-2单片机数据交换FPGA扩展电路设计33512-3扩展外部数据存储器的FPGA单片系统设计33512-4四通道PWM信号发生器及其MCU控制系统设计33512-5移相信号发生器和扫频信号发生器的片上系统设计.
33512-6李萨如图波形发生器的FPGA片上系统设计33612-7脉宽/占空比/等精度频率多功能测试仪设计336第13章Verilog语句语法补充说明34213.
1Verilog文字规则.
34213.
2数据类型34413.
2.
1net网线类型34413.
2.
2register寄存器类型34513.
2.
3存储器类型34513.
3操作符.
34513.
4常用语句补充.
34613.
4.
1initial过程语句使用示例34713.
4.
2forever循环语句.
34713.
4.
3编译指示语句34813.
4.
4任务和函数语句35013.
5用库元件实现结构描述.
352xiv目录EDA技术实用教程(第五版)习题354实验与设计35413-1SPWM脉宽调制控制系统设计.
35413-2点阵型与字符型液晶显示器驱动控制电路设计.
35613-3数字彩色液晶显示控制电路设计35713-4串行ADC/DAC控制电路设计357第14章VerilogTestBench仿真.
35814.
1Verilog行为仿真流程35914.
2Verilog测试基准实例36114.
3VerilogTestBench测试流程.
36314.
4Verilog系统任务和系统函数.
36614.
4.
1系统任务和系统函数.
36614.
4.
2预编译语句37214.
5延时模型37314.
5.
1#延时和门延时37314.
5.
2延时说明块37414.
6其他仿真语句.
37414.
6.
1fork_join块语句.
37414.
6.
2wait语句37514.
6.
3force语句和release语句37614.
6.
4deassign语句.
37614.
7仿真激励信号的产生37714.
8Verilog数字系统仿真378习题379实验与设计38014-1在ModelSim上对计数器的TestBench进行仿真.
38014-2在ModelSim上进行16位累加器设计仿真.
380附录EDA开发系统及相关软硬件.
381参考文献.
387章比较全面地介绍了EDA技术及其发展和应用情况,包括FPGA开发和ASIC设计的流程,以及相关的EDA工具软件.
最后简述了QuartusII的基本情况.
其中给出的一些基本概念,如综合、仿真、IP等在后续章节中将经常遇到,请给予关注.
1.
1EDA技术及其发展在计算机技术的推动下,20世纪末,电子技术获得了飞速的发展,现代电子产品几乎渗透于社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时又促使现代电子产品性能的进一步提高,产品更新换代的节奏也越来越快.
电子技术发展的根基是微电子技术的进步,它表现在大规模集成电路的加工技术,即半导体工艺技术的发展上.
表征半导体工艺水平的线宽已经达到45nm以下,并还在不断地缩小;在硅片单位面积上集成了更多的晶体管;集成电路设计在不断地向超大规模、极低功耗和超高速的方向发展;同时,这些专用集成电路ASIC(ApplicationSpecificIntegratedCircuit)的设计成本还在不断降低,而在功能和结构上,现代的集成电路已能实现单片电子系统SOC(SystemonaChip).
EDA(ElectronicDesignAutomation)技术作为现代电子设计技术的核心,它依赖功能强大的计算机,在EDA工具软件平台上,对以硬件描述语言HDL(HardwareDescriptionLanguage)为系统逻辑描述手段完成的设计文件,自动地完成逻辑化简、逻辑分割、逻辑综合、结构综合(布局布线),以及逻辑优化和仿真测试等项功能,直至实现既定性能的电子线路系统功能.
EDA技术使得设计者的工作几乎仅限于利用软件的方式,即利用硬件描述语言HDL和EDA软件来完成对系统硬件功能的实现.
在现代高新电子产品的设计和生产中,微电子技术和现代电子设计技术是相互促进、相互推动又相互制约的两个技术环节.
前者代表了物理层在广度和深度上硬件电路实现的发展,后者则反映了现代先进的电子理论、电子技术、仿真技术、设计工艺和设计技术与最新的计算机软件技术有机的融合和升华.
因此,严格地说,EDA技术应该是这两者的结合,是这两个技术领域共同孕育的奇葩.
EDA技术在硬件实现方面融合了大规模集成电路制造技术、IC版图设计技术、ASIC测试和封装技术、FPGA(FieldProgrammableGateArray)和CPLD(ComplexProgrammableLogicDevice)编程下载技术、自动测试技术等;在计算机辅助工程方面融合了计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)、计算机辅助工程(CAE)技术以及多种计算机语言的设计概念;而在现代电子学方面则容纳了更多的内容,如电子本第1章EDA技术概述2第1章EDA技术概述EDA技术实用教程(第五版)线路设计理论、数字信号处理技术、嵌入式系统和计算机设计技术、数字系统建模和优化技术及微波技术等.
因此EDA技术为现代电子理论和设计的表达与实现提供了可能性.
在现代技术的所有领域中,许多得以飞速发展的科学技术,多属计算机辅助设计,而非自动化设计.
显然,最早进入真正的设计自动化的技术领域非电子技术莫属,这就是为什么电子技术始终处于所有科学技术发展最前列的原因之一.
不难理解,EDA技术已不是某一学科的分支,或某种新的技能技术,它应该是一门综合性学科.
它融合多学科于一体,又渗透于各学科之中.
它打破了软件和硬件间的壁垒,使计算机的软件技术与硬件实现、软件性能和硬件指标、设计效率和产品性能合二为一,它代表了电子设计技术和应用技术的发展方向.
正因为EDA技术丰富的内容以及与电子技术各学科领域的相关性,其发展的历程同大规模集成电路设计技术、计算机辅助工程、可编程逻辑器件,以及电子设计技术和工艺的发展是同步的.
就过去几十年电子技术的发展历程,大致可以将EDA技术的发展分为三个阶段.
20世纪70年代,在集成电路制作方面双极工艺、MOS工艺已得到广泛的应用.
可编程逻辑技术及其器件已经问世,计算机作为一种运算工具已在科研领域得到广泛应用.
而在后期,CAD的概念已见雏形.
这一阶段人们开始利用计算机取代手工劳动,辅助进行集成电路版图编辑、PCB(印制电路板)布局布线等工作.
20世纪80年代,集成电路设计进入了CMOS(互补场效应管)时代.
复杂可编程逻辑器件已进入商业应用,相应的辅助设计软件也已投入使用.
而在80年代末,出现了FPGA,于是CAE和CAD技术的应用更为广泛,它们在PCB设计方面的原理图输入、自动布局布线及PCB分析,以及逻辑设计、逻辑仿真、逻辑函数化简等方面担任了重要的角色,特别是各种硬件描述语言的出现及其在应用和标准化方面的重大进步,为电子设计自动化必须解决的电路建模、标准文档及仿真测试奠定了坚实的基础.
进入20世纪90年代,随着硬件描述语言的标准化得到进一步的确立,计算机辅助工程、辅助分析和辅助设计在电子技术领域获得更加广泛的应用,与此同时电子技术在通信、计算机及家电产品生产中的市场需求和技术需求,极大地推动了全新的电子设计自动化技术的应用和发展.
特别是集成电路设计工艺步入了超深亚微米阶段,近千万门的大规模可编程逻辑器件的陆续面世,以及基于计算机技术的面向用户的低成本大规模ASIC设计技术的应用,促进了EDA技术的形成和发展.
更为重要的是,各EDA公司致力于推出兼容各种硬件实现方案和支持标准硬件描述语言的EDA工具软件的研究和应用,都有效地将EDA技术推向了成熟.
EDA技术在进入21世纪后,得到了更大的发展,突出表现在以下几个方面:(1)使电子设计成果以自主知识产权(IP)的方式得以明确表达和确认成为可能.
(2)在仿真验证和设计两方面都支持标准硬件描述语言的功能强大的EDA软件不断推出.
(3)电子技术全方位进入EDA时代.
除了日益成熟的数字技术外,传统的电路系统设计建模理念发生了重大的变化:软件无线电技术的崛起,模拟电路系统硬件描述语言的表1.
2EDA技术实现目标3EDA技术实用教程(第五版)达和设计的标准化,系统可编程模拟器件的出现,软硬件技术、软硬件功能及其结构的进一步融合等.
(4)EDA使得电子技术领域各学科的界限更加模糊,更加互为包容,如模拟与数字、软件与硬件、系统与器件、ASIC与FPGA等.
(5)更大规模的FPGA和CPLD器件的不断推出.
(6)基于EDA工具的用于ASIC设计的标准单元已涵盖大规模电子系统及复杂IP核模块(IP即IntellectualProperty,是知识产权的简称,往往指一个公司出售给另一个公司的硬件设计包).
(7)软硬件IP核在电子行业的产业领域、技术领域和设计应用领域得到了广泛的应用.
(8)SOC高效低成本设计技术的成熟.
(9)系统级、行为验证级硬件描述语言,如SystemC、SystemVerilog等的出现,使复杂电子系统的设计,特别是验证趋于更加高效和简单.
1.
2EDA技术实现目标一般地,利用EDA技术进行电子系统设计的最后目标,是完成专用集成电路ASIC或印制电路板(PCB)的设计和实现(图1-1).
其中,PCB设计指的是电子系统的印制电路板设计,从电路原理图到PCB上元件的布局、布线、阻抗匹配、信号完整性分析及板级仿真,到最后的电路板机械加工文件生成,这些都需要相应的计算机EDA工具软件辅助设计者来完成,这仅是EDA技术应用的一个重要方面,但本书限于篇幅不作展开.
ASIC作为最终的物理平台,集中容纳了用户通过EDA技术将电子应用系统的既定功能和技术指标具体实现的硬件实体.
图1-1EDA技术实现目标一般而言,专用集成电路就是具有专门用途和特定功能的独立集成电路器件,根据这个定义,作为EDA技术最终实现目标的ASIC,可以通过三种途径来完成(图1-1).
1.
可编程逻辑器件FPGA和CPLD是实现这一途径的主流器件,它们的特点是直接面向用户,具有极大4第1章EDA技术概述EDA技术实用教程(第五版)的灵活性和通用性,使用方便,硬件测试和实现快捷,开发效率高,成本低,上市时间短,技术维护简单,工作可靠性好等.
FPGA和CPLD的应用是EDA技术有机融合软硬件电子设计技术、SOC和ASIC设计,以及对自动设计与自动实现最典型的诠释.
由于FPGA和CPLD的开发工具、开发流程和使用方法与ASIC有类似之处,因此这类器件通常也被称为可编程专用IC,或可编程ASIC.
2.
半定制或全定制ASIC基于EDA设计技术的半定制或全定制ASIC,根据它们的实现工艺,可统称为掩模(Mask)ASIC,或直接称ASIC.
可编程ASIC与掩模ASIC相比,不同之处在于前者具有面向用户的灵活多样的可编程性.
掩模ASIC大致分为门阵列ASIC、标准单元ASIC和全定制ASIC.
(1)门阵列ASIC.
门阵列芯片包括预定制的相连的PMOS和NMOS晶体管行.
设计中,用户可以借助EDA工具将原理图或硬件描述语言模型映射为相应门阵列晶体管配置,创建一个指定金属互连路径文件,从而完成门阵列ASIC开发.
由于有掩模的创建过程,门阵列有时也称掩模可编程门阵列(MPGA).
但是MPGA本身与FPGA完全不同,它不是用户可编程的,也不属于可编程逻辑范畴,而是实际的ASIC.
MPGA出现在FPGA之前,FPGA技术源自MPGA.
(2)标准单元ASIC.
目前大部分ASIC是使用库(Library)中的不同大小的标准单元设计的,这类芯片一般称作基于单元的集成电路(Cell-BasedIntegratedCircuits,CBIC).
在设计者一级,库包括不同复杂性的逻辑元件:SSI逻辑块、MSI逻辑块、数据通道模块、存储器、IP乃至系统级模块.
库包含每个逻辑单元在硅片级的完整布局,使用者只需利用EDA软件工具与逻辑块描述打交道即可,完全不必关心深层次电路布局的细节.
标准单元布局中,所有扩散、接触点、过孔、多晶通道及金属通道都已完全确定.
当该单元用于设计时,通过EDA软件产生的网表文件将单元布局块"粘贴"到芯片布局之上的单元行上.
标准单元ASIC设计与FPGA设计的开发流程相近.
(3)全定制芯片.
全定制芯片中,在针对特定工艺建立的设计规则下,设计者对于电路的设计有完全的控制权,如线的间隔和晶体管大小的确定.
该领域的一个例外是混合信号设计,使用通信电路的ASIC可以定制设计其模拟部分.
3.
混合ASIC混合ASIC(不是指数模混合ASIC)主要指既具有面向用户的FPGA可编程功能和逻辑资源,同时也含有可方便调用和配置的硬件标准单元模块,如CPU、RAM、ROM、硬件加法器、乘法器、锁相环等.
1.
3硬件描述语言VerilogHDL硬件描述语言HDL是EDA技术的重要组成部分,目前常用的HDL主要有VHDL、1.
4其他常用HDL5EDA技术实用教程(第五版)VerilogHDL、SystemVerilog和SystemC.
其中Verilog、VHDL在现在EDA设计中使用最多,也得到几乎所有的主流EDA工具的支持,而SystemVerilog和SystemC这两种HDL语言还处于完善过程中,主要加强了系统验证方面的功能.
VerilogHDL是电子设计主流硬件的描述语言之一,本书将重点介绍它的编程方法和使用技术.
VerilogHDL(以下常简称为Verilog)最初由GatewayDesignAutomation公司(简称GDA)的PhilMoorby在1983年创建.
起初,Verilog仅作为GDA公司的Verilog-XL仿真器的内部语言,用于数字逻辑的建模、仿真和验证.
Verilog-XL推出后获得了成功和认可,从而促使VerilogHDL的发展.
1989年GDA公司被Cadence公司收购,Verilog语言成为了Cadence公司的私有财产.
1990年Cadence公司成立了OVI(OpenVerilogInternational)组织,公开了Verilog语言,并由OVI负责促进Verilog语言的发展.
在OVI的努力下,1995年,IEEE制定了VerilogHDL的第一个国际标准IEEEStd1364-1995,即Verilog1.
0.
2001年,IEEE发布了VerilogHDL的第二个标准版本(Verilog2.
0)IEEEStd1364-2001,简称为Verilog-2001标准.
由于Cadence公司在集成电路设计领域的影响力和Verilog的易用性,Verilog成为基层电路建模与设计中最流行的硬件描述语言.
Verilog的部分语法是参照C语言的语法设立的(但与C语言有本质区别),因此,具有很多C语言的优点,从形式表述上来看,代码简明扼要,使用灵活,且语法规定不是很严谨,很容易上手.
Verilog具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述,从而大大简化了硬件设计任务,提高了设计效率和可靠性.
在语言易读性、层次化和结构化设计方面表现了强大的生命力和应用潜力.
因此,Verilog支持各种模式的设计方法:自顶向下与自底向上或混合方法,在面对当今许多电子产品生命周期缩短,需要多次重新设计以融入最新技术、改变工艺等方面,Verilog具有良好的适应性.
用Verilog进行电子系统设计的一个很大的优点是,当设计逻辑功能时,设计者可以专心致力于其功能的实现,而不需要对不影响功能的与工艺有关的因素花费过多的时间和精力;当需要仿真验证时,可以很方便地从电路物理级、晶体管级、寄存器传输级乃至行为级等多个层次来做验证.
1.
4其他常用HDL另一重要的硬件描述语言是VHDL,VHDL的英文全名是VHSIC(VeryHighSpeedIntegratedCircuit)HardwareDescriptionLanguage,于1983年由美国国防部(DOD)发起创建,由IEEE(TheInstituteofElectricalandElectronicsEngineers)进一步发展并在1987年作为"IEEE标准1076"(IEEEStd1076)发布.
从此,VHDL成为硬件描述语言的业界标准之一.
自IEEE公布了VHDL的标准版本之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具支持VHDL.
此后,VHDL在电子设计领域得到了广泛应用,并与Verilog一起逐步取代了其他的非标准硬件描述语言.
VHDL作为一个规范语言和建模语言,随着VHDL的标准化,出现了一些支持该语言的行为仿真器.
由于创建VHDL的最初目标是用于标准文档的建立和电路功能模拟,其基本想法是在高层次上描述系统和元件的行为.
但到了20世纪90年代初,人们发现,VHDL不仅6第1章EDA技术概述EDA技术实用教程(第五版)可以作为系统模拟的建模工具,而且可以作为电路系统的设计工具,可以利用软件工具将VHDL源码自动地转化为文本方式表达的基本逻辑元件连接图,即网表文件.
这种方法显然对于电路自动设计是一个极大的推进.
很快,电子设计领域出现了第一个软件设计工具,即VHDL逻辑综合器,它把标准VHDL的部分语句描述转化为具体电路实现的网表文件.
1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展了VHDL的内容,公布了新版本VHDL,即IEEE1076-1993.
现在,VHDL与Verilog一样作为IEEE的工业标准硬件描述语言,得到众多EDA公司的支持,在电子工程领域已成为事实上的通用硬件描述语言.
VHDL具有与具体硬件电路无关和与设计平台无关的特性,并且具有良好的电路行为描述和系统描述的能力.
与Verilog相比,VHDL有下列优势:语法比Verilog严谨,通过EDA工具自动语法检查,易排除许多设计中的疏忽.
有很好的行为级描述能力和一定的系统级描述能力,而Verilog建模时,行为与系统级抽象及相关描述能力不及VHDL.
与Verilog相比,VHDL有下列不足:VHDL代码比较冗长,在相同逻辑功能描述时,Verilog的代码比VHDL少许多.
VHDL对数据类型匹配要求过于严格,初学时会感到不是很方便,编程耗时也较多;而Verilog支持自动类型转换,初学者容易入门.
VHDL对版图级、管子级这些较为底层的描述级别,几乎不支持,无法直接用于集成电路底层建模.
SystemVerilog是一种新的硬件描述语言,它是基于Verilog-2001之上的,由Accellera开发的(Accellera的前身就是OVI).
SystemVerilog在Verilog-2001的基础上做了扩展,将Verilog语言推向了系统级空间和验证级空间,极大地改进了高密度、基于IP的、总线敏感的芯片设计效率.
SystemVerilog主要定位于集成电路的实现和验证流程,并为系统级设计流程提供了强大的链接能力.
SystemVerilog改进了Verilog代码的生产率、可读性以及可重用性.
SystemVerilog提供了更简约的硬件描述,还为测试平台开发、随机约束的测试平台开发、覆盖驱动的验证,以及基于断言的验证提供了广泛的支持.
2005年,IEEE批准了SystemVerilog的语法标准,即IEEEP1800标准.
SystemC是C++语言的硬件描述扩展,主要用于ESL(电子系统级)建模与验证.
由OSCI(OpenSystemCInitiative)组织进行开发.
SystemC并非是好的RTL语言(即可综合的,硬件可实现描述性质的语言),而是一种系统级建模语言.
将SystemC和SystemVerilog组合起来,能够提供一套从ESL至RTL验证的完整解决方案.
SystemC源代码可以使用任何标准C++编译环境进行编译,生成可执行文件;运行可执行文件,可生成VCD格式的波形文件.
对SystemC的综合还不完善,但已经有工具支持.
1.
5HDL综合综合(Synthesis),就其字面含义应该是:把抽象的实体结合成单个或统一的实体.
因1.
5HDL综合7EDA技术实用教程(第五版)此,综合就是把某些东西结合到一起,把设计抽象层次中的一种表述转化成另一种表述的过程.
在电子设计领域中,综合的概念可以表示为:将用行为和功能层次表达的电子系统转换为低层次的便于具体实现的模块组合装配的过程.
事实上自上而下的设计过程中的每一步都可称为一个综合环节.
现代电子设计过程通常从高层次的行为描述开始,以底层的结构甚至更低层次描述结束,每个综合步骤都是上一层次的转换:(1)从自然语言转换到VerilogHDL语言算法表述,即自然语言综合.
(2)从算法表述转换到寄存器传输级(RegisterTransportLevel,RTL)表述,即从行为域到结构域的综合,即行为综合.
(3)从RTL级表述转换到逻辑门(包括触发器)的表述,即逻辑综合.
(4)从逻辑门表示转换到版图级表述(ASIC设计),或转换到FPGA的配置网表文件,可称为版图综合或结构综合.
有了版图信息就可以把芯片生产出来了.
有了对应的配置文件,就可以使对应的FPGA变成具有专门功能的电路器件了.
显然,综合器就是能够自动将一种设计表述形式向另一种设计表述形式转换的计算机软件,或协助进行手工转换的软件.
它可以将高层次的表述转化为低层次的表述,可以从行为域转化为结构域,可以将高一级抽象的电路描述(如算法级)转化为低一级的电路描述(如门级),并可以用某种特定的"技术实现",如CMOS.
对设计者而言有两种情况,一是在高抽象层次进行系统设计并利用综合工具将设计转化为低层次的表述,二是直接在低抽象层次上设计系统,这类似于一个程序员用高级语言编程并用编译器将程序编译成机器代码和直接用机器代码进行编程的情况.
在前一种情况下,设计者可以将精力主要集中于系统级问题上,而不必关心低级结构设计的细节问题.
因此将减少设计和编程所花费的时间和精力,并且减少错误的发生.
另一方面,尽管从表面上看,Verilog等硬件描述语言综合器和软件程序编译器都不过是一种"翻译器",它们都能将高层次的设计表达转化为低层次的表达,但它们却具有许多本质的区别(图1-2).
编译器将软件程序翻译成基于某种特定CPU的机器代码,这种代码仅限于这种CPU而不能移植,机器代码不代表硬件结构,更不能改变CPU的结构,只能被动地为其特定的硬件电路所利用.
如果脱离了已有的硬件环境(CPU),机器代码将失去意义.
此外,编译器作为一种软件的运行,除了某种单一目标器件,即CPU的硬件结构外,不需要任何与硬件相关的器件库和工艺库参与编译.
因而,编译器的工作单纯得多,编译过程基本属于一种一一对应式的、机械转换式的"翻译"行为.
综合器则不同,同样是类似的软件代码(如Verilog代码程序),综合器转化的目标是底层的电路结构网表文件,这种满足原设计程序功能描述的电路结构不依赖于任何特定硬件环境,因此可以独立地存在,并能轻易地被移植到任何通用硬件环境中,如ASIC、FPGA等.
换言之,电路网表代表了特定的且可独立存在和拥有实际功能的硬件结构,因此具备了随时改变硬件结构的依据.
综合的结果具有相对独立性.
另外,综合器在将硬件描述语言表达的电路功能转化成具体的电路结构网表过程中,具有明显的能动性(例如状态机的8第1章EDA技术概述EDA技术实用教程(第五版)优化),它并非是机械式的一一对应式的"翻译",而是根据设计库、工艺库以及预先设置的各类约束条件,选择最优的方案完成电路结构的设计.
这就是说,对于相同的Verilog表述,综合器可以用不同的电路结构实现相同的功能.
如图1-3所示,与编译器相比,综合器具有更复杂的工作环境.
综合器在接受Verilog程序并准备对其综合前,必须获得与最终实现设计电路硬件特征相关的工艺库的信息,以及获得优化综合的诸多约束条件.
一般地,约束条件可以分为三种,即设计规则、时间约束、面积约束.
通常,时间约束的优先级高于面积约束.
设计优化要求,当综合器把Verilog源码翻译成通用原理图(网表)时,将识别状态机、加法器、乘法器、多路选择器和寄存器等.
这些运算功能根据Verilog源码中的符号,如加、减、乘、除,都可用多种方法实现.
如加法可实现方案有多种,有的面积小,速度慢;有的速度快,面积大.
Verilog行为描述强调的是电路的行为和功能,而不是电路如何实现.
选择电路的实现方案正是综合器的任务.
综合器选择一种能充分满足各项约束条件且成本最低的实现方案.
图1-2编译器和综合器的功能比较图1-3HDL综合器运行流程现在的许多综合器还允许设计者指定在做映射优化时综合器应付出多大"努力".
"努力"一般可分为低、中、高三档.
需要注意的是,Verilog(也包括VHDL、SystemVerilog)方面的IEEE标准,主要指的是文档的表述、行为建模及其仿真,至于在实际电子线路的设计方面,Verilog并没有得到全面的标准化支持.
这就是说,HDL综合器并不能支持标准Verilog的全集(全部语句程序),而只能支持其子集,即部分语句,并且不同的HDL综合器所支持的Verilog子集也不完全相同.
这样一来,对于相同的Verilog源代码,不同的HDL综合器可能综合出在结构和功能上并不完全相同的电路系统.
对此,设计者应给予充分的注意.
对于不同的综合结果,不应对综合器的特性贸然做出评价,而应在设计过程中,尽可能全面了解所使用的综合工具的特性.
1.
6自顶向下的设计技术传统的电子设计技术,而且多数是属于手工设计技术(如目前多数数字电路教科书中介绍的数字电路设计技术),通常是自底向上的,即首先确定构成系统的最底层的电路模块或元件的结构和功能,然后根据主系统的功能要求,将它们组合成更大的功能块,使它们1.
6自顶向下的设计技术9EDA技术实用教程(第五版)的结构和功能满足高层系统的要求.
并以此流程,逐步向上递推,直至完成整个目标系统的设计.
例如,对于一般电子系统的设计,使用自底向上的设计方法,必须首先决定使用的器件类别和规格,如74系列的器件、某种RAM和ROM、某类CPU或单片机以及某些专用功能芯片等;然后是构成多个功能模块,如数据采集控制模块、信号处理模块、数据交换和接口模块等,直至最后利用它们完成整个系统的设计.
对于ASIC设计,则是根据系统的功能要求,首先从绘制硅片版图开始,逐级向上完成版图级、门级、RTL级、行为级、功能级,直至系统级的设计.
在这个过程中,任何一级发生问题,通常都不得不从底层开始全部返工重来.
自底向上的设计方法的特点是必须首先关注并致力于解决系统最底层硬件的可获得性,以及它们的功能特性方面的诸多细节问题;在整个逐级设计和测试过程中,始终必须顾及具体目标器件的技术细节.
在这个设计过程中的任一阶段,最底层目标器件的更换,或某些技术参数不满足总体要求,或缺货,或由于市场竞争的变化,临时提出降低系统成本,提高运行速度等不可预测的外部因素,都可能使前面的工作前功尽弃,工作又得重新开始.
由此可见,多数情况下,自底向上的设计方法是一种低效、低可靠性、费时费力且成本高昂的设计方案.
在电子设计领域,自顶向下的设计方法只有在EDA技术得到快速发展和成熟应用的今天才成为可能.
自顶向下设计方法的有效应用必须基于功能强大的EDA工具,具备集系统描述、行为描述和结构描述功能为一体的硬件描述语言HDL,以及先进的ASIC制造工艺和FPGA开发技术.
当今,自顶向下的设计方法已经是EDA技术的首选设计方法,是ASIC或FPGA开发的主要设计手段.
在EDA技术应用中,自顶向下的设计方法,就是在整个设计流程中各设计环节逐步求精的过程.
一个项目的设计过程包括从自然语言说明到HDL的系统行为描述,从系统的分解、RTL模型的建立、门级模型产生到最终的可以物理布线实现的底层电路,就是从高抽象级别到低抽象级别的整个设计周期.
后端设计还必须包括涉及硬件的物理结构实现方法和测试(仍然利用计算机完成).
应用HDL进行自上而下的设计,就是使用HDL模型在所有综合级别上对硬件设计进行说明、建模和仿真测试.
主系统及子系统最初的功能要求体现为可以被HDL仿真程序验证的可执行程序.
由于综合工具可以将高级别的模型转化生成为门级模型,所以整个设计过程基本是由计算机自动完成的.
人为介入的方式主要是根据仿真的结果和优化的指标,控制逻辑综合的方式和指向.
因此,在设计周期中,要根据仿真的结果进行优化和升级,以及对模型进行及时的修改,以改进系统或子系统的功能,更正设计错误,提高目标系统的工作速度,减小面积耗用,降低功耗和成本等;或者启用新技术器件或新的IP核.
在这些过程中,由于设计的下一步是基于当前的设计,即使发现问题或作新的修改而需从头开始设计,也不妨碍整体的设计效率.
此外,HDL设计的可移植性、EDA平台的通用性以及与具体硬件结构的无关性,使得前期的设计可以容易地应用于新的设计项目,而且项目设计的周期可以显著缩短.
因此,EDA设计方法十分强调将前一个HDL模型重用的方法.
此外,随着设计层次的降低,在低级别上使用高级别的测试包来测试模型也很重要,并行10第1章EDA技术概述EDA技术实用教程(第五版)之有效.
自顶而下的设计方法使系统被分解为各个模块的集合之后,可以对设计的每个独立模块指派不同的工作小组.
这些小组可以工作在不同地点,甚至可以分属不同的单位,最后将不同的模块集成为最终的系统模型,并对其进行综合测试和评价.
图1-4给出了自顶向下设计流程的框图说明,它包括如下设计阶段:(1)提出设计说明书.
即用自然语言表达系统项目的功能特点和技术参数等.
(2)建立HDL行为模型.
这一步是将设计说明书转化为HDL行为模型.
在这一项目的表达中,可以使用满足IEEE标准的Verilog/VHDL的所有语句而不必考虑可综合性.
这一建模行为的目标是通过Verilog/VHDL仿真器对整个系统进行系统行为仿真和性能评估.
在行为模型的建立过程中,如果最终的系统中包括目标ASIC或FPGA以外的电路器件,如RAM、ROM、接口器件或某种单片机,也同样能建立一个完整统一的系统行为模型而进行整体仿真.
这是因为可以根据这些外部器件的功能特性设计出Verilog/VHDL的仿真模型,然后将它们并入主系统的Verilog/VHDL模型中.
事实上,现在有许多公司可提供各类流行器件的Verilog/VHDL模型,如8051单片机模型、PIC16C5X模型、80386模型等,利用这些模型可以将整个电路系统组装起来.
有的Verilog/VHDL模型既可用来仿真,也可作为实际电路的一部分.
例如,现有的PCI总线模型大多是既可仿真又可综合的.
(3)HDL行为仿真.
这一阶段可以利用Verilog/VHDL仿真器(如ModelSim)对顶层系统的行为模型进行仿真测试,检查模拟结果,继而进行修改和完善.
这一过程与最终实现的硬件没有任何关系,也不考虑硬件实现中的技术细节,测试结果主要是对系统纯功能行为的考察,其中许多Verilog/VHDL的语句表达主要为了方便了解系统各种条件下的功能特性,而不可能用真实的硬件来实现.
(4)HDL-RTL级建模.
如上所述,Verilog/VHDL只有部分语句集合可用于硬件功能行为的建模,因此在这一阶段,必须将Verilog/VHDL的行为模型表达为Verilog/VHDL行为代码(或称HDL-RTL级模型).
Verilog/VHDL行为代码是用Verilog/VHDL可综合子集中的语句完成的,即可以最终实现目标器件的描述.
因为利用Verilog/VHDL的可综合的语句同样可以对电路方便地进行行为描述,而目前许多主流的HDL综合器能将其综图1-4自顶向下的设计流程1.
7EDA技术的优势11EDA技术实用教程(第五版)合成RTL级乃至门级模型.
从第(3)步到第(4)步,人工介入的内容比较多,设计者需要给予更多的关注.
(5)前端功能仿真.
在这一阶段对HDL-RTL级模型进行仿真,称为功能仿真.
尽管HDL-RTL级模型是可综合的,但对它的功能仿真仍然与硬件无关,仿真结果表达的是可综合模型的逻辑功能.
(6)逻辑综合.
使用逻辑综合工具将Verilog/VHDL行为级描述转化为结构化的门级电路.
在ASIC设计中,门级电路可以由ASIC库中的基本单元组成.
(7)测试向量生成.
这一阶段主要是针对ASIC设计的.
FPGA设计的时序测试文件主要产生于适配器.
对ASIC的测试向量文件是综合器结合含有版图硬件特性的工艺库后产生的,用于对ASIC的功能测试.
(8)功能仿真.
利用测试向量对ASIC的设计系统和子系统的功能进行仿真.
(9)结构综合.
主要将综合产生的逻辑连接关系网表文件,结合具体的目标硬件环境进行标准单元调用、布局、布线和满足约束条件的结构优化配置,即结构综合.
(10)门级时序仿真.
在这一级中将使用门级仿真器或仍然使用HDL仿真器(因为结构综合后能同步生成Verilog/VHDL格式的时序仿真文件)进行门级时序仿真,在计算机上了解更接近硬件目标器件工作的功能时序.
对于ASIC设计,被称为布局后仿真.
在这一步,将带有从布局布线得到的精确时序信息映射到门级电路重新进行仿真,以检查电路时序,并对电路功能进行最后检查.
这些仿真的成功完成称为ASICsignoff.
接下去的工作就可以将设计提供给硅铸造生产工序了.
(11)硬件测试.
这是对最后完成的硬件系统进行检查和测试.
1.
7EDA技术的优势传统的数字电子系统或IC设计中,手工设计占了较大的比例.
手工设计一般先按电子系统的具体功能要求进行功能划分,然后对每个子模块画出真值表,用卡诺图进行手工逻辑简化,写出布尔表达式,画出相应的逻辑线路图,再据此选择元器件,设计电路板,最后进行实测与调试.
手工设计方法的缺点是明显的:复杂电路的设计和调试都十分困难.
由于无法进行硬件系统仿真,如果某一过程存在错误,查找和修改十分困难.
设计过程中产生大量文档,不易管理.
对于IC设计而言,设计实现过程与具体生产工艺直接相关,因此可移植性差.
只有在设计出样机或生产出芯片后才能进行实测.
相比之下,EDA技术有很大不同:(1)用HDL对数字系统进行抽象的行为与功能描述以及具体的内部线路结构描述,从而可以在电子设计的各个阶段、各个层次进行计算机模拟验证,保证设计过程的正确性,可以大大降低设计成本,缩短设计周期.
(2)EDA工具之所以能够完成各种自动设计过程,关键是有各类库的支持,如逻辑仿12第1章EDA技术概述EDA技术实用教程(第五版)真时的模拟库、逻辑综合时的综合库、版图综合时的版图库、测试综合时的测试库等.
这些库都是EDA公司与半导体生产厂商紧密合作、共同开发的.
(3)某些HDL也是文档型的语言(如Verilog),极大地简化了设计文档的管理.
(4)EDA技术中最为瞩目的功能,即最具现代电子设计技术特征的功能是日益强大的逻辑设计仿真测试技术.
EDA仿真测试技术只需通过计算机,就能对所设计的电子系统从各种不同层次的系统性能特点完成一系列准确的测试与仿真操作,在完成实际系统的安装后,还能对系统上的目标器件进行所谓边界扫描测试.
这一切都极大地提高了大规模系统电子设计的自动化程度.
(5)无论传统的应用电子系统设计得如何完美,使用了多么先进的功能器件,都掩盖不了一个无情的事实,即该系统对于设计者来说,没有任何自主知识产权可言,因为系统中的关键性的器件往往并非出自设计者之手,这将导致该系统在许多情况下的应用直接受到限制.
基于EDA技术的设计则不同,由于用HDL表达的成功的专用功能设计在实现目标方面有很大的可选性,它既可以用不同来源的通用FPGA/CPLD实现,也可以直接以ASIC来实现,设计者拥有完全的自主权,再无受制于人之虞.
(6)传统的电子设计方法至今没有任何标准规范加以约束,因此,设计效率低,系统性能差,开发成本高,市场竞争力小.
而EDA技术的设计语言是标准化的,不会由于设计对象的不同而改变;它的开发工具是规范化的,EDA软件平台支持任何标准化的设计语言;它的设计成果是通用性的,IP核具有规范的接口协议.
良好的可移植与可测试性,为系统开发提供了可靠的保证.
(7)从电子设计方法学来看,EDA技术最大的优势就是能将所有设计环节纳入统一的自顶向下的设计方案中.
(8)EDA不但在整个设计流程上充分利用计算机的自动设计能力,在各个设计层次上利用计算机完成不同内容的仿真模拟,而且在系统板设计结束后仍可利用计算机对硬件系统进行完整全面的测试.
而传统的设计方法,如单片机仿真器只能在最后完成的系统上进行局部的且仅限于软件的仿真调试,而在整个设计的中间过程是无能为力的.
至于硬件系统测试,由于现在的许多系统主板不但层数多,而且许多器件是BGA(Ball-GridArray)封装,所有引脚都在芯片的底面,焊接后普通的仪器仪表无法接触到所需要的信号点,因此无法测试.
1.
8EDA设计流程完整地了解利用EDA技术进行设计开发的流程对于正确选择和使用EDA软件、优化设计项目、提高设计效率十分有益.
一个完整的EDA设计流程既是自顶向下设计方法的具体实施途径,也是EDA工具软件本身的组成结构.
在实践中进一步了解支持这一设计流程的诸多设计工具,有利于有效地排除设计中出现的问题,提高设计质量和总结设计经验.
本节主要介绍FPGA开发的流程.
图1-5是基于EDA软件的FPGA/CPLD开发流程框图,以下将分别介绍各设计模块的功能特点.
对于目前流行的EDA工具软件,图1-5的设计流程具有一般性.
1.
8EDA设计流程13EDA技术实用教程(第五版)图1-5应用于FPGA/CPLD的EDA开发流程1.
8.
1设计输入(原理图/HDL文本编辑)将电路系统以一定的表达方式输入计算机,是在EDA软件平台上对FPGA/CPLD开发的最初步骤.
通常,使用EDA工具的设计输入可分为两种类型.
1.
图形输入图形输入通常包括原理图输入、状态图输入和波形图输入三种常用方法.
状态图输入方法就是根据电路的控制条件和不同的转换方式,用绘图的方法,在EDA工具的状态图编辑器上绘出状态图,然后由EDA编译器和综合器将此状态变化流程图形编译综合成电路网表.
波形图输入方法则是将待设计的电路看成是一个黑盒子,只需告诉EDA工具黑盒子电路的输入和输出时序波形图,EDA工具即能据此完成黑盒子电路的设计.
这里主要讨论原理图输入设计方法.
这是一种类似于传统电子设计方法的原理图编辑输入方式,即在EDA软件的图形编辑界面上绘制能完成特定功能的电路原理图.
原理图由逻辑器件(符号)和连接线构成,图中的逻辑器件可以是EDA软件库中预制的功能模块,如与门、非门、或门、触发器以及各种含74系列器件功能的宏功能块,甚至还有一些类似于IP的功能块.
当原理图编辑绘制完成后,原理图编辑器将对输入的图形文件进行排错,之后再将其编译成适用于逻辑综合的网表文件.
用原理图表达的输入方法的优点主要在于不需要增加新的相关知识(诸如HDL等);设计过程形象直观,适用于初学或教学演示等.
然而,其缺点同样十分明显:(1)由于图形设计并未标准化,不同的EDA图形处理工具对图形的设计规则、存档格式和图形编译方式都不同,因此图形文件兼容性差,难以交换和管理.
(2)随着电路设计规模的扩大,原理图输入描述方式必然引起一系列难以克服的困难,如电路功能原理的易读性下降,错误排查困难,整体调整和结构升级困难.
例如,将一个4位的单片机设计升级为8位单片机几乎难以在短时间内实现.
(3)由于在原理图中已确定了设计系统的基本电路结构和元件,留给综合器和适配器14第1章EDA技术概述EDA技术实用教程(第五版)的优化选择的空间已十分有限,因此难以实现用户所希望的面积、速度以及不同风格的综合优化.
显然,原理图的设计方法明显偏离了电子设计自动化最本质的含义.
(4)在设计中,由于必须直接面对硬件模块的选用,因此行为模型的建立将无从谈起,从而无法实现真实意义上的自顶向下的设计方案.
2.
HDL文本输入这种方式与传统的计算机软件语言编辑输入基本一致,就是将使用了某种硬件描述语言的电路设计文本,如VerilogHDL或VHDL的源程序,进行编辑输入.
可以说,应用HDL的文本输入方法克服了上述原理图输入法存在的所有弊端,为EDA技术的应用和发展打开了一个广阔的天地.
当然,在一定的条件下,情况会有所改变.
目前有些EDA输入工具可以把图形的直观与HDL的优势结合起来.
如状态图输入的编辑方式,即用图形化状态机输入工具,用图形的方式表示状态图,当填好时钟信号名、状态转换条件、状态机类型等要素后,就可以自动生成Verilog/VHDL程序.
又如,在原理图输入方式中,连接用HDL描述的各个电路模块,直观地表示系统的总体框架,再用自动HDL生成工具生成相应的Verilog或VHDL程序.
但总体来看,纯HDL输入设计仍然是最基本、最有效和最通用的输入方法.
1.
8.
2综合前面已经对综合的概念做了介绍.
一般来说,综合是仅对HDL而言的.
利用HDL综合器对设计进行综合是十分重要的一步,因为综合过程将把软件设计的HDL描述与硬件结构挂钩,是将软件转化为硬件电路的关键步骤,是文字描述与硬件实现的一座桥梁.
综合就是将电路的高级语言(如行为描述)转换成低级的,可与FPGA/CPLD的基本结构相映射的网表文件或程序.
当输入的HDL文件在EDA工具中检测无误后,首先面临的是逻辑综合,因此要求HDL源文件中的语句都是可综合的.
在综合后,综合器一般都可以生成一种或多种文件格式网表文件,如EDIF、VHDL、Verilog、VQM等标准格式,在这种网表文件中用各自的格式描述电路的结构.
如Verilog网表文件采用Verilog的语法,用结构描述的风格重新诠释综合后的电路结构.
整个综合过程就是将设计者在EDA平台上编辑输入的HDL文本、原理图或状态图形描述,依据给定的硬件结构组件和约束控制条件进行编译、优化、转换和综合,最终获得门级电路甚至更底层的电路描述网表文件.
由此可见,综合器工作前,必须给定最后实现的硬件结构参数,它的功能就是将软件描述与给定的硬件结构用某种网表文件的方式对应起来,成为相应的映射关系.
如果把综合理解为映射过程,那么显然这种映射不是唯一的,并且综合的优化也不是单方向的.
为达到速度、面积、性能的要求,往往需要对综合加以约束,称为综合约束.
1.
8EDA设计流程15EDA技术实用教程(第五版)1.
8.
3适配适配器也称结构综合器,它的功能是将由综合器产生的网表文件配置于指定的目标器件中,使之产生最终的下载文件,如JEDEC、JAM、SOF、POF格式的文件.
适配所选定的目标器件必须属于原综合器指定的目标器件系列.
通常,EDA软件中的综合器可由专业的第三方EDA公司提供,而适配器则需由FPGA/CPLD供应商提供.
因为适配器的适配对象直接与器件的结构细节相对应.
适配器将综合后的网表文件针对某一具体的目标器件进行逻辑映射操作,其中包括底层器件配置、逻辑分割、逻辑优化、逻辑布局布线操作.
适配完成后可以利用适配所产生的仿真文件作精确的时序仿真测试,同时产生可用于编程的文件.
1.
8.
4时序仿真与功能仿真在编程下载前必须利用EDA工具对适配生成的结果进行模拟测试,就是所谓的仿真.
仿真就是让计算机根据一定的算法和一定的仿真库对EDA设计进行模拟测试,以验证设计,排除错误.
仿真是在EDA设计过程中的重要步骤.
图1-5所示的时序与功能门级仿真通常由PLD公司的EDA开发工具直接提供(当然也可以选用第三方的专业仿真工具),它可以完成两种不同级别的仿真测试:(1)时序仿真,就是接近真实器件运行特性的仿真,仿真文件中已包含了器件硬件特性参数,因而,仿真精度高.
但时序仿真的仿真文件必须来自针对具体器件的综合器与适配器.
综合后所得的EDIF、VQM等网表文件通常作为FPGA适配器的输入文件,产生的仿真网表文件中包含了精确的硬件延迟信息.
(2)功能仿真,是直接对HDL、原理图描述或其他描述形式的逻辑功能进行测试模拟,以了解其实现的功能是否满足原设计的要求.
仿真过程可不涉及任何具体器件的硬件特性.
甚至不经历综合与适配阶段,在设计项目编辑编译后即可进入门级仿真器进行模拟测试.
直接进行功能仿真的好处是设计耗时短,对硬件库、综合器等没有任何要求.
对于规模比较大的设计项目,综合与适配在计算机上的耗时是十分可观的,如果每一次修改后的模拟都必须进行时序仿真,显然会极大地降低开发效率.
因此,通常的做法是,首先进行功能仿真,待确认设计文件所表达的功能接近或满足设计者原有意图时,即逻辑功能满足要求后,再进行综合、适配和时序仿真,以便把握设计项目在硬件条件下的运行情况.
如果仅限于QuartusII本身的仿真器,即使功能仿真,其设计文件也必须是可综合的,且需经历综合器的综合.
只有使用ModelSim等专业仿真器才能实现对HDL设计代码不经综合的直接功能仿真.
1.
8.
5编程下载把适配后生成的下载或配置文件,通过编程器或编程电缆向FPGA或CPLD下载,以16第1章EDA技术概述EDA技术实用教程(第五版)便进行硬件调试和验证(HardwareDebugging).
通常,将对CPLD的下载称为编程(Program),对FPGA中的SRAM进行直接下载的方式称为配置(Configure),但对于反熔丝结构和Flash结构的FPGA的下载和对FPGA的专用配置ROM的下载仍称为编程.
当然也有根据下载方式分类的.
1.
8.
6硬件测试最后是将含有载入了设计文件的FPGA或CPLD的硬件系统进行统一测试,以便最终验证设计项目在目标系统上的实际工作情况,以排除错误,改进设计.
1.
9ASIC及其设计流程ASIC是相对于通用集成电路而言的,ASIC主要指用于某一专门用途的集成电路器件.
ASIC分类大致可如图1-6所示,分为数字ASIC、模拟ASIC和数模混合ASIC.
1.
9.
1ASIC设计简介对于数字ASIC,其设计方法有多种.
按版图结构及制造方法分,有半定制(Semi-custom)和全定制(Full-custom)两种实现方法(图1-7).
图1-6ASIC分类图1-7ASIC实现方法全定制方法是一种基于晶体管级的、手工设计版图的制造方法.
设计者需要使用全定制版图设计工具来完成,设计者必须考虑晶体管版图的尺寸、位置、互连线等技术细节,并据此确定整个电路的布局布线,以使设计的芯片的性能、面积、功耗、成本达到最优.
显然,全定制设计中,人工参与的工作量大,设计周期长,而且容易出错.
然而利用全定制方法设计的电路,面积利用率最高,性能较好,功耗较低,有利于降低设计成本,提高芯片的集成度和工作速度,以及降低功耗.
在通用中小规模集成电路设计、模拟集成电路,包括射频级集成器件的设计,以及有特殊性能要求和功耗要求的电路或处理器中的特殊功能模块电路的设计中被广泛采用.
半定制法是一种约束性设计方式,约束的目的是简化设计,缩短设计周期,降低设计成本,提高设计正确率.
半定制法按逻辑实现的方式不同,可再分为门阵列法、标准单元法和可编程逻辑器件法,与此相关的内容在以上已经做了简要介绍.
(1)门阵列(GateArray)法是较早使用的一种ASIC设计方法,又称为母片(Master1.
9ASIC及其设计流程17EDA技术实用教程(第五版)Slice)法.
它预先设计和制造好各种规模的母片,其内部成行成列,并等间距地排列着基本单元的阵列.
除金属连线及引线孔以外的各层版图图形均固定不变,只剩下一层或两层金属铝连线及孔的掩模需要根据用户电路的不同而定制.
每个基本单元是由三对或五对晶体管组成,基本单元的高度、宽度都是相等的,并按行排列.
设计人员只需要设计到电路一级,将电路的网表文件交给IC厂家即可.
IC厂家根据网表文件描述的电路连接关系,完成母片上电路单元的布局及单元间的连线,然后对这部分金属线及引线孔的图形进行制版、流片.
这种设计方式涉及的工艺少,模式规范,设计自动化程度高,设计周期短,造价低,且适合于小批量的ASIC设计.
所有这些都有赖于事先制备母片及库单元,并经过验证.
门阵列法的缺点是芯片面积利用率低,灵活性差,对设计限制得过多.
(2)标准单元(StandardCell)法必须预建完善的版图单元库,库中包括以物理版图级表达的各种电路元件和电路模块"标准单元",可供用户调用以设计不同功能的芯片.
这些单元的逻辑功能、电气性能及几何设计规则等都经过分析和验证.
与门阵列库单元不同的是,标准单元的物理版图将从最底层至最高层的各层版图设计图形都包括在内.
在设计布图时,从单元库中调出标准单元按行排列,行与行之间留有布线通道,同行或相邻行的单元相连可通过单元行的上、下通道完成.
隔行单元之间的垂直方向互连则必须借用事先预留在标准单元内部的走线道(Feed-through)或在两单元间设置的走线道单元(Feed-throughCell)或空单元(EmptyCell)来完成连接.
标准单元法设计ASIC的优点是:比门阵列法具有更加灵活的布图方式.
标准单元预先存在单元库中,可以极大地提高设计效率.
可以从根本上解决布通率问题,达到了100%布通率.
可以使设计者更多地从设计项目的高层次关注电路的优化和性能问题.
标准单元设计模式自动化程度高,设计周期短,设计效率高,十分适合利用功能强大的EDA工具进行ASIC的设计.
因此标准单元法是目前ASIC设计中应用非常广泛的设计方法之一.
标准单元法还有一个重要的优势,即它与可编程逻辑器件法的应用有相似点,它们都是建立在标准单元库的基础之上的,因此从FPGA/CPLD设计向使用标准单元法设计的ASIC设计迁移是十分方便的.
利用这种设计模式可以很好地解决直接进行ASIC设计中代价高昂的功能验证问题和快速的样品评估问题.
标准单元法存在的问题是,当工艺更新之后,标准单元库要随之更新,这是一项十分繁重的工作.
为了解决人工设计单元库费时费力的问题,目前几乎所有在市场上销售的ICCAD系统,如Synopsys、Cadence、Mentor等都含有标准单元自动设计工具.
此外,设计重用(DesignReuse)技术也可用于解决单元库的更新问题.
门阵列法或标准单元法设计ASIC共存的缺点是无法避免冗杂繁复的IC制造后向流程,而且与IC设计工艺紧密相关,最终的设计也需要集成电路制造厂家来完成,一旦设计有误,将导致巨大的损失.
此外,还有设计周期长、基础投入大、更新换代难等方面的缺陷.
18第1章EDA技术概述EDA技术实用教程(第五版)(3)可编程逻辑器件法是用可编程逻辑器件设计用户定制的数字电路系统.
可编程逻辑器件芯片实质上是门阵列及标准单元设计技术的延伸和发展.
可编程逻辑器件是一种半定制的逻辑芯片,但与门阵列法、标准单元法不同,芯片内的硬件资源和连线资源是由厂家预先制定好的,可以方便地通过编程下载获得重新配置.
这样,用户就可以借助EDA软件和编程器在实验室或车间中自行进行设计、编程或电路更新.
而且如果发现错误,则可以随时更改,完全不必关心器件实现的具体工艺.
用可编程逻辑器件法设计ASIC(或称可编程ASIC),设计效率大为提高,上市的时间大为缩短.
当然,这种用可编程逻辑器件直接实现的所谓ASIC的性能、速度和单位成本相对于全定制或标准单元法设计的ASIC都不具备竞争性.
此外,也不可能用可编程ASIC去取代通用产品,如CPU、单片机、存储器等的应用.
目前,为了降低单位成本,可以在用可编程逻辑器件实现设计后,用特殊的方法转成ASIC电路,如Altera的部分FPGA器件在设计成功后可以通过HardCopy技术转成对应的门阵列ASIC产品.
1.
9.
2ASIC设计一般流程简述一般的ASIC从设计到制造,需要经过若干步骤,如图1-8所示.
图1-8ASIC设计流程(1)系统规格说明(SystemSpecification).
分析并确定整个系统的功能、要求达到的性能、物理尺寸,确定采用何种制造工艺、设计周期和设计费用.
建立系统的行为模型,进行可行性验证.
(2)系统划分(SystemDivision).
将系统分割成各个功能子模块,给出子模块之间信号连接关系.
验证各个功能块的行为模型,确定系统的关键时序.
(3)逻辑设计与综合(LogicDesignandSynthesis).
将划分的各个子模块用文本(网表或硬件描述语言)、原理图等进行具体逻辑描述.
对于硬件描述语言描述的设计模块需要用综合器进行综合,以获得具体的电路网表文件,对于原理图等描述方式描述的设计模块经简单编译后得到逻辑网表文件.
1.
10常用EDA工具19EDA技术实用教程(第五版)(4)综合后仿真(SimulateafterSynthesis).
从上一步得到网表文件,在这一步进行仿真验证.
(5)版图设计(LayoutDesign).
版图设计是将逻辑设计中每一个逻辑元件、电阻、电容等以及它们之间的连线转换成集成电路制造所需要的版图信息.
可用手工或自动技术进行版图规划(Floorplanning)、布局(Placement)、布线(Routing).
这一步由于涉及逻辑到物理实现的映射,又称物理设计(PhysicalDesign).
(6)版图验证(LayoutVerification).
版图设计完成以后进行版图验证,主要包括版图原理图比对(LVS)、设计规则检查(DRC)、电气规则检查(ERC).
在手工版图设计中,这是非常重要的一步.
(7)参数提取与后仿真.
验证完毕,进行版图的电路网表提取(NE)、参数提取(PE),把提取的参数反注(BackAnnotate)至网表文件,进行最后一步仿真验证工作.
(8)制版、流片.
送IC生产线进行制版、光罩和流片,进行试验性生产.
(9)芯片测试.
测试芯片是否符合设计要求,并评估成品率.
1.
10常用EDA工具EDA工具在EDA技术应用中占据极其重要的位置.
EDA的核心是利用计算机实现电子设计的全程自动化,因此,基于计算机环境的EDA软件的支持是必不可少的.
由于EDA的整个流程涉及不同技术环节,每一环节中必须有对应的软件包或专用EDA工具独立处理,包括对电路模型的功能模拟、对HDL行为描述的逻辑综合等.
因此单个EDA工具往往只涉及EDA流程中的某一步骤或环节.
这里就以EDA设计流程中涉及的主要软件包为EDA工具分类.
EDA工具大致可以分为如下五个模块:设计输入编辑器,HDL综合器,仿真器,适配器(或布局布线器),下载器.
当然这种分类不是绝对的,还有些辅助的EDA工具没有列在上面的分类中,如:物理综合器,例如Synplicity的Amplify和Mentor的PrecisionPhysicalSynthesis.
HDL代码分析调试器,例如Debussy.
由于它们在一般设计中使用不是很多,在这里就不再详细讲述.
另外,每个FPGA生产厂家为了方便用户,往往都提供集成开发环境,如Altera的QuartusII等.
1.
10.
1设计输入编辑器在1.
8节中已经对设计输入编辑器或称设计输入环境做了部分介绍,它们可以接受不同的设计输入表达方式,如原理图输入方式、状态图输入方式、波形输入方式以及HDL的文本输入方式.
在各可编程逻辑器件厂商提供的EDA开发工具中一般都含有这类输入编辑器,如Xilinx的ISE、Altera的MAX+plusII和QuartusII等.
通常专业的EDA工具供应商也提供相应的设计输入工具,这些工具一般与该公司的其他电路设计软件整合,这点尤其体现在原理图输入环境上.
如Innovada的eProductDesigner20第1章EDA技术概述EDA技术实用教程(第五版)中的原理图输入管理工具DxDesigner(原为ViewDraw),既可作为PCB设计的原理图输入,又可作为IC设计、模拟仿真和FPGA设计的原理图输入环境.
比较常见的还有Cadence的OrCAD产品中的Capture工具等.
这一类的工具一般都设计成通用型的原理图输入工具.
由于针对FPGA/CPLD设计的原理图需要特殊原理图库(含原理图中的Symbol元件)的支持,因此其输出并不与EDA流程的下一步设计工具直接相连,而要通过网表文件(如EDIF文件)来传递.
由于HDL(包括VerilogHDL、VHDL等)的输入方式是文本格式,所以它的输入实现要比原理图输入简单得多,用普通的文本编辑器即可完成.
如果要求HDL输入时有语法敏感色彩提示,可用带语法提示功能的通用文本编辑器,如UltraEdit、Vim、XEmacs等.
当然EDA工具中提供的HDL编辑器会更好用些,如Aldec的ActiveHDL中的HDL编辑器、Altium的AltiumDesigner中的HDL编辑器.
另一方面,由于可编程逻辑器件规模的增大,设计的可选性大为增加,需要有完善的设计输入文档管理,Mentor的HDLDesignerSeries就是此类工具的一个典型代表.
有的EDA设计输入工具把图形设计与HDL文本设计相结合,如在提供HDL文本编辑器的同时提供状态机编辑器,用户可用图形(状态图)来描述状态机,最后生成HDL文本输出.
如Mentor公司的FPGAAdvantage(含HDLDesignerSeries)、ActiveHDL中的ActiveState等.
尤其是HDLDesignerSeries中的各种输入编辑器,可以接受诸如原理图、状态图、表格图等输入形式,并将它们转成Verilog/VHDL文本表达方式,很好地解决了通用性(HDL输入的优点)与易用性(图形法的优点)之间的矛盾.
设计输入编辑器在多样性、易用性和通用性方面的功能不断增强,标志着EDA技术中自动化设计程度的不断提高.
1.
10.
2HDL综合器硬件描述语言诞生的初衷是用于电路逻辑的建模和仿真的,但直到Synopsys公司推出了HDL综合器后,才改变了人们的看法,于是可以将HDL直接用于电路的设计.
由于HDL综合器是目标器件硬件结构细节、数字电路设计技术、化简优化算法以及计算机软件的复杂结合体,而且HDL可综合子集的标准化过程缓慢,所以相比于形式多样的设计输入工具,成熟的HDL综合器并不多.
比较常用的、性能良好的FPGA设计的HDL综合器有如下三种:Synopsys公司的SynplifyPro综合器(原为Synplicity公司的产品,后Synplicity公司被Synopsys收购).
Synopsys公司的DC-FPGA综合器.
Mentor的LeonardoSpectrum综合器和PrecisionRTLSynthesis综合器.
较早推出综合器的是Synopsys公司,它为FPGA开发推出的综合器是DC-FPGA,附有强大的延时分析器,可以对关键路径进行单独分析.
Synopsys公司的SynplifyPro带有一个RTL原理图生成浏览器,可以把综合出的网表用原理图的方式画出来,便于验证设计.
1.
10常用EDA工具21EDA技术实用教程(第五版)还带有延时分析器以及一个FSMCompiler(有限状态机编译器),FSMCompiler可以从提交的Verilog/VHDL设计文本中提取存在的有限状态机设计模块,并用状态图的方式显示出来,用表格来说明状态的转移条件及输出.
SynplifyPro的原理图浏览器可以定位原理图中元件在Verilog/VHDL源文件中的对应语句,便于调试.
可以支持VHDL、Verilog-1995、Verilog-2001、SystemVerilog多种HDL的综合.
本书介绍的最新版的QuartusII包含所有上述功能.
Mentor的LeonardoSpectrum也是很好用的HDL综合器,它同时可用于FPGA和ASIC设计两类工程目标.
LeonardoSpectrum作为Mentor的FPGAAdvantage中的组成部分,与FPGAAdvantage的设计输入管理工具和仿真工具有很好的结合.
当然也有应用于ASIC设计的HDL综合器,如Synopsys的DesignCompiler、Cadence的Synergy等.
HDL综合器在把可综合的Verilog/VHDL语言转化成硬件电路网表时,一般要经过两个步骤:第一步是HDL综合器对Verilog/VHDL进行分析处理,并将其转成相应的电路结构或模块,这时是不考虑实际器件实现的,即完全与硬件无关.
这个过程是一个通用电路原理图形成的过程.
第二步是对实际实现的目标器件的结构进行优化,并使之满足指定目标器件硬件特征的各种约束条件,优化关键路径等.
HDL综合器的输出文件一般是网表文件,如EDIF格式(ElectronicDesignInterchangeFormat),文件后缀是.
edf,是一种用于设计数据交换和交流的工业标准文件格式的文件,或是直接用Verilog/VHDL语言表达的标准格式的网表文件,或是对应FPGA器件厂商的网表文件,如Xilinx的XNF网表文件、Altera的VQM网表文件.
由于综合器只完成EDA设计流程中的一个独立设计步骤,所以它往往被其他EDA环境调用,以完成全部流程.
它的调用方式一般有两种:一种是前台模式,在被调用时显示的是最常见的窗口界面;另一种称为后台模式或控制台模式,被调用时不出现图形界面,仅在后台运行.
综合器的使用也有两种模式:图形模式和命令行模式(Shell模式).
1.
10.
3仿真器仿真器有基于元件(逻辑门)的仿真器和基于HDL语言的仿真器之分,基于元件的仿真器缺乏HDL仿真器的灵活性和通用性.
在此主要介绍HDL仿真器.
在EDA设计技术中仿真的地位十分重要.
行为模型的表达、电子系统的建模、逻辑电路的验证乃至门级系统的测试,每一步都离不开仿真器的模拟检测.
在EDA发展的初期,快速地进行电路逻辑仿真是当时的核心问题,即使在现在,各设计环节的仿真仍然是整个EDA工程流程中最耗时间的一个步骤.
因此,仿真器的仿真速度、仿真的准确性、易用性成为衡量仿真器的重要指标.
按仿真器对设计语言不同的处理方式分类,可分为编译型仿真器和解释型仿真器.
编译型仿真器的仿真速度较快,但需要预处理,因此不便即时修改;解释型仿真器的22第1章EDA技术概述EDA技术实用教程(第五版)仿真速度一般,可随时修改仿真环境和条件.
按处理的硬件描述语言类型,HDL仿真器可分为如下几类:VHDL仿真器.
VerilogHDL仿真器.
MixedHDL仿真器(混合HDL仿真器,同时处理VerilogHDL、SystemVerilog与VHDL).
其他HDL仿真器(针对其他HDL语言的仿真).
ModelTechnology的ModelSim是一个出色的Verilog/VHDL混合仿真器,它也属于编译型仿真器,仿真执行速度较快.
Cadence的Verilog-XL是Verilog仿真器,Verilog-XL的前身与Verilog语言一起诞生.
按仿真的电路描述级别的不同,HDL仿真器可以单独或综合完成以下各级仿真:系统级仿真,行为级仿真,RTL级仿真,门级时序仿真.
按仿真时是否考虑硬件延时分类,可分为功能仿真和时序仿真.
根据输入仿真文件的不同,可以由不同的仿真器完成,也可由同一个仿真器完成.
几乎各个EDA厂商都提供基于Verilog/VHDL的仿真器.
常用的HDL仿真器除上面提及的ModelSim与Verilog-XL外,还有Aldec的ActiveHDL、Synopsys的VCS、Cadence的NC-Sim等.
1.
10.
4适配器适配器(布局布线器)的任务是完成目标系统在器件上的布局布线.
适配即结构综合通常都由可编程逻辑器件的厂商提供的专门针对器件开发的软件来完成,这些软件可以单独存在或嵌入在厂商的针对自己产品的集成EDA开发环境中.
例如Lattice公司在其ispLEVEL开发系统中嵌有自己的适配器,但同时提供性能良好、使用方便的专用适配器ispEXPERTCompiler;而Altera公司的EDA集成开发环境QuartusII中都含有嵌入的适配器;Xilinx的ISE中也同样含有自己的适配器.
适配器最后输出的是各厂商自己定义的下载文件,以下载到器件中实现设计.
适配器输出如下多种用途的文件:时序仿真文件,如MAX+PlusII的SCF文件.
适配技术报告文件.
面向第三方EDA工具的输出文件,如EDIF、Verilog或VHDL格式的文件.
FPGA/CPLD编程下载文件,如用于CPLD编程的JEDEC、POF、ISP等格式的文件;用于FPGA配置的SOF、JAM、BIT、POF等格式的文件.
1.
10.
5下载器下载器(编程器)的功能是把设计下载到对应的实际器件,实现硬件设计.
软件部分一般都由可编程逻辑器件的厂商提供的专门针对器件下载或编程软件来完成.
1.
11QuartusII概述23EDA技术实用教程(第五版)1.
11QuartusII概述由于本书给出的实验和设计多是基于QuartusII的,其应用方法和设计流程对于其他流行的EDA工具而言具有一定的典型性和一般性,所以在此对它做一些简要介绍.
QuartusII是Altera提供的FPGA/CPLD开发集成环境,Altera是世界上最大的可编程逻辑器件供应商之一.
QuartusII在21世纪初推出,是Altera前一代FPGA/CPLD集成开发环境MAX+PlusII的更新换代产品,其界面友好,使用便捷.
在QuartusII上可以完成1.
5节所述的整个流程,它提供了一种与结构无关的设计环境,使设计者能方便地进行设计输入、快速处理和器件编程.
Altera的QuartusII提供了完整的多平台设计环境,能满足各种特定设计的需要,也是单芯片可编程系统(SOPC)设计的综合性环境和SOPC开发的基本设计工具,并为AlteraDSP开发包进行系统模型设计提供了集成综合环境.
QuartusII设计工具完全支持Verilog、VHDL的设计流程,其内部嵌有Verilog、VHDL逻辑综合器.
QuartusII也可以利用第三方的综合工具,如LeonardoSpectrum、SynplifyPro、DC-FPGA,并能直接调用这些工具.
同样,QuartusII具备仿真功能,同时也支持第三方的仿真工具,如ModelSim.
此外,QuartusII与MATLAB和DSPBuilder结合,可以进行基于FPGA的DSP系统开发,是DSP硬件系统实现的关键EDA工具.
QuartusII包括模块化的编译器.
编译器包括的功能模块有分析/综合器(Analysis&Synthesis)、适配器(Fitter)、装配器(Assembler)、时序分析器(TimingAnalyzer)、设计辅助模块(DesignAssistant)、EDA网表文件生成器(EDANetlistWriter)、编辑数据接口(CompilerDatabaseInterface)等.
可以通过选择StartCompilation来运行所有的编译器模块,也可以通过选择Start单独运行各个模块.
还可以通过选择CompilerTool(Tools菜单),在CompilerTool窗口中运行相应的功能模块.
在CompilerTool窗口中,可以打开相应的功能模块所包含的设置文件或报告文件,或打开其他相关窗口.
此外,QuartusII还包含许多十分有用的LPM(LibraryofParameterizedModules)模块,它们是复杂或高级系统构建的重要组成部分,也可在QuartusII中与普通设计文件一起使用.
Altera提供的LPM函数均基于Altera器件的结构做了优化设计.
在许多实用情况中,必须使用宏功能模块才可以使用一些Altera特定器件的硬件功能.
例如各类片上存储器、DSP模块、LVDS驱动器、PLL以及SERDES和DDIO电路模块等.
图1-9上排所示的是QuartusII编译设计主控界面,它显示了QuartusII自动设计的各主要处理环节和设计流程,包括设计输入编辑、设计分析与综合、适配、编程文件汇编(装配)、时序参数提取以及编程下载几个步骤.
图1-9下排的流程框图,是与上面的QuartusII设计流程相对照的标准的EDA开发流程.
QuartusII编译器支持的硬件描述语言有VHDL、Verilog、SystemVerilog及AHDL,其中AHDL是Altera公司自己设计、制定的硬件描述语言,是一种以结构描述方式为主的硬件描述语言,只有企业标准.
24第1章EDA技术概述EDA技术实用教程(第五版)图1-9QuartusII设计流程QuartusII允许来自第三方的EDIF、VQM文件输入,并提供了很多EDA软件的接口.
QuartusII支持层次化设计,可以在一个新的编辑输入环境中对使用不同输入设计方式完成的模块(元件)进行调用,从而解决了原理图与HDL混合输入设计的问题.
在设计输入之后,QuartusII的编译器将给出设计输入的错误报告.
QuartusII拥有性能良好的设计错误定位器,用于确定文本或图形设计中的错误.
对于使用HDL的设计,可以使用QuartusII带有的RTLViewer观察综合后的RTL图.
在进行编译后,可对设计进行时序仿真.
在仿真前,需要利用波形编辑器编辑一个波形激励文件.
编译和仿真经检测无误后,便可以将下载信息通过QuartusII提供的编程器下载至目标器件中了.
1.
12IP核IP就是知识产权核或知识产权模块的意思,在EDA技术开发中具有十分重要的地位.
著名的美国Dataquest咨询公司将半导体产业的IP定义为用于ASIC或FPGA中的预先设计好的电路功能模块.
IP分软IP、固IP和硬IP.
软IP是用Verilog/VHDL等硬件描述语言描述的功能块,但是并不涉及用什么具体电路元件实现这些功能.
软IP通常是以硬件描述语言HDL源文件的形式出现,应用开发过程与普通的HDL设计也十分相似,只是所需的开发软硬件环境比较昂贵.
软IP的设计周期短,设计投入少.
由于不涉及物理实现,为后续设计留有很大的发挥空间,增大了IP的灵活性和适应性.
软IP的弱点是在一定程度上使后续工序无法适应整体设计,从而需要一定程度的软IP修正,在性能上也不可能获得全面的优化.
固IP是完成了综合的功能块.
它有较大的设计深度,以网表文件的形式提交客户使用.
如果客户与固IP使用同一个IC生产线的单元库,IP应用的成功率会高得多.
硬IP提供设计的最终阶段产品:掩模.
随着设计深度的提高,后续工序所需要做的事情就越少,当然,灵活性也就越小.
不同的客户可以根据自己的需要订购不同的IP产品.
由于通信系统越来越复杂,PLD的设计也更加庞大,这增加了市场对IP核的需求.
各大FPGA厂家继续开发新的商品IP,并且开始提供"硬件"IP,即将一些功能在出厂时就固化在芯片中.
实际上,IP的概念早已在IC设计中使用,应该说标准单元库(StandardCellLibrary)中的功能单元就是IP的一种形式.
IC生产厂(Foundry)为扩大业务,提供精心设计并经1.
12IP核25EDA技术实用教程(第五版)过工艺验证的标准单元,以吸引IC设计公司(往往是Fabless,无生产线IC公司)成为其客户,同时向客户免费提供相关的数据资料.
于是IC设计师十分乐于使用成熟、优化的单元完成自己的设计,这样既可以提高效率,又可以减少设计风险.
设计师一旦以这些数据完成设计,自然也就必须要到这家Foundry去做工艺流片,这就使Foundry达到了扩大营业的目的.
标准单元使用者除与Foundry签订"标准单元数据不扩散协议"之外,无需另交单元库的使用费,因此Foundry并没有直接获取IP的收益,只是通过扩大营业间接收到单元库的IP效益,这就是IP的初级形式.
今天的IP已远远超出了这个水平,IP已经成为IC设计的一项独立技术,成为实现SOC设计的技术支撑以及ASIC设计方法学中的分支学科.
从集成规模上说,现在的IP库已经包含有诸如8051和ARM、PowerPC等微处理器、TMS320C50等数字信号处理器、MPEG-4、JPEG、H.
264等数字信息压缩/解压器在内的大规模IP模块.
这些模块都曾经是具有完整功能的IC产品,并曾广泛用来与其他功能器件一起,在PCB上构成系统主板.
如今微电子技术已经具有在硅片上实现系统集成的功能,因此这些昔日的IC便以模块"核"(Core)的形式嵌入ASIC中.
从设计来源上说,单纯靠Foundry设计IP模块已远不能满足系统设计师的要求.
今天的IP库需要广开设计源头,汇集优秀模块.
不论出自谁家,只要是优化的设计,与同类模块相比达到芯片面积更小、运行速度更快、功率消耗更低、工艺容差更大,就自然会有人愿意花钱使用这个模块的"版权",因此也就可以纳入IP库,成为IP的一员.
目前,尽管对IP还没有统一的定义,但IP的实际内涵已有了明确的界定:首先,它必须是为了易于重用而按嵌入式应用专门设计的.
即使是已经被广泛使用的产品,在决定作为IP之前,一般来说也需要再做设计,使其更易于在系统中嵌入.
比较典型的例子是嵌入式RAM,由于嵌入后已经不存在引线压点(PAD)的限制,所以在分立电路中不得不采取的措施,诸如数据线输入输出复用、地址数据线分时复用、数据串并转换以及行列等分译码等,在嵌入式RAM中将被去除,不仅节省了芯片面积,而且大大提高了读写速度.
其次是必须实现IP模块的优化设计.
优化的目标通常可用"四最"来表达,即芯片的面积最小、运算速度最快、功率消耗最低、工艺容差最大.
所谓工艺容差大是指所做的设计可以经受更大的工艺波动,是提高加工成品率的重要保障.
这样的优化目标是普通的自动化设计过程难以达到的,但是对于IP却又必须达到.
因为IP必须能经得起成千上万次的使用.
显然,IP的每一点优化都将产生千百倍甚至更大的倍增效益.
因此基于晶体管级的IP设计便成为完成IP设计的重要的途径.
再次,就是要符合IP标准.
这与其他IC产品一样,IP进入流通领域后,也需要有标准.
于是在1996年以后,RAIPD(ReusableApplication-specificIntellectual-propertyDevelopers)、VSIA(VirtualSocketInterfaceAlliance)等组织相继成立,协调并制定IP重用所需的参数、文档、检验方式等形式化的标准,以及IP标准接口、片内总线等技术性的协议标准.
虽然这些工作已经开展了多年,也制定了一些标准,但至今仍有大量问题有待解决.
例如不同嵌入式处理器协议的统一、不同IP片内结构的统一等问题.
26第1章EDA技术概述EDA技术实用教程(第五版)1.
13EDA技术发展趋势管窥随着市场需求的增长,集成工艺水平及计算机自动设计技术的不断提高,促进单片系统,或称系统集成芯片成为IC设计的发展方向.
这一发展趋势表现在如下几方面:(1)超大规模集成电路的集成度和工艺水平不断提高,深亚微米(Deep-Submicron)工艺,如65nm、45nm已经走向成熟,在一个芯片上完成系统级的集成已成为可能.
(2)由于工艺线宽的不断减小,在半导体材料上的许多寄生效应已经不能简单地被忽略.
这就对EDA工具提出了更高的要求,同时也使得IC生产线的投资更为巨大.
这一变化使得可编程逻辑器件开始进入传统的ASIC市场.
(3)市场对电子产品提出了更高的要求,如必须降低电子系统的成本、减小系统的体积等,从而对系统的集成度不断提出更高的要求.
同时,设计的速度也成了一个产品能否成功的关键因素,这促使EDA工具和IP核应用更为广泛.
(4)高性能的EDA工具得到长足的发展,其自动化和智能化程度不断提高,为嵌入式系统设计提供了功能强大的开发环境.
(5)计算机硬件平台性能大幅度提高,为复杂的SOC设计提供了物理基础.
但以往的HDL语言只提供行为级或功能级的描述,无法完成对更复杂的系统级的抽象描述.
人们正尝试开发一些新的系统级设计语言来完成这一工作,现在已开发出更趋于电路系统行为级的硬件描述语言,如SystemVerilog、SystemC及系统级混合仿真工具,可以在同一个开发平台上完成高级语言(如C/C++等)与标准HDL语言(VerilogHDL、VHDL)或其他更低层次描述模块的混合仿真.
虽然用户用高级语言编写的模块只能部分自动转化成HDL描述,但作为一种针对特定应用领域的开发工具,软件供应商已经为常用的功能模块提供了丰富的宏单元库支持,可以方便地构建应用系统,并通过仿真加以优化,最后自动产生HDL代码,进入下一阶段的ASIC实现.
此外,随着系统开发对EDA技术的目标器件各种性能要求的提高,ASIC和FPGA将更大程度相互融合.
这是因为虽然标准逻辑ASIC芯片尺寸小、功能强大、功耗低,但设计复杂,并且有批量生产要求;可编程逻辑器件开发费用低廉,能在现场进行编程,但却体积大、功能有限,而且功耗较大.
因此,FPGA和ASIC正在走到一起,互相融合,取长补短.
由于一些ASIC制造商提供具有可编程逻辑的标准单元,可编程器件制造商重新对标准逻辑单元发生兴趣,而有些公司采取两头并进的方法,从而使市场开始发生变化,在FPGA和ASIC之间正在诞生一种"杂交"产品,以满足成本和上市速度的要求.
例如将可编程逻辑器件嵌入标准单元.
尽管将标准单元核与可编程器件集成在一起并不意味着使ASIC更加便宜,或使FPGA降低功耗.
但是可使设计人员将两者的优点结合在一起,通过去掉FPGA的一些功能,可减少成本和开发时间并增加灵活性.
当然现今也在进行将ASIC嵌入可编程逻辑单元的工作.
目前,许多PLD公司开始为ASIC提供FPGA内核.
PLD厂商与ASIC制造商结盟,为SOC设计提供嵌入式FPGA模块,使未来的ASIC供应商有机会更快地进入市场,利习题27EDA技术实用教程(第五版)用嵌入式内核获得更长的市场生命期.
例如在实际应用中使用所谓可编程系统级集成电路(FPSLIC),即将嵌入式FPGA内核与RISC微控制器组合在一起形成新的IC,广泛用于电信、网络、仪器仪表和汽车中的低功耗应用系统中.
当然,也有PLD厂商不把CPU的硬核直接嵌入在FPGA中,而使用了软IP核,并称之为SOPC(SystemOnProgrammableChip,可编程片上系统),也可以完成复杂电子系统的设计,只是代价将相应提高.
在新一代的ASIC器件中留有FPGA的空间.
如果希望改变设计,或者由于开始的工作中没有条件完成足够的验证测试,稍后也可以根据要求对它编程,这使ASIC设计人员有了一定的再修改的自由度.
采用这种小的可编程逻辑内核修改设计问题,很好地降低了设计风险.
增加可编程逻辑的另一个原因是,考虑到设计产品的许多性能指标变化太快,特别是通信协议,为已经完成设计并投入应用的IC留有多次可自由更改的功能是十分有价值的事,这在通信领域中的芯片设计方面尤为重要.
可重构计算的概念已逐渐明晰,它试图在通用的计算机体系架构中引入新的计算模式,通过CPU加入可以动态重构的可编程逻辑,为每一个不同应用加载不同的可编程逻辑配置,以优化计算速度,这种模糊软硬件界限的技术,或许将获得长足发展.
现在传统ASIC和FPGA之间的界限正变得模糊.
系统级芯片不仅集成RAM和微处理器,也集成FPGA.
整个EDA和IC设计工业都朝这个方向发展,这并非是FPGA与ASIC制造商竞争的产物,对于用户来说,意味着有了更多的选择.
习题—1-1EDA技术与ASIC设计和FPGA开发有什么关系FPGA在ASIC设计中有什么用途1-2与软件描述语言相比,Verilog有什么特点1-3什么是综合有哪些类型综合在电子设计自动化中的地位是什么1-4在EDA技术中,自顶向下的设计方法的重要意义是什么1-5IP在EDA技术的应用和发展中的意义是什么1-6叙述EDA的FPGA/CPLD设计流程,以及涉及的EDA工具及其在整个流程中的作用.
编程逻辑器件PLD(ProgrammableLogicDevices)是20世纪70年代发展起来的一种新的集成器件.
PLD是大规模集成电路技术发展的产物,是一种半定制的集成电路,结合EDA技术可以十分便捷地构建数字系统.
本章主要介绍几类常用的大规模可编程逻辑器件的结构和工作原理,对CPLD的乘积项原理和FPGA的查找表原理分别进行剖析.
最后简要介绍相关的编程下载和测试技术.
2.
1PLD概述无论是简单还是复杂的数字电路系统都是由基本门构成的,如与门、或门、非门、传输门等.
由基本门可构成两类数字电路:一类是组合电路,在逻辑上输出总是当前输入状态的函数;另一类是时序电路,其输出是当前系统状态与当前输入状态的函数,它含有存储元件.
人们发现,不是所有的基本门都是必需的.
如用与非门单一基本门就可构成其他的基本门.
任何的组合逻辑函数都可以化为"与-或"表达式,即任何的组合电路,可以用与门-或门二级电路实现.
同样,任何时序电路都可由组合电路加上存储元件(即锁存器、触发器、RAM)构成.
由此,人们提出了一种可编程电路结构,即乘积项逻辑可编程结构,其原理结构图如图2-1所示.
图2-1基本PLD器件的原理结构图当然,"与-或"结构组成的PLD器件的功能比较简单.
此后,人们又从ROM工作原理、地址信号与输出数据间的关系,以及ASIC的门阵列结构中获得启发,构造出另外一种可编程的逻辑结构,这就是SRAM查找表的可编程逻辑构建方法.
此类可编程逻辑的逻辑函数发生是采用了RAM"数据"查找的方式,并使用多个查找表构成了一个查找表阵列,称为可编程门阵列(ProgrammableGateArray).
2.
1.
1PLD的发展历程很早以前人们就曾设想设计一种逻辑可再编程(可重构)的器件,不过由于受到当时集成电路工艺技术的限制,一直未能如愿.
直到20世纪后期,集成电路技术才有了飞速的发可第2章FPGA与CPLD的结构原理2.
1PLD概述29EDA技术实用教程(第五版)展,可编程逻辑器件才得以实现.
历史上,可编程逻辑器件经历了从PROM(ProgrammableReadOnlyMemory)、PLA(ProgrammableLogicArray)、PAL(ProgrammableArrayLogic)、可重复编程的GAL(GenericArrayLogic),到采用大规模集成电路技术的EPLD,直至CPLD和FPGA的发展过程,在结构、工艺、集成度、功能、速度和灵活性方面都有巨大的改进和提高.
可编程逻辑器件的演变过程大致如下:(1)20世纪70年代,熔丝编程的PROM和PLA器件是最早的可编程逻辑器件.
(2)20世纪70年代末,对PLA进行了改进,AMD公司推出PAL器件.
(3)20世纪80年代初,Lattice发明电可擦写的,比PAL使用更灵活的GAL器件.
(4)20世纪80年代中期,Xilinx公司提出现场可编程概念,同时生产出了世界上第一片FPGA器件.
同一时期,Altera公司推出EPLD器件,较GAL器件有更高的集成度,可以用紫外线或电擦除.
(5)20世纪80年代末,Lattice公司又提出在系统可编程(In-SystemProgrammability)技术,并且推出了一系列具备在系统可编程能力的CPLD器件,将可编程逻辑器件的性能和应用技术推向了一个全新的高度.
(6)20世纪90年代后,可编程逻辑集成电路技术进入飞速发展时期.
器件的可用逻辑门数超过了百万门,并出现了内嵌复杂功能模块(如加法器、乘法器、RAM、CPU核、DSP核、PLL等)的SOPC.
特别是进入21世纪以来,FPGA在逻辑规模、适用领域、工作速度、成本与功能等方面的进步变得更加瞩目.
2.
1.
2PLD分类可编程逻辑器件的种类很多,几乎每个大的可编程逻辑器件供应商都能提供具有自身结构特点的PLD器件.
由于历史的原因,可编程逻辑器件的命名各异,在详细介绍可编程逻辑器件之前,有必要介绍几种PLD的分类方法.
如图2-2所示,较常见的分类是按集成度来区分不同的PLD器件,一般可以分为以下两大类器件:一类是芯片集成度较低的,早期出现的PROM、PLA、PAL、GAL等都属于这类.
可用的逻辑门数大约在500门以下,称为简单PLD;另一类是芯片集成度较高的,如现在大量使用的CPLD、FPGA器件,称为复杂PLD.
PLD规模的划分并无同一标准,但随着PLD规模的不断扩大,500门已远非划界的标准了.
上面曾提到常用的PLD器件都是从"与-或"阵列和门阵列两类基本结构发展起来的,PLD器件从结构上可分为两大类:一类属乘积项结构器件,其基本结构为"与-或"阵列,大部分简单PLD和CPLD属于这个范畴;另一类是基于查找表结构的器件,由简单的查找表组成可编程门,再构成阵列形式,多数FPGA属于此类器件.
第三种分类方法是从编程工艺上划分:图2-2PLD按集成度分类30第2章FPGA与CPLD的结构原理EDA技术实用教程(第五版)(1)熔丝(Fuse)型器件.
早期的PROM器件就是采用熔丝结构的,编程过程是根据设计的熔丝图文件来烧断对应的熔丝,达到编程的目的.
(2)反熔丝(Antifuse)型器件.
是对熔丝技术的改进,在编程处通过击穿漏层使得两点之间获得导通.
与熔丝烧断获得开路正好相反.
如Actel公司早期的FPGA器件就采用了此种编程方式.
无论是熔丝还是反熔丝结构,都只能编程一次,因而又被合称为OTP(OneTimeProgramming)器件,即一次性可编程器件.
(3)EPROM型.
称为紫外线擦除电可编程逻辑器件,是用较高的编程电压进行编程(烧写),当需要再次编程时,用紫外线进行擦除.
EPROM可多次编程.
(4)EEPROM型.
即电可擦写编程器件,现有的部分CPLD及GAL器件仍采用此类结构.
它是对EPROM的工艺改进,不需要紫外线擦除,而是直接用电擦除.
(5)SRAM型.
即SRAM查找表结构的器件,目前大部分FPGA器件采用此种编程工艺,如Xilinx和Altera的FPGA.
这种编程方式在编程速度、编程要求上要优于前四种器件,不过SRAM型器件的编程信息是存放在RAM中的,在断电后就丢失了,再次上电需要再次编程(配置),因而需要专用器件来完成这类配置操作.
(6)Flash型.
现在许多CPLD器件采用了Flash工艺.
采用此工艺的器件的编程次数可达万次以上,且掉电后不需重新配置.
2.
2简单PLD结构原理简单PLD是早期出现的可编程逻辑器件,它们的逻辑规模都比较小,只能实现通用数字逻辑电路(如74系列)的一些功能,在结构上由简单的"与-或"门阵列和输入输出单元组成.
常见的简单PLD有PROM、PLA、PAL、GAL等.
2.
2.
1逻辑元件符号表示在介绍简单PLD器件原理之前,有必要熟悉常用的逻辑元件符号及描述PLD内部结构电路的符号.
通常,"国标"是指我国的国家标准,但目前流行于国内数字电路教材中的所谓"国标"逻辑符号原本是全盘照搬ANSI/IEEE-1984版的IEC国际标准符号,且至今没有升级.
然而由于此类符号表达形式过于复杂,即用矩形图中的符号来标志逻辑功能(RectangularOutlineSymbols),故极不适合表述PLD中复杂的逻辑结构.
因此数年以后,IEEE又推出了ANSI/IEEE-1991标准,于是国际上绝大多数技术资料和相关教材很快就废弃了原标准(1984标准)的应用,普遍采用了1991版本的国际标准逻辑符号(DistinctiveShapeSymbols).
该版本符号的特点是,用图形的不同形状来标志逻辑模块的功能.
本书全部采用IEEE-1991标准符号,图2-3对两个版本作了比较,即ANSI/IEEE-1991版与ANSI/IEEE-1984版的IEC国际标准逻辑门符号对照图.
在目前最流行的EDA软件中,原理图中的逻辑符号也都是ANSI/IEEE-1991标准的逻辑符号.
由于PLD的特殊结构,用1991标准的符号的好处是能十分容易地衍生出一套用于描述PLD复杂逻辑结构的简化符号.
如图2-4所示,接入PLD内部的与或阵列输入缓冲2.
2简单PLD结构原理31EDA技术实用教程(第五版)器电路,一般采用互补结构,它等效于图2-5的逻辑结构,即当信号输入PLD后,分别以其同相和反相信号接入.
图2-6是PLD中与阵列的简化图形,表示可以选择A、B、C和D四个信号中的任一组或全部输入与门.
在这里用以形象地表示与阵列,这是在原理上的等效.
当采用某种硬件实现方法时,如NMOS电路时,在图中的与门可能根本不存在.
但NMOS构成的连接阵列中却含有了与的逻辑.
同样,或阵列也用类似的方式表示,道理也是一样的.
图2-7是PLD中或阵列的简化图形表示.
图2-8是在阵列中连接关系的表示.
十字交叉线表示两条线未连接;交叉线的交点上打黑点,表示固定连接,即在PLD出厂时已连接;交叉线的交点上打叉,表示该点可编程(可改变),在PLD出厂后通过编程,其连接可根据需要随时改变.
图2-3两种不同版本的国际标准逻辑门符号对照图图2-4PLD的互补缓冲器图2-5PLD的互补输入图2-6PLD中与阵列的表示图2-7PLD中或阵列的表示图2-8阵列线连接表示2.
2.
2PROM结构原理可编程只读存储器PROM除了用作存储器外,还可作为PLD使用.
一个PROM器件主要由地址译码部分、PROM单元阵列和输出缓冲部分构成.
图2-9是对PROM通常的认识,也可以从可编程逻辑器件的角度来分析PROM的基本结构.
PROM中的地址译码器用于完成PROM存储阵列的行的选择,其逻辑函数是图2-9PROM基本结构32第2章FPGA与CPLD的结构原理EDA技术实用教程(第五版)W0=An1…A1A0W1=An1…A1A0MWp1=An1…A1A0(2-1)其中p=2n.
容易发现,式(2-1)都可以看成是逻辑与运算,那么就可以把PROM的地址译码器看成是一个与阵列.
如图2-9所示,对于存储单元阵列的输出,可用下列逻辑函数表示(其中Mp1,m1是存储单元阵列第m1列p1行单元的值):F0=Mp1,0Wp1+…+M1,0W1+M0,0W0F1=Mp1,1Wp1+…+M1,1W1+M0,1W0MFm1=Mp1,m1Wp1+…+M1,m1W1+M0,m1W0(2-2)显然可以认为式(2-2)是一个或阵列,与上面的与阵列不同的是,在这里Mx,y是可以编程的,即或阵列可编程,与阵列不可编程.
结合上述两个分析结果,可以把PROM的结构表示为图2-10.
为了更清晰直观地表示PROM中固定的与阵列和可编程的或阵列,PROM可以表示为PLD阵列图.
以4*2PROM为例,如图2-11所示.
PROM的地址线An1~A0是与阵列(地址译码器)的n个输入变量,经不可编程的与阵列产生An1~A0的2n个最小项(乘积项)W2n1~W0,再经可编程或阵列按编程的结果产生m个输出函数Fm1~F0,这里的m就是PROM的输出数据位宽.
对应已知的半加器的逻辑表达式:S=A0A1和C=A0·A1,可用4*2PROM编程实现.
图2-12的连接结构表达的正是半加器逻辑:F0=A01A+0AA1和F1=A1A0.
这就是图2-12结构的布尔表达式,即所谓的"乘积项"方式.
式中的A1和A0分别是加数和被加数;F0为和,F1为进位.
反之,根据半加器的逻辑关系,就可以得到图2-12的阵列点连接关系,从而可以形成阵列点文件,即早期的PLD编程文件:熔丝图文件(FuseMap).
对于PROM,图2-11PROM表达的PLD阵列图图2-12用PROM完成半加器逻辑阵列图2-10PROM逻辑阵列结构2.
2简单PLD结构原理33EDA技术实用教程(第五版)则为存储单元的编程数据文件.
实际上,在可编程逻辑的应用上,PROM只能用于组合逻辑的构建.
由于输入变量的增加会引起存储容量的增加,由前面的分析可知,这种增加是按2的幂次增加的,所以多输入变量的组合电路函数不适合用单个PROM来编程表达.
2.
2.
3PLA结构原理PROM实现组合逻辑函数在输入变量增多时,PROM的存储单元利用效率大大降低.
PROM的与阵列是全译码器,产生了全部最小项,而在实际应用时,绝大多数组合逻辑函数并不需要所有的最小项.
可编程逻辑阵列PLA对PROM进行了改进.
由图2-11可知PROM的或阵列可编程,而与阵列不可编程;PLA则是与阵列和或阵列都可编程,图2-13是PLA的阵列图表示.
任何组合函数都可以采用PLA来实现,但在实现时,由于与阵列不采用全译码的方式,标准的与或表达式已不适用.
因此需要把逻辑函数化成最简的与或表达式,然后用可编程的与阵列构成与项,用可编程的或阵列构成与项的或运算.
在有多个输出时,要尽量利用公共的与项,以提高阵列的利用率.
图2-14是6*3PLA与8*3PROM的比较,两者在大部分实际应用中,可以实现相同的逻辑功能,不过6*3PLA只需要6(=2*3)条乘积项线,而不是8*3PROM的8(=23)条,节省了2条.
当PLA的规模增大时,这个优势更加明显.
PLA不需要包含输入变量每个可能的最小项,仅仅需包含的是在逻辑功能中实际要求的那些最小项.
PROM随着输入变量的增加,规模迅速增加的问题在PLA中大大缓解.
图2-13PLA逻辑阵列示意图图2-14PLA与PROM的比较虽然PLA的利用率较高,可是需要有逻辑函数的与或最简表达式,对于多输出函数需要提取和利用公共的与项,这涉及的软件算法较复杂,尤其是多输入变量和多输出的逻辑函数,处理上更加困难.
此外,PAL的两个阵列均可编程,不可避免地使编程后器件的运行速度下降了.
因此,PLA的使用受到了很大的限制,现在,现成的PLA芯片已被淘汰.
但由于其资源面积利用率较高,在全定制ASIC设计中获得了广泛的使用,但这时逻辑函数的化简则由设计者手工完成.
34第2章FPGA与CPLD的结构原理EDA技术实用教程(第五版)2.
2.
4PAL结构原理PLA的利用率高,但与或阵列都可编程的结构,导致软件算法过于复杂,运行速度下降.
人们在PLA后又设计了另外一种可编程器件,即可编程阵列逻辑PAL.
PAL的结构与PLA相似,也包含与阵列、或阵列,但是或阵列是固定的,只有与阵列可编程.
PAL的结构如图2-15所示,由于PAL的或阵列是固定的,可用图2-16来表示.
图2-15PAL结构图2-16PAL的常用表示与阵列可编程、或阵列固定的结构避免了PLA存在的一些问题,运行速度也有所提高.
从PAL的结构可知,各个逻辑函数输出化简,不必考虑公共的乘积项.
送到或门的乘积项数目是固定的,大大简化了设计算法,同时也使单个输出的乘积项为有限.
如图2-16中表示的PAL只允许有2个乘积项.
对于多个乘积项,PAL通过输出反馈和互连的方式解决,即允许输出端的信号再馈入下一个与阵列.
图2-17是常用器件PAL16V8的部分结构图,从中可以看到PAL的输出反馈.
图2-17PAL16V8的部分结构图上述提到的可编程结构只能解决组合逻辑的可编程问题,而对时序电路却无能为力.
由于时序电路是由组合电路及存储单元(锁存器、触发器、RAM)构成,对其中的组合电2.
2简单PLD结构原理35EDA技术实用教程(第五版)路部分的可编程问题已经解决,所以只要再加上锁存器、触发器即可.
PAL加上了输出寄存器单元后,就实现了时序电路的可编程,如图2-17所示.
但是,为适应不同应用需要,PAL的I/O结构很多,往往一种结构方式就有一种PAL器件,PAL的应用设计者在设计不同功能的电路时,要采用不同I/O结构的PAL器件.
PAL种类变得十分丰富,同时也带来了使用、生产的不便.
此外,PAL一般采用熔丝工艺生产,一次可编程,修改很不方便.
2.
2.
5GAL结构原理1985年,Lattice在PAL的基础上,设计出了GAL器件,即通用阵列逻辑器件.
GAL首次在PLD上采用了EEPROM工艺,使得GAL具有电可擦除重复编程的特点,彻底解决了熔丝型可编程器件的一次可编程问题.
GAL在"与-或"阵列结构上沿用了PAL的与阵列可编程、或阵列固定的结构,但对PAL的I/O结构进行了较大的改进,在GAL的输出部分增加了输出逻辑宏单元OLMC(OutputLogicMacroCell).
GAL(图2-18所示的是GAL16V8型号的器件)的OLMC单元设有多种组态,可配置成专用组合输出、专用输入、组合输出双向口、寄存器输出、寄存器输出双向口等,为逻图2-18GAL16V8的结构图36第2章FPGA与CPLD的结构原理EDA技术实用教程(第五版)辑电路设计提供了极大的灵活性.
由于具有结构重构和输出端的功能均可移到另一输出引脚上的功能,在一定程度上简化了电路板的布局布线,使系统的可靠性进一步提高.
由于GAL是在PAL的基础上设计的,与多种PAL器件保持了兼容性.
GAL能直接替换多种PAL器件,方便应用厂商升级现有产品.
因此现在GAL器件仍被广泛应用.
图2-18中,GAL的输出逻辑宏单元OLMC中含有四个多路选择器,通过不同的选择方式可以产生多种输出结构,分别属于三种模式,一旦确定了某种模式,所有的OLMC都将工作在同一种模式下.
三种输出模式如下.
(1)寄存器模式.
在寄存器模式下,OLMC有如下两种输出结构:①寄存器输出结构(图2-19):异或门输出经D触发器至三态门,触发器的时钟端CLK连公共CLK引脚,三态门的使能端OE连公共OE引脚,信号反馈来自触发器.
②寄存器模式组合输出双向口结构(图2-20):输出三态门受控,输出反馈至本单元,组合输出无触发器.
(2)复合模式.
在复合模式下,OLMC则有两种结构:①组合输出双向口结构(图2-21):大致与寄存器模式下组合输出双向口结构相同,区别是引脚CLK、OE在寄存器模式下为专用公共引脚,不可它用.
图2-20寄存器模式组合双向输出结构图2-21组合输出双向结构②组合输出结构(图2-22):无反馈,其他同组合输出双向口结构.
(3)简单模式.
在简单模式下,OLMC可定义三种输出结构:①反馈输入结构(图2-23):输出三态门被禁止,该单元的"与-或"阵列无输出功能,但可作为相邻单元的信号反馈输入端,该单元反馈输入端的信号来自另一个相邻单元.
图2-22复合型组合输出结构图2-23反馈输入结构图2-19寄存器输出结构2.
3CPLD的结构原理37EDA技术实用教程(第五版)②输出反馈结构(图2-24):输出三态门被恒定打开,该单元的"与-或"阵列不具有输出功能,但可作为相邻单元的信号反馈输入端.
该单元的反馈输入端的信号来自另一个相邻单元.
③输出结构(图2-25):异或门输出不经过触发器,直接通过使能的三态门输出.
该单元的输出通过相邻单元反馈,此单元的信号反馈无效.
图2-24输出反馈结构图2-25简单模式输出结构OLMC的所有这些输出结构和工作模式的选择和确定(即对其中的多路选择器的控制)均由计算机根据GAL的逻辑设计文件的逻辑关系自动形成控制文件.
即在编译工具(如ABEL3.
0)的帮助下,计算机用ABEL或其他硬件语言描述的文件综合成可下载于GAL的JEDEC标准格式文件(即熔丝图文件),该文件中包含了对OLMC输出结构和工作模式,以及对图2-18左侧可编程与阵列各连线"熔丝点"的选择信息.
2.
3CPLD的结构原理现在的PLD以大规模、超大规模集成电路工艺制造的CPLD、FPGA为主.
前面曾提到,多种简单PLD器件在实用中已被淘汰,大致原因是:(1)阵列规模较小,资源不够用于设计数字系统.
当设计较大的数字逻辑时,需要多片器件,从而其性能、成本及设计周期都受影响.
(2)片内寄存器资源不足,且寄存器的结构限制较多(如有的器件要求时钟共用),难以构成丰富的时序电路.
I/O不够灵活,如三态控制等,降低了资源的利用率.
(3)编程不便,需用专用的编程工具,对于使用熔丝型的简单PLD更是不便.
早期CPLD是从GAL的结构扩展而来,但针对GAL的缺点进行了改进,如Lattice的ispLSI1032器件等.
在流行的CPLD中,Altera的MAX7000和MAX3000A系列器件具有一定典型性,下面以此为例介绍CPLD的结构和工作原理.
MAX3000A包含32~512个宏单元,其单个宏单元结构如图2-26所示.
每16个宏单元组成一个逻辑阵列块(LogicArrayBlock,LAB).
每个宏单元含有一个可编程的与阵列和固定的或阵列,以及一个可配置寄存器.
每个宏单元含共享扩展乘积项和高速并联扩展乘积项,它们可向每个宏单元提供多达32个乘积项,以构成复杂的逻辑函数.
MAX3000A结构中包含五个主要部分,即逻辑阵列块、宏单元、扩展乘积项(共享和并联)、可编程连线阵列、I/O控制块.
以下将分别进行介绍.
38第2章FPGA与CPLD的结构原理EDA技术实用教程(第五版)图2-26MAX3000A系列的单个宏单元结构1.
逻辑阵列块LAB一个LAB由16个宏单元的阵列组成.
MAX3000A结构主要是由多个LAB组成的阵列以及它们之间的连线构成.
多个LAB通过可编程连线阵(ProgrammableInterconnectArray,PIA)和全局总线连接在一起(图2-27),全局总线从所有的专用输入、I/O引脚和宏单元馈入信号.
对于每个LAB有下列输入信号:来自作为通用逻辑输入的PIA的36个信号.
全局控制信号,用于寄存器辅助功能.
从I/O引脚到寄存器的直接输入通道.
2.
宏单元MAX3000A系列中的宏单元由三个功能块组成:逻辑阵列、乘积项选择矩阵和可编程寄存器.
它们可以被单独地配置为时序逻辑和组合逻辑工作方式.
其中逻辑阵列实现组合逻辑,可以给每个宏单元提供五个乘积项.
乘积项选择矩阵分配这些乘积项作为到或门和异或门的主要逻辑输入,以实现组合逻辑函数;或者把这些乘积项作为宏单元中寄存器的辅助输入:清零(Clear)、置位(Preset)、时钟(Clock)和时钟使能控制(ClockEnable).
每个宏单元中有一个共享扩展乘积项经非门后回馈到逻辑阵列中,以便实现更复杂的逻辑函数;宏单元中还存在并行扩展乘积项,从邻近宏单元借位而来.
宏单元中的可配置寄存器可以单独地被配置为带有可编程时钟控制的D、T、JK或SR触发器工作方式,也可以将寄存器旁路掉,以实现组合逻辑工作方式.
每个可编程寄存器可以按如下三种时钟输入模式工作:(1)全局时钟信号.
该模式能实现最快的时钟到输出(ClocktoOutput)性能,这时全图2-27MAX3000A的结构2.
3CPLD的结构原理39EDA技术实用教程(第五版)局时钟输入直接连向每一个寄存器的CLK端.
(2)全局时钟信号由高电平有效的时钟信号使能.
这种模式提供每个触发器的时钟使能信号,由于仍使用全局时钟,输出速度较快.
(3)用乘积项实现一个阵列时钟.
在这种模式下,触发器由来自隐埋(Embedded)的宏单元或I/O引脚的信号进行钟控,其速度稍慢.
每个寄存器也支持异步清零和异步置位功能.
乘积项选择矩阵分配,并控制这些操作.
虽然乘积项驱动寄存器的置位和复位信号是高电平有效,但在逻辑阵列中将信号取反可得到低电平有效的效果.
此外,每一个寄存器的复位端可以由低电平有效的全局复位专用引脚GCLRn信号来驱动.
3.
扩展乘积项虽然,大部分逻辑函数能够用在每个宏单元中的五个乘积项实现,但更复杂的逻辑函数需要附加乘积项.
可以利用其他宏单元以提供所需的逻辑资源,对于MAX3000A系列,还可以利用其结构中具有的共享和并联扩展乘积项,即扩展项.
这两种扩展项作为附加的乘积项直接送到LAB的任意一个宏单元中.
利用扩展项可保证在实现逻辑综合时,用尽可能少的逻辑资源,得到尽可能快的工作速度.
4.
可编程连线阵列PIA不同的LAB通过在可编程连线阵列PIA上布线,以相互连接构成所需的逻辑.
这个全局总线是一种可编程的通道,可以把器件中任何信号连接到其目的地.
所有MAX3000A器件的专用输入、I/O引脚和宏单元输出都连接到PIA,而PIA可把这些信号送到整个器件内的各个地方.
只有每个LAB需要的信号才布置从PIA到该LAB的连线.
由图2-28可看出PIA信号布线到LAB的方式.
图2-28中通过EEPROM单元控制与门的一个输入端,以选择驱动LAB的PIA信号.
由于MAX3000A的PIA有固定的延时,因此使得器件延时性能容易预测.
5.
I/O控制块I/O控制块允许每个I/O引脚单独被配置为输入、输出和双向工作方式.
所有I/O引脚都有一个三态缓冲器,它的控制端信号来自一个多路选择器,可以选择用全局输出使能信号其中之一进行控制,或者直接连到地(GND)或电源(VCC)上.
图2-29表示的是EPM3032A器件的I/O控制块,它共有六个全局输出使能信号.
这六个使能信号可来自:两个输出使能信号(OE1、OE2)、I/O引脚的子集或I/O宏单元的子集,并且也可以是这些信号取反后的信号.
当三态缓冲器的控制端接地(GND)时,其输出为高阻态,这时I/O引脚可作为专用图2-28PIA信号布线到LAB的方式40第2章FPGA与CPLD的结构原理EDA技术实用教程(第五版)输入引脚使用.
当三态缓冲器控制端接电源VCC上时,输出被一直使能,为普通输出引脚.
MAX3000A结构提供双I/O反馈,其宏单元和I/O引脚的反馈是独立的.
当I/O引脚被配置成输入引脚时,与其相连的宏单元可以作为隐埋逻辑使用.
为降低CPLD的功耗,减少其工作时的发热量,MAX3000A系列提供可编程的速度或功率优化,使得在应用设计中,让影响速度的关键部分工作在高速或全功率状态,而其余部分则工作在低速或低功率状态.
允许用户配置一个或多个宏单元工作在50%或更低的功率下,而仅需增加一个微小的延时.
对于I/O工作电压,MAX3000A器件为3.
3V工作电压,但I/O口可通过一个限流电阻与5VTTL系统直接相连.
2.
4FPGA的结构原理除CPLD外,FPGA是大规模可编程逻辑器件的另一大类PLD器件.
以下介绍最常用的FPGA的基本结构及其工作原理.
2.
4.
1查找表逻辑结构前面提到的可编程逻辑器件,诸如GAL、CPLD之类都是基于乘积项的可编程结构,即可编程的与阵列和固定的或阵列组成.
而在本节中将要介绍的FPGA,使用了另一种可编程逻辑的形成方法,即可编程的查找表(LookUpTable,LUT)结构,LUT是可编程的最小逻辑构成单元.
大部分FPGA采用基于SRAM(静态随机存储器)的查找表逻辑形成结构,就是用SRAM来构成逻辑函数发生器.
一个N输入LUT可以实现N个输入变量的任何逻辑功能,如N输入"与"、N输入"异或"等.
图2-30是4输入LUT,其内部结构如图2-31所示.
图2-30FPGA查找表单元图2-31FPGA查找表单元内部结构图2-29MAX3000A系列器件的I/O控制块2.
4FPGA的结构原理41EDA技术实用教程(第五版)一个N输入的查找表,需要SRAM存储N个输入构成的真值表,需要用2的N次幂个位的SRAM单元.
显然N不可能很大,否则LUT的利用率很低,输入多于N个的逻辑函数,必须用数个查找表分开实现.
Xilinx和Altera的FPGA器件都采用SRAM查找表构成.
2.
4.
2CycloneIII系列器件的结构原理Cyclone3(为方便计,以下将III都写成3,其他情况也类似)系列器件是Altera公司的一款低功耗、高性价比的FPGA,它的结构和工作原理在FPGA器件中具有典型性,下面以此类器件为例,介绍FPGA的结构与工作原理.
Cyclone3器件主要由逻辑阵列块(LogicArrayBlock,LAB)、嵌入式存储器块、嵌入式硬件乘法器、I/O单元和嵌入式PLL等模块构成,在各个模块之间存在着丰富的互连线和时钟网络.
Cyclone3器件的可编程资源主要来自逻辑阵列块LAB,而每个LAB都由多个逻辑宏单元LE(LogicElement.
即LC:LogicCell)构成.
LE是Cyclone3FPGA器件的最基本的可编程单元,图2-32显示了Cyclone3FPGA的LE的内部结构.
观察图2-32可以发现,LE主要由一个4输入的查找表LUT、进位链逻辑、寄存器链逻辑和一个可编程的寄存器构成.
4输入的LUT可以完成所有的4输入1输出的组合逻辑功能.
每一个LE的输出都可以连接到行、列、直连通路、进位链、寄存器链等布线资源.
每个LE中的可编程寄存器可以被配置成D触发器、T触发器、JK触发器和RS寄存图2-32Cyclone3LE结构图42第2章FPGA与CPLD的结构原理EDA技术实用教程(第五版)器模式.
每个可编程寄存器具有数据、时钟、时钟使能、清零输入信号.
全局时钟网络、通用I/O口以及内部逻辑可以灵活配置寄存器的时钟和清零信号.
任何一个通用I/O和内部逻辑都可以驱动时钟使能信号.
在一些只需要组合电路的应用中,对于组合逻辑的实现,可将该可配置寄存器旁路,LUT的输出可作为LE的输出.
LE有三个输出驱动内部互连,一个驱动局部互连,另两个驱动行或列的互连资源,LUT和寄存器的输出可以单独控制.
可以实现在一个LE中,LUT驱动一个输出,而寄存器驱动另一个输出(这种技术称为寄存器打包).
因而在一个LE中的寄存器和LUT能够用来完成不相关的功能,因此能够提高LE的资源利用率.
寄存器反馈模式允许在一个LE中寄存器的输出作为反馈信号,加到LUT的一个输入上,在一个LE中就完成反馈.
除上述的三个输出外,在一个逻辑阵列块中的LE还可以通过寄存器链进行级联.
在同一个LAB中的LE里的寄存器可以通过寄存器链级联在一起,构成一个移位寄存器,那些LE中的LUT资源可以单独实现组合逻辑功能,两者互不相关.
Cyclone3的LE可以工作在下列两种操作模式:普通模式和算术模式.
在不同的LE操作模式下,LE的内部结构和LE之间的互连有些差异,图2-33和图2-34分别是Cyclone3的LE在普通模式和算术模式下的结构和连接图.
图2-33Cyclone3LE普通模式普通模式下的LE适合通用逻辑应用和组合逻辑的实现.
在该模式下,来自LAB局部互连的四个输入将作为一个4输入1输出的LUT的输入端口.
可以选择进位输入(cin)信号或者data3信号作为LUT中的一个输入信号.
每一个LE都可以通过LUT链直接连接到下一个LE(在同一个LAB中的).
在普通模式下,LE的输入信号可以作为LE中寄存器的异步装载信号.
普通模式下的LE也支持寄存器打包与寄存器反馈.
在Cyclone3器件中的LE还可以工作在算术模式下,在这种模式下,可以更好地实现2.
4FPGA的结构原理43EDA技术实用教程(第五版)图2-34Cyclone3LE动态算术模式加法器、计数器、累加器和比较器.
在算术模式下的单个LE内有两个3输入LUT,可被配置成一位全加器和基本进位链结构.
其中一个3输入LUT用于计算,另外一个3输入LUT用来生成进位输出信号cout.
在算术模式下,LE支持寄存器打包与寄存器反馈.
逻辑阵列块LAB是由一系列相邻的LE构成的.
每个Cyclone3的LAB包含16个LE,在LAB中、LAB之间存在着行互连、列互连、直连通路互连、LAB局部互连、LE进位链和寄存器链.
图2-35是Cyclone3LAB的结构图.
图2-35Cyclone3LAB结构在Cyclone3器件里面存在大量LAB,图2-35所示的多个LE排列起来构成LAB,多个LAB排列起来成为LAB阵列,构成了Cyclone3FPGA丰富的逻辑编程资源.
44第2章FPGA与CPLD的结构原理EDA技术实用教程(第五版)局部互连可以用来在同一个LAB的LE之间传输信号;进位链用来连接LE的进位输出和下一个LE(在同一个LAB中)的进位输入;寄存器链用来连接下一个LE(在同一个LAB中)的寄存器输出和下一个LE的寄存器数据输入.
LAB中的局部互连信号可以驱动在同一个LAB中的LE,可以连接行与列互连和在同一个LAB中的LE.
相邻的LAB、左侧或者右侧的PLL(锁相环)和M9KRAM块(Cyclone3中的嵌入式存储器)通过直连线也可以驱动一个LAB的局部互连(图2-36).
每个LAB都有专用的逻辑来生成LE的控制信号,这些LE的控制信号包括两个时钟信号、两个时钟使能信号、两个异步清零、同步清零、异步预置/装载信号、同步装载和加/减控制信号.
图2-36LAB阵列间互连在Cyclone3FPGA器件中所含的嵌入式存储器(EmbeddedMemory),由数十个M9K的存储器块构成.
每个M9K存储器块具有很强的伸缩性,可以实现的功能有8192位RAM(单端口、双端口、带校验、字节使能)、ROM、移位寄存器、FIFO等.
在Cyclone3FPGA中的嵌入式存储器可以通过多种连线与可编程资源实现连接,这大大增强了FPGA的性能,扩大了FPGA的应用范围.
在Cyclone3系列器件中还有嵌入式乘法器(EmbeddedMultiplier),这种硬件乘法器的存在可以大大提高FPGA在处理DSP任务时的能力.
Cyclone3系列器件的嵌入式乘法器可以实现9*9乘法器或者18*18乘法器,乘法器的输入与输出可以选择是寄存的还是非寄存的(即组合输入输出).
可以与FPGA中的其他资源灵活地构成适合DSP算法的MAC(乘加单元).
在数字逻辑电路的设计中,时钟、复位信号往往需要同步作用于系统中的每个时序逻辑单元,因此在Cyclone3器件中设置有全局控制信号.
由于系统的时钟延时会严重影响系统的性能,故在Cyclone3中设置了复杂的全局时钟网络(图2-37),以减少时钟信号的传输延迟.
另外,在Cyclone3FPGA中还含有2~4个独立的嵌入式锁相环PLL,可以用来调整时钟信号的波形、频率和相位.
2.
5硬件测试45EDA技术实用教程(第五版)图2-37时钟网络的时钟控制Cyclone3的I/O支持多种I/O接口,符合多种I/O标准,可以支持差分的I/O标准:诸如LVDS(低压差分串行)和RSDS(去抖动差分信号)、SSTL-2、SSTL-18、HSTL-18、HSTL-15、HSTL-12、PPDS、差分LVPECL,当然也支持普通单端的I/O标准,比如LVTTL、LVCMOS、PCI和PCI-XI/O等,通过这些常用的端口与板上的其他芯片沟通.
Cyclone3器件还可以支持多个通道的LVDS和RSDS.
Cyclone3器件内的LVDS缓冲器可以支持最高达875Mbps的数据传输速度.
与单端的I/O标准相比,这些内置于Cyclone3器件内部的LVDS缓冲器保持了信号的完整性,并具有更低的电磁干扰、更好的电磁兼容性(EMI)及更低的电源功耗.
Cyclone3系列器件除了片上的嵌入式存储器资源外,可以外接多种外部存储器,比如SRAM、NAND、SDRAM、DDRSDRAM、DDR2SDRAM等.
图2-38的示意图为Cyclone3器件内部的LVDS接口电路.
Cyclone3的电源支持采用内核电压和I/O电压(3.
3V)分开供电的方式,I/O电压取决于使用时需要的I/O标准,而内核电压使用1.
2V供电,PLL供电2.
5V.
Cyclone3系列中有一个子系列是Cyclone3LS系列,该器件系列可以支持加密功能,使用AES加密算法对FPGA上的数据进行保护.
图2-38LVDS连接2.
5硬件测试进入21世纪,集成电路技术飞速发展,推动了半导体存储、微处理器等相关技术的快速进步,CPLD和FPGA也不例外.
CPLD、FPGA和ASIC的规模越来越大,复杂程度也46第2章FPGA与CPLD的结构原理EDA技术实用教程(第五版)越来越高,特别在FPGA应用中,测试显得越来越重要.
由于其本身技术的复杂性,测试也有多个部分:在"软"的方面,逻辑设计的正确性需要验证,这不仅在功能这一级上,对于具体的FPGA还要考虑种种内部或I/O上的时延特性;在"硬"的方面,首先在PCB板级需要测试引脚的连接问题,其次是I/O功能也需要专门的测试.
2.
5.
1内部逻辑测试对于CPLD/FPGA的内部逻辑测试是应用设计可靠性的重要保证.
由于设计的复杂性,内部逻辑测试面临越来越多的问题.
设计者通常不可能考虑周全,这就需要在设计时加入用于测试的专用逻辑,即进行可测性设计(DesignForTest,DFT),在设计完成后用来测试关键逻辑.
在ASIC设计中的扫描寄存器,是可测性设计的一种,原理是把ASIC中关键逻辑部分的普通寄存器用测试扫描寄存器来代替,在测试中可以动态地测试、分析、设计其中寄存器所处的状态,甚至对某个寄存器加激励信号,以改变该寄存器的状态.
有的FPGA厂商提供一种技术,在可编程逻辑器件中可动态载入某种逻辑功能模块,与EDA工具软件相配合提供一种嵌入式逻辑分析仪,以帮助测试工程师发现内部逻辑问题.
Altera的SignalTapII技术是典型代表之一(第6章中给予详细讨论).
在内部逻辑测试时,还会涉及测试的覆盖率问题,对于小型逻辑电路,逻辑测试的覆盖率可以很高,甚至达到100%.
可是对于一个复杂数字系统设计,内部逻辑覆盖率不可能达到100%,这就必须寻求其他更有效的方法来解决.
2.
5.
2JTAG边界扫描随着微电子技术、微封装技术和印制板制造技术的发展,印制电路板变得越来越小,密度越来越大,复杂程度越来越高,层数不断增加.
面对这样的发展趋势,如果仍然沿用传统的诸如外探针测试法和"针床"夹具测试法来测试焊接上的器件不仅是困难的,而且也会把电路简化所节约的成本费用用在了抵消改进传统方法所付出的代价上.
20世纪80年代,联合测试行动组(JointTestActionGroup,JTAG)开发了IEEE1149.
1-1990边界扫描测试技术规范.
该规范提供了有效的测试引线间隔致密的电路板上集成电路芯片的能力.
大多数CPLD/FPGA厂家的器件遵守IEEE规范,并为输入引脚和输出引脚以及专用配置引脚提供了边界扫描测试(BoardScanTest,BST)的能力.
设计人员使用BST规范测试引脚连接时,再也不必使用物理探针了,甚至可在器件正常工作时在系统捕获功能数据.
器件的边界扫描单元能够从逻辑跟踪引脚信号,或是从引脚或器件核心逻辑信号中捕获数据.
强行加入的测试数据串行地移入边界扫描单元,捕获的数据串行移出并在器件外部同预期的结果进行比较.
图2-39说明了边界扫描测试法的概念.
该方法提供了一个串行扫描路径,它能捕获器件核心逻辑的内容,或者测试遵守IEEE规范的器件之间的引脚连接情况.
2.
5硬件测试47EDA技术实用教程(第五版)图2-39边界扫描电路结构图边界扫描测试标准IEEE1149.
1BST的结构,即:当器件工作在JTAGBST模式时,使用四个I/O引脚和一个可选引脚TRST作为JTAG引脚.
四个I/O引脚是TDI、TDO、TMS和TCK,表2-1概括了这些引脚的功能.
JTAGBST需要下列寄存器:指令寄存器.
用来决定是否进行测试或访问数据寄存器操作.
旁路寄存器.
这个1位寄存器用来提供TDI和TDO的最小串行通道.
边界扫描寄存器.
由器件引脚上的所有边界扫描单元构成.
表2-1边界扫描I/O引脚功能引脚描述功能TDI测试数据输入测试指令和编程数据的串行输入引脚.
数据在TCK的上升沿移入TDO测试数据输出测试指令和编程数据的串行输出引脚,数据在TCK的下降沿移出.
如果数据没有被移出时,该引脚处于高阻态TMS测试模式选择控制信号输入引脚,负责TAP控制器的转换.
TMS必须在TCK的上升沿到来之前稳定TCK测试时钟输入时钟输入到BST电路,一些操作发生在上升沿,而另一些发生在下降沿TRST测试复位输入低电平有效,异步复位边界扫描电路(在IEEE规范中,该引脚可选)JTAG边界扫描测试由测试访问端口的控制器管理.
TMS、TRST和TCK引脚管理TAP控制器的操作;TDI和TDO为数据寄存器提供串行通道,TDI也为指令寄存器提供数据,然后为数据寄存器产生控制逻辑.
边界扫描寄存器是一个大型串行移位寄存器,它使用TDI引脚作为输入,TDO引脚作为输出.
边界扫描寄存器由3位的周边单元组成,它们可以是I/O单元、专用输入(输入器件)或专用的配置引脚.
设计者可用边界扫描寄存器来测试外部引脚的连接,或是在器件运行时捕获内部数据.
图2-40表示测试数据沿着JTAG器件的周边做串行移位的情况.
边界扫描描述语言BSDL(Boundary-ScanDescriptionLanguage)是VHDL语言的一个子集.
设计人员可以利用BSDL来描述遵从IEEEStd1149.
1BST的JTAG器件的测试属性,测试软件开发系统使用BSDL文件来生成测试文件,进行测试分析、失效分析以及在系统编程等.
图2-40边界扫描数据移位方式48第2章FPGA与CPLD的结构原理EDA技术实用教程(第五版)在FPGA开发中,JTAG口更多地被用在对其进行编程、配置、内嵌存储器内容的测试编辑,以及处理器内核系统的软硬件测试和调试.
2.
6PLD产品概述本节将概述常用的FPGA和CPLD器件系列及其基本特性,以及FPGA的配置器件.
2.
6.
1Altera公司的PLD器件Altera是著名的PLD生产厂商,多年来一直占据着行业领先的地位.
Altera的PLD具有高性能、高集成度和高性价比的优点,此外它还提供了功能全面的开发工具和丰富的IP核、宏功能库等.
因此Altera的产品获得了广泛的应用.
Altera的产品有多个系列,按照推出的先后顺序依次为Classic、MAX(MultipleArrayMatrix)、FLEX(FlexibleLogicElementMatrix)、APEX(AdvancedLogicElementMatrix)、ACEX、APEXII、Cyclone1/2/3/4、MAXII以及Stratix1/2/3/4/6等系列.
1.
Stratix4/6系列FPGAStratix-4系列FPGA器件是Altera的高性能FPGA系列,采用TSMC40nm工艺制造.
最大的一款具有820K逻辑宏单元(LE)、23.
1Mb嵌入式存储器和1288个18*18嵌入式硬件乘法器.
具有2个速率等级优势,以及先进的逻辑和布线体系结构.
具有8.
5Gbps的48个高速收发器,或者达到24个为100G应用优化的11.
3Gbps收发器,以及1067Mbps(533MHz)DDR3存储器接口.
在Stratix-6中含有PCIExpress硬核IP:Gen1(2.
5Gbps)和Gen2(5.
0Gbps),4个x8模块,实现了全端点或者根端口功能.
StratixIVGX系列FPGA在PCIExpressGen1和Gen2(x1、x4和x8)上完全符合PCI-SIG要求.
Stratix-6具有优异的信号完整性,速度达到6.
375Gbps,支持即插即用信号完整性.
适合无线通信、固网、军事、广播等其他最终市场中的高端数字应用.
另外,Stratix-6的子系列StratixIVGT集中了11.
3Gbps收发器.
Stratix-4FPGA结合HardCopyIV结构化ASIC,同时具备了FPGA的优势和ASIC的优势.
使用Stratix做原型开发,HardCopy无缝设计迁移批量制造,HardCopyIVASIC可以提供风险低、总成本低、产品面市快、收益快的解决方案.
另外,Stratix-6支持Nios嵌入式处理器软核,可以实现复杂的多CPU嵌入式解决方案.
2.
Cyclone2系列FPGACyclone2器件的制造基于300mm晶圆,采用TSMC90nm、低K值电介质工艺.
Cyclone2FPGA系列是低成本系列FPGA,其功能包括:最大一款具有68416个逻辑单元、1.
1Mb可用于嵌入式处理器的通用存储单元、150个18*18位的可用于嵌入式处理器的低成本数字信号处理模块.
2.
6PLD产品概述49EDA技术实用教程(第五版)专用外部存储器接口电路用以连接DDR2、DDR和SDRSDRAM以及QDRIISRAM存储器件.
最多4个嵌入式PLL,用于片内和片外系统时钟管理.
支持单端I/O标准于64位、66MHzPCI和64位、100MHzPCI-X(模式1)协议.
具有差分I/O信号,支持RSDS、mini-LVDS、LVPECL和LVDS,数据速率接收端最高达805Mbps,发送端最高622Mbps.
对安全敏感应用进行自动CRC检测.
具有支持完全定制NiosII嵌入式处理器.
采用EPCS系列串行配置器件的低成本配置解决方案.
3.
Cyclone3系列FPGACyclone3系列FPGA在前面章节已经提到它的内部结构.
该系列具有最多200K逻辑单元、8Mb存储器,而静态功耗不到1/4W.
采用台积电(TSMC)的低功耗(LP)工艺技术进行制造,可以应用于通信设备、消费类产品、汽车、显示、工业、视频和图像处理、无线、软件无线电设备等领域.
此系列的许多特性与Cyclone2接近.
Cyclone3的子系列Cyclone3LS系列利用低功耗、高性能FPGA平台,在硬件、软件和知识产权(IP)层面上实现了一系列安全特性.
可以保护设计者的IP不被篡改、逆向剖析和克隆.
而且,这些器件还能够通过设计分离特性,在一个芯片中实现多种功能,从而减小了实际应用的体积、重量和功耗.
另外,Cyclone3也支持NiosII嵌入式处理器软核,可以实现复杂的多CPU嵌入式解决方案.
4.
Cyclone4系列FPGACyclone4系列FPGA是Altera的低成本FPGA系列,该系列实现了低功耗、高性能和低成本的综合.
最大的一款提供150000个逻辑单元(LE).
Cyclone4系列采用经过优化的60nm低功耗工艺,拓展了前一代Cyclone3FPGA的低功耗优势,最新一代器件降低了内核电压,与前一代产品相比,总功耗降低了25%.
5.
MAX系列CPLDMAX系列包括MAX7000AE、MAX7000S、MAX3000A等器件系列.
这些器件的基本结构单元是乘积项,在工艺上采用EEPROM和EPROM.
器件的编程数据可以永久保存,可加密.
MAX系列的集成度在数百门到2万门之间.
所有MAX系列的器件都具有ISP在系统编程的功能,支持JTAG边界扫描测试.
6.
MAXII系列器件这是一款上电即用、非易失性的PLD器件系列,用于通用的低密度逻辑应用环境.
除了给予传统CPLD设计最低的成本,MAXII器件还将成本和功耗优势引入了高密度领域.
其特点是使用LUT结构,内含Flash,可以实现自动配置.
和3.
3VMAX器件相比,MAXII50第2章FPGA与CPLD的结构原理EDA技术实用教程(第五版)只有十分之一的功耗,1.
8V内核电压以减小功耗,可靠性高.
支持内部时钟频率达300MHz,内置用户非易失性Flash存储器块.
通过取代分立式非易失性存储器件以减少芯片数量.
MAXII器件在工作状态时能够下载第二个设计.
可降低远程现场升级的成本.
有灵活的多电压MultiVolt内核.
片内电压调整器支持3.
3V、2.
5V或1.
8V电源输入.
可减少电源电压种类,简化单板设计.
可以访问JTAG状态机,在逻辑中例化用户功能.
可提高单板上不兼容JTAG协议的Flash器件的配置效率.
7.
Altera宏功能块及IP核随着百万门级FPGA的推出,单片系统成为可能.
Altera提出的概念为SOPC,即可编程芯片系统,可将一个完整的系统集成在一个可编程逻辑器件内.
为了支持SOPC的实现,方便用户的开发与应用,Altera还提供了众多性能优良的宏模块、IP核以及系统集成等完整的解决方案.
这些宏功能模块、IP核都经过了严格的测试,使用这些模块将大大减少设计的风险,缩短开发周期,并且可使用户将更多的精力和时间放在改善和提高设计系统的性能上,而不是重复开发已有的模块.
Altera通过以下两种方式开发IP模块:AMPP(AlteraMegafunctionPartnersProgram).
AMPP是Altera宏功能模块和IP核开发伙伴组织,通过该组织,提供基于Altera器件的优化宏功能模块和IP核.
MegaCore.
又称为兆功能模块或宏功能模块,是Altera自行开发完成的.
兆功能模块拥有高度的灵活性和一些固定功能的器件达不到的性能.
Altera能够提供以下宏功能模块:(1)数字信号处理类.
即DSP基本运算模块,包括快速加法器、快速乘法器、FIR滤波器和FFT等,这些参数化的模块均针对AlteraFPGA的结构做了充分的优化.
(2)图像处理类.
Altera为数字视频处理所提供的包括压缩和过滤等应用模块,均针对Altera器件内置存储器的结构进行了优化,包括离散余弦变换和JPEG压缩等.
(3)通信类.
包括信道编解码、Viterbi编解码和Turbo编解码等模块,还能够提供软件无线电中的应用模块,如快速傅里叶变换和数字调制解调器等.
在网络通信方面也提供了诸多选择,从交换机到路由器、从桥接器到终端适配器,均提供了一些应用模块.
(4)接口类.
包括PCI、USB、CAN等总线接口,SDRAM控制器、IEEE1394等标准接口.
其中PCI总线包括64位、66MHz的PCI总线和32位、33MHz的PCI总线等几种方案.
(5)处理器及外围功能模块.
包括嵌入式微处理器、CPU核、NiosII核、UART和中断控制器等.
此外还有编码器、加法器、锁存器、寄存器和各类FIFO等IP.
2.
6.
2Lattice公司的PLD器件Lattice是最早推出PLD的公司.
Lattice公司的CPLD产品主要有ispLSI、ispMACH等系列.
20世纪90年代以来,Lattice发明了ISP(In-SystemProgrammability)下载方式,2.
6PLD产品概述51EDA技术实用教程(第五版)并将电可擦写存储器技术与ISP相结合,使CPLD的应用领域有了巨大的扩展.
ispLSI系列器件是Lattice公司于20世纪90年代以来推出的大规模可编程逻辑器件,集成度为1000~60000门.
MachXO系列非易失性无限重构可编程逻辑器件是为传统上用CPLD或低密度的FPGA实现的应用而设计的.
ispMACH4000系列CPLD器件有3.
3V、2.
5V和1.
8V三种供电电压,分别属于ispMACH4000V、ispMACH4000B和ispMACH4000C器件系列.
LatticeSC/M(系统芯片/MACO)FPGA系列是Lattice半导体的高性能FPGA系列,集成了一个高性能的FPGA结构,其中包括:3.
8GbpsSERDES和PCS,2Gbps并行I/O,低功耗的1VVcc功能选择,大型的嵌入式RAM,以及嵌入式ASIC块.
ECP系列器件是Lattice的FPGA系列,使用0.
13μm工艺制造,提供低成本的FPGA解决方案.
在ECP系列器件中还嵌入了DSP模块.
2.
6.
3Xilinx公司的PLD器件Xilinx在1985年首次推出了FPGA,随后不断推出新的集成度更高、速度更快、价格更低、功耗更小的FPGA器件系列.
Xilinx以CoolRunner、XC9500XL系列为代表的CPLD,以及以Spartan、Virtex系列为代表的FPGA器件,如Spartan-3A、Spartan-6、Virtex-5、Virtex-6等系列的性能不断提高.
Virtex-6系列是Xilinx的高性能FPGA系列,采用40nm工艺制造,分为四个面向特定应用领域而优化的FPGA平台架构,它们分别是:Virtex-6LXTFPGA,面向具有低功耗串行连接功能的高性能逻辑和DSP开发;Virtex-6SXTFPGA,面向具有低功耗串行连接功能的超高性能DSP开发;Virtex-6HXTFPGA,该系列针对需要带宽最高的串行连接功能的通信、交换和成像系统进行了优化设计;Virtex-6CXTFPGA,面向那些需要3.
75Gbps串行连接功能和相应的逻辑性能的应用.
Spartan-6FPGA为Xilinx的低成本、低功耗FPGA.
第六代Spartan系列基于低功耗45nm、9金属铜层、双栅极氧化层工艺技术,以及高级功耗管理技术.
此系列含最多150000个逻辑单元、集成式PCIExpress模块、高级存储器支持、250MHzDSPSlice和3.
125Gbps低功耗收发器.
XC9500系列被广泛地应用于通信、网络和计算机等产品中.
该系列器件采用快闪存储技术(FastFlash),比EECMOS工艺的速度更快,功耗更低.
目前Xilinx公司XC9500系列CPLD的tPD可达到4ns,宏单元数达到288个,系统时钟可达到200MHz,支持PCI总线规范和JTAG边界扫描测试功能,具有在系统可编程能力.
该系列有XC9500、XC9500XV和XC9500XL三种类型,内核电压分别为5V、2.
5V和3.
3V.
Spartan-3A系列FPGA是Xilinx的低成本FPGA系列,具有50000~3400000个系统门,有108~502个I/O,可以提供集成式DSPMAC在内的大量选项,有双功耗管理模式、DeviceDNA安全性、多级存储器架构.
52第2章FPGA与CPLD的结构原理EDA技术实用教程(第五版)2.
6.
4Actel公司的PLD器件Actel公司的FPGA部分采用了反熔丝结构,可以应用于航空航天、军事领域.
另外一些FPGA采用了Flash工艺制造.
常用Actel的可编程器件系列有:低功耗Flash型FPGA:IGLOO系列、ProASIC3系列.
混合信号FPGA:Fusion系列.
耐辐射器件:RTAX-S系列、RTSX-SU系列.
反熔丝器件:Axcelerator、SX-A、eX、MX系列.
Actel的部分Flash型FPGA支持Cortex-M1、ARM7\LEON3等软核处理器.
2.
6.
5Altera的FPGA配置方式Altera的FPGA器件有两类配置下载方式:主动配置方式和被动配置方式.
主动配置方式由FPGA器件引导配置操作过程,它控制着外部存储器和初始化过程,而被动配置方式则由外部计算机或控制器控制配置过程.
FPGA在正常工作时,它的配置数据(下载进去的逻辑信息)存储在SRAM中.
由于SRAM的易失性,每次加电时,配置数据都必须重新下载.
在普通实验系统或评估系统中,通常用计算机或控制器进行调试,因此可以使用被动配置方式.
而实用系统中,多数情况下必须由FPGA主动引导配置操作过程,这时FPGA将主动从外围专用存储芯片中获得配置数据,而此芯片中的FPGA配置信息是用普通编程器将设计所得的POF格式的文件烧录进去的.
2.
7CPLD/FPGA的编程与配置在大规模可编程逻辑器件出现以前,人们在设计数字系统时,把器件焊接在电路板上是设计的最后一个步骤.
当设计存在问题并得到解决后,设计者往往不得不重新设计印制电路板.
设计周期被无谓地延长了,设计效率也很低.
CPLD、FPGA的出现改变了这一切.
现在,人们在逻辑设计时可以在未设计具体电路时,就把CPLD、FPGA焊接在印制电路板上,然后在设计调试时可以一次又一次随心所欲地改变整个电路的硬件逻辑关系,而不必改变电路板的结构.
这一切都有赖于CPLD、FPGA的在系统下载或重新配置功能.
目前常见的大规模可编程逻辑器件的编程工艺有三种:(1)基于电可擦除存储单元的EEPROM或Flash技术.
CPLD一般使用此技术进行编程.
CPLD被编程后改变了电可擦除存储单元中的信息,掉电后可保存.
某些FPGA也采用Flash工艺,如Actel的ProASICplus系列FPGA、Lattice的LatticeXP系列FPGA.
(2)基于SRAM查找表的编程单元.
对该类器件,编程信息是保存在SRAM中的,SRAM在掉电后编程信息立即丢失,在下次上电后,还需要重新载入编程信息.
因此该类器件的编程一般称为配置.
大部分FPGA采用该种编程工艺.
(3)基于一次性可编程反熔丝编程单元.
Actel的部分FPGA采用此种结构.
2.
7CPLD/FPGA的编程与配置53EDA技术实用教程(第五版)电可擦除编程工艺的优点是编程后信息不会因掉电而丢失,但编程次数有限,编程的速度不快.
对于SRAM型FPGA来说,配置次数为无限,在加电时可随时更改逻辑,但掉电后芯片中的信息即丢失,下载信息的保密性也不如前者.
CPLD编程和FPGA配置可以使用专用的编程设备,也可以使用下载电缆.
如Altera的USB-Blaster.
下载电缆编程口与Altera器件的接口一般是10芯的接口,连接信号如表2-2所示.
表2-2各引脚信号名称引脚12345678910JTAG模式TCKGNDTDOVCCTMS———TDIGND2.
7.
1CPLD在系统编程在系统可编程(ISP)就是当系统上电并正常工作时,计算机通过系统中的CPLD拥有的ISP接口直接对其进行编程,器件在编程后立即进入正常工作状态.
这种CPLD编程方式的出现,改变了传统的使用专用编程器编程方法的诸多不便.
图2-41是AlteraCPLD器件的ISP编程连接图,其中USB-Blaster的另一端与计算机USB口相连.
图2-41CPLD编程下载连接图必须指出,Altera的MAX7000、MAX3000A系列CPLD是采用IEEE1149.
1JTAG接口方式对器件进行在系统编程的,在图2-41中与USB-Blaster的10芯接口相连的是TCK、TDO、TMS和TDI这四条JTAG信号线.
JTAG接口本来是用作边界扫描测试(BST)的,把它用作编程接口则可以省去专用的编程接口,减少系统的引出线.
由于JTAG是工业标准的IEEE1149.
1边界扫描测试的访问接口,用作编程功能有利于各可编程逻辑器件编程接口的统一.
据此,便产生了IEEE编程标准IEEE1532,以便对JTAG编程方式进行标准化.
2.
7.
2FPGA配置方式对于基于SRAMLUT结构的FPGA器件,由于是易失性器件,没有ISP的概念,代之54第2章FPGA与CPLD的结构原理EDA技术实用教程(第五版)以ICR(In-CircuitReconfigurability),即在线可重配置方式.
FPGA特殊的结构使之需要在上电后必须进行一次配置.
电路可重配置是指允许在器件已经配置好的情况下进行重新配置,以改变电路逻辑结构和功能.
在利用FPGA进行设计时可以利用FPGA的ICR特性,通过连接PC机的下载电缆快速地下载设计文件至FPGA进行硬件验证.
Altera的SRAMLUT结构的器件中,FPGA可使用多种配置模式,这些模式通过FPGA上的模式选择引脚MSEL(在Cyclone3上有四个MSEL信号)上设定的电平来决定:(1)配置器件模式,如用EPC器件进行配置.
(2)PS(PassiveSerial,被动串行)模式:MSEL都为0.
(3)PPS(PassiveParallelSynchronous,被动并行同步)模式.
(4)PPA(PassiveParallelAsynchronous,被动并行异步)模式.
(5)PSA(PassiveSerialAsynchronous,被动串行异步)模式.
(6)JTAG模式:MSEL都为0.
(7)AS(ActiveSerial,主动串行)模式.
通常,在电路调试的时候,利用PC的USB接口通过USB-Blaster进行FPGA配置(图2-42).
但要注意MSEL上电平的选择,要都设置为0,才能用JTAG进行配置.
图2-42JTAG在线配置FPGA的电路原理图2.
7.
3FPGA专用配置器件通过PC机对FPGA进行ICR在系统重配置,虽然在调试时非常方便,但当数字系统设计完毕需要正式投入使用时,在应用现场(比如车间)不可能在FPGA每次加电后,用一台PC手动地去进行配置.
上电后,自动加载配置对于FPGA应用来说是必需的.
FPGA上电自动配置,有许多解决方法,比如用EPROM配置、用专用配置器件配置、用单片机控制配置、用CPLD控制配置或用FlashROM配置等.
这里首先介绍使用专用配置芯片进2.
7CPLD/FPGA的编程与配置55EDA技术实用教程(第五版)行配置.
专用配置器件通常是串行的PROM器件.
大容量的PROM器件也提供并行接口,按可编程次数分为两类:一类是一次可编程(OTP)的;另一类是多次可编程的.
EPC1441和EPC1是OTP型串行PROM.
对于配置器件,Altera的FPGA允许多个配置器件配置单个FPGA器件.
也允许多个配置器件配置多个FPGA器件,甚至同时配置不同系列的FPGA.
在实际应用中,常常希望能随时更新其中的内容,但又不希望再把配置器件从电路板上取下来编程.
Altera的可重复编程配置器件,如EPCS4、EPC2就提供了在系统编程的能力.
EPCS系列配置器件本身的编程通过AS直接或JTAG口间接完成;EPC2的编程由JTAG口完成;而FPGA的配置既可由USB-Blaster来配置,也可用EPC2/EPCS来配置,这时USB-Blaster接口的任务是对EPC2进行ISP方式下载.
对于Cyclone/2/3/4系列FPGA,通常使用EPCS系列配置器件进行配置.
EPCS系列配置器件需要使用AS模式或JTAG间接编程模式来编程.
图2-43是EPCS系列器件与Cyclone3FPGA构成的配置电路原理图.
图2-43EPCS器件配置FPGA的电路原理图2.
7.
4使用单片机配置FPGA在FPGA实际应用中,设计的保密和设计的可升级(甚至实时升级)是十分重要的.
用单片机或CPLD器件来配置FPGA可以较好地解决上述两个问题.
PS模式可利用PC机通过USB-Blaster对Altera器件应用ICR,这在FPGA的设计调试时是经常使用的.
图2-44是FPGA的PS模式配置时序图,图中标出了FPGA器件的三种工作状态:配置状态、用户模式(正常工作状态)和初始化状态.
配置状态是指FPGA正在配置的状态,用户I/O全部处于高阻态;用户模式是指FPGA器件已得到配置,并处于正常工作状态,用户I/O在正常工作;初始化状态指配置已经完成,但FPGA器件内部56第2章FPGA与CPLD的结构原理EDA技术实用教程(第五版)图2-44PS模式的FPGA配置时序资源如寄存器还未复位完成,逻辑电路还未进入正常状态.
对此,Altera的基于SRAMLUT的FPGA提供了多种配置模式.
除以上多次提及的PS模式可以用单片机配置外,PPS被动并行同步模式、PSA被动串行异步模式、PPA被动并行异步模式和JTAG模式都适用于单片机配置.
用单片机配置FPGA器件,关键在于产生合适的时序.
图2-45就是一个典型的应用示例.
图中的单片机采用常见的89S52,配置模式选为PS模式.
由于89S52的程序存储器是内建于芯片的FlashROM,还有很大的扩展余地;也可把电路设计成无线接收模块,从而实现系统的无线升级.
图2-45用89S52进行配置利用单片机或CPLD对FPGA进行配置的主要目的是可以将FPGA系统设计成可随时实现系统硬件重构更新的产品.
如可对多家厂商的单片机进行仿真的仿真器设计、多功能虚拟仪器设计、多任务通信设备设计或EDA实验系统设计等.
方法是在图2-45中的ROM内按不同地址放置多个针对不同功能要求设计好的FPGA的配置文件,然后由单片机接受不同的命令,以选择不同的地址控制,从而使所需要的配置文件下载于FPGA中.
这就是"多任务电路结构重配置"技术,这种设计方式可以极大地提高电路系统的硬件功能灵活性.
因为从表面上看,同一电路系统没有发生任何外在结构上的改变,但通过来自外部不同的命令信号,系统内部将对应的配置信息加载于系统中的FPGA,电路系统的结构和功能将在瞬间发生巨大的改变,从而使单一电路系统具备许多不同电路的功能.
习题57EDA技术实用教程(第五版)2.
7.
5使用CPLD配置FPGA使用单片机进行配置的缺点有三个:①速度慢,不适用于大规模FPGA和高可靠的应用;②容量小,单片机引脚少,不适合接大的ROM以存储较大的配置文件;③体积大,成本和功耗都不利于相关的设计.
因此,如果将CPLD直接取代单片机将是一个好的选择,原来单片机中的配置控制程序可以用状态机来取代.
可以将图2-45中的单片机用CPLD来替代.
显然,这样的电路能很好地解决单片机配置存在的问题.
习题—2-1OLMC有何功能说明GAL是怎样实现可编程组合电路与时序电路的.
2-2什么是基于乘积项的可编程逻辑结构什么是基于查找表的可编程逻辑结构2-3FPGA系列器件中的EAB/M9K有何作用2-4与传统的测试技术相比,边界扫描技术有何优点2-5解释编程与配置这两个概念.
2-6请参阅相关资料,并回答问题:按本章给出的归类方式,将基于乘积项的可编程逻辑结构的PLD器件归类为CPLD;将基于查找表的可编程逻辑结构的PLD器件归类为FPGA,那么,APEX系列属于什么类型PLD器件MAXII系列又属于什么类型的PLD器件为什么章首先分别给出数则读者熟知的简单而典型的组合电路实例,作为探讨其性能特点和设计方法的情景(Episode).
然后针对此情景的具体对象,给出对应的Verilog表述,并对表述中出现的语句含义作详细的解释,力图使读者能从整体上和实用角度把握Verilog与电路情景的对应关系,以及程序的基本结构,表述特点和设计方法,达到快速入门的目的,以便在下一章中即能将学到的知识在QuartusII和FPGA平台上加以验证和自主发挥,巩固学习效果、提高学习兴趣、强化理论与工程实际的结合.
这是一种有别于计算机语言传统学习流程的"倒叙"方法.
即不是首先花大量时间完整地学习Verilog后再去讨论如何用此语言来设计电路,而是通过数则简明的电路引出对应的Verilog表述;这时的HDL表述和读者熟悉的对应的电路就有了十分具体和直观的对应关系,通过这种对应比较的关系,就能迅速掌握Verilog的实用编程和设计技术.
需要说明的是,对于Verilog语言语句,按照习惯的说法,其程序设计分三种描述风格,即行为描述、数据流描述和结构描述风格,它们分别对应三类Verilog语句,即行为描述语句、数据流描述语句和结构描述语句.
其中,行为描述语句主要指由always和initial过程语句结构引导的(诸如if语句、case语句等)一系列具有顺序执行特点的语句;数据流描述语句则主要指由assign引导的所谓连续赋值语句;至于结构描述语句,主要是指例化语句等.
本书并不准备沿袭Verilog语言描述风格分类及对应的语句分类的习惯说法,因为实践表明这种说法和分类并不科学,这些分类和语句类型的命名在实际工程开发中不但毫无实际意义,甚至还会导致概念上的误导和错判.
例如所谓数据流描述,始终没能说明究竟什么样的语句能引起数据的"流动",对于这种流动的认识对编程又有什么意义再如,行为描述风格到底对应什么语句类型也一直存在争议.
有人认为顺序运行的语句就是行为语句,然而,并行语句的运行也有先后启动顺序运行的现象(如含互为依存变量的不同并行语句间先后执行的现象),况且,硬件描述语言语句的并行和顺序执行特征一直是一个矛盾统一体,例如过程块中阻塞式赋值语句和非阻塞式语句等.
又如,所谓结构风格,其实就是模块间通过连线搭建而已,远谈不上什么"风格(Style)",似有故弄玄虚之嫌,况且其中被搭建的模块又有多少不是"行为风格"实现的电路呢本书将从实用出发,面向工程实际,抛弃没有实际意义且又容易误导初学者的种种似是而非的语句分类,按照Verilog语句本来的面貌特性来阐述其电路设计.
本第3章组合电路的Verilog设计3.
1半加器电路的Verilog描述59EDA技术实用教程(第五版)3.
1半加器电路的Verilog描述本节将通过介绍半加器电路模块的Verilog描述和设计,给出相关的语法规则说明,由此引导读者迈入学习Verilog编程设计的历程.
在数字电路中,半加器具备了组合逻辑电路的简单性和典型性的特征.
这里首先以此电路模块来考察其对应的Verilog表述及其设计,从而引出相关的Verilog基本结构、语句表述、数据特点和语法规则的说明和讨论,使读者能够借此快速了解使用Verilog进行组合电路描述的关键语法内容、规则和基本设计方法.
半加器(假设此模块的器件名是h_adder)的电路原理图如图3-1所示,半加器对应的逻辑真值表如图3-2所示.
此电路模块由两个基本逻辑门元件构成,即与门和异或门.
图中的A和B是加数和被加数的数据输入端口;SO是和值的数据输出端口;CO则是进位数据的输出端口.
根据图3-1的电路结构,很容易获得半加器的逻辑表述是SOAB=;CO=AB图3-3是此半加器电路的时序波形,它反映了此模块的逻辑功能.
可以认为,半加器模块与图3-3的功能表述具有唯一对应关系,而图3-1的电路结构表述却没有唯一性.
即对于既定的电路功能描述,对应的电路结构并不是唯一的,它可以对应不同的电路构建方式,这取决于Verilog综合器的基本元件库的来源、优化方向和约束的选择,以及目标器件,如FPGA的结构特点等.
其实在基于EDA的数字系统设计中更注重最终完成的电路的功能和性能(包括系统速度、资源利用率等)而非电路构建的形式.
图3-1半加器的电路结构图3-2半加器的真值表图3-3半加器的仿真功能波形图根据以上的叙述和讨论,可以给出如例3-1所示的半加器电路模块的Verilog完整描述之一.
此描述展示了可综合的Verilog程序的模块结构.
对于此程序,可使用Verilog综合器直接综合出实现此模块功能的逻辑电路.
【例3-1】moduleh_adder(A,B,SO,CO);inputA,B;outputSO,CO;assignSO=A^B;//将变量A和B执行异或逻辑后将结果赋给输出信号SOassignCO=A&B;//将变量A和B执行与逻辑后将结果赋给输出信号COendmodule由例3-1可见,此电路的Verilog描述由如下三个部分组成:(1)以Verilog语言的关键词module_endmodule引导的完整的电路模块或称"模块"的描述.
模块对应着硬件电路上的逻辑实体(也称实例Instance).
60第3章组合电路的Verilog设计EDA技术实用教程(第五版)关键词module与endmodule就像一个括号,任何一个功能模块的描述都必须放在此"括号"中;module旁的标识符h_adder是设计者为其设计的电路模块所取的名称,也可称为"模块名";模块名h_adder右边的括号及其内容称为"端口表",括号中的内容就是此模块的所有端口信号名.
(2)以input和output等关键词引导的对模块的外部端口描述的语句.
这些语句描述电路器件的端口状况及信号的性质,如信号流动的方向和信号的数据类型等.
(3)以关键词assign引导的赋值语句.
用于描述模块的逻辑功能和电路结构.
一般而言,这三部分内容是Verilog完整程序结构的基本组成.
以下将对例3-1中出现的相关语句结构和语法含义作出说明.
这些内容包含了Verilog对组合电路描述和设计的最基本与核心的语法知识.
1.
模块语句及其表达方式上面谈到一个电路模块是以Verilog的关键词module_endmodule引导的.
Verilog完整的、可综合的程序结构能够全面地表达一个电路模块,或一片专用集成电路ASIC的端口结构和电路功能,即无论是一片74LS138还是一个CPU,都必须包含在模块描述语句module_endmodule中.
模块语句的一般格式如下:module模块名(模块端口名表);模块端口和模块功能描述endmodule此表达格式说明,任一可综合的最基本的模块都必须以关键词module开头;在module右侧(空一格或多格)是模块名.
模块名属于标识符,具体取名由设计者自定.
由于模块名实际上表达的应该是当前设计电路的器件名,所以最好根据相应电路的功能来命名.
如半加器,模块名可用h_adder;4位二进制计数器,可用counter4b命名;8位二进制加法器,则可取名为ADDER8B等.
但应注意,不应用数字或中文定义实体名,也不应用与EDA软件工具库中已定义好的关键词或元件名作为模块名,如or2、latch等,且不能用数字起头的模块名,如74LS160.
模块名右侧的括号称为模块端口列表,其中须列出此模块的所有输入、输出或双向端口名;端口名间用逗号分开,右侧括号外加分号.
端口名也属标识符.
endmodule是模块结束语句,旁边不加任何标点符号.
对模块端口和功能的描述语句都必须放在模块语句module_endmodule之间.
2.
端口语句、端口信号名和端口模式端口或端口信号是模块与外部电路连接的通道,这如同一个芯片必须有外部引脚一样,必须具有输入输出或双向口等引脚,以便与外部电路交换信息.
通常,紧跟于module语句下面的是端口语句和端口信号名,它们将对module旁的端口列表中的所有端口名作更详细更具体的说明.
端口定义关键词有三种:input、output、inout.
端口定义语句的一般格式如下:3.
1半加器电路的Verilog描述61EDA技术实用教程(第五版)input端口名1,端口名2,.
.
.
;output端口名1,端口名2,.
.
.
;inout端口名1,端口名2,.
.
.
;input[msb:lsb]端口名1,端口名2,.
.
.
;端口关键词旁的端口名可以有多个,端口名间用逗号分开,最后加分号.
在例3-1的描述中,用input和output分别定义端口A、B为信号输入端口,SO、CO为信号输出端口,都属于单逻辑位或标量位.
对于"位",也有直接翻成"比特"的.
如果要描述一个多信号端口或总线端口,则必须使用以上最后一种端口描述方法.
此句是端口信号的逻辑矢量位表达方式,其中的msb和lsb分别是信号矢量的最高和最低位数.
例如4位信号矢量C、D可定义为output[3:0]C,D;表示定义了两个4位位宽的矢量或总线端口信号C[3:0]、D[3:0].
例如对于C[3:0],等同定义了四个单个位的输出信号,它们分别是C[3]、C[2]、C[1]、C[0].
Verilog的端口模式有如下三种,用于定义端口上数据的流动方向和方式.
(1)input:输入端口.
定义的通道为单向只读模式,即规定数据只能由此端口被读入模块实体中.
(2)output:输出端口.
定义的通道为单向输出模式,即规定数据只能通过此端口从模块实体向外流出,或者说可以将模块中的数据向此端口赋值.
(3)inout:双向端口.
定义的通道确定为输入输出双向端口,即从端口的内部看,可以对此端口进行赋值,或通过此端口读入外部的数据信息;而从端口的外部看,信号既可由此端口流出,也可向此端口输入信号,如RAM的数据口、单片机的I/O口等.
除了用于Verilog直接仿真(用TestBench程序进行仿真)的测试模块中不需要定义端口外,所有module模块中都必须定义端口.
3.
逻辑操作符例3-1中出现了两种逻辑操作符,逻辑与"&"和逻辑异或"^".
这是Verilog中常用的针对位的基本逻辑操作符号,后文中将对此给予详细说明.
4.
连续赋值语句例3-1采用的由assign引导的纯布尔代数的表达方式,习惯上称为数据流描述方式.
而这种描述方式通常使用此类连续赋值语句来描述输入输出间的逻辑关系.
连续赋值语句的基本格式如下:assign目标变量名=驱动表达式;其中assign是连续赋值命名的关键词.
由assign引导的赋值语句的执行方式是,当等号右侧的驱动表达式中的任一信号变量发生变化时,此表达式即被计算一遍,并将获得的数据立即赋给等号左侧的变量名所标示的目标变量.
62第3章组合电路的Verilog设计EDA技术实用教程(第五版)在这里,驱动的含义就是强调这一表达式的本质是对于目标变量的激励源或赋值源,它为左侧的目标变量提供运算操作后的结果.
Verilog语言中描述逻辑功能和电路结构的语句实际上可以分为顺序执行特征的语句和并行执行特征的语句两类.
前者的执行方式类似于普通软件语言的程序执行方式,是按照语句的前后排列方式逐条顺序执行的;而对于并行语句,无论有多少行语句,都是同时执行的,与语句的前后次序无关.
以关键词assign引导的赋值语句实际上属于并行赋值语句,即在模块module_endmodule中所有的由assign引导的语句都是并行运行的.
显然,例3-1中的两条assign语句是同时执行的,当然这要假设这两条语句中的变量同时发生变化才有可能;即这两条语句右边的逻辑表达式同时被运算,运算结果同时分别赋值于左边的输出信号SO和CO.
如果考虑到用VerilogTesteBench程序来进行仿真,那么此语句更一般的表述如下:assign[延时]目标变量名=驱动表达式;即多了一个延时表述.
方括号只是表示,括号中的内容是可以选择使用的.
如果选择加入"延时"内容,则表示在任何时刻,当此语句等式右侧的"驱动表达式"中任一变量发生变化时即计算出此表达式的值,而此值经过指定的延时时间后再被赋值给左侧的目标变量.
当然,这个延时值在综合器中是被忽略的,不参与综合.
如以下语句:`timescale10ns/100psassign#6R1=A&B;第二句表示当右侧表达式中的A或B中任一变量发生变化后,即刻算出变化后的值,但需要等待6个时间单元之后才将运算结果赋值给左侧的目标变量R1.
这个延时称为惯性延时.
而时间单元的大小则由上一语句的关键词"`timescale"在编译时指定.
此句表示,仿真的基本时间单元是10ns,仿真时间的精度是100ps.
在这个时间划分单元下,语句"assign#6R1=A&B"在执行后,一旦计算出A&B的值,还要再等待6个时间单元,也就是60ns后才将此值赋给R1.
5.
关键字关键字(KeyWord,或称关键词)是指Verilog语言预先定义好的有特殊含义的英文词语.
Verilog程序设计者不允许用这些关键字命名自用的对象,或用来作标识符.
如例3-1出现的input、output、module、assign等都是关键词.
对于关键词,与VHDL很不一样,Verilog规定所有关键词必须小写,如INPUT、MODULE都不是关键词.
由于现在的多数Verilog代码编辑器,包括QuartusII的编辑器,都是关键字敏感型的(即会以特定颜色显示),所以在专用编辑器上编辑程序通常不会误用关键字,但却要注意,也不要误将EDA软件工具库中已定义好的关键词或元件名当作普通标识符来用.
6.
标识符标识符(Identifier)是设计者在Verilog程序中自定义的,用于标识不同名称的词语.
例如用作模块名、信号名、端口名等,如例3-1中出现过的h_adder、A、SO等.
此外,标3.
2多路选择器的Verilog描述63EDA技术实用教程(第五版)识符是分大小写的,即对大小写敏感,就是说在Verilog程序中相同名称不同大小写的文字代表不同的标识符.
7.
注释符号例3-1中使用了注释符号"//",可用于隔离程序,添加程序说明文字.
因此注释符号"//"后的文字仅仅是为了使对应的数据或语句更容易被看懂,它们本身没有功能含义,也不参加逻辑综合.
Verilog中有两类注释符号.
符号"//"后的注释文字只能放在同一行;而另一注释符号则像一个括号,只要文字在此"括号"中就可以换行,因此可以连续放更多行的注释文字.
8.
规范的程序书写格式尽管Verilog程序书写格式要求十分宽松,可以在一行写多条语句,或分行书写,但良好规范的Verilog源代码书写习惯是高效的电路设计者所必备的.
规范的书写格式能使自己或他人更容易阅读和检查错误.
如例3-1的书写格式:最顶层的module_endmodule模块描述语句放在最左侧,比它低一层次的描述语句则向右靠一个Tab键距离,即四个小写字母的间隔.
同一语句的关键词要对齐,如module_endmodule、table_endtable、begin_end等.
需要说明的是,为在书中纳入更多的内容而节省篇幅,此后的多数程序都未能严格按照此规范来书写.
9.
文件取名和存盘当编辑好Verilog程序代码后,需要保存文件时,必须赋给一个正确的文件名.
对于多数Verilog综合器,文件名可以由设计者任意给定,文件后缀扩展名必须是".
v",如h_adder.
v等.
但考虑到某些EDA软件的限制、Verilog程序的特点,以及调用的方便性,建议程序的文件名与该程序的模块名一致.
对于QuartusII,尤其必须满足这一规定!
还要注意文件取名的大小写也是敏感的,即存盘的文件名与此文件程序的模块名的大小写必须一致.
如例3-1的存盘文件名必须是h_adder.
v,而不能是H_ADDER.
v.
文件名也不应该用中文或数字来命名.
还应注意,进入工程设计的Verilog程序必须存入某文件夹中,不要存在根目录内或桌面上.
3.
2多路选择器的Verilog描述本节通过使用Verilog不同的表述方式来描述同一逻辑模块,即4选1多路选择器,从而引出许多新的且十分重要的Verilog语法知识和编程要点,使读者加速掌握Verilog对于组合电路描述的核心语法规则和基本设计方法.
3.
2.
14选1多路选择器及case语句表述方式4选1多路选择器的电路模型或元件图如图3-4所示,图中,a、b、c、d是四个输入端口;s1和s0为通道选择控制信号端,y为输出端;当s1和s0取值分别为00、01、10和11时,输出端y将分别输出来自输入口a、b、c、d的数据.
图3-5是此模块(设此模64第3章组合电路的Verilog设计EDA技术实用教程(第五版)块名是MUX41a)电路的时序波形.
图中显示,当a、b、c、d四个输入口分别输入不同频率信号时,针对选通控制端s1、s0的不同电平选择,则输出端y有对应的信号输出.
例如当s1和s0都为低电平时,y口输出了来自a端的最高频率的时钟信号.
图中的S是选通信号s1和s0的矢量或总线表达信号,它可以在仿真激励文件中设置.
图3-44选1多路选择器图3-54选1多路选择器MUX41a的时序波形根据此电路的功能要求,可得到相应的逻辑描述.
例3-2给出了此电路模块的Verilog完整描述,对于此描述可用Verilog综合器直接综合出实现此模块功能的逻辑电路.
例3-2给出了清晰的Verilog程序结构的说明,与例3-1相比,除了包含以关键词module_endmodule引导的电路模块定义语句和以input和output引导的对模块的外部端口的描述语句外,例3-2中还包含以下五方面新的语句结构和表述方式:(1)以reg关键词定义的模块内相关信号的特性和数据类型.
(2)以always关键词引导的对模块逻辑功能描述的顺序语句.
(3)以case_endcase引导的多条件分支赋值语句.
(4)以begin_end引导的顺序块语句.
(5)Verilog数据并位及数据表达方式.
【例3-2】moduleMUX41a(a,b,c,d,s1,s0,y);inputa,b,c,d;inputs1,s0;outputy;regy;always@(aorborcordors1ors0)begin:MUX41//块语句开始case({s1,s0})2'b00:y'即一撇左侧的十进制数指示此数的二进制位数,一撇右侧的字母指示出其右侧数据的进制.
B表示二进制,O表示八进制,H表示十六进制,D表示十进制,且不分大小写.
例如,2'b10表示两位二进制数10;4'B1011表示四位二进制数1011;4'hA表示四位二进制数1010;3'D7表示三位二进制数111,等等.
在Verilog中只有标明了数制的数据才能确定其二进制位数.
如式S[3:0]=1的等号右侧的1应该等于二进制数0001,正式表达为4'B0001;式S[5:0]=7中的7等于6'b000111;而5'bz可正式表达为5'bzzzzz.
又若将某标识符(如R)定义为位矢,如reg[7:0]R;则赋值语句R<=4中的4的正式表达是8'b00000100.
Verilog-2001规范还可定义有符号二进制数,如8'b10111011和8'sb10111011是不一样的,前者是普通无符号数,后者是有符号数,其最高位1是符号.
sb是定义有符号二进制数的进制限定关键词.
显然,根据例3-2的描述,当always的敏感信号表中的任意一个输入信号发生改变时将执行下面的case语句,若这时case表达式中的s1=0,s0=0,即{s1,s0}=00,将执行此语句的第一条条件语句"2'b00:y<=a;",即执行赋值语句y<=a,于是将输入端口a的数据赋给输出端y,之后便跳出case语句,再次等待always的敏感信号表中的输入信号的下一次变化,即对过程的再次启动.
在这里,符号"<="是赋值符号,只能用于顺序语句中.
而例3-1中的赋值符号"="只能用在assign引导的并行语句中.
3.
2.
24选1多路选择器及assign语句表述方式对于以上的多路选择器可以有多种不同的描述方法,本节及随后几节将给出几则使用不同语句形式描述同一逻辑模块的示例:例3-3、例3-4和例3-5.
尽管它们有不同的描述方式和语句特点,但其功能和仿真波形都与图3-5相同.
但这些示例将再次从不同侧面向读者展示Verilog程序对组合电路的描述方法和相关语句的用法.
【例3-3】moduleMUX41a(a,b,c,d,s1,s0,y);inputa,b,c,d,s1,s0;outputy;wire[1:0]SEL;//定义2元素位矢量SEL为网线型变量wirewireAT,BT,CT,DT;//定义中间变量,以作连线或信号节点assignSEL={s1,s0};//对s1,s0进行并位操作,即SEL[1]=s1;SEL[0]=s0assignAT=(SEL==2'D0);assignBT=(SEL==2'D1);assignCT=(SEL==2'D2);assignDT=(SEL==2'D3);assigny=(a&AT)|(b&BT)|(c&CT)|(d&DT);//4个逻辑信号相或endmodule与例3-1类似,例3-3也采用了常被称为数据流的逻辑描述方式,其实就是直接用布70第3章组合电路的Verilog设计EDA技术实用教程(第五版)尔逻辑表式来描述模块的功能.
以下讨论例3-3中出现的新的语法现象.
1.
按位逻辑操作符与例3-1相同,例3-3也包含了利用逻辑操作符,即逻辑与"&"和逻辑或"|",来实现逻辑功能的语句.
在Verilog中最常用的针对位的基本逻辑操作或称逻辑算符的功能及用法如表3-1所示.
由表中的示例结果可知,逻辑操作是按位分别进行的.
如果两个操作数位矢具有不同长度,综合器将自动根据最长位的操作数的位数,把较短的数据按左端补0对齐的规则进行运算操作.
在赋值语句中,逻辑操作和以下将谈到的运算操作结果的位宽是由操作表达式左端的赋值目标信号的位宽来决定的.
通过表3-1及其给出的示例,读者可以更详细地了解逻辑操作符的功能细节.
表3-1逻辑操作符逻辑操作符功能A,B逻辑操作结果C,D逻辑操作结果C,E逻辑操作结果~逻辑取反~A=1'b1~C=4'b0011~E=6'b101001|逻辑或A|B=1'b1C|D=4'b1111C|E=6'b011110&逻辑与A&B=1'b0C&D=4'b1000C&E=6'b000100^逻辑异或A^B=1'b1C^D=4'b0111C^E=6'b011010~^或^~逻辑同或A~^B=1'b0C~^D=4'b1000C~^E=6'b100101设:A=1'b0;B=1'b1;C[3:0]=4'b1100;D[3:0]=4'b1011;E[5:0]=6'b0101102.
等式操作符例3-3中的表达式中使用了等式操作符"==".
等式操作符运算的结果是1位逻辑值,也等于1位二进制数,这在Verilog中是不分的,但在VHDL中则完全不同.
Verilog中有四种等式操作符,如表3-2所示.
当等式操作的结果为1时,则表明关系为真;结果为0时,则表示关系为假.
用双等于操作符"=="作比较,两个二进制数将被逐位比较;如果两个数的位数不等,则自动将较少位数的数的高位补0对齐再进行比较;这时当每一位都相等时,才输出结果1,否则为0;此外,如果其中有的位是未知值x或高阻值z,则都判定为假,输出0.
表3-2等式操作符等式操作符含义等式操作示例==等于(3==4)=0;(A==4'b1011)=1;(B==4'b1011)=0;!
=不等于(D!
=C)=0;(3!
=4)=1;===全等(D===C)=1;(E===4'b0x10)=0;!
==不全等(E!
==4'b0x10)=1;设:A=4'b1011;B=4'b0010;C=4'b0z10;D=4'b0z10;E=3'bx10与"=="不同,全等比较操作符"==="则将x或z都当成确定的值进行比较,当表述完全相同时输出1.
此外,在做全等比较时,对于两个比较数位数不等的情况,不会像3.
2多路选择器的Verilog描述71EDA技术实用教程(第五版)处理操作符"=="那样作高位补0操作,而会直接判断两数据不等.
3.
wire定义网线型变量例3-3中含有使用了wire的语句.
如果assign语句中需要有端口以外的信号或连接线性质的变量(由于端口都已默认为网线型变量),特别是考虑到assign语句中的输出信号变量(或者说是赋值目标变量,如例3-3中的AT、BT等)必须是wire网线型变量,则必须用网线型变量定义语句事先给出显式定义.
wire的具体定义格式如下:Wire变量名1,变量名2,.
.
.
;wire[msb:lsb]变量名1,变量名2,.
.
.
;其定义格式与reg相同.
上一条语句是针对1位变量的,下一条语句则是针对矢量型或总线型变量的.
wire是定义网线型变量的关键词.
如定义矢量位a[7:0]为网线型变量的表达式是"wire[7:0]a;".
用wire定义的网线型变量可以在任何类型的表达式或赋值语句(包括连续赋值和过程赋值语句)中作输入信号,也可在连续赋值语句或实体元件例化中用作输出信号.
由于wire和assign在表达信号及信号赋值性质上的一致性,因此还能直接用wire来表达assign语句.
如可以用一条语句"wireY=a1^a2;"来取代以下两条语句:wirea1,a2;assignY=a1^a2;3.
2.
34选1多路选择器及条件赋值语句表述方式例3-4是利用关键词wire来替代assign直接引导连续赋值语句的.
此示例用连续赋值语句中的条件操作符描述了一个4选1多路选择器.
图3-6是QuartusII对例3-4综合后生成的RTL电路图.
电路包含了三个2选1多路选择器,分别对应三条wire语句.
程序与电路显示了很直观的对应关系.
【例3-4】moduleMUX41a(A,B,C,D,S1,S0,Y);inputA,B,C,D,S1,S0;outputY;wireAT=S0D:C;wireBT=S0B:A;wireY=(S1AT:BT);endmodule例3-4中的三个赋值语句都是条件赋值语句,此语句使用了条件操作符":".
条件操作符用法的一般格式如下:条件表达式表达式1:表达式2图3-6例3-4的RTL图72第3章组合电路的Verilog设计EDA技术实用教程(第五版)即当条件表达式的计算值为真时(数值等于1),选择并计算表达式1的值,否则(数值等于0)选择并计算表达式2的值.
基于条件操作符":"的逻辑表达式和赋值语句,在连续赋值语句和过程赋值语句结构中都可以使用,即在并行赋值语句或顺序赋值语句中都可使用.
以例3-4中的语句"wireAT=S0D:C;"为例,其功能是,如果S0=1成立,则AT=D;如果S0=0成立,则AT=C.
这显然是一个2选1多路选择器的逻辑描述.
3.
2.
44选1多路选择器及条件语句表述方式例3-5给出了利用if条件语句描述此模块的程序.
例3-5和例3-2有相似性,因为都使用了以过程语句always引导的顺序语句;更重要的是,两程序都采用了Verilog中最适合描述复杂逻辑系统的行为描述语句,即顺序语句.
【例3-5】moduleMUX41a(A,B,C,D,S1,S0,Y);inputA,B,C,D,S1,S0;outputY;reg[1:0]SEL;regY;always@(A,B,C,D,SEL)begin//块语句起始SEL={S1,S0};//把S1,S0并位为2元素矢量变量SEL[1:0]if(SEL==0)Y=A;//当SEL==0成立,即(SEL==0)=1时,Y=A;elseif(SEL==1)Y=B;//当(SEL==1)为真,则Y=B;elseif(SEL==2)Y=C;//当(SEL==2)为真,则Y=C;elseY=D;//当SEL==3,即SEL==2'b11时,Y=D;end//块语句结束endmodule以下对例3-5程序中出现的新的语言现象作一些解释.
1.
if条件语句在例3-5中,当过程always被启动后,即刻顺序执行此结构所包含的语句.
首先执行"SEL={S1,S0};",即将由S1、S0并位所得的两位二进制数赋给变量SEL.
然后计算出以下if语句的条件表达式的值.
条件表达式(SEL==0)的计算方法是这样的:当SEL等于00,表达式(SEL==0)=1,表示满足条件,则执行赋值语句"Y=A;",即将输入口A的数据赋给输出变量Y.
否则,即SEL不等于00,表达式(SEL==0)=0,随即执行else后的if语句.
以此方式顺序执行下去,直到完成所有if条件语句.
例3-5给出的是多条件情况,如果只有一个条件,可以表示为以下形式:if(S)Y=A;elseY=B;这是一个2选1多路选择器的if语句表述方式,即当控制信号S=1时,条件式为真,执行赋值语句"Y=A;";而当S=0时,条件式为伪,执行赋值语句"Y=B;".
同样,当需要执行的语句有多条时,应该用begin_end块语句将它们"括"起来,例如:if(S)Y=A;elsebeginY=B;Z=C;Q=1'b0;end3.
2多路选择器的Verilog描述73EDA技术实用教程(第五版)使用if语句时必须注意,无论其条件表达式是什么形式,都必须用括号括起来,如if(S)、if(SEL==1)、if(Y==a&b)等.
这点也与VHDL不同.
2.
过程赋值语句从以上的一些示例中,读者不难发现,有两种不同的赋值符号,即"="和"<=".
在过程语句中,Verilog中有以下两类赋值方式,对应这两种赋值符号.
(1)阻塞式赋值.
Verilog中,用普通等号"="作为阻塞赋值语句的赋值符号,如y=b.
阻塞式赋值的特点是,一旦执行完当前的赋值语句,赋值目标变量y即刻获得来自等号右侧表达式的计算值.
如果在一个块语句中含有多条阻塞式赋值语句,而当执行到其中某条赋值语句时,则其他语句被禁止执行,这时其他语句如同被阻塞了一样.
其实阻塞式赋值语句的特点与C等软件描述语言相似,都属顺序执行语句,而此类语句都具有类似阻塞式的执行方式,即当执行某一语句时,其他语句不可能被同时执行.
显然,阻塞式赋值符号"="的功能与VHDL的变量赋值符号":="的功能类似.
需要注意的是,assign语句和always语句中出现的赋值符号"="(例3-4和例3-5)从理论上说是不同性质的,因为前者属于连续赋值语句,具有并行赋值特性,后者属于过程赋值类中的顺序赋值语句.
但从综合角度看其结果则常常是相同的.
因为assign语句不能使用块语句,故只允许引导一条含"="号的赋值语句.
(2)非阻塞式赋值.
非阻塞式赋值的特点是,必须在块语句执行结束时才整体完成赋值操作.
非阻塞的含义是,在执行当前语句时对于块中的其他语句的执行情况一律不加限制,不加阻塞.
这也似乎可理解为,在begin块中的所有赋值语句都可以并行运行.
但这种"并行"并非真正的并行运行,它有诸多自身的特点,后文将详细探讨.
然而有的程序中赋值符号是可以互换的,如在例3-2与例3-5中,可将程序中所有的阻塞式赋值符号"="换成非阻塞式赋值符号"<=",或反之,且功能不变.
但是,在一般情况下事情并非总是这样,即在许多情况下,不同的赋值符号将导致不同的电路结构和逻辑功能的综合结果.
另外需要特别注意,在同一过程中对同一变量的赋值,阻塞式赋值和非阻塞式赋值不允许混合使用.
3.
数据类型表示方式读者或许已注意到,在以上的示例中出现了不少相同含义却不同数值表述方式的情况.
例如对于(SEL==2)式,似乎SEL与2数据类型不匹配,因为前者的类型是二进制矢量位SEL[1:0],而后者属于整数类型.
对于类似式(SEL==2)等不匹配的情况,Verilog综合器会自动使其匹配.
例如将其中的整数2变换成与SEL[1:0]同类型的二进制数2'b10.
所以{S1,S0}=2'b10,(SEL==2),(SEL==2'D2)三式的含义相同.
但如果所赋的值大于某变量已定义的矢量位可能的值,综合器会首先将赋值符号右侧的数据折算成二进制数,然后根据被赋值变量所定义的位数,向左(高位)截取多余的数位.
显然,Verilog具备通过赋值操作达到自动转换数据类型的功能.
例如若信号Y定义为74第3章组合电路的Verilog设计EDA技术实用教程(第五版)Y[1:0],当编译赋值语句Y<=9时,综合器不会报错,最后Y得到赋值是2'B01,即截去了高位的10.
这里,Verilog综合器至少包含了两项大的操作,即将整数数据类型转换为二进制矢量位数据类型的操作,以及截位以适应目标变量的操作.
反之亦然,即通过矢量位向整数类型变量的赋值即可实现反方向的数据类型转换.
显然,Verilog的语法规则比VHDL要宽松多了,所以初学者容易入门.
但正因为如此,Verilog的程序设计更需当心,其排错查错时可能需要花费更多的力气.
3.
3Verilog加法器设计本节将给出三则加法器设计示例,以及相关的设计模块,以便读者借以学习一些新的语法现象和设计技巧.
首先介绍全加器的设计,由此引出例化语句的应用;然后介绍直接利用算术操作符实现多位加法器的示例;最后介绍BCD码加法器的设计.
3.
3.
1全加器设计及例化语句应用这里将通过一个全加器的设计流程,介绍含有层次结构的Verilog程序设计方法,从而引出例化语句的使用方法,以及随后介绍的UDP描述方法.
1.
全加器原理图结构图3-7是一个全加器的电路原理图,它由三个逻辑模块组成,其中两个是半加器,一个是或门.
半加器h_adder的电路结构和逻辑功能已在3.
1节中作了详细说明.
图3-7全加器f_adder电路图图3-7中的全加器的端口有ain、bin、cin、sum和cout,它们分别是加数、被加数、进位输入、和值输出与进位输出.
对于全加器来说,预存的半加器描述文件h_adder.
v(文件如例3-1所示)和或门库元件or(Verilog综合器的元件库中已预存了此元件)就可以作为较低层次的基本元件,以待高层次顶层设计的调用.
这时,这两个元件的元件名就是h_adder和or.
以下介绍顶层设计文件和元件的调用方法.
2.
全加器顶层设计文件前面曾谈到任一Verilog模块对应一个硬件电路功能实体器件.
如果要将这些实体器件连接起来构成一个更大的系统,就需要一个总的模块将所有涉及的子模块连接起来,这个

hosteons:10Gbps带宽,免费Windows授权,自定义上传ISO,VPS低至$21/年,可选洛杉矶达拉斯纽约

hosteons当前对美国洛杉矶、达拉斯、纽约数据中心的VPS进行特别的促销活动:(1)免费从1Gbps升级到10Gbps带宽,(2)Free Blesta License授权,(3)Windows server 2019授权,要求从2G内存起,而且是年付。 官方网站:https://www.hosteons.com 使用优惠码:zhujicepingEDDB10G,可以获得: 免费升级10...

云基最高500G DDoS无视CC攻击(Yunbase),洛杉矶CN2GIA、国内外高防服务器

云基成立于2020年,目前主要提供高防海内外独立服务器用户,欢迎各类追求稳定和高防优质线路的用户。业务可选:洛杉矶CN2-GIA+高防(默认500G高防)、洛杉矶CN2-GIA(默认带50Gbps防御)、香港CN2-GIA高防(双向CN2GIA专线,突发带宽支持,15G-20G DDoS防御,无视CC)、国内高防服务器(广州移动、北京多线、石家庄BGP、保定联通、扬州BGP、厦门BGP、厦门电信、...

iON Cloud:七月活动,洛杉矶CN2 GIA线路85折优惠中,价格偏高/机器稳定/更新优惠码

iON Cloud怎么样?iON Cloud是Krypt旗下的云服务器品牌,成立于2019年,是美国老牌机房(1998~)krypt旗下的VPS云服务器品牌,主打国外VPS云服务器业务,均采用KVM架构,整体性能配置较高,云服务器产品质量靠谱,在线率高,国内直连线路,适合建站等用途,支付宝、微信付款购买。支持Windows server 2012、2016、2019中英文版本以及主流Linux发行...

计数器代码为你推荐
科大讯飞智学网教师阅卷操作指南phpweb破解怎样破解握手包linux防火墙设置怎样用iptables配置好Linux防火墙?中国企业信息网中国企业网怎么样dell服务器bios设置戴尔服务器720bios设置硬盘启动flashfxp注册码谁有~FLASHfxp V3.0.2的注册码~~谢谢哦!!要现在能用的!!!!台北市cuteftp资费标准联通所有套餐介绍温州商标注册温州注册商标需要注册公司吗瑞东集团道恩集团的集团简介
tk域名注册 免费linux主机 256m内存 512av 哈喽图床 iis安装教程 警告本网站 圣诞节促销 asp免费空间申请 699美元 免费美国空间 免费高速空间 免费智能解析 支持外链的相册 国外视频网站有哪些 google台湾 华为云建站 存储服务器 电信主机托管 国外免费网盘 更多