人类社会已进入到高度发达的信息化社会,信息社会的发展离不开电子产品的进步。 现代电子产品在性能提高、复杂度增大的同时,价格却一直呈下降趋势,而且产品更新换代的步伐 也越来越快,实现这种进步的主要原因就是生产制造技术和电子设计技术的发展。前者以微细加工 技术为代表,目前已进展到深亚微米阶段,可以在几平方厘米的芯片上集成数千万个晶体管;后者 的核心就是EDA技术。EDA是指以计算机为工作平台,融合了应用电子技术、计算机技术、智能化 技术最新成果而研制成的电子CAD通用软件包,主要能辅助进行三方面的设计工作:IC设计,电子 电路设计以及PCB设计。没有EDA技术的支持,想要完成上述超大规模集成电路的设计制造是不可 想象的,反过来,生产制造技术的不断进步又必将对EDA技术提出新的要求。
1.EDA技术的当今情况
随着微电子技术和计算机技术的不断发展,在涉及通信、国防、航天、工业自动化、仪器仪表等领域工作中,EDA技术的含量以惊人的速度上升,从而使它成为当今电子技术发展的前沿之一。
2. EDA技术的发展
回顾近30年电子设计技术的发展历程,可将EDA技术分为三个阶段。 (1) 七十年代为CAD阶段,这一阶段人们开始用计算机辅助进行IC版图编辑和PCB布局布 线,取代了手工操作,产生了计算机辅助设计的概念。 (2)八十年代为CAE阶段,与CAD相比,除了纯粹的图形绘制功能外,又增加了电路功能设 计和结构设计,并且通过电气连接网络表将两者结合在一起,以实现工程设计,这就是计算机辅助 工程的概念。CAE的主要功能是:原理图输入,逻辑仿真,电路分析,自动布局布线,PCB后分 析。 (3)九十年代为ESDA阶段。尽管CAD/CAE技术取得了巨大的成功,但并没有把人从繁重的 设计工作中彻底解放出来。在整个设计过程中,自动化和智能化程度还不高,各种EDA软件界面千 差万别,学习使用困难,并且互不兼容,直接影响到设计环节间的衔接。基于以上不足,人们开始 追求贯彻整个设计过程的自动化,这就是ESDA即电子系统设计自动化。
从目前的EDA技术来看,其发展趋势是政府重视、使用普及、应用文泛、工具多样、软件功能强大。
中国EDA市场已渐趋成熟,不过大部分设计工程师面向的是PC主板和小型ASIC领域,仅有小部分(约11%)的设计人员工发复杂的片上系统器件。为了与***和美国的设计工程师形成更有力的竞争,中国的设计队伍有必要购入一些最新的EDA技术。
在信息通信领域,要优先发展高速宽带信息网、深亚微米集成电路、新型元器件、计算机及软件技术、第三代移动通信技术、信息管理、信息安全技术,积极开拓以数字技术、网络技术为基础的新一代信息产品,发展新兴产业,培育新的经济增长点。要大力推进制造业信息化,积极开展计算机辅助设计(CAD)、计算机辅助工程(CAE)、计算机辅助工艺(CAPP)、计算机机辅助制造(CAM)、产品数据管理(PDM)、制造资源计划(MRPII)及企业资源管理(ERP)等。有条件的企业可开展“网络制造”,便于合作设计、合作制造,参与国内和国际竞争。开展“数控化”工程和“数字化”工程。自动化仪表的技术发展趋势的测试技术、控制技术与计算机技术、通信技术进一步融合,形成测量、控制、通信与计算机(M3C)结构。在ASIC和PLD设计方面,向超高速、高密度、低功耗、低电压方向发展。
外设技术与EDA工程相结合的市场前景看好,如组合超大屏幕的相关连接,多屏幕技术也有所发展。
中国自1995年以来加速开发半导体产业,先后建立了几所设计中心,推动系列设计活动以应对亚太地区其它EDA市场的竞争。
在EDA软件开发方面,目前主要集中在美国。但各国也正在努力开发相应的工具。日本、韩国都有ASIC设计工具,但不对外开放 。中国华大集成电路设计中心,也提供IC设计软件,但性能不是很强。相信在不久的将来会有更多更好的设计工具有各地开花并结果。据最新统计显示,中国和印度正在成为电子设计自动化领域发展最快的两个市场,年复合增长率分别达到了50%和30%。
EDA技术发展迅猛,完全可以用日新月异来描述。EDA技术的应用广泛,现在已涉及到各行各业。EDA水平不断提高,设计工具趋于完美的地步。EDA市场日趋成熟,但我国的研发水平沿很有限,需迎头赶上。 (1)
3 ESDA技术的基本特征
ESDA代表了当今电子设计技术的最新发展方向,它的基本特征是:设计人员按照“自顶 向下”的设计方法,对整个系统进行方案设计和功能划分,系统的关键电路用一片或几片专用集成 电路(ASIC)实现,然后采用硬件描述语言(HDL)完成系统行为级设计,最后通过综合器和适配 器生成最终的目标器件。这样的设计方法被称为高层次的电子设计方法,具体流程还将在4.2节中 做深入介绍。下面介绍与ESDA基本特征有关的几个概念。
3.1 “自顶向下”的设计方法
10年前,电子设计的基本思路还是选择标准集成电路“自底向上”(Bottom-Up)地构 造出一个新的系统,这样的设计方法就如同一砖一瓦地建造金字塔,不仅效率低、成本高而且 还容 易出错。
高层次设计给我们提供了一种“自顶向下”(Top-Down)的全新的设计方法,这种设计 方法首先从系统设计入手,在顶层进行功能方框图的划分和结构设计。在方框图一级进行仿真、纠 错,并用硬件描述语言对高层次的系统行为进行描述,在系统一级进行验证。然后用综合优化工具 生成具体门电路的网表,其对应的物理实现级可以是印刷电路板或专用集成电路。由于设计的主要 仿真和调试过程是在高层次上完成的,这不仅有利于早期发现结构设计上的错误,避免设计工作的 浪费,而且也减少了逻辑功能仿真的工作量,提高了设计的一次成功率。 (2)
3.2 ASIC设计
现代电子产品的复杂度日益加深,一个电子系统可能由数万个中小规模集成电路构 成,这就带来了体积大、功耗大、可靠性差的问题,解决这一问题的有效方法就是采用ASIC (Application Specific Integrated Circuits)芯片进行设计。ASIC按照设计方法的不同可分为:全定制ASIC,半定制ASIC,可编程ASIC(也称为可编程逻辑器件)。
设计全定制ASIC芯片时,设计师要定义芯片上所有晶体管的几何图形和工艺规则,最 后将设计结果交由IC厂家掩膜制造完成。优点是:芯片可以获得最优的性能,即面积利用率高、速度快、功耗低。缺点是:开发周期长,费用高,只适合大批量产品开发。
半定制ASIC芯片的版图设计方法有所不同,分为门阵列设计法和标准单元设计法,这 两种方法都是约束性的设计方法,其主要目的就是简化设计,以牺牲芯片性能为代价来缩短开发时间。
可编程逻辑芯片与上述掩膜ASIC的不同之处在于:设计人员完成版图设计后,在实验 室内就可以烧制出自己的芯片,无须IC厂家的参与,大大缩短了开发周期。
可编程逻辑器件自七十年代以来,经历了PAL、GAL、CPLD、FPGA几个发展阶段,其中 CPLD/FPGA属高密度可编程逻辑器件,目前集成度已高达200万门/片,它将掩膜ASIC集成度高的 优点和可编程逻辑器件设计生产方便的特点结合在一起,特别适合于样品研制或小批量产品开发,使产品能以最快的速度上市,而当市场扩大时,它可以很容易的转由掩膜ASIC实现,因此开发风 险也大为降低。
上述ASIC芯片,尤其是CPLD/FPGA器件,已成为现代高层次电子设计方法的实现载体。
3.3 硬件描述语言
硬件描述语言(HDL-Hardware Description Language)是一种用于设计硬件电子 系统的计算机语言,它用软件编程的方式来描述电子系统的逻辑功能、电路结构和连接形式,与传 统的门级描述方式相比,它更适合大规模系统的设计。例如一个32位的加法器,利用图形输入软件 需要输入500至1000个门,而利用VHDL语言只需要书写一行A=B+C即可,而且VHDL语言可读性强, 易于修改和发现错误。早期的硬件描述语言,如ABEL-HDL、AHDL,是由不同的EDA厂商开发的,互 相不兼容,而且不支持多层次设计,层次间翻译工作要由人工完成。为了克服以上缺陷,1985年 美国国防部正式推出了VHDL(Very High Speed IC Hardware Description Language)语言, 1987年IEEE采纳VHDL为硬件描述语言标准(IEEE STD-1076)。
VHDL是一种全方位的硬件描述语言,包括系统行为级、寄存器传输级和逻辑门级多个 设计层次,支持结构、数据流、行为三种描述形式的混合描述,因此VHDL几乎覆盖了以往各种硬件 描述语言的功能,整个自顶向下或自底向上的电路设计过程都可以用VHDL来完成。另外,VHDL还 具有以下优点: VHDL的宽范围描述能力使它成为高层次设计的核心,将设计人员的工作重心提高到了系统功 能的实现与调试,只需花较少的精力用于物理实现。 VHDL可以用简洁明确的代码描述来进行复杂控制逻辑的设计,灵活且方便,而且也便于设计 结果的交流、保存和重用。 VHDL的设计不依赖于特定的器件,方便了工艺的转换。 VHDL是一个标准语言,为众多的EDA厂商支持,因此移植性好。
3.4 系统框架结构
EDA系统框架结构(Framework)是一套配置和使用EDA软件包的规范,目前主要的EDA 系统都建立了框架结构,如Cadence公司的Design Framework,Mentor公司的Falcon Framework等,这些框架结构都遵守国际CFI组织(CAD Framework Initiative)制定的统一技术 标准。Framework能将来自不同EDA厂商的工具软件进行优化组合,集成在一个易于管理的统一的 环境之下,而且还支持任务之间、设计师之间在整个产品开发过程中实现信息的传输与共享,这是 并行工程和Top-Down设计方法的实现基础。
4 EDA技术的基本设计方法
EDA技术的每一次进步、都引起了设计层次上的一个飞跃,可以用图1说明。
物理级设计主要指IC版图设计,一般由半导体厂家完成,对电手工程师并没有太大的意义,因此本文重点介绍电路级设计和系统级设计。
4.1 电路级设计
电路级设计工作流程如图2所示,电子工程师接受系统设计任务后,首先确定设计方案,同时要选择能实现该方案的合适 元器件,然后根据具体的元器件设计电路原理图。接着进行第一次仿真,包括数字电路的逻辑模拟、故障分析、模拟电路的交直流分析、瞬态分析。系统在进行仿真时,必须要有元件模型库的支 持,计算机上模拟的输入输出波形代替了实际电路调试中的信号源和示波器。这一次仿真主要是检 验设计方案在功能方面的正确性。
仿真通过后,根据原理图产生的电气连接网络表进行PCB板的自动布局布线。在制作 PCB板之前还可以进行后分析,包括热分析、噪声及窜扰分析、电磁兼容分析、可靠性分析等,并且可以将分析后的结果参数反标回电路图,进行第二次仿真,也称为后仿真,这一次仿真主要是检 验PCB板在实际工作环境中的可行性。
由此可见,电路级的EDA技术使电子工程师在实际的电子系统产生之前,就可以全面地 了解系统的功能特性和物理特性,从而将开发过程中出现的缺陷消灭在设计阶段,不仅缩短了开发时间,也降低了开发成本。 (3)
4.2 系统级设计
进入90年代以来,电子信息类产品的开发出现了两个明显的特点:一是产品的复杂程 度加深,二是产品的上市时限紧迫。然而电路级设计本质上是基于门级描述的单层次设计,设计的所有工作(包括设计输入,仿真和分析,设计修改等)都是在基本逻辑门这一层次上进行的,显然 这种设计方法不能适应新的形势,为此引入了一种高层次的电子设计方法,也称为系统级的设计方法。
高层次设计是一种“概念驱动式”设计,设计人员无须通过门级原理图描述电路,而是 针对设计目标进行功能描述,由于摆脱了电路细节的束缚,设计人员可以把精力集中于创造性的概念构思与方案上,一旦这些概念构思以高层次描述的形式输入计算机后,EDA系统就能以规则驱动 的方式自动完成整个设计。这样,新的概念得以迅速有效的成为产品,大大缩短了产品的研制周 期。不仅如此,高层次设计只是定义系统的行为特性,可以不涉及实现工艺,在厂家综合库的支持 下,利用综合优化工具可以将高层次描述转换成针对某种工艺优化的网表,工艺转化变得轻松容 易。具体的设计流程见图3。
高层次设计步骤如下:第一步: 按照“自顶向下”的设计方法进行系统划分。第二步: 输入VHDL代码,这是高层次设计中最为普遍的输入方式。此外,还可以采用图形输入 方式(框图,状态图等),这种输入方式具有直观、容易理解的优点。第三步:将以上的设计输入编译成标准的VHDL文件。对于大型设计,还要进行代码级的功能仿 真,主要是检验系统功能设计的正确性,因为对于大型设计,综合、适配要花费数小时,在综合前 对源代码仿真,就可以大大减少设计重复的次数和时间,一般情况下,可略去这一仿真步骤。第四步:利用综合器对VHDL源代码进行综合优化处理,生成门级描述的网表文件,这是将高层次 描述转化为硬件电路的关键步骤。 综合优化是针对ASIC芯片供应商的某一产品系列进行的,所以综合的过程要在相应的 厂家综合库支持下才能完成。综合后,可利用产生的网表文件进行适配前的时序仿真,仿真过程不 涉及具体器件的硬件特性,较为粗略。一般设计,这一仿真步骤也可略去。第五步:利用适配器将综合后的网表文件针对某一具体的目标器件进行逻辑映射操作,包括底 层器件配置、逻辑分割、逻辑优化和布局布线。适配完成后,产生多项设计结果:①适配报告,包 括芯片内部资源利用情况,设计的布尔方程描述情况等;②适配后的仿真模型;③器件编程文件。 根据适配后的仿真模型,可以进行适配后的时序仿真,因为已经得到器件的实际硬件特性(如时延 特性),所以仿真结果能比较精确地预期未来芯片的实际性能。如果仿真结果达不到设计要求,就 需要修改VHDL源代码或选择不同速度品质的器件,直至满足设计要求。第六步:将适配器产生的器件编程文件通过编程器或下载电缆载入到目标芯片FPGA或CPLD中。 如果是大批量产品开发,通过更换相应的厂家综合库,可以很容易转由ASIC形式实现。 (4)
5乒乓球游戏实例
一.基本要求:
1.设计一个由甲、乙双方参赛,有裁判的3人乒乓球游戏机。
2.用8个(或更多个)LED排成一条直线,以中点为界,两边各代表参赛双方的位置,其中一只点亮的LED指示球的当前位置,点亮的LED依此从左到右,或从右到左,其移动的速度应能调节。调
3.当“球”(点亮的那只LED)运动到某方的最后一位时,参赛者应能果断地按下位于自己一方的按钮开关,即表示启动球拍击球。若击中,则球向相反方向移动;若未击中,则对方得1分。
4.一方得分时,电路自动响铃3 s,这期间发球无效,等铃声停止后方能继续比赛。
5.设置自动记分电路,甲、乙双方各用2位数码管进行记分显示,每计满21分为1局。
6.甲、乙双方各设一个发光二极管,表示拥有发球权,每隔5次自动交换发球
摘要:为了实现模拟乒乓球比赛的过程和规则,我们采用了AT89C51单片机来控制模拟,采用用8个(或更多个)LED排成一条直线,以中点为界,两边各代表参赛双方的位置,其中一只点亮的LED指示球的当前位置,用蜂鸣器来实现响铃,
比赛双方用按钮开关来模拟启动球拍击球,用数码管来显示比赛分数,
关键词:AT89C51 LED 蜂鸣器。
二. 系统设计
2.1 总体设计
2.1.1 乒乓球比赛系统方框图
整个过程由AT89C51单片机控制,控制器产生控制信号来控制8个LED的开关,即可模拟LED依此从左到右,或从右到左,并可完成调节速度。对分数的显示我们用LED,LED有发光亮度强的优点,能够满足我们的要求。
2.1.2 单片机总体设计
AT89C51单片机有价格低,抗干扰能力强的优点,所以完成能够满足我们的要求,我们用单片机的P0控制8个LED的开关,通过对P0口的控制就能控制LED,由于P0口内部没有上拉电阻,不能驱动LED,所以我们在外部添加了上拉电阻。用P1口来控制数码管段显,用P2口的低四位控制数码管的位选,P30、P31来控制开关,PP26、P27来显示发球权。
2.1.3 LED开关的设计
要求LED按左到右、或右到左的方向移动,我们只要把P0口的值变化即可。依次对P0口给值0X01、0X02、0X04、0x08、0x10、0X20、0X40、0X80,即可实现方向的移动。
2.1.4数码管设计
通过控制数码管的段,就可以控制数码管的数学的显示,我们采用了动态方式来控制数码,该方式是通过让数码管快速切换显示,人眼分辨不出来,不仅节约电能,而且还能够节约单片机的端口,从而减少程序的复杂性。
2.2程序设计
本系统的程序如下:
#include《reg51.h》
#include《absacc.h》
#define uchar unsigned char
#define uint unsigned int
#define DB P1
sbit SB1=P3^0; //按钮1
sbit SB2=P3^1; //按钮2
sbit deng1=P2^7; //指示灯1
sbit deng2=P2^6; //指示灯2
sbit Mic=P2^5; //蜂鸣器
uchar count=0;
uchar i,j,fengshu1,fengshu2;
bit stall,chose,ret,flag=0;
uchar ledcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0到9的段码
uchar dengcode[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //从左到右移动的代码
/**************延时x毫秒程序*****************/
void delay(uint x)
{uchar y;
while(x--)
for(y=0;y《125;y++);}
/**************灯移动程序******************/
void yidong(uchar fang)
{for(i=0;i《8;i++)
{delay(1000);
if(fang==0)
{P0=dengcode[i];}
else P0=dengcode[8-i];
}
}
/********数码管显示程序****************/
void display(uchar a,uchar b)
{ P2=P2&&0Xe1;
delay(50) ;
P1=ledcode[a/10];
P2=P2&&0Xe0;
P2=P2&&0Xe2;
delay(50) ;
P1=ledcode[a%10];
P2=P2&&0Xe0;
P2=P2&&0Xe4;
delay(50) ;
P1=ledcode[b/10];
P2=P2&&0Xe0;
P2=P2&&0Xe8;
delay(50) ;
P1=ledcode[b%10];
P2=P2&&0Xe0;
}
/****蜂鸣器响应程序***/
void mic()
{Mic=1;
delay(3000);//延时3秒
Mic=0;
}
void main()
{uchar shu=0;
TMOD=0X01;
TH0=0X00;
TL0=0X00;
TR0=1;
ET0=1;
P0=0;
fengshu1=0;fengshu2=0;
P2=0;
P1=0;
SB1=1;
SB2=1;
while(1)
{for(i=0;i《2;i++)
for(j=0;j《5;j++)
{yidong(i);
if(i==0)
{deng1=1;deng2=0;}
ifi==1)
{deng2=1;deng1=0;}
if(SB2==0&&P0=0X80)
{yidong(0); }
if(SB2==1&&P0=0X80)
{fengshu1++;
if(fengshu1==21)
{fengshu1=0;fengshu2=0;}
mic();}
if(SB1==0&&P0=0X01)
{yidong(1); }
if(SB1==1&&P0=0X01)
{fengshu2++;
if(fenshu2==21)
{fengshu1=0;fengshu2=0;}
mic();}
}
}
void display0() interrupt 1
{ TH0=0;
TL0=0;
display(fengshu1,fengshu2);
}
评论
查看更多