基于eda的智能函数发生器课程设计说明书学位论文.docx

上传人:b****5 文档编号:7395143 上传时间:2023-05-11 格式:DOCX 页数:23 大小:116.54KB
下载 相关 举报
基于eda的智能函数发生器课程设计说明书学位论文.docx_第1页
第1页 / 共23页
基于eda的智能函数发生器课程设计说明书学位论文.docx_第2页
第2页 / 共23页
基于eda的智能函数发生器课程设计说明书学位论文.docx_第3页
第3页 / 共23页
基于eda的智能函数发生器课程设计说明书学位论文.docx_第4页
第4页 / 共23页
基于eda的智能函数发生器课程设计说明书学位论文.docx_第5页
第5页 / 共23页
基于eda的智能函数发生器课程设计说明书学位论文.docx_第6页
第6页 / 共23页
基于eda的智能函数发生器课程设计说明书学位论文.docx_第7页
第7页 / 共23页
基于eda的智能函数发生器课程设计说明书学位论文.docx_第8页
第8页 / 共23页
基于eda的智能函数发生器课程设计说明书学位论文.docx_第9页
第9页 / 共23页
基于eda的智能函数发生器课程设计说明书学位论文.docx_第10页
第10页 / 共23页
基于eda的智能函数发生器课程设计说明书学位论文.docx_第11页
第11页 / 共23页
基于eda的智能函数发生器课程设计说明书学位论文.docx_第12页
第12页 / 共23页
基于eda的智能函数发生器课程设计说明书学位论文.docx_第13页
第13页 / 共23页
基于eda的智能函数发生器课程设计说明书学位论文.docx_第14页
第14页 / 共23页
基于eda的智能函数发生器课程设计说明书学位论文.docx_第15页
第15页 / 共23页
基于eda的智能函数发生器课程设计说明书学位论文.docx_第16页
第16页 / 共23页
基于eda的智能函数发生器课程设计说明书学位论文.docx_第17页
第17页 / 共23页
基于eda的智能函数发生器课程设计说明书学位论文.docx_第18页
第18页 / 共23页
基于eda的智能函数发生器课程设计说明书学位论文.docx_第19页
第19页 / 共23页
基于eda的智能函数发生器课程设计说明书学位论文.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于eda的智能函数发生器课程设计说明书学位论文.docx

《基于eda的智能函数发生器课程设计说明书学位论文.docx》由会员分享,可在线阅读,更多相关《基于eda的智能函数发生器课程设计说明书学位论文.docx(23页珍藏版)》请在冰点文库上搜索。

基于eda的智能函数发生器课程设计说明书学位论文.docx

基于eda的智能函数发生器课程设计说明书学位论文

 

邮电与信息工程学院

 

课程设计说明书

 

课题名称:

电子设计自动化(EDA)课程设计

一、课程设计的任务的基本要求:

1.设计目的:

(1)学习使用EDA设计软件QuartusⅡ,了解电路描述、综合、模拟过程。

(2)掌握使用EDA工具设计数字系统的设计思路和设计方法。

2.设计要求:

(1)以AlteraDE2开发系统为验证平台,根据设计题目要求完成设计输入、综合、仿真与验证工作。

(2)提供设计报告,报告要求包括以下内容:

设计任务书、题目、摘要(中英文)、正文、参考文献。

其中正文应包含:

设计思路、设计输入文件、设计与调试过程、仿真与验证结果和设计结论。

3.设计题目:

(1)设计智能函数发生器,要求实现正弦波、方波、三角波、递增、递减斜波和阶梯波六种波形,所产生的波形频率用数码管显示。

二、进度安排:

18周(2009.6.8-2009.6.12):

周一:

选择课程设计题目,明确课程设计目的和任务。

周二、周三:

查看参考资料。

周四、周五:

原理图与程序设计。

19周(2009.6.15-2008.6.19):

周一、周二:

上机调试原理图与程序。

周三:

整理所有任务资料,答辩。

周四、周五:

撰写课程设计报告。

 

三、应收集资料及主要参考文献:

(1)AlteraDE2UserManual

(2)基于QuartusII的FPGA/CPLD数字系统设计实例,周润景等,电子工业出版社

(3)EDA技术实用教程(第二版),潘松等,科学出版社

 

四、课程设计摘要(中文):

函数发生器是一种很常用的器件,在很多情况下,最常用的波形是正弦波,方波,三角波,递增,递减斜波和阶梯波六种。

虽然用模拟电子线路很容易得到这些波形,但是这种方法会使硬件线路较为繁琐,而且模拟线路会受到干扰。

本设计采用综合设计方法使用FPGA来实现智能函数发生器,它由六个波形产生模块及波形选择输出模块组成,波形选择模块的输出q接在D/A转换的数据端,就可以在D/A输出端得到想要的其中之一的任一种光滑的波形

五、课程设计摘要(英文):

Thefunctiongeneratorisonekindofverycommonlyusedcomponent,Inverymanysituations,Themostcommonlyusedprofileisasinewave,Square-wave,Trianglewave,Increasesprogressively,Decreasesprogressivelythewavetiltandthestepsandladderswavesixkinds.Althoughisveryeasywiththesimulationelectroniccircuittoobtaintheseprofiles,Butthismethodcancausethehardwarelinetobetedious,Moreovertheartificiallinecanreceivethedisturbance.ThisdesignusesFPGAtorealizetheintelligencefunctiongenerator,Ithasthemoduleandtheprofilechoiceoutputmodulebysixprofilesiscomposed,ProfilechoicemoduleoutputqmeetsinD/Atransformsdataend,MayintheD/Aout-portobtainsoneofthemwhichwantsnomatterwhatonekindofsmoothprofile.

 

正文

一、设计思路

1.基于QUASTUSII平台,采用VHDL语言,设计一波形信号发生器。

首先根据对各波形的幅度进行采样,获得各波形的波形数据表,使用FPGA来实现智能函数发生器,它由六个波形产生模块及波形选择输出模块组成,然后FPGA根据输入的时钟(频率可根据要求可变)作为地址信号,从FPGA数据线上输出相应的波形数据,再送入实验板上的D/A转换芯片进行转换为模拟信号,最后送入滤波电路滤波后输出,就可以得到想要的任意其中的一个波形

二、设计输入文件与调试分频

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityfenpinis

port(clk:

instd_logic;

clkfen:

outstd_logic);

endfenpin;

architecturefenpinoffenpinis

signalclk_mid:

std_logic;

begin

process(clk)

variabledata:

integerrange0to99;

begin

ifclk'eventandclk='1'then

ifdata=99then

data:

=0;

clk_mid<=notclk_mid;

else

data:

=data+1;

endif;

endif;

clkfen<=clk_mid;

endprocess;

endfenpin;

2.递减波形数据产生模块设计

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYdjIS

PORT(clk,reset:

INSTD_LOGIC;

q:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDdj;

ARCHITECTUREbehaveOFdjIS

BEGIN

PROCESS(clk,reset)

VARIABLEtmp:

STD_LOGIC_VECTOR(7DOWNTO0);

BEGIN

IFreset='0'THEN

tmp:

="11111111";

ELSIFclk'EVENTANDclk='1'THEN

IFtmp="00000000"THEN

Tmp:

="11111111";

ELSE

tmp:

=tmp-1;

ENDIF;

ENDIF;

q<=tmp;

ENDPROCESS;

ENDbehave;

3.递增(锯齿波)波形数据产生模块设计LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYdzIS

PORT(clk,reset:

INSTD_LOGIC;

q:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDdz;

ARCHITECTUREbehaveOFdzIS

BEGIN

PROCESS(clk,reset)

VARIABLEtmp:

STD_LOGIC_VECTOR(7DOWNTO0);

BEGIN

IFreset='0'THEN

tmp:

="00000000";

ELSIFclk'EVENTANDclk='1'THEN

IFtmp="11111111"THEN

tmp:

="00000000";

ELSE

tmp:

=tmp+1;

ENDIF;

ENDIF;

q<=tmp;

ENDPROCESS;

ENDbehave;

4.方波波形数据产生模块设计

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYfbIS

PORT(clk,reset:

INSTD_LOGIC;

q:

OUTINTEGERRANGE0TO255);

ENDfb;

ARCHITECTUREbehaveOFfbIS

SIGNALa:

BIT;

BEGIN

PROCESS(clk,reset)

VARIABLEcnt:

INTEGERrange0to31;

BEGIN

IFreset='0'THEN

A<='0';

ELSIFclk'EVENTANDclk='1'THEN

IFcnt<31THEN

Cnt:

=cnt+1;

ELSE

cnt:

=0;

a<=NOTa;

ENDIF;

ENDIF;

ENDPROCESS;

Process(clk,a)

BEGIN

IFclk'EVENTANDclk='1'THEN

IFa='1'THEN

Q<=255;

ELSE

Q<=0;

ENDIF;

ENDIF;

ENDPROCESS;

ENDbehave;

5.三角波波形数据产生模块设计

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYjcbIS

PORT(clk,reset:

INSTD_LOGIC;

q:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDjcb;

ARCHITECTUREbehaveOFjcbIS

BEGIN

PROCESS(clk,reset)

VARIABLEtmp:

STD_LOGIC_VECTOR(7DOWNTO0);

VARIABLEa:

STD_LOGIC;

BEGIN

IFreset='0'THEN

tmp:

="00000000";

ELSIFclk'EVENTANDclk='1'THEN

IFa='0'THEN

IFtmp="11111110"THEN

tmp:

="11111111";

a:

='1';

ELSE

tmp:

=tmp+1;

ENDIF;

ELSE

IFtmp="00000001"THEN

tmp:

="00000000";

a:

='0';

ELSE

tmp:

=tmp-1;

ENDIF;

ENDIF;

ENDIF;

q<=tmp;

ENDPROCESS;;

ENDbehave

6.阶梯波形数据产生模块设计

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityjtbis

port(clk,reset:

instd_logic;

q:

outstd_logic_vector(7downto0));

endjtb;

architectureaofjtbis

begin

process(clk,reset)

variabletmp:

std_logic_vector(7downto0);

begin

ifreset='0'then

tmp:

="00000000";

elseifclk'eventandclk='1'then

iftmp="11111111"then

tmp:

="00000000";

else

tmp:

=tmp+16;

endif;

endif;

endif;

q<=tmp;

endprocess;

enda;

7.正弦波波形数据产生模块设计

libraryieee;

useieee.std_logic_arith.all;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityzxis

port(clk:

instd_logic;

reset:

instd_logic;

q:

outstd_logic_vector(7downto0));

endzx;

architecturebehavofzxis

signalb:

integerrange0to63;

signald:

integerrange0to255;

begin

process(clk)

begin

ifreset='0'thenb<=0;

elsifclk'eventandclk='1'then

ifb=63thenb<=0;

elseb<=b+1;

endif;

endif;

endprocess;

process(b)

begin

casebis

when00=>d<=255;when01=>d<=254;when02=>d<=252;when03=>d<=249;

when04=>d<=245;when05=>d<=239;when06=>d<=233;when07=>d<=225;

when08=>d<=217;when09=>d<=207;when10=>d<=197;when11=>d<=186;

when12=>d<=174;when13=>d<=162;when14=>d<=150;when15=>d<=137;

when16=>d<=124;when17=>d<=112;

when18=>d<=99;when19=>d<=87;when20=>d<=75;when21=>d<=64;when22=>d<=53;when23=>d<=43;when24=>d<=34;when25=>d<=26;when26=>d<=19;when27=>d<=13;

when28=>d<=8;when29=>d<=4;

when30=>d<=1;when31=>d<=0;

when32=>d<=0;when33=>d<=1;

when34=>d<=4;when35=>d<=8;

when36=>d<=13;when37=>d<=19;when38=>d<=26;when39=>d<=34;

when40=>d<=43;when41=>d<=53;when42=>d<=64;when43=>d<=75;

when44=>d<=87;when45=>d<=99;when46=>d<=112;when47=>d<=124;

when48=>d<=137;when49=>d<=150;when50=>d<=162;when51=>d<=174;

when52=>d<=186;when53=>d<=197;when54=>d<=207;when55=>d<=217;

when56=>d<=225;when57=>d<=233;when58=>d<=239;when59=>d<=245;

when60=>d<=249;when61=>d<=252;when62=>d<=254;when63=>d<=255;

whenothers=>null;

endcase;

endprocess;

q<=conv_std_logic_vector(d,8);

endbehav;

8.六选一选择器模块设计

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYxzIS

PORT(sel:

INSTD_LOGIC_VECTOR(2DOWNTO0);

d0,d1,d2,d3,d4,d5:

INSTD_LOGIC_VECTOR(7DOWNTO0);

q:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDxz;

ARCHITECTUREbehaveOFxzIS

BEGIN

PROCESS(sel)

BEGIN

CASEselIS

WHEN"000"=>q<=d0;

WHEN"001"=>q<=d1;

WHEN"010"=>q<=d2;

WHEN"011"=>q<=d3;

WHEN"100"=>q<=d4;

WHEN"101"=>q<=d5;

WHENOTHERS=>NULL;

ENDCASE;

ENDPROCESS;

ENDbehave;

9.译码

libraryieee;

useieee.std_logic_1164.all;

useieee.numeric_std.all;

useieee.std_logic_unsigned.all;

entityymis

port(clk,rst:

instd_logic;

data:

instd_logic_vector(7downto0);

sel:

outstd_logic_vector(2downto0);

data_disp:

outstd_logic_vector(6downto0));

endym;

architectureRTLofymis

signalcount:

integerrange9downto0;

signaltemp:

integerrange4downto0;

signalnumber_h,number_t,number_l:

integerrange0to9;

begin

process(data,clk,rst)

begin

if(rst='0')then

number_h<=0;

number_t<=0;

number_l<=0;

elsif(to_integer(unsigned(data))>=200ANDto_integer(unsigned(data))-200>=50)then

number_h<=2;

number_t<=5;

number_l<=to_integer(unsigned(data))-250;

elsif(to_integer(unsigned(data))>=200ANDto_integer(unsigned(data))-200>=40)then

number_h<=2;

number_t<=4;

number_l<=to_integer(unsigned(data))-240;

elsif(to_integer(unsigned(data))>=200ANDto_integer(unsigned(data))-200>=30)then

number_h<=2;

number_t<=3;

number_l<=to_integer(unsigned(data))-230;

elsif(to_integer(unsigned(data))>=200ANDto_integer(unsigned(data))-200>=20)then

number_h<=2;

number_t<=2;

number_l<=to_integer(unsigned(data))-220;

elsif(to_integer(unsigned(data))>=200ANDto_integer(unsigned(data))-200>=10)then

number_h<=2;

number_t<=1;

number_l<=to_integer(unsigned(data))-210;

elsif(to_integer(unsigned(data))>=200)then

number_h<=2;

number_t<=0;

number_l<=to_integer(unsigned(data))-200;

elsif(to_integer(unsigned(data))>=100ANDto_integer(unsigned(data))-100>=90)then

number_h<=1;

number_t<=9;

number_l<=to_integer(unsigned(data))-190;

elsif(to_integer(unsigned(data))>=100ANDto_integer(unsigned(data))-100>=80)then

number_h<=1;

number_t<=8;

number_l<=to_integer(unsigned(data))-180;

elsif(to_integer(unsigned(data))>=100ANDto_integer(unsigned(data))-100>=70)then

number_h<=1;

number_t<=7;

number_l<=to_integer(unsigned(data))-170;

elsif(to_integer(unsigned(data))>=100ANDto_integer(unsigned(data))-100>=60)then

number_h<=1;

number_t<=6;

number_l<=to_integer(unsigned(data))-160;

elsif(to_integer(unsigned(data))>=100ANDto_integer(unsigned(data))-100>=50)then

number_h<=1;

number_t<=5;

number_l<=to_integer(unsigned(data))-150;

elsif(to_integer(unsigned(data))>=100ANDto_integer(unsigned(data))-100>=40)then

number_h<=1;

number_t<=4;140;

elsif(to_integer(unsigned(data))>=100ANDto_integer(unsigned(data))-100>=30)then

number_h<=1;

number_t<=3;

number_l<=to_integer(unsigned(data))-130;

elsif(to_integer(unsigned(data))>=100ANDto_integer(unsigned(data))-100>=20)then

number_h<=1;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2