eda课程设计Word文件下载.docx
《eda课程设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《eda课程设计Word文件下载.docx(27页珍藏版)》请在冰豆网上搜索。
EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
EDA技术的出现,极大地提高了电路设计的效率和可*性,减轻了设计者的劳动强度。
20世纪90年代,国际上电子和计算机技术较先进的国家,一直在积极探索新的电子电路设计方法,并在设计方法、工具等方面进行了彻底的变革,取得了巨大成功。
在电子技术设计领域,可编程逻辑器件(如CPLD、FPGA)的应用,已得到广泛的普及,这些器件为数字系统的设计带来了极大的灵活性。
这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷。
这一切极大地改变了传统的数字系统设计方法、设计过程和设计观念,促进了EDA技术的迅速发展。
1.1.1设计方法
(1)前端设计(系统建模RTL级描述)后端设计(FPGAASIC)系统建模
(2)IP复用
(3)前端设计
(4)系统描述:
建立系统的数学模型。
(5)功能描述:
描述系统的行为或各子模块之间的数据流图。
(6)逻辑设计:
将系统功能结构化,通常以文本、原理图、逻辑图、布尔表达式来表示设计结果。
(7)仿真:
包括功能仿真和时序仿真,主要验证系统功能的正确性及时序特性。
1.1.2EDA工具软件分类
EDA工具软件可大致可分为芯片设计辅助软件、可编程芯片辅助设计软件、系统设计辅助软件等三类。
目前进入我国并具有广泛影响的EDA软件是系统设计软件辅助类和可编程芯片辅助设计软件:
Protel、AltiumDesigner、PSPICE、multiSIM10(原EWB的最新版本)、OrCAD、PCAD、LSIIogic、MicroSim、ISE、modelsim、Matlab等等。
这些工具都有较强的功能,一般可用于几个方面,例如很多软件都可以进行电路设计与仿真,同进还可以进行PCB自动布局布线,可输出多种网表文件与第三方软件接口。
1.1.3PLD设计工具
PLD(ProgrammableLogicDevice)是一种由用户根据需要而自行构造逻辑功能的数字集成电路。
目前主要有两大类型:
CPLD(ComplexPLD)和FPGA(FieldProgrammableGateArray)。
它们的基本设计方法是借助于EDA软件,用原理图、状态机、布尔表达式、硬件描述语言等方法,生成相应的目标文件,最后用编程器或下载电缆,由目标器件实现。
生产PLD的厂家很多,但最有代表性的PLD厂家为Altera、Xilinx和Lattice公司。
PLD的开发工具一般由器件生产厂家提供,但随着器件规模的不断增加,软件的复杂性也随之提高,目前由专门的软件公司与器件生产厂家使用,推出功能强大的设计软件。
下面介绍主要器件生产厂家和开发工具。
其中,PLD(可编程逻辑器件)是一种可以完全替代74系列及GAL、PLA的新型电路,只要有数字电路基础,会使用计算机,就可以进行PLD的开发。
PLD的在线编程能力和强大的开发软件,使工程师可以几天,甚至几分钟内就可完成以往几周才能完成的工作,并可将数百万门的复杂设计集成在一颗芯片内。
PLD技术在发达国家已成为电子工程师必备的技术。
1.1.4EDA软件
VHDL语言:
超高速集成电路硬件描述语言(VHSICHardwareDeseriptionLanguagt,简称VHDL),是IEEE的一项标准设计语言。
它源于美国国防部提出的超高速集成电路(VeryHighSpeedIntegratedCircuit,简称VHSIC)计划,是ASIC设计和PLD设计的一种主要输入工具。
1.1.5EDA技术的发展趋势
(1)设计工具的发展。
(2)具有混合信号处理能力。
(3)仿真工具的发展。
(4)综合工具的开发。
1.2VHDL语言
VHDL的英文全名是Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage,诞生于1982年。
1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言。
VHDL主要用于描述数字系统的结构,行为,功能和接口。
除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。
VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。
在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。
这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。
1.2.1VHDL语言的特点
VHDL语言能够成为标准化的硬件描述语言并获得广泛应用,它自身必然具有很多其他硬件描述语言所不具备的优点。
归纳起来,VHDL语言主要具有以下优点:
[1]
(1)VHDL语言功能强大,设计方式多样
VHDL语言具有强大的语言结构,只需采用简单明确的VHDL语言程序就可以描述十分复杂的硬件电路。
同时,它还具有多层次的电路设计描述功能。
此外,VHDL语言能够同时支持同步电路、异步电路和随机电路的设计实现,这是其他硬件描述语言所不能比拟的。
VHDL语言设计方法灵活多样,既支持自顶向下的设计方式,也支持自底向上的设计方法;
既支持模块化设计方法,也支持层次化设计方法。
(2)VHDL语言具有强大的硬件描述能力
VHDL语言具有多层次的电路设计描述功能,既可描述系统级电路,也可以描述门级电路;
描述方式既可以采用行为描述、寄存器传输描述或者结构描述,也可以采用三者的混合描述方式。
同时,VHDL语言也支持惯性延迟和传输延迟,这样可以准确地建立硬件电路的模型。
VHDL语言的强大描述能力还体现在它具有丰富的数据类型。
VHDL语言既支持标准定义的数据类型,也支持用户定义的数据类型,这样便会给硬件描述带来较大的自由度。
(3)VHDL语言具有很强的移植能力
VHDL语言很强的移植能力主要体现在:
对于同一个硬件电路的VHDL语言描述,它可以从一个模拟器移植到另一个模拟器上、从一个综合器移植到另一个综合器上或者从一个工作平台移植到另一个工作平台上去执行。
(4)VHDL语言的设计描述与器件无关
采用VHDL语言描述硬件电路时,设计人员并不需要首先考虑选择进行设计的器件。
这样做的好处是可以使设计人员集中精力进行电路设计的
优化,而不需要考虑其他的问题。
当硬件电路的设计描述完成以后,VHDL语言允许采用多种不同的器件结构来实现。
(5)VHDL语言程序易于共享和复用
第二章课题分析
2.1课题要求
电路要求可以产生方波、正弦波、三角波,波形的频率可调,通过控制开关控制产生的波形,并通过控制按键控制设计信号的频率,
在完成以上设计功能的要求后,设计一特殊信号的产生电路,示意波形如下图。
2.2课题分析
对方波、正弦波、三角波与特殊波形进行波形的设计,然后解决如何将四种波形进行合并,使它们按操作输出所需波形,波形选择与控制功能由时钟脉冲输入选择模块完成。
当选择了一种波形时,对应的波形模块输入时钟脉冲,并输出波形数据,其他三个波形模块的输入则始终为0,不输出波形。
波形产生电路主要通过调用寄存器中的数据,控制取出数据的速度从而控制周期。
波形周期的改变一般有两种方法;
一种是改变时钟的速度,也即改变取出寄存器中数据的速度控制所产生波形的速度;
另一种是通过控制取出寄存器中数据的间隔来控制产生波形的周期,所取数据的间隔越大,所产生波形的频率就越大。
课题分析模块示意图如下:
正弦波
方波
输
出
选
择
三角波
频率调节
2.3系统设置原理图
第三章模块分析
3.1正弦波
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entitysinis
port(clk4:
instd_logic;
dd4:
outintegerrange255downto0);
endsin;
architecturedaccofsinof
signalq:
integerrange63downto0;
begin
process(clk4)
begin
if(clk4'
eventandclk='
1'
)then
q=q+1;
endif;
endprocess;
process(q)
caseqis
when00=>
dd4<
=255;
when01=>
=254;
when02=>
=253;
when03=>
=250;
when04=>
=245;
when05=>
=240;
when06=>
=234;
when07=>
=226;
when08=>
=218;
when09=>
=208;
when10=>
=198;
when11=>
=188;
when12=>
=176;
when13=>
=165;
when14=>
=152;
when15=>
=140;
when16=>
=128;
when17=>
=115;
when18=>
=103;
when19=>
=90;
when20=>
=79;
when21=>
=67;
when22=>
=57;
when23=>
=47;
when24=>
=37;
when25=>
=29;
when26=>
=21;
when27=>
=15;
when28=>
=10;
when29=>
=5;
when30=>
=2;
when31=>
=1;
when32=>
=0;
when33=>
when34=>
when35=>
when36=>
when37=>
when38=>
when39=>
when40=>
when41=>
when42=>
when43=>
when44=>
when45=>
when46=>
when47=>
when48=>
when49=>
when50=>
when51=>
when52=>
when53=>
when54=>
when55=>
when56=>
when57=>
when58=>
when59=>
when60=>
when61=>
when62=>
when63=>
endcase;
endprocess;
3.2三角波
entitytriangularis
port(clk3:
dd3:
outstd_logic_vector(7downto0));
endtriangular
architecturedaccoftriangularis
singalb:
std_logic;
singalc:
std_logic_vector(7downto0);
process(clk3)
begin
if(clk3'
eventandclk3='
if(b='
0'
c<
=c+1;
if(c=250)then
b<
='
;
elsif(b='
c=c-1;
if(c='
b='
dd3<
=c;
enddacc;
3.3方波
entitysquareis
port(clk1:
instd_logic;
k:
inintegerrange15downto0;
dd1:
bufferintegerrange255downto0);
endsquare;
architecturedaccofsquareis
integerrange255downto0;
process(clk1)
if(clk1'
eventandclk1='
)then
q<
=q+k;
endif;
caseqis
when0to127=>
dd1<
when128to255=>
=127;
whenothers=>
null;
endcase;
3.4特殊波形
entitysintrais
dd4:
endsintra;
architecturedaccofsintrais
integerrange63downto0;
if(clk4'
eventandclk4='
q<
when00=>
when01=>
when02=>
when03=>
when04=>
when05=>
when06=>
when07=>
when08=>
when09=>
when10=>
when11=>
when12=>
when13=>
when14=>
when15=>
when16=>
when17=>
when18=>
when19=>
when20=>
when21=>
when22=>
when23=>
when24=>
when25=>
when26=>
when27=>
when28=>
when29=>
when30=>
when31=>
when32=>
when33=>
=8;
when34=>
=16;
when35=>
=24;
when36=>
=32;
when37=>
=40;
when38=>
=48;
when39=>
=56;
when40=>
=64;
when41=>
=72;
when42=>
=80;
when43=>
=88;
when44=>
=96;
when45=>
=104;
when46=>
=112;
when47=>
=120;
when48=>
when49=>
=136;
when50=>
=144;
when51=>
when52=>
=160;
when53=>
=168;
when54=>
when55=>
=184;
when56=>
=192;
when57=>
=200;
when58=>
when59=>
=216;
when60=>
=224;
when61=>
=232;
when62=>
when63=>
=247;
whenothers=>
endcase;
3.5分频
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYfpIS
port(clk:
--input1KHz
k:
instd_logic_vector(3downto0);
clko:
bufferstd_logic);
--out1hz
endfp;
architectureaoffpis
signaltemp:
std_logic_vector(3downto0);
process(clk)
ifclk'
then
iftemp<
kthen
temp<
=temp+1;
else
="
0000"
clko<
=notclko;
endif;
enda;
3.6时钟输入
entityWaveSelectis
port(clk1,clk2,clk3,clk4:
instd_logic_vector(7downto0);
sel:
instd_logic_vector(1downto0);
outwave:
outstd_logic_vector(7downto0));
endWaveSelect;
architectureartofWaveSelectis
withselselect
outwave<
=clk1when"
00"
clk2when"
01"
clk3when"
10"
clk4when"
11"
nullwhenothers;
endart;
3.7输出波形选择器
port(clk1,clk2,clk3,clk4:
instd_log