北交大数电研究性学习报告集成电路EDA技术及可编程逻辑器件综述.docx
《北交大数电研究性学习报告集成电路EDA技术及可编程逻辑器件综述.docx》由会员分享,可在线阅读,更多相关《北交大数电研究性学习报告集成电路EDA技术及可编程逻辑器件综述.docx(32页珍藏版)》请在冰豆网上搜索。
北交大数电研究性学习报告集成电路EDA技术及可编程逻辑器件综述
北京交通大学
数字电子线路研究性学习(论文)
集成电路EDA技术及可编程逻辑器件
组员:
姓名:
学号:
姓名:
学号:
指导老师:
朱明强
二零一四年十二月
摘要
本文通过介绍集成电路EDA技术以及可编程逻辑器件PLD来了解当前集成电路及PLD的发展。
集成电路部分,我们介绍了传统设计方法和现代设计方法,然后系统的介绍了EDA技术。
之后我们详细的介绍了可编程逻辑器件PLD的结构、分类、性能特点,以及对低密度和高密度PLD不同的设计方法。
然后对国内外大型的集成电路设计公司以及他们的产品进行了介绍。
硬件的发展离不开软件平台的支持,文中对Max+plusⅡ设计平台的的特点进行了介绍。
了解芯片上的文字信息也是一个学习集成电路技术的人必不可少的技能,文章的最后以FPGA为例,介绍了其片上信息的具体含义。
关键词:
集成电路;可编程逻辑器件;公司介绍;Max+plusⅡ软件平台;FPGA片上信息
Abstract
Inthisarticle,byintroducingEDAtechnologyofintegratedcircuitsandprogrammablelogicdevicePLDtounderstandthecurrentintegratedcircuit,andthedevelopmentofPLD.Integratedcircuitpart,weintroducedthetraditionaldesignmethodandthemoderndesignmethod,thenthesystemofEDAtechnologyisintroduced.Afterourdetailedintroducestheprogrammablelogicdevicesstructure,classificationandperformancecharacteristicsofPLD,andthedesignmethodoflowdensityandhighdensityPLDisdifferent.Thenthelargeintegratedcircuitdesigncompanyathomeandabroadareintroducedandtheirproducts.Thedevelopmentofthehardwarecan'tdepartfromthesupportofsoftwareplatform,ThispaperthecharacteristicsofdesignplatformofMax+plusⅡareintroduced.Understandatextmessageonachipisalsoalearningessentialskillsintegratedcircuittechnology.TheendofthearticlehastheFPGAastheexample,introducesthespecificmeaningoftheinformation.
Keywords:
Integratedcircuit;Programmablelogicdevices;Companyintroduction;Thesoftwareplatform;InformationontheFPGAchip
1集成电路的设计方法
1.1传统数字系统设计方法
传统的数字逻辑电路理论中,由真值表,卡诺图,逻辑方程,状态表及状态图来完成描述逻辑电路分功能。
其特点是采用自下而上的设计方法,具体设计步骤为:
分析设计要求,把用文字描述的设计要求抽象成输入、输出变量的逻辑关系,根据逻辑关系列出真值表描述,写出逻辑函数表达式,然后使用公式或卡诺图对真值表进行化简,得到最小的表达式,再根据化简结果画出电路原理图,制版实验,使用调试工具和仪器,对系统进行调试;若设计无误,则送制板厂制板,若有严重错误,则需修改设计,并重复实验。
按这样的过程设计产品,从根据设计目标得到真值表,到最后完成系统后的测试与调试,所有的工作均需人工完成。
可以想象,随着数字集成电路的发展,从小规模集成电路(SSI)的小于10个逻辑门,到中规模集成电路(MSI)的几百个逻辑门,再到大规模集成电路的(LSI)几万门,最后甚至到超大规模集成电路(VLSI),甚大规模集成电路(ULSI)的几十万、几百万门电路,集成电路迅速的大规模化,使得传统设计方法根本无法完成得到真值表画出卡诺图等工作。
而且,传统设计方法所用元件的种类和数量较多,一次性成功率低,开发周期长,系统可靠性差,体积和功耗较大,成本也高。
由此可见,传统的集成电路设计方法效率极低。
1.2现代数字系统设计方法
为了适应现代大规模和超大规模集成电路的设计,并使系统获得良好的性能和正确的结果,现代数字逻辑电路的设计通常采用从上至下(fromtoptodown)的设计方法,这里的“上”就是指设计者从整个系统逻辑功能出发,进行最上层的系统设计;“至下”就是指按一定原则将全局系统划分为若干份子系统,逐级向下,再将每个子系统划分为若干个功能模块,模块还可以向下划分为子模块,直至可用基本模块实现。
如此一来,数字系统就被划分为控制电路和若干个受控电路的功能模块,相当于把一个复杂的系统设计工作化为了一个较小规模的时序电路和一些基本模块的问题,从而大大简化了设计难度,缩短了设计周期。
1.3EDA技术及现代数字系统设计流程
EDA(电子设计自动化)技术是在计算机辅助设计技术(CAD)基础上发展起来的计算机软件系统,是指以计算机为工作平台,以EDA软件工具为开发环境,以硬件描述语言为设计语言,以可编程器件为实验载体,以专用集成电路、片上系统芯片为器件目标,以电子系统设计为应用方向的电子产品自动化设计过程。
现代数字系统从上至下的分层设计流程图如图1所示。
每个层次上,大致都有描述、划分、综合、验证等四种工作。
其中设计者只需利用图形输入或硬件描述语言VHDL完成系统描述,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。
图1现代逻辑电路设计基本步骤
EDA设计过程是将传统的“电路设计——硬件搭试——调试焊接”模式变为“功能设计——软件模拟——编程下载”方式。
利用EDA工具。
电子设计师可以从概念、算法、协议等开始设计电子系统。
大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程在计算机上自动处理完成。
2可编程逻辑器件
2.1可编程逻辑器件简介
在数字电子系统领域存在三种基本的器件类型:
储存器,微处理器和逻辑器件。
而逻辑器件是实现电路功能的核心组成部分。
逻辑电路分为两大类型:
固定逻辑器件和可编程逻辑器件。
固定逻辑器件中的电路是在出厂前就设计好的,出厂后其功能是不可改变的。
而可编程逻辑器件(PLD--ProgrammableLogicDevice)的出现能够为使用者提供多种自行设计功能,特性,速度和电压特性的标准的器件。
器件的功能不是固定不变的,而是可根据用户的需要而进行改变,即由编程的方法来确定器件的逻辑功能。
2.2可编程逻辑器件PLD的基本结构
大多数典型的PLD器件是由二级组合网络构成的。
通常第一级是“与”阵列;第二级是“或”阵列。
输入连接“与”阵列,在其中进行“与”逻辑组合,形成乘积项。
然后乘积项转入“或”阵列,在“或”阵列中由不同的乘积项构成所要求的逻辑函数输出。
PLD基本结构框图如下:
图2PLD基本结构框图
2.3可编程逻辑器件PLD的分类
基于PLD与阵列和或阵列是否编程,可以分为三种基本类型:
与阵列固定,或阵列可编程型。
包括可编程只读存储器PROM和可擦除编程只读存储器EPROM;与阵列、或阵列均可编程。
包括可编程逻辑阵列PLA;与阵列可编程,或阵列固定。
包括可编程阵列逻辑PAL、通用列阵逻辑GAL和高密度可编程逻辑器件HDPLD。
1.与阵列固定,或阵列可编程
代表器件是可编程只读存储器PROM,其结构为与阵列为全译码阵列,或阵列为可编程阵列。
由于它以最小项为基础,因此在设计中无须对函数简化。
能够较方便地实现多输入、多输出的组合逻辑电路。
器件的规模将随着输入信号数量n的增加成2n指数级增长。
因此PROM一般只用于数据存储器,不适于实现逻辑函数。
4*2位PROM如图所示:
图34*2位PROM
2.与或阵列均可编程
代表器件是可编程逻辑阵列PLA,由于它具有与阵列和或阵列均可编程的特点,在编程中,只要形成所需的乘积项,无关项不用构建。
这样一来,大大减少了它的阵列规模。
PLA与PROM相比,有效地提高了芯片利用率,缩小了体积。
4*2PLA如图所示:
图44*2位PLA
3.与阵列可编程,或阵列固定
代表器件是可编程阵列逻辑PAL和通用阵列逻辑GAL。
这种结构中,或阵列固定若干个乘积项输出。
为了满足不同用户的要求,PAL有各种不同的输出结构:
如固定或门输出结构、带反馈的寄存器输出结构、异或型输出结构等。
由于PAL工艺简单、速度快、功能多变,获得广泛接受。
GAL基本上沿袭了PAL的结构。
与PAL不同的是,GAL用可编程的输出逻辑宏单元OLMC代替了固定输出结构。
用户可对OLMC自行组态,以构成不同的输出结构,因而GAL使用起来比PAL更灵活。
PAL与GAL分别如图所示:
图5PAL与GAL
图6GAL16V8的结构图
基于PLD集成度,可将PLD分为低密度PLD和高密度PLD。
低密度PLD主要包括PROM、PLA、PAL和GAL,高密度PLD主要包括复杂可编程逻辑器件CPLD和现场可编程门阵列FPGA。
具体结果如下图:
图7PLD分类结构图
复杂可编程逻辑器件CPLD与现场可编程门阵列FPGA都是一种用户可编程逻辑器件。
它们是在PAL、GAL等逻辑器件的基础上发展起来的。
同以往的PAL和GAL相比,FPGA/CPLD规模比较大,适合于时序、组合逻辑电路应用场合。
编程方便、集成度高、开发周期短、速度快、价格合理等都是它的优点。
2.4可编程逻辑器件PLD的性能特点
1.减小系统体积:
单片PLD有很高的密度,可容纳中小规模集成电路的几片到十几片。
2.增强逻辑设计的灵活性:
使用PLD器件设计的系统,可以不受标准系列器件在逻辑功能上的限制。
3.缩短设计周期:
由于可编程特性,用PLD设计一个系统所需时间比传统方式大为缩短。
4.提高系统处理速度:
用PLD与或两级结构实现任何逻辑功能,比用中小规模器件所需的逻辑级数少。
这不仅简化了系统设计,而且减少了级间延迟,提高了系统的处理速度。
5.提高系统处理速度:
用PLD与或两级结构实现任何逻辑功能,比用中小规模器件所需的逻辑级数少。
这不仅简化了系统设计,而且减少了级间延迟,提高了系统的处理速度。
6.提高系统的可靠性:
用PLD器件设计的系统减少了芯片数量和印制板面积,减少了相互间的连线,增加了平均寿命,提高了抗干扰能力,从而提高了系统的可靠性。
7.某些PLD器件,如GAL器件或高密度可编程逻辑器件本身具有加密功能。
设计者在设计时选中加密项,可编程逻辑器件就被加密,器件的逻辑功能无法被读取出来,有效的防止逻辑系统被抄袭。
2.5可编程逻辑器件PLD的设计过程
1.低密度PLD的设计过程
低密度PLD一般采用书面逻辑设计,将电路所需要实现的功能用状态转换图,状态转换表,真值表或逻辑方程等方式进行表达,然后根据整个电路的输入、输出端数以及所需要的各类门和触发器来选择能够满足设计要求的器件系列和型号。
器件的选择上,除了对功能的的要求外,还应该考虑器件的引脚数,速度,功耗以及结构等特点。
2.高密度PLD的设计过程
复杂的逻辑功能需要使用高密度PLD的编程来实现。
由于功能的复杂,不能再使用传统的书面逻辑设计思路,而是采用“自顶向下(TOP-DOWN)”的设计方法。
这里的“顶”指系统的功能,“向下”指将系统由小到大、由粗到细、由复杂变简单进行分解。
自定向下的设计过程由四部分组成。
如下图所示:
明确系统功能
确定总体方案
子系统具体实现
系统仿真实现
图8Top-Down设计
第一步为明确系统功能,即对设计的系统的任务、要求、原理以及使用环境进行考虑,从而明确设计目标、确定系统功能,是一件至关重要的事。
因为只有把它做好了,后面的设计工作才有意义,才有效率。
第二步为确定总体方案,在明确了设计目标、确定系统功能之后,接下来要做的工作就是根据系统功能确定出系统设计的总体方案。
采用什么原理和方法来实现预定功能,是这一步中必须认真考虑的事。
因为同一功能的系统有多种工作原理和实现方法可供选择,方案的优劣直接关系到所设计的整个数字系统的质量,所以必须周密思考、反复比较和慎重选择。
总的原则是,所选择的方案既要能满足系统的要求,又要具有较高的性能价格比。
第三步为系统具体实现,在系统方案确定以后.再从结构上对系统进行逻辑划分,导出系统的结构框图。
一般把系统从逻辑上划分为数据子系统和控制子系统两部分。
然后,再将各自划分为多个子系统模块,各模块的输入、输出信号要明确。
这些子系统就可以依据基础的数字设计确定具体电路实现。
系统如果有控制算法也包括选择控制算法及实现。
第四步为系统仿真实现,在系统设计完成之后,最好先采用EDA软什对所设计的系统进行仿真后再用具体器件搭电路.以保证系统设计的正确性和可靠性。
电路实现时,一般按自底向上的顺序进行。
这样做不仅行利于单个电路的调试,而且也利于整个系统的联调。
因此,严格地讲,数字系统的完整设计过程应该是“自顶向下设计。
自底向上集成”。
3数字电路设计实例——数字钟
3.1设计任务及要求
(1)设计一个数字钟。
(2)用2个数码管分时显示小时、分钟、秒,用个位数码管上的OP发光点表示小时。
(3)数字钟采用24进制计时。
(4)可分别进行小时、分、秒的手动校正。
3.2器件选择
EPM7128S、共阴极七段数码管、开关、电阻和电容。
3.3程序设计过程
数字钟总体框图如图所示。
图9数字钟设计框图
在程序设计中,本实例遵循了“从上向下”的设计思路,从整个系统的逻辑功能出发,进行上层的系统设计,及调用在下层设计的各种逻辑模块,从整体上对各个逻辑模块进行进行连接,从而达到整个系统逻辑功能的实现。
电子钟的下层是各个不同功能的逻辑模块,包括分频器模块、控制信号产生模块、控制模块、译码显示电路模块、防抖动模块。
分频器模块即对GLK信号进行分频,得到需要的频率,做计数定时使用。
控制信号产生模块产生对控制模块的控制信号,在不同的条件下,产生不同的控制信号,使控制电路的状态不同,包括对小时,分钟,秒的显示切换以及校正。
译码显示模块即对输入的信号进行译码,驱动数码管显示数字。
防抖动模块完成按键消抖的功能。
上层通过对这几类下层模块的调用,建立起下层模块的相互关联,从而达到了电子时钟所需要的各类功能。
上层以及下层具体程序如下:
3.4VHDL程序设计
(1)上层模块
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entitywholeis
port(seechange:
instd_logic;--看表/校表切换控制信号。
hourmins:
instd_logic;--时/分/秒切换控制信号。
increase:
instd_logic;--手动校表时钟信号。
clki:
instd_logic;--时钟信号,1MHz。
sel:
outstd_logic_vector(2downto1);--数码管片选信号。
seg:
outstd_logic_vector(7downto0));--数码管的驱动信号。
end;
architecturebehaveofwholeis
signalseechangeo:
std_logic;
signalhourminso:
std_logic;
signalincreaseo:
std_logic;
signalaclkf:
std_logic;
signalclk,clk_dis:
std_logic;
signallow,high:
std_logic_vector(3downto0);
signaln:
std_logic;
signalap:
std_logic;
componentkongjian_count--调用控制模块。
port(clk:
instd_logic;
n:
instd_logic;
hourmins:
instd_logic;
increase:
instd_logic;
low:
outstd_logic_vector(3downto0);
high:
outstd_logic_vector(3downto0);
p:
outstd_logic);
endcomponent;
componentdivid--调用分频器模块。
port(clki:
instd_logic;
clk_dis,clk,clkf:
outstd_logic);
endcomponent;
componentcontrolis--调用控制信号产生模块。
port(clk:
instd_logic;
seechange:
instd_logic;
n:
outstd_logic);
endcomponent;
componentdisplay--调用译码显示模块。
port(clk_dis,p:
instd_logic;
low:
instd_logic_vector(3downto0);
high:
instd_logic_vector(3downto0);
sel:
outstd_logic_vector(2downto1);
seg:
outstd_logic_vector(7downto0));
endcomponent;
componentkeyin--调用防抖动模块。
port(clk:
instd_logic;
keyin:
instd_logic;
keyout:
outstd_logic);
endcomponent;
begin
u1:
componentkeyinportmap(aclkf,seechange,seechangeo);
u2:
componentkeyinportmap(aclkf,hourmins,hourminso);
u3:
componentkeyinportmap(aclkf,increase,increaseo);
u4:
componentdividportmap(clki,clk_dis,clk,aclkf);
u5:
componentcontrolportmap(clk,seechangeo,n);
u6:
componentkongjian_countportmap(clk,n,hourminso,increaseo,low,high,ap);
u7:
componentdisplayportmap(clk_dis,ap,low,high,sel,seg);
endbehave;
(2)下层模块
①分频器模块
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entitydividis
port(clki:
instd_logic;--时钟信号,1MHz。
clk_dis,clk,clkf:
outstd_logic);--显示、计时和防抖电路的输入时钟。
end;
architecturedofdividis
signalclk1,clk2,clk3,clk4,clk5,clk6:
std_logic;
signalcount1,count2,count3:
std_logic_vector(4downto1);
signalcount4,count5,count6:
std_logic_vector(4downto1);
begin
process
begin
waituntilclki=′1′;
ifcount1(4downto1)="0100"then
count1<="0000";
clk1<=notclk1;
else
count1<=count1+1;
endif;
endprocess;
process
begin
waituntilclk1=′1′;
ifcount2(4downto1)="0100"then
count2<="0000";
clk2<=notclk2;
else
count2<=count2+1;
endif;
endprocess;
process
begin
waituntilclk2=′1′;
ifcount3(4downto1)="0100"then
count3<="0000";clk3<=notclk3;
else
count3<=count3+1;
endif;
endprocess;
process
begin
waituntilclk3=′1′;
ifcount4(4downto1)="0100"then
count4<="0000";clk4<=notclk4;
else
count4<=count4+1;
endif;
endprocess;
process
begin
waituntilclk4=′1′