基于FPGA的函数发生器Word文档下载推荐.docx
《基于FPGA的函数发生器Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于FPGA的函数发生器Word文档下载推荐.docx(17页珍藏版)》请在冰点文库上搜索。
BEGIN
IFRESET='
0'
THEN
TMP:
="00000000"
;
ELSIFCLK'
EVENT ANDCLK='
1'
THEN
IFTMP="
11111111"
THEN
TMP:
="
00000000"
ELSE
TMP:
=TMP+1;
END IF;
ENDIF;
Q<
=TMP;
ENDPROCESS;
ENDZENG_ARC;
2.递减斜波模块的设计:
递减斜波模块JIAN见图1.3。
它是递减斜波产生模块。
图1.3模块JIAN
递减斜波模块ZENG的VHDL程序设计:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYJIANIS
PORT(CLK,RESET:
IN STD_LOGIC;
Q:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDJIAN;
ARCHITECTUREJIAN_ARCOFJIANIS
BEGIN
PROCESS(CLK,RESET)
VARIABLE TMP:
STD_LOGIC_VECTOR(7 DOWNTO0);
BEGIN
IFRESET='
THEN
TMP:
11111111"
ELSIF CLK'
EVENTANDCLK='
IFTMP="00000000"
THEN
TMP:
="
11111111"
ELSETMP:
=TMP-1;
ENDIF;
Q<=TMP;
ENDPROCESS;
END JIAN_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:
OUT STD_LOGIC_VECTOR(7 DOWNTO0));
ENDDELTA;
ARCHITECTUREDELTA_ARCOF DELTAIS
BEGIN
PROCESS(CLK,RESET)
VARIABLETMP:
STD_LOGIC_VECTOR(7DOWNTO0);
VARIABLEA:
STD_LOGIC;
BEGIN
IFRESET='
TMP:
="00000000"
;
ELSIF CLK'
EVENT ANDCLK='
THEN
IFA='0' THEN
IFTMP="
11111110"
TMP:
11111111"
A:
='
1'
ELSETMP:
=TMP+1;
ENDIF;
ELSE
IFTMP="
00000001"
THEN
TMP:
00000000"
A:
='0'
ELSETMP:
=TMP-1;
END IF;
ENDIF;
ENDIF;
Q<
=TMP;
END PROCESS;
ENDDELTA_ARC;
4.阶梯波模块的设计:
阶梯波模块LADDER见图1.5。
它是阶梯波产生的模块,改变递增的常数,可改变阶梯的多少。
图1.5模块LADDER
阶梯波模块LADDER的VHDL程序设计:
LIBRARY IEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYLADDER IS
PORT(CLK,RESET:
INSTD_LOGIC;
Q:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
END LADDER;
ARCHITECTURELADDER_ARCOFLADDER IS
BEGIN
PROCESS(CLK,RESET)
VARIABLETMP:
STD_LOGIC_VECTOR(7DOWNTO0);
VARIABLE A:
STD_LOGIC;
BEGIN
IFRESET='
0' THEN
00000000"
ELSIFCLK'EVENTANDCLK='
THEN
IFA='
0'THEN
IF TMP="11111111"THEN
="00000000"
ELSE
=TMP+16;
END IF;
A:
0'
ENDIF;
Q<
=TMP;
ENDPROCESS;
ENDLADDER_ARC;
5.正弦波模块的设计:
正弦波模块SIN见图1.6。
它是正弦波产生的模块。
图1.6 模块SIN
正弦波模块SIN的VHDL程序设计:
LIBRARY IEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYSINIS
PORT(CLK,CLR:
INSTD_LOGIC;
D:
OUTINTEGERRANGE0TO255);
ENDSIN;
ARCHITECTURE SIN_ARCOFSINIS
BEGIN
PROCESS(CLK,CLR)
VARIABLE TMP:
INTEGERRANGE0TO63;
IFCLR='
THEN
D<=0;
ELSIFCLK'EVENTANDCLK='
IF TMP=63THEN
TMP:
=0;
ELSE TMP:
=TMP+1;
ENDIF;
CASE TMPIS
WHEN00=>
D<
=255;
WHEN01=>
D<=254;
WHEN02=>
D<=252;
WHEN03=>
=249;
WHEN04=>D<=245;
WHEN05=>D<=239;
WHEN 06=>
D<
=233;
WHEN 07=>D<
=225;
WHEN08=>
=217;
WHEN09=>
=207;
WHEN10=>
=197;
WHEN11=>
=186;
WHEN12=>D<
=174;
WHEN13=>
=162;
WHEN14=>
=150;
WHEN15=>
=137;
WHEN16=>
=124;
WHEN 17=>
D<=112;
WHEN 18=>
=99;
WHEN19=>
=87;
WHEN20=>
=75;
WHEN 21=>
=64;
WHEN22=>
=53;
WHEN 23=>
=43;
WHEN24=>D<
=34;
WHEN25=>D<
=26;
WHEN26=>D<
=19;
WHEN 27=>
=13;
WHEN28=>
=8;
WHEN 29=>
=4;
WHEN30=>
D<=1;
WHEN31=>
=0;
WHEN32=>D<
=0;
WHEN33=>
=1;
WHEN 34=>
WHEN35=>
WHEN 36=>
=13;
WHEN37=>
D<=19;
WHEN38=>
D<=26;
WHEN 39=>D<=34;
WHEN 40=>
=43;
WHEN41=>
=53;
WHEN42=>D<=64;
WHEN43=>
D<=75;
WHEN44=>
=87;
WHEN 45=>
=99;
WHEN46=>
=112;
WHEN47=>
D<=124;
WHEN 48=>
=137;
WHEN 49=>D<
=150;
WHEN50=>
=162;
WHEN51=>D<
=174;
WHEN 52=>
WHEN53=>
=197;
WHEN54=>
=207;
WHEN55=>
=217;
WHEN56=>D<
=225;
WHEN57=>
D<=233;
WHEN58=>
=239;
WHEN59=>D<
=245;
WHEN60=>
D<=249;
WHEN61=>D<
=252;
WHEN62=>
D<=254;
WHEN63=>D<
=255;
WHEN OTHERS=>
NULL;
ENDCASE;
ENDIF;
ENDPROCESS;
END SIN_ARC;
6.方波模块的设计:
方波模块SQUARE见图1.7。
它是方波产生的模块。
图1.7 模块SQUARE
方波模块SQUARE的VHDL程序设计:
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYSQUAREIS
PORT(CLK,CLR:
IN STD_LOGIC;
Q:
OUT INTEGERRANGE0TO255);
ENDSQUARE;
ARCHITECTURESQUARE_ARC OFSQUARE IS
SIGNALA:
BIT;
PROCESS(CLK,CLR)
VARIABLECNT:
INTEGERRANGE0TO63;
BEGIN
IFCLR='
A<='
ELSIFCLK'
EVENTAND CLK='1'THEN
IFCNT<
63 THEN
CNT:
=CNT+1;
ELSECNT:
A<=NOT A;
END PROCESS;
PROCESS(CLK,A)
BEGIN
IF CLK'
EVENTANDCLK='1'THEN
IFA='1'
Q<
=255;
ELSE Q<
=0;
ENDIF;
ENDPROCESS;
ENDSQUARE_ARC;
7.选择模块的设计:
选择模块CH61A见图1.8。
它是输出波形选择模块,根据外部的开关状态选择输出波形。
图1.8 模块CH61A
选择模块CH61A的VHDL程序设计:
LIBRARYIEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CH61AIS
PORT(SEL:
IN STD_LOGIC_VECTOR(2DOWNTO0);
D0,D1,D2,D3,D4,D5:
INSTD_LOGIC_VECTOR(7 DOWNTO 0);
Q:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDCH61A;
ARCHITECTURECH61A_ARCOF CH61AIS
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"
=D5;
WHENOTHERS=>
NULL;
ENDCASE;
END PROCESS;
ENDCH61A_ARC;
四、设计工具
计算机一台,QuartusⅡ软件
五、设计结果
1.若输入时钟信号CLK为100MHz,复位信号RESET='
当选择信号SEL="000"
时,输出Q应为递增斜波,如图1.9所示:
图1.9递增斜波
注:
仿真为时序仿真,所以输出波形存在瑕疵。
2.若输入时钟信号CLK为100MHz,复位信号RESET='
当选择信号SEL="
时,输出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='
当选择信号SEL="
011"
时,输出Q应为递增常数为20(十进制)的阶梯波,如图1.12所示:
图1.12递增常数为20(十进制)的阶梯波
5.若输入时钟信号CLK为100MHz,复位信号RESET='1'
100"时,输出Q应为正弦波,如图1.13所示:
图1.13正弦波
6.若输入时钟信号CLK为100MHz,复位信号RESET='
当选择信号SEL="101"
时,输出Q应为方波,如图1.14所示:
图1.14方波
注:
六、结论
经过程序仿真后,因为仿真为时序仿真,输出波形存在瑕疵;
观察得到的输出波形,得出该智能函数发生器可行。