EDA课程设计6235.docx
《EDA课程设计6235.docx》由会员分享,可在线阅读,更多相关《EDA课程设计6235.docx(26页珍藏版)》请在冰豆网上搜索。
EDA课程设计6235
苏州市职业大学
课程设计说明书
名称任意波形发生器设计
2010年1月18日至2010年1月22日共1周
院 系电子信息工程系
班级08电子2
姓名吕行
系 主 任曹丰文
教研室主任陆春妹
指导教师孙加存
目录
第1章绪论3
1.1EDA技术概述3
1.1.1EDA技术概念3
1.1.2EDA技术的发展趋势3
1.1.3EDA技术的应用4
1.2EDA技术的设计方法5
1.2.1设计方法5
1.2.2设计过程5
1.3数字系统设计6
1.3.1数字系统设计模型6
1.3.2数字系统设计基本步骤7
第2章设计要求7
第3章:
系统的设计8
3.1设计思路8
3.3设计步骤及流程8
3.2.1设计流程8
3.2.2设计步骤8
3.3模块分析9
3.3.1分频模块9
3.3.2正弦函数模块10
3.3.3三角波模块11
3.3.4方波11
3.3.5特殊波形12
3.3.6分频fp1Hz13
3.3.7测频模块13
3.3.8控制模块15
3.4硬件实现及调试结果16
3.4.1调试结果16
第4章课程设计总结(心得体会)18
参考文献19
第1章绪论
1.1EDA技术概述
1.1.1EDA技术概念
电子设计自动化(EDA)技术是以计算机为基础工作平台,以微电子技术为物理基础,以现代电子技术设计技术为灵魂,采用计算机软件工具,最终实现电子系统或专用集成电路(ASIC)的设计。
1.1.2EDA技术的发展趋势
从目前的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.1.3EDA技术的应用
EDA技术在教学、科研、产品设计与制造等方面都发挥着巨大的作用。
在教学方面,几乎所有的理工科院校的电子信息类专业都开设了EDA课程,主要目的是让学生了解EDA的基本概念和基本原理,掌握用HDL语言编写规范的程序,使用EDA工具进行电子课程的实验并进行简单系统的设计。
在科研方面,主要利用电路的仿真工具(EWB或Pspice)进行电路设计与仿真,利用虚拟仪器进行产品测试,将CPLD/FPGA器件实际应用到仪器设备中,从事PCB设计和ASIC设计等。
在产品设计与制造方面,EDA技术应用与仿真、生产、测试等各个环节,如PCB的制造、电子设备的研制与生产、电路板的焊接、运用FPGA/CPLD进行数字系统的设计与制作、ASIC的流片过程,等等。
EDA技术已经应用与各行各业,在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域都有EDA技术的应用。
另外,EDA软件的功能也日益强大。
1.2EDA技术的设计方法
1.2.1设计方法
数字系统的设计可以采用不同的方法,具体选择哪一种设计方法有多方面的考虑。
在复杂的IC设计环境下,概括起来只有两种设计方法:
一种为由底向上(Bottom-up)的设计方法,也称为传统的设计方法。
这种设计方法是传统的ICPCB的设计方法。
在IC复杂程度小于100000门时,常用这种方法,但是随着设计复杂程度的增加,该方法会产生产品生产周期长、可靠性低、开发费用高等问题。
另一种为自顶向下(Top-down)的设计方法,也称为现代的设计方法。
采用这种技术进行设计可以分为三个主要阶段:
系统设计、系统的综合优化和系统实现,各个阶段之间并没有绝对的界限。
1.2.2设计过程
本节将简单介绍用EDA技术进行数字系统设计的过程。
完整地了解EDA技术进行设计开发的流程对于正确选择和使用EDA软件、优化设计项目、提高设计效率十分有益。
一个完整的、典型的EDA设计流程既是自顶向下设计方法的具体实施途径,也是EDA工具软件本身的组成结构。
下图是运用EDA技术进行数字系统设计的流程图。
图1.1应用FPGA/CPLD的EDA开发流程
由图1.1知,可以把EDA设计流程分为:
设计输入、时序与功能门级仿真、综合
适配与下栽。
1.3数字系统设计
日常生活中可以发现无数数字系统的例子,如自动播放器、CD播放机、电话系统、个人计算机以及视频游戏等。
数字系统中的数字来自二进制计数系统,只有两个可能的值:
0和1,因此,数字系统必须实现如下功能:
(1)将现实世界的信息转换成数字网络可以理解的二进制“语言”。
(2)仅用数字0和1完成所要求的计算和操作。
(3)将处理的结果以我们可以理解的方式返回给现实世界。
1.3.1数字系统设计模型
数据子系统主要完成数据的采集、存储、运算处理和传输任务,它主要由存储器、运算器、数据选择器等组成,与外界进行数据交换,它所有的存取、运算等操作都是在控制子系统发出的控制信号的作用下进行的。
数据子系统与控制子系统之间的联系是:
数据子系统接受由控制子系统来的控制信号,同时将自己的操作进程作为条件信号输出给控制子系统。
控制子系统是执行算法的核心,它必须具备记忆能力,因此是一个时序系统。
它由一些组合逻辑电路和触发器等组成,与数据子系统共享一个时钟。
控制子系统的输入是外部控制信号和由数据子系统来的条件信号,按照设计方案中既定的算法程序,按序地进行状态转换,与每个状态以及有关条件对应的输出作为控制信号去控制数据子系统的操作顺序。
图1.2数字系统方框图
1.3.2数字系统设计基本步骤
运用EDA技术设计数字系统采用自上而下的设计方法,设计的基本步骤可以归纳如下:
1.明确设计要求2.确定系统方案3.受控制的设计4.控制器的设计
第2章设计要求
电路要求可以产生方波、正弦波、三角波,波形的频率可调,通过控制开关控制产生的波形,并通过控制按键控制设计信号的频率,改变频率的方法可以采用分频和DDS的原理进行控制信号频率。
并进行D/A转换电路与滤波电路的设计,通过采用施密特触发器对波形进行整形,设计一频率测量电路对所产生的频率进行测量,通过数码管显示出来,并在数码管上显示当前的波形代码。
第3章:
系统的设计
3.1设计思路
采用由底向上的设计方法,根据系统对硬件的要求详细编制技术规格书,画出系统控制流程图,仔细分析系统要求达到的各个功能,将系统的功能进行细化,合理地划分功能模块,并画出系统的功能框图;进行各功能模块的设计,运用VHDL语言设计出各个功能模块;在软件环境下导出各个功能框图,在将各个模块按系统要求达到的功能连接起来,做出系统的原理图;编译、调试完成后,在下载到硬件结构中,进行硬件调试。
3.3设计步骤及流程
3.2.1设计流程
图3.1设计流程图
3.2.2设计步骤
1、编写各个模块的源程序。
2、建立工程,以顶层原理图文件名为工程名,把先前建立的VHDL程序加入这个工程中,并对每个VHDL程序创建原理图符号,通过原理图输入设计顶层原理图。
检查编译。
3、选择元器件,定义好管脚。
4、编译,下载编程,进行硬件测试。
3.3模块分析
经过功能分析,将系统分为几个功能模块,分别为分频模块,正弦函数模块,三角波模块,方波,特殊波形,分频1Hz,测频模块,控制模块。
将模块的VHDL程序创建原理图符号,按下图建立顶层原理图。
图3.2顶层原理框图
3.3.1分频模块
分频器是数字电路中常用的电路之一,用VHDL语言设计分频器的关键是输出电平的翻转的时机。
通过计数方法进行电平的翻转是常用的设计方法。
此处是偶数分频器。
以下是分频模块的程序清单:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYfpIS
port(clk:
instd_logic;--input1KHz
k:
inintegerrange7downto0;
clko:
bufferstd_logic);
endfp;
architectureaoffpis
signaltemp:
std_logic_vector(3downto0);
begin
process(clk)
begin
ifclk'eventandclk='1'then
iftemptemp<=temp+1;
else
temp<="0000";
clko<=notclko;
endif;endif;
endprocess;enda;
3.3.2正弦函数模块
Sin.vhd程序清单:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entitysinis
port(clk4:
instd_logic;
k:
inintegerrange7downto0;
dd4:
outintegerrange255downto0);
endsin;
architecturedaccofsinis
signalq:
integerrange63downto0;
begin
process(clk4)
begin
if(clk4'eventandclk4='1')then
q<=q+k;
endif;
endprocess;
process(q)
begin
caseqis
when00=>dd4<=255;
when01=>dd4<=254;
when02=>dd4<=253;
when03=>dd4<=250;
when04=>dd4<=245;
when05=>dd4<=240;
when06=>dd4<=234;
when07=>dd4<=226;
when08=>dd4<=218;
when09=>dd4<=208;
when10=>dd4<=198;
when11=>dd4<=188;
when12=>dd4<=176;
when13=>dd4<=165;
when14=>dd4<=152;
when15=>dd4<=140;
when16=>dd4<=128;
when17=>dd4<=115;
when18=>dd4<=103;
when19=>dd4<=90;
when20=>dd4<=79;
when21=>dd4<=67;
when22=>dd4<=57;
when23=>dd4<=47;
when24=>dd4<=37;
when25=>dd4<=29;
when26=>dd4<=21;
when27=>dd4<=15;
when28=>dd4<=10;
when29=>dd4<=5;
when30=>dd4<=2;
when31=>dd4<=1;
when32=>dd4<=0;
when33=>dd4<=1;
when34=>dd4<=2;
when35=>dd4<=5;
when36=>dd4<=10;
when37=>dd4<=15;
when38=>dd4<=21;
when39=>dd4<=29;
when40=>dd4<=37;
when41=>dd4<=47;
when42=>dd4<=57;
when43=>dd4<=67;
when44=>dd4<=79;
when45=>dd4<=90;
when46=>dd4<=103;
when47=>dd4<=115;
when48=>dd4<=128;
when49=>dd4<=140;
when50=>dd4<=165;
when51=>dd4<=176;
when52=>dd4<=188;
when53=>dd4<=198;
when54=>dd4<=208;
when55=>dd4<=218;
when56=>dd4<=226;
when57=>dd4<=234;
when58=>dd4<=240;
when59=>dd4<=245;
when60=>dd4<=250;
when61=>dd4<=253;
when62=>dd4<=254;
when63=>dd4<=255;
whenothers=>null;
endcase;
endprocess;
enddacc;
3.3.3三角波模块
由于三角波是线性增加和线性减少的两条线段构成的,所以可以直接用VHDL语言编程来实现三角波。
当线性自加到最高点时,有控制语句控制其自减,直到减到最低点时再重复之前的过程,从而实现三角波。
程序清单如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitytriais
port(clk3:
instd_logic;
k:
inintegerrange7downto0;
dd3:
outintegerrange255downto0);
endtria;
architecturedaccoftriais
signalb:
std_logic;
signalc:
integerrange255downto0;
begin
process(clk3)
begin
if(clk3'eventandclk3='1')then
if(b='0')then
c<=c+k;
if(c>=64)then
b<='1';
endif;
elsif(b='1')then
c<=c-k;
if(c<=1)then
b<='0';
endif;
endif;
dd3<=c;
endif;
endprocess;enddacc
3.3.4方波
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entitysquareis
port(clk1:
instd_logic;
k:
inintegerrange7downto0;
dd1:
bufferintegerrange255downto0);
endsquare;
architecturedaccofsquareis
signalq:
integerrange255downto0;
begin
process(clk1)
begin
if(clk1'eventandclk1='1')then
q<=q+k;
endif;
endprocess;
process(q)
begin
caseqis
when0to31=>dd1<=255;
when32to63=>dd1<=127;
whenothers=>null;
endcase;
endprocess
enddacc;
3.3.5特殊波形
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entitysintrais
port(clk4:
instd_logic;
k:
inintegerrange7downto0;
dd4:
outintegerrange255downto0);
endsintra;
architecturedaccofsintrais
signalq:
integerrange63downto0;
begin
process(clk4)
begin
if(clk4'eventandclk4='1')then
q<=q+k;
endif;
endprocess;
process(q)
begin
caseqis
when00=>dd4<=255;
when01=>dd4<=254;
when02=>dd4<=253;
when03=>dd4<=250;
when04=>dd4<=245;
when05=>dd4<=240;
when06=>dd4<=234;
when07=>dd4<=226;
when08=>dd4<=218;
when09=>dd4<=208;
when10=>dd4<=198;
when11=>dd4<=188;
when12=>dd4<=176;
when13=>dd4<=165;
when14=>dd4<=152;
when15=>dd4<=140;
when16=>dd4<=128;
when17=>dd4<=120;
when18=>dd4<=112;
when19=>dd4<=104;
when20=>dd4<=96;
when21=>dd4<=88;
when22=>dd4<=80;
when23=>dd4<=72;
when24=>dd4<=64;
when25=>dd4<=56;
when26=>dd4<=48;
when27=>dd4<=40;
when28=>dd4<=32;
when29=>dd4<=24;
when30=>dd4<=16;
when31=>dd4<=8;
when32=>dd4<=0;
when33=>dd4<=8;
when34=>dd4<=16;
when35=>dd4<=24;
when36=>dd4<=32;
when37=>dd4<=40;
when38=>dd4<=48;
when39=>dd4<=56;
when40=>dd4<=64;
when41=>dd4<=72;
when42=>dd4<=80;
when43=>dd4<=88;
when44=>dd4<=96;
when45=>dd4<=104;
when46=>dd4<=112;
when47=>dd4<=120;
when48=>dd4<=128;
when49=>dd4<=140;
when50=>dd4<=165;
when51=>dd4<=176;
when52=>dd4<=188;
when53=>dd4<=198;
when54=>dd4<=208;
when55=>dd4<=218;
when56=>dd4<=226;
when57=>dd4<=234;
when58=>dd4<=240;
when59=>dd4<=245;
when60=>dd4<=250;
when61=>dd4<=253;
when62=>dd4<=254;
when63=>dd4<=255;
whenothers=>null;
endcase;
endprocess;enddacc;
3.3.6分频fp1Hz
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYfp1HZIS
PORT(clk:
instd_logic;--10M
clk1Hz:
bufferSTD_LOGIC);
ENDfp1hz;
ARCHITECTUREoneOFfp1hzIS
SIGNALtest:
integerrange0to250000;
begin
process(clk)
begin
ifclk'eventandclk='1'then
iftest<131000then
test<=test+1;
else
test<=0;
clk1hz<=notclk1hz;
endif;
endif;
endprocess;
3.3.7测频模块
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ari