基于FPGA的函数发生器文档格式.docx
《基于FPGA的函数发生器文档格式.docx》由会员分享,可在线阅读,更多相关《基于FPGA的函数发生器文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
![基于FPGA的函数发生器文档格式.docx](https://file1.bdocx.com/fileroot1/2023-1/5/7c0e86e8-710a-40a0-987f-403c8ba27818/7c0e86e8-710a-40a0-987f-403c8ba278181.gif)
递增斜波模块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);
IFRESET='
0'
THEN
TMP:
="
00000000"
;
ELSIFCLK'
EVENTANDCLK='
1'
IFTMP="
11111111"
ELSE
=TMP+1;
ENDIF;
Q<
=TMP;
ENDPROCESS;
ENDZENG_ARC;
2.递减斜波模块的设计:
递减斜波模块JIAN见图1.3。
它是递减斜波产生模块。
图1.3模块JIAN
递减斜波模块ZENG的VHDL程序设计:
ENTITYJIANIS
ENDJIAN;
ARCHITECTUREJIAN_ARCOFJIANIS
ELSETMP:
=TMP-1;
ENDJIAN_ARC;
3.三角波模块的设计:
三角波模块DELTA见图1.4。
它是三角波产生的模块。
图1.4模块DELTA
三角波模块DELTA的VHDL程序设计:
ENTITYDELTAIS
ENDDELTA;
ARCHITECTUREDELTA_ARCOFDELTAIS
VARIABLEA:
STD_LOGIC;
IFA='
11111110"
A:
='
ELSE
00000001"
ENDDELTA_ARC;
4.阶梯波模块的设计:
阶梯波模块LADDER见图1.5。
它是阶梯波产生的模块,改变递增的常数,可改变阶梯的多少。
图1.5模块LADDER
阶梯波模块LADDER的VHDL程序设计:
ENTITYLADDERIS
ENDLADDER;
ARCHITECTURELADDER_ARCOFLADDERIS
=TMP+16;
A:
ENDLADDER_ARC;
5.正弦波模块的设计:
正弦波模块SIN见图1.6。
它是正弦波产生的模块。
图1.6模块SIN
正弦波模块SIN的VHDL程序设计:
ENTITYSINIS
PORT(CLK,CLR:
D:
OUTINTEGERRANGE0TO255);
ENDSIN;
ARCHITECTURESIN_ARCOFSINIS
PROCESS(CLK,CLR)
INTEGERRANGE0TO63;
IFCLR='
D<
=0;
IFTMP=63THEN
CASETMPIS
WHEN00=>
D<
=255;
WHEN01=>
=254;
WHEN02=>
=252;
WHEN03=>
=249;
WHEN04=>
=245;
WHEN05=>
=239;
WHEN06=>
=233;
WHEN07=>
=225;
WHEN08=>
=217;
WHEN09=>
=207;
WHEN10=>
=197;
WHEN11=>
=186;
WHEN12=>
=174;
WHEN13=>
=162;
WHEN14=>
=150;
WHEN15=>
=137;
WHEN16=>
=124;
WHEN17=>
=112;
WHEN18=>
=99;
WHEN19=>
=87;
WHEN20=>
=75;
WHEN21=>
=64;
WHEN22=>
=53;
WHEN23=>
=43;
WHEN24=>
=34;
WHEN25=>
=26;
WHEN26=>
=19;
WHEN27=>
=13;
WHEN28=>
=8;
WHEN29=>
=4;
WHEN30=>
=1;
WHEN31=>
WHEN32=>
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=>
WHENOTHERS=>
NULL;
ENDCASE;
ENDSIN_ARC;
6.方波模块的设计:
方波模块SQUARE见图1.7。
它是方波产生的模块。
图1.7模块SQUARE
方波模块SQUARE的VHDL程序设计:
ENTITYSQUAREIS
ENDSQUARE;
ARCHITECTURESQUARE_ARCOFSQUAREIS
SIGNALA:
BIT;
VARIABLECNT:
A<
IFCNT<
63THEN
CNT:
=CNT+1;
ELSECNT:
A<
=NOTA;
PROCESS(CLK,A)
IFCLK'
ELSEQ<
ENDSQUARE_ARC;
7.选择模块的设计:
选择模块CH61A见图1.8。
它是输出波形选择模块,根据外部的开关状态选择输出波形。
图1.8模块CH61A
选择模块CH61A的VHDL程序设计:
ENTITYCH61AIS
PORT(SEL:
INSTD_LOGIC_VECTOR(2DOWNTO0);
D0,D1,D2,D3,D4,D5:
INSTD_LOGIC_VECTOR(7DOWNTO0);
ENDCH61A;
ARCHITECTURECH61A_ARCOFCH61AIS
PROCESS(SEL)
CASESELIS
WHEN"
000"
=>
Q<
=D0;
001"
=D1;
010"
=D2;
011"
=D3;
100"
=D4;
101"
=D5;
WHENOTHERS=>
ENDCH61A_ARC;
四、设计工具
计算机一台,QuartusⅡ软件
五、设计结果
1.若输入时钟信号CLK为100MHz,复位信号RESET='
;
当选择信号SEL="
时,输出Q应为递增斜波,如图1.9所示:
图1.9递增斜波
注:
仿真为时序仿真,所以输出波形存在瑕疵。
2.若输入时钟信号CLK为100MHz,复位信号RESET='
时,输出Q应为递减斜波,如图1.10所示:
图1.10递减斜波
3.若输入时钟信号CLK为100MHz,复位信号RESET='
时,输出Q应为三角波,如图1.11(a)、1.11(b)所示:
图1.11(a)三角波最高点处
图1.11(b)三角波最低点处
4.若输入时钟信号CLK为100MHz,复位信号RESET='
时,输出Q应为递增常数为20(十进制)的阶梯波,如图1.12所示:
图1.12递增常数为20(十进制)的阶梯波
5.若输入时钟信号CLK为100MHz,复位信号RESET='
时,输出Q应为正弦波,如图1.13所示:
图1.13正弦波
6.若输入时钟信号CLK为100MHz,复位信号RESET='
时,输出Q应为方波,如图1.14所示:
图1.14方波
六、结论
经过程序仿真后,因为仿真为时序仿真,输出波形存在瑕疵;
观察得到的输出波形,得出该智能函数发生器可行。