FPGA创新实验设计报告doc 25页正式版.docx
- 文档编号:3086814
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:32
- 大小:625.19KB
FPGA创新实验设计报告doc 25页正式版.docx
《FPGA创新实验设计报告doc 25页正式版.docx》由会员分享,可在线阅读,更多相关《FPGA创新实验设计报告doc 25页正式版.docx(32页珍藏版)》请在冰点文库上搜索。
FPGA创新实验设计报告doc25页正式版
数字电子技术实验课程
FPGA创新实验设计报告
设计名称上下课铃声模拟系统
姓名林嘉颖金延鑫
学号30901007683090104182
专业班级机械电子工程0902
指导教师樊伟敏
日期2011.6.6
浙江大学电工电子基础实验中心
一摘要
通过QUATURS软件的程序编译及FPGA的应用,模拟出浙江大学紫金港校区的上下课铃系统。
该系统分为两部分:
电子钟部分和铃声部分
电子钟部分将实现二十四小时计时,时间设置等功能。
铃声部分将实现特定时间(如上课时间)响起特定铃声功能。
二关键词
时序电路时钟系统调节装置声音系统QUATURS应用
三正文
3.1设计思路
整个上下课铃响可分为时钟系统和铃声系统两大部分。
时钟系统:
时钟部分分为铃声选择器,时间调试部分,时钟部分等三大模块。
1时钟部分
时钟部分实现24小时时钟运行及循环功能,按照1:
60时间进行缩放,其中LED灯表示小时数,采用24进制计数器实现;led灯两位表示分钟数,采用60进制计数器实现,计数频率设置为1HZ,以节省时间。
此部分设置能完全模拟时钟循环功能,即分钟部分逢六十进一,时钟部分逢24归零,同时23:
59后自动返回00:
00
2时间调试部分
时间调试部分实现时间暂停,移位调试时间(其中移到的位置会发生闪烁),时间设置等功能,具有调试目标明确,调试时间不会超过时钟表示范围等优点。
使用方法:
将clr置为0之后,可以发现时钟十位在闪烁,此时通过按trf键可以将闪烁点移到下一个即时钟个位,以此类推。
在移到自己想调节的位置以后通过按住plus键,每一个秒脉冲之后可以发现该数加一,加到九跳回一。
通过一些条件语句,防止了当时钟十位等于2时,时钟个位不会大于3;时钟个位大于3时,时钟十位不会等于2。
3铃声选择器:
根据紫金港校区上下课的时间,制成铃声选择器。
以下为响铃时间安排表:
上课铃
下课铃
8:
00
8:
45
8:
50
9:
35
9:
50
10:
35
10:
40
11:
25
11:
30
12:
15
13:
15
14:
00
14:
05
14:
50
14:
55
15:
40
15:
55
16:
40
16:
45
17:
30
18:
30
19:
15
19:
20
20:
05
20:
10
20:
55
根据时间表在相应时间,铃声响起。
铃声部分
铃声部分分为JK触发器,分频器,铃声部分,选择器,音频调试,音频转换器,六个模块。
1分频器
分频器将50MHZ的脉冲电路调节到合适的频率,在铃声系统部分中需使用两次,一次为对上下课铃音频电路的触发(1HZ),一次为音频转换器的触发(6250000HZ).
2铃声部分
铃声部分设置成上课铃和下课铃两个子模块,分别存放上下课铃的乐谱。
3音频调试电路
根据十二平均律将两个八度共十六个音符设置成相应的频率。
使其转换成相应的音高。
4音频转换器
原理为一个计数器,通过脉冲电路将每次的音符转换成相应的频率,通过小喇叭输出。
5JK触发器
整个音乐系统的开始与停止通过两个JK触发器来控制。
原理如图
当选择器发出信号时,第一个JK触发器中J通道接高,K通道为0,Q输出高电平,使第二个JK触发器触发(第二个JK触发器设置成T’触发器)此后即使第一个触发器中J=0.Q1状态保持,仍为1.
在铃声部分设置逻辑出口K,当输出最后一个音符时,k=1,反馈到第一个JK触发器的K端上,此时Q1=0,使第二个触发器清零,停止向铃声部分输送脉冲信号。
铃声停止。
3.2实验原理图展示
时钟部分
铃声部分
综合电路
3.3仿真波形及分析
Trf仿真波形
由图可知,每一个trf下降沿使trfo从3减到0再到3从而实现循环,当clr变为0了之后,trfo立即变为3。
SS仿真波形
15为变暗。
由图可知,假定plus键按住,trfo为3,因此h_hi从0开始加到5,然后放开plus之后h_hi交替5与15,说明正在闪烁。
假定当按下trf,trfo变为2,即闪烁从h_hi改为h_lo,同样trfo为1时,闪烁m_hi。
SZ仿真波形
上三图为时钟正常工作时的输出。
上图为当clr为1,按plus的时候,当trfo为3,2,1时h_hi,h_lo,m_hi的数值的增加。
Lj仿真波形
当时间为08:
00,08:
45时分别输出tmp1,tmp2为10和01,当下一个脉冲到来,08:
00变成00:
00之后,tmp1,tmp2为00。
通过tmp1与tmp2实现上下课铃的控制。
Nacklass,vorklass仿真波形
通过clk可以实现放歌曲,当歌曲结束时k=1,此时通过jk触发器使clk停止,等到下一个lj模块中的tmp1,tmp2的信号到来,clk重新开始,此时通过条件语句时cnt归零,重新放歌曲。
3.4源程序及注释
1分频器(50MHZ=>8MHZ)
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYfenpinqiIS
PORT(clk:
INSTD_LOGIC;
clk_out:
OUTSTD_LOGIC);
ENDfenpinqi;
ARCHITECTUREfwmOFfenpinqiIS
CONSTANTm:
INTEGER:
=4;--whenweneed8MHZ。
INTEGER=6250000whenweneed2HZ
SIGNALtmp:
STD_LOGIC;
BEGIN
PROCESS(clk,tmp)
VARIABLEcout:
INTEGER:
=0;
BEGIN
IFclk'EVENTANDclk='1'THENcout:
=cout+1;
IFcout<=mTHENtmp<='0';
ELSIFcout ELSEcout: =0; ENDIF; ENDIF; ENDPROCESS; clk_out<=tmp; ENDfwm; 2JK触发器 LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; ENTITYJANDKIS PORT(clr,clk,j,k: INSTD_LOGIC; q,qn: outSTD_LOGIC); ENDJANDK; ARCHITECTURECONTROLOFJANDKIS SIGNALTMP: STD_LOGIC; BEGIN PROCESS(clr,clk,j,k) BEGIN ifclr='0'thenTMP<='0'; elsIF(clk'EVENTANDclk='0')THEN IF((j='1')and(k='1'))thenTMP<=NOTTMP;--J=1K=1翻转) ELSIF((j='1')and(k='0'))thenTMP<='1';--J=1K=0置高 ELSIF((j='0')and(k='1'))thenTMP<='0';--J=1K=1置零 ENDIF; ENDIF; ENDPROCESS; q<=TMP; qn<=NOTTMP; ENDCONTROL; 3下课铃 LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; ENTITYnachklassIS PORT(clk,temp1: INSTD_LOGIC; tone_index: OUTINTEGERRANGE0TO15; k: OUTSTD_LOGIC); ENDnachklass; ARCHITECTUREmelodyOFnachklassIS SIGNALcnt: INTEGERRANGE0TO49: =0; signalkk: STD_LOGIC: ='0'; BEGIN PROCESS(clk,cnt) BEGIN IF(clk'EVENTANDclk='1')THENcnt<=cnt+1; ENDIF; IF(cnt=48)THEN kk<='1';--k=1的时候,通过jk触发器使时钟停止(J=0K=1,第一个时钟置零,接到第二个时钟清零端,实现下课铃的停止) elsekk<='0'; ENDIF; CASEcntIS --此项用来存乐谱下课铃声 WHEN01=>tone_index<=5; WHEN02=>tone_index<=6; WHEN03=>tone_index<=7; WHEN04=>tone_index<=8; WHEN05=>tone_index<=9; WHEN06=>tone_index<=9; WHEN07=>tone_index<=5; WHEN08=>tone_index<=5; WHEN09=>tone_index<=8; WHEN10=>tone_index<=7; WHEN11=>tone_index<=6; WHEN12=>tone_index<=4; WHEN13=>tone_index<=5; WHEN14=>tone_index<=5; WHEN15=>tone_index<=5; WHEN16=>tone_index<=5; WHEN17=>tone_index<=5; WHEN18=>tone_index<=6; WHEN19=>tone_index<=7; WHEN20=>tone_index<=8; WHEN21=>tone_index<=9; WHEN22=>tone_index<=9; WHEN23=>tone_index<=5; WHEN24=>tone_index<=5; WHEN25=>tone_index<=8; WHEN26=>tone_index<=7; WHEN27=>tone_index<=6; WHEN28=>tone_index<=4; WHEN29=>tone_index<=5; WHEN30=>tone_index<=5; WHEN31=>tone_index<=5; WHEN32=>tone_index<=5; WHEN33=>tone_index<=5; WHEN34=>tone_index<=6; WHEN35=>tone_index<=7; WHEN36=>tone_index<=8; WHEN37=>tone_index<=9; WHEN38=>tone_index<=9; WHEN39=>tone_index<=5; WHEN40=>tone_index<=5; WHEN41=>tone_index<=8; WHEN42=>tone_index<=7; WHEN43=>tone_index<=6; WHEN44=>tone_index<=4; WHEN45=>tone_index<=5; WHEN46=>tone_index<=5; WHEN47=>tone_index<=5; when48=>tone_index<=0; WHENOTHERS=>tone_index<=0; ENDCASE; ifcnt=49thencnt<=0; endif; k<=kk; --通过给cnt重新赋值实现第二次上下课铃声的开始。 当第二个时间点到来, --输入的tmp1tmp2的改变使时钟重新走起来,使cnt从48变成49从而赋值为0, --从而可以再循环至48. ENDPROCESS; ENDmelody; 4上课铃声(原理同下课铃) LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; ENTITYvorklassIS PORT(clk,temp1: INSTD_LOGIC; tone_index: OUTINTEGERRANGE0TO15; k: OUTSTD_LOGIC); ENDvorklass; ARCHITECTUREmelodyOFvorklassIS SIGNALcnt: INTEGERRANGE0TO49: =0; signalkk: STD_LOGIC: ='0'; BEGIN PROCESS(clk,cnt) BEGIN IF(clk'EVENTANDclk='1')THENcnt<=cnt+1; ENDIF; IF(cnt=48)THEN kk<='1';--k=1的时候,通过jk触发器使时钟停止,实现上下课铃的停止 elsekk<='0'; ENDIF; CASEcntIS --此项用来存乐谱上课铃声 WHEN01=>tone_index<=9; WHEN02=>tone_index<=10; WHEN03=>tone_index<=9; WHEN04=>tone_index<=7; WHEN05=>tone_index<=8; WHEN06=>tone_index<=9; WHEN07=>tone_index<=8; WHEN08=>tone_index<=6; WHEN09=>tone_index<=5; WHEN10=>tone_index<=5; WHEN11=>tone_index<=7; WHEN12=>tone_index<=9; WHEN13=>tone_index<=12; WHEN14=>tone_index<=12; WHEN15=>tone_index<=12; WHEN16=>tone_index<=12; WHEN17=>tone_index<=9; WHEN18=>tone_index<=10; WHEN19=>tone_index<=9; WHEN20=>tone_index<=7; WHEN21=>tone_index<=8; WHEN22=>tone_index<=9; WHEN23=>tone_index<=8; WHEN24=>tone_index<=6; WHEN25=>tone_index<=5; WHEN26=>tone_index<=5; WHEN27=>tone_index<=7; WHEN28=>tone_index<=9; WHEN29=>tone_index<=12; WHEN30=>tone_index<=12; WHEN31=>tone_index<=12; WHEN32=>tone_index<=12; WHEN33=>tone_index<=9; WHEN34=>tone_index<=10; WHEN35=>tone_index<=9; WHEN36=>tone_index<=7; WHEN37=>tone_index<=8; WHEN38=>tone_index<=9; WHEN39=>tone_index<=8; WHEN40=>tone_index<=6; WHEN41=>tone_index<=5; WHEN42=>tone_index<=5; WHEN43=>tone_index<=7; WHEN44=>tone_index<=9; WHEN45=>tone_index<=12; WHEN46=>tone_index<=12; WHEN47=>tone_index<=12; when48=>tone_index<=0; WHENOTHERS=>tone_index<=0; ENDCASE; ifcnt=49thencnt<=0; endif; k<=kk; --通过给cnt重新赋值实现第二次上下课铃声的开始。 当第二个时间点到来, --输入的tmp1tmp2的改变使时钟重新走起来,使cnt从48变成49从而赋值为0, --从而可以再循环至48. ENDPROCESS; ENDmelody; 5音调调试电路 LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; ENTITYtoneIS PORT(index: ININTEGERRANGE0TO15; code: OUTINTEGERRANGE0TO15;--定义错的输出引脚 high21: OUTSTD_LOGIC;--定义high21输出引脚 tone: OUTINTEGERRANGE0TO16#7FF#);--定义tone输出引脚 ENDtone; ARCHITECTUREoneOFtoneIS BEGIN search: PROCESS(index) BEGIN CASEindexIS--此项用来检索音调的频率,高八度和低八度共十六个音符 WHEN0=>tone<=2047;code<=0;high21<='0'; WHEN1=>tone<=773;code<=1;high21<='0'; WHEN2=>tone<=912;code<=2;high21<='0'; WHEN3=>tone<=1036;code<=3;high21<='0'; WHEN4=>tone<=1116;code<=4;high21<='0'; WHEN5=>tone<=1197;code<=5;high21<='0'; WHEN6=>tone<=1290;code<=6;high21<='0'; WHEN7=>tone<=1372;code<=7;high21<='0'; WHEN8=>tone<=1410;code<=1;high21<='1'; WHEN9=>tone<=1480;code<=2;high21<='1'; WHEN10=>tone<=1542;code<=3;high21<='1'; WHEN11=>tone<=1590;code<=4;high21<='1'; WHEN12=>tone<=1622;code<=5;high21<='1'; WHEN13=>tone<=1668;code<=6;high21<='1'; WHEN14=>tone<=1692;code<=7;high21<='1'; WHEN15=>tone<=1728;code<=1;high21<='1'; WHENOTHERS=>NULL; ENDCASE; ENDPROCESS; END; 6音频输出电路 LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; ENTITYexchangeIS PORT(clk: INSTD_LOGIC; tone: ININTEGERRANGE0TO16#7FF#; spks: OUTSTD_LOGIC); ENDexchange; ARCHITECTUREbehavOFexchangeIS SIGNALpre_clk,full_spks: STD_LOGIC; BEGIN div_clk: PROCESS(clk) VARIABLEcnt4: INTEGERRANGE0TO15; BEGIN pre_clk<='0'; IFcnt4>11THENpre_clk<='1';cnt4: =0; ELSIFclk'EVENTANDclk='1'THENcnt4: =cnt4+1;--通过时钟实现计数器功能算出频率,进行输出) ENDIF; ENDPROCESS; gen_spks: PROCESS(pre_clk,tone) VARIABLEcnt11: INTEGERRANGE0TO16#7FF#; BEGIN IFpre_clk'EVENTANDpre_clk='1'THEN IFcnt11=16#7FF#THENcnt11: =tone;full_spks<='1'; ELSEcnt11: =cnt11+1;full_spks<='0'; ENDIF; ENDIF; ENDPROCESS; delay_spks: PROCESS(full_spks) VARIABLEcnt2: STD_LOGIC; BEGIN IFfull_spks'EVENTANDfull_spks='1'THENcnt2: =NOTcnt2; IFcnt2='1'THENspks<='1'; ELSEspks<='0'; ENDIF; ENDIF; ENDPROCESS; ENDbehav; 7时间调节电路——调节位置选择器 LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; USEIEEE.STD_LOGIC_UNSIGNED.ALL; ENTITYtrfIS PORT(trf,clr: INSTD_LOGIC;--clr为1时,表停止,调节时间,trf调节时间位数trf_temp为00011011时各表示分个位,分十位,时个位,时十位。 trfo: OUTSTD_LOGIC_VECTOR(1DOWNTO0)); ENDtrf; ARCHITECTUREfwmOFtrfIS SIGNALtrf_temp: STD_LOGIC_VECTOR(1DOWNTO0); BEGIN PROCESS(clr,trf,trf_temp) begin ifclr='0'then trf_temp<="11"; elsif(trf'EVENTANDtrf='0')then--通过脉冲,实移位。 由输出trfo实现闪烁与加数。 iftrf_te
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FPGA创新实验设计报告doc 25页正式版 FPGA 创新 实验设计 报告 doc 25 正式版