基于FPGA的函数发生器.docx

上传人:b****5 文档编号:6363772 上传时间:2023-01-05 格式:DOCX 页数:14 大小:206.87KB
下载 相关 举报
基于FPGA的函数发生器.docx_第1页
第1页 / 共14页
基于FPGA的函数发生器.docx_第2页
第2页 / 共14页
基于FPGA的函数发生器.docx_第3页
第3页 / 共14页
基于FPGA的函数发生器.docx_第4页
第4页 / 共14页
基于FPGA的函数发生器.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

基于FPGA的函数发生器.docx

《基于FPGA的函数发生器.docx》由会员分享,可在线阅读,更多相关《基于FPGA的函数发生器.docx(14页珍藏版)》请在冰豆网上搜索。

基于FPGA的函数发生器.docx

基于FPGA的函数发生器

基于FPGA的函数发生器

 

基于FPGA的

智能函数发生器的设计

 

学生姓名:

XX

学生学号:

20XXXXXXXXX

一、设计要求

1.设计一个能产生递增、递减斜波,方波,三角波,正弦波,阶梯波智能函数发生器;

2.要求能自主选择输出波形,并能调整输出频率。

二、设计原理

递增、递减斜波是以一定常数递增、递减来产生的。

三角波的产生是在输出波形的前半周期内从0累加到最大值255(8位),在后半周期从最大值递减到0来实现的。

阶梯波阶梯波是以一定的常数递增的。

正弦波的产生原理是基于奈奎斯特采样定律,先对模拟信号采集,经过量化后存入查表中,再由相位累加器产生地址,通过对查表寻址,得到离散化波形序列,最后经过D/A转换输出模拟波形。

方波的产生是在输出波形的前半周期输出低电平,后半周期输出高电平,从而得到占空比为50%的方波信号。

通过所设计的智能函数发生器可以得到递增、递减斜波,方波,三角波,正弦波和阶梯波六种波形,这些波形的产生都是通过FPGA的核心芯片,各种运算都在FPGA中进行,直接输出选择的波形。

三、设计内容与步骤

设计的智能函数发生器就是为了得到得到递增、递减斜波,方波,三角波,正弦波和阶梯波六种波形,可以通过按钮来选择输出波形,并且具有复位的功能。

智能函数发生器总体框图如图1.1所示;图中输入CLK为时钟信号,用于调整输出波形的频率;输入RESET为复位信号;输入SEL[2..0]为选择信号,用于选择输出波形;输出Q接在D/A转换的数据端,就可以在D/A转换器的输出端得到各种不同的函数波形。

图1.1智能函数发生器总体框图

1.递增斜波模块的设计:

递增斜波模块ZENG见图1.2。

它是递增斜波产生模块。

图1.2模块ZENG

递增斜波模块ZENG的VHDL程序设计:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYZENGIS

PORT(CLK,RESET:

INSTD_LOGIC;

Q:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDZENG;

ARCHITECTUREZENG_ARCOFZENGIS

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;

ENDZENG_ARC;

2.递减斜波模块的设计:

递减斜波模块JIAN见图1.3。

它是递减斜波产生模块。

图1.3模块JIAN

递减斜波模块ZENG的VHDL程序设计:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYJIANIS

PORT(CLK,RESET:

INSTD_LOGIC;

Q:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDJIAN;

ARCHITECTUREJIAN_ARCOFJIANIS

BEGIN

PROCESS(CLK,RESET)

VARIABLETMP:

STD_LOGIC_VECTOR(7DOWNTO0);

BEGIN

IFRESET='0'THEN

TMP:

="11111111";

ELSIFCLK'EVENTANDCLK='1'THEN

IFTMP="00000000"THEN

TMP:

="11111111";

ELSETMP:

=TMP-1;

ENDIF;

ENDIF;

Q<=TMP;

ENDPROCESS;

ENDJIAN_ARC;

3.三角波模块的设计:

三角波模块DELTA见图1.4。

它是三角波产生的模块。

图1.4模块DELTA

三角波模块DELTA的VHDL程序设计:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYDELTAIS

PORT(CLK,RESET:

INSTD_LOGIC;

Q:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDDELTA;

ARCHITECTUREDELTA_ARCOFDELTAIS

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';

ELSETMP:

=TMP+1;

ENDIF;

ELSE

IFTMP="00000001"THEN

TMP:

="00000000";A:

='0';

ELSETMP:

=TMP-1;

ENDIF;

ENDIF;

ENDIF;

Q<=TMP;

ENDPROCESS;

ENDDELTA_ARC;

4.阶梯波模块的设计:

阶梯波模块LADDER见图1.5。

它是阶梯波产生的模块,改变递增的常数,可改变阶梯的多少。

图1.5模块LADDER

阶梯波模块LADDER的VHDL程序设计:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYLADDERIS

PORT(CLK,RESET:

INSTD_LOGIC;

Q:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDLADDER;

ARCHITECTURELADDER_ARCOFLADDERIS

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="11111111"THEN

TMP:

="00000000";A:

='1';

ELSE

TMP:

=TMP+16;A:

='1';

ENDIF;

A:

='0';

ENDIF;

ENDIF;

Q<=TMP;

ENDPROCESS;

ENDLADDER_ARC;

5.正弦波模块的设计:

正弦波模块SIN见图1.6。

它是正弦波产生的模块。

图1.6模块SIN

正弦波模块SIN的VHDL程序设计:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYSINIS

PORT(CLK,CLR:

INSTD_LOGIC;

D:

OUTINTEGERRANGE0TO255);

ENDSIN;

ARCHITECTURESIN_ARCOFSINIS

BEGIN

PROCESS(CLK,CLR)

VARIABLETMP:

INTEGERRANGE0TO63;

BEGIN

IFCLR='0'THEN

D<=0;

ELSIFCLK'EVENTANDCLK='1'THEN

IFTMP=63THEN

TMP:

=0;

ELSETMP:

=TMP+1;

ENDIF;

CASETMPIS

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;

ENDIF;

ENDPROCESS;

ENDSIN_ARC;

6.方波模块的设计:

方波模块SQUARE见图1.7。

它是方波产生的模块。

图1.7模块SQUARE

方波模块SQUARE的VHDL程序设计:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYSQUAREIS

PORT(CLK,CLR:

INSTD_LOGIC;

Q:

OUTINTEGERRANGE0TO255);

ENDSQUARE;

ARCHITECTURESQUARE_ARCOFSQUAREIS

SIGNALA:

BIT;

BEGIN

PROCESS(CLK,CLR)

VARIABLECNT:

INTEGERRANGE0TO63;

BEGIN

IFCLR='0'THEN

A<='0';

ELSIFCLK'EVENTANDCLK='1'THEN

IFCNT<63THEN

CNT:

=CNT+1;

ELSECNT:

=0;A<=NOTA;

ENDIF;

ENDIF;

ENDPROCESS;

PROCESS(CLK,A)

BEGIN

IFCLK'EVENTANDCLK='1'THEN

IFA='1'THEN

Q<=255;

ELSEQ<=0;

ENDIF;

ENDIF;

ENDPROCESS;

ENDSQUARE_ARC;

7.选择模块的设计:

选择模块CH61A见图1.8。

它是输出波形选择模块,根据外部的开关状态选择输出波形。

图1.8模块CH61A

选择模块CH61A的VHDL程序设计:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCH61AIS

PORT(SEL:

INSTD_LOGIC_VECTOR(2DOWNTO0);

D0,D1,D2,D3,D4,D5:

INSTD_LOGIC_VECTOR(7DOWNTO0);

Q:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDCH61A;

ARCHITECTURECH61A_ARCOFCH61AIS

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;

ENDCH61A_ARC;

四、设计工具

计算机一台,QuartusⅡ软件

五、设计结果

1.若输入时钟信号CLK为100MHz,复位信号RESET='1';当选择信号SEL="000"时,输出Q应为递增斜波,如图1.9所示:

图1.9递增斜波

注:

仿真为时序仿真,所以输出波形存在瑕疵。

2.若输入时钟信号CLK为100MHz,复位信号RESET='1';当选择信号SEL="001"时,输出Q应为递减斜波,如图1.10所示:

图1.10递减斜波

注:

仿真为时序仿真,所以输出波形存在瑕疵。

3.若输入时钟信号CLK为100MHz,复位信号RESET='1';当选择信号SEL="010"时,输出Q应为三角波,如图1.11(a)、1.11(b)所示:

图1.11(a)三角波最高点处

图1.11(b)三角波最低点处

注:

仿真为时序仿真,所以输出波形存在瑕疵。

4.若输入时钟信号CLK为100MHz,复位信号RESET='1';当选择信号SEL="011"时,输出Q应为递增常数为20(十进制)的阶梯波,如图1.12所示:

图1.12递增常数为20(十进制)的阶梯波

注:

仿真为时序仿真,所以输出波形存在瑕疵。

5.若输入时钟信号CLK为100MHz,复位信号RESET='1';当选择信号SEL="100"时,输出Q应为正弦波,如图1.13所示:

图1.13正弦波

注:

仿真为时序仿真,所以输出波形存在瑕疵。

6.若输入时钟信号CLK为100MHz,复位信号RESET='1';当选择信号SEL="101"时,输出Q应为方波,如图1.14所示:

图1.14方波

注:

仿真为时序仿真,所以输出波形存在瑕疵。

六、结论

经过程序仿真后,因为仿真为时序仿真,输出波形存在瑕疵;观察得到的输出波形,得出该智能函数发生器可行。

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

当前位置:首页 > 考试认证 > 其它考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1