ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:157.11KB ,
资源ID:5942216      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/5942216.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(基于vhdl的电子闹钟设计.docx)为本站上传会员【xrp****65】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

基于vhdl的电子闹钟设计.docx

1、基于VHDL的数字闹钟设计 摘要:随着EDA技术的发展和应用领域的扩大与深入,EDA技术在电子信息、通信、自动控制及计算机应用领域的重要性日益突出。EDA技术就是依赖功能强大的计算机,在EDA工具软件平台上,对以硬件描述语言VHDL为系统逻辑描述手段完成的设计文件,自动地完成逻辑优化和仿真测试,直至实现既定的电子线路系统功能。本文介绍了基于VHDL硬件描述语言设计的多功能数字闹钟的思路和技巧。在Quartus 11开发环境中编译和仿真了所设计的程序,并逐一调试验证程序的运行状况。仿真和验证的结果表明,该设计方法切实可行,该数字闹钟可以实现调时定时闹钟播放音乐功能具有一定的实际应用性。

2、 关键字:闹钟 FPGA VHDL Quartus II 一、电子钟相关功能描述如下: (1) 计时功能:这是本计时器设计的基本功能,可进行时、分、秒计时,并显示。 (2) 闹钟功能:如果当前时间与设置的闹钟时间相同,则扬声器发出一段音乐,并维持一分钟。 (3) 调时调分调闹钟功能:当需要校时或者要重新设置闹钟的时间时,可通过实验箱上的按键控制。 二、设计原理: 数字闹钟电路的基本结构由两个60进制计数器和一个24进制计数器组成,分别对秒、分、小时进行计时,当计时到23时59分59秒时,再来一个计数脉冲,则计数器清零,重新开始计时。秒计数器的计数时钟CLK为1Hz

3、的标准信号。当数字闹钟处于计时状态时,秒计数器的进位输出信号作为分钟计数器的计数信号,分钟计数器的进位输出信号又作为小时计数器的计数信号时、分、秒的计时结果通过6个数码管来动态显示。数字闹钟除了能够正常计时外,还应能够对时间进行调整。因此,通过模式选择信号KEY1、KEY2控制数字钟的工作状态,即控制数字钟,使其分别工作于正常计时,调整分、时和设定闹钟分、时5个状态。当数字闹钟处于计时状态时,3个计数器允许计数,且秒、分、时计数器的计数时钟信号分别为CLK,秒的进位, 分的进位;当数字闹钟处于调整时间状态时,被调的分或时会一秒一秒地增加;当数字钟处于闹钟定时状态时,可以设定小时和分;当计时到所

4、设定的时刻时,speak将会被赋予梁祝音乐信号用于驱动扬声器,持续1分钟。 三、实验代码: 1)顶层文件: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY clock IS PORT ( CLK12MHZ : IN STD_LOGIC; CLK8HZ : IN STD_LOGIC; SPKOUT : OUT STD_LOGIC; CLK : IN STD_LOGIC;

5、 KEY1 : IN STD_LOGIC; KEY2 : IN STD_LOGIC_VECTOR(1 DOWNTO 0); H1,H2,M1,M2,S1,S2: OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END; ARCHITECTURE one OF clock IS COMPONENT shizhong PORT (clk : in std_logic; md1 : in std_logic; md

6、2 : in std_logic_vector(1 downto 0); clken : out std_logic; h1,h2,m1,m2,s1,s2: out std_logic_vector(3 downto 0)); END COMPONENT; COMPONENT NoteTabs PORT ( clk : IN STD_LOGIC; ToneIndex : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) ); END COMPONENT; COMP

7、ONENT ToneTaba PORT ( Index : IN STD_LOGIC_VECTOR (3 DOWNTO 0) ; Tone : OUT STD_LOGIC_VECTOR (10 DOWNTO 0); en : in std_logic); END COMPONENT; COMPONENT Speakera PORT ( clk : IN STD_LOGIC; Tone : IN STD_LOGIC_VECTOR (10 DOWNT

8、O 0); SpkS : OUT STD_LOGIC ); END COMPONENT; SIGNAL Tone :STD_LOGIC_VECTOR (10 DOWNTO 0); SIGNAL ToneIndex :STD_LOGIC_VECTOR (3 DOWNTO 0); SIGNAL clken :STD_LOGIC; SIGNAL en :STD_LOGIC; BEGIN u1 : Shizhong PORT MAP (clk=>CLK,md1=>KEY1,md2=>K

9、EY2,clken=>en, h1=>h1,h2=>h2,m1=>m1,m2=>m2,s1=>s1,s2=>s2); u2 : NoteTabs PORT MAP (clk=>CLK8HZ, ToneIndex=>ToneIndex); u3 : ToneTaba PORT MAP (Index=>ToneIndex,Tone=>Tone,en=>en); u4 : Speakera PORT MAP (clk=>CLK12MHZ,Tone=>Tone, SpkS=>SPKOUT ); END; 2)时钟控制模块: library

10、ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity shizhong is port( clk: in std_logic; md1:in std_logic; md2:in std_logic_vector(1 downto 0); clken:out std_logic; h1,h2,m1,m2,s1,s2:out std_logic_vector(3 downto 0)); end shizhong; a

11、rchitecture one of shizhong is signal hou1:std_logic_vector(3 downto 0); signal hou2:std_logic_vector(3 downto 0); signal min1:std_logic_vector(3 downto 0); signal min2:std_logic_vector(3 downto 0); signal seth1:std_logic_vector(3 downto 0); signal seth2:std_logic_vector(3 downto 0); signal s

12、etm1:std_logic_vector(3 downto 0); signal setm2:std_logic_vector(3 downto 0); signal sec1:std_logic_vector(3 downto 0); signal sec2:std_logic_vector(3 downto 0); begin -----------------------------------------------小时十位 h110:process(clk,hou2,min1,min2,sec1,sec2,md1,md2) begin if clk'event an

13、d clk='1' then if (hou1="0010" and hou2="0011")and(min1="0101" and min2="1001") and (sec1="0101" and sec2="1001") then hou1<="0000"; elsif hou1="0010"and hou2="0011"and md1='0' and md2="01" then--当时间为23点且处于校时状态时 hou1<="0000"; elsif (hou2="1001"and(min1="0101" and min2="1001") and (se

14、c1="0101" and sec2="1001"))or (hou2="1001"and md1='0' and md2="01") then hou1<=hou1+1; end if; end if; end process h110; -----------------------------------------------小时个位 h220:process(clk,min1,min2,sec1,sec2,md1,md2,hou1) begin if clk'event and clk='1' then if (hou1="0010" and hou2="001

15、1")and(min1="0101" and min2="1001") and (sec1="0101" and sec2="1001") then hou2<="0000"; elsif hou2="1001"and(min1="0101" and min2="1001") and (sec1="0101" and sec2="1001") then hou2<="0000"; elsif (hou2="1001"and md1='0' and md2="01") or (hou1="0010"and hou2="0011") then hou2<="0000";

16、md<='1';-- elsif ((min1="0101" and min2="1001") and (sec1="0101" and sec2="1001")) or (md1='0' and md2="01") then hou2<=hou2+1;--speak<=clk;-- end if; end if; end process h220; -----------------------------------------------分钟十位 m110:process(clk,min2,sec1,sec2,md1,md2) begin if clk'eve

17、nt and clk='1' then if (min1="0101" and min2="1001") and (sec1="0101" and sec2="1001") then min1<="0000"; elsif min1="0101"and min2="1001"and (md1='0' and md2="00")then min1<="0000"; elsif (min2="1001"and (sec1="0101" and sec2="1001")) or (min2="1001"and md1='0' and md2="00")then min1<=min1

18、1; end if; end if;--end if; end process m110; ----------------------------------------------分钟个位 m220:process(clk,sec1,sec2,md1,md2) begin if clk'event and clk='1' then if min2="1001"and (sec1="0101" and sec2="1001")then min2<="0000"; elsif min2="1001"and (md1='0' and md2="00")then min

19、2<="0000"; else if (sec1="0101" and sec2="1001") or(md1='0' and md2="00")then min2<=min2+1; end if; end if;end if; end process m220; ---------------------------------------------秒十位 s110:process(clk) begin if clk'event and clk='1' then if (sec1="0101" and sec2="1001")then sec1<="000

20、0"; else if sec2="1001"then sec1<=sec1+1; end if; end if;end if; end process s110; --------------------------------------------秒个位 s220:process(clk) begin if clk'event and clk='1' then if sec2="1001" then sec2<="0000"; else sec2<=sec2+1; end if; end if; end process s220; ----------

21、时间设置小时部分 sethour1:process(clk,seth2) begin if clk'event and clk='1' then if seth1="0010"and seth2="0011" then seth1<="0000"; elsif seth2="1001" then seth1<=seth1+1; end if; end if; end process sethour1; sethour2:process(clk,md1,md2,seth1) begin if

22、clk'event and clk='1' then if (seth1="0010"and seth2="0011")or seth2="1001"then seth2<="0000"; elsif md1='1' and md2="00" then seth2<=seth2+1; end if; end if; end process sethour2; -------------------------------------------时间设置分钟部分 setmin1:process(clk,setm2) begin if clk'event and clk=

23、'1' then if setm1="0101"and setm2="1001"then setm1<="0000"; elsif setm2="1001"then setm1<=setm1+1; end if; end if; end process setmin1; setmin2:process(clk,md1,md2) begin if clk'event and clk='1'then if setm2="1001"then setm2<="0000"; elsif md1='1' and md2="01"then setm2<=setm2+1; end

24、 if; end if; end process setmin2; --------------------------------------------闹铃 speaker:process(clk,hou1,hou2,min1,min2) begin if clk'event and clk='1'then if seth1=hou1 and seth2=hou2 and setm1=min1 and setm2=min2 then clken<='1'; else clken<='0'; end if; end if; end process speaker;

25、disp:process(md1,hou1,hou2,min1,min2,sec1,sec2,seth1,seth2,setm1,setm2) begin if md1='0' then---------------计时时间显示和设置模式 h1<=hou1;h2<=hou2; m1<=min1;m2<=min2; s1<=sec1;s2<=sec2; else -----------闹铃时间现实和设置模式 h1<=seth1;h2<=seth2; m1<=setm1;m2<=setm2; s1<="1111";s2<="1111";

26、end if; end process disp; end one; 3)乐曲演奏模块: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY Speakera IS PORT ( clk : IN STD_LOGIC; Tone : IN STD_LOGIC_VECTOR (10 DOWNTO 0); SpkS : OUT STD_LOGIC ); END; ARCHITECTURE on

27、e OF Speakera IS SIGNAL PreCLK, FullSpkS : STD_LOGIC; BEGIN DivideCLK : PROCESS(clk) VARIABLE Count4 : STD_LOGIC_VECTOR (3 DOWNTO 0) ; BEGIN PreCLK <= '0'; -- 将CLK进行16分频,PreCLK为CLK的16分频 IF Count4>11 THEN PreCLK <= '1'; Count4 := "0000"; ELSIF clk'E

28、VENT AND clk = '1' THEN Count4 := Count4 + 1; END IF; END PROCESS; GenSpkS : PROCESS(PreCLK, Tone)-- 11位可预置计数器 VARIABLE Count11 : STD_LOGIC_VECTOR (10 DOWNTO 0); BEGIN IF PreCLK'EVENT AND PreCLK = '1' THEN IF Count11 = 16#7FF# THEN Count11 := Tone

29、 FullSpkS <= '1'; ELSE Count11 := Count11 + 1; FullSpkS <= '0'; END IF; END IF; END PROCESS; DelaySpkS : PROCESS(FullSpkS)--将输出再2分频,展宽脉冲,使扬声器有足够功率发音 VARIABLE Count2 : STD_LOGIC; BEGIN IF FullSpkS'EVENT AND FullSpkS = '1' THEN Count2 := NOT Count2;

30、 IF Count2 = '1' THEN SpkS <= '1'; ELSE SpkS <= '0'; END IF; END IF; END PROCESS; END; LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY NoteTabs IS PORT (clk : IN STD_LOGIC; ToneIndex : OUT STD_LOGIC_VECT

31、OR (3 DOWNTO 0) ); END; ARCHITECTURE one OF NoteTabs IS COMPONENT MUSIC --音符数据ROM PORT(address : IN STD_LOGIC_VECTOR (7 DOWNTO 0); inclock : IN STD_LOGIC ; q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0)); END COMPONENT; SIGNAL Counter : STD_LOGIC_VECTOR (7 DOWNTO 0);

32、 BEGIN CNT8 : PROCESS(clk,Counter) BEGIN IF Counter=138 THEN Counter <= "00000000"; ELSIF (clk'EVENT AND clk = '1') THEN Counter <= Counter+1; END IF; END PROCESS; u1 : MUSIC PORT MAP(address=>Counter , q=>ToneIndex, inclock=>clk); END; LIBRARY IEEE; USE IEEE.

33、STD_LOGIC_1164.ALL; ENTITY ToneTaba IS PORT ( Index : IN STD_LOGIC_VECTOR (3 DOWNTO 0) ; Tone : OUT STD_LOGIC_VECTOR (10 DOWNTO 0); en : IN STD_LOGIC); END; ARCHITECTURE one OF ToneTaba IS BEGIN PROCESS(Index,en) BEGIN IF en='0' THEN Tone<="1111111111

34、1";--使能信号 ELSE CASE Index IS -- 译码电路,查表方式,控制音调的预置数 WHEN "0000" => Tone<="11111111111" ; WHEN "0001" => Tone<="01100000101" ; WHEN "0010" => Tone<="01110010000" ; WHEN "0011" => Tone<="10000001100" ; WHEN "0101" => Tone<="10010101101" ; WHEN "0110" => To

35、ne<="10100001010" ; WHEN "0111" => Tone<="10101011100" ; WHEN "1000" => Tone<="10110000010" ; WHEN "1001" => Tone<="10111001000" ; WHEN "1010" => Tone<="11000000110" ; WHEN "1100" => Tone<="11001010110" ; WHEN "1101" => Tone<="11010000100" ; WHEN "1111" => Tone<="1

36、1011000000" ; WHEN OTHERS => NULL; END CASE; END IF; END PROCESS; END; LIBRARY ieee; 程序 USE ieee.std_logic_1164.all; LIBRARY altera_mf; USE altera_mf.altera_mf_components.all; ENTITY music IS PORT ( address : IN STD_LOGIC_VECTOR (7 DOWNTO 0); inclock : IN STD_LOGIC ;

37、 q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0)); END music; ARCHITECTURE SYN OF music IS SIGNAL sub_wire0 : STD_LOGIC_VECTOR (3 DOWNTO 0); COMPONENT altsyncram GENERIC (intended_device_family : STRING; width_a : NATURAL; widthad_a : NATURAL; numwords_a : NATURAL; operation_mode : S

38、TRING; outdata_reg_a : STRING; address_aclr_a : STRING; outdata_aclr_a : STRING; width_byteena_a : NATURAL; init_file : STRING; lpm_hint : STRING; lpm_type : STRING); PORT ( clock0 : IN STD_LOGIC ; address_a : IN STD_LOGIC_VECTOR (7 DOWNTO 0); q_a : OUT STD_LOG

39、IC_VECTOR (3 DOWNTO 0)); END COMPONENT; BEGIN q <= sub_wire0(3 DOWNTO 0); altsyncram_component : altsyncram GENERIC MAP ( intended_device_family => "Cyclone", width_a => 4, widthad_a => 8, numwords_a => 256, operation_mode => "ROM", outdata_reg_a => "UNREGISTERED", a

40、ddress_aclr_a => "NONE", outdata_aclr_a => "NONE", width_byteena_a => 1, init_file => "data1.mif", lpm_hint => "ENABLE_RUNTIME_MOD=YES, INSTANCE_NAME=rom2", lpm_type => "altsyncram") PORT MAP ( clock0 => inclock, address_a => address, q_a => sub_wire0); END SY

41、N; 四、实验仿真结果: 本实验是以KEY2、KEY1为控制整个闹钟的校时,校分,校闹钟时、分,分别将KEY2[1],KEY2[0],KEY1,送到实验上的三个键,由这三个键来控制整个校时,校分,校闹钟时,校闹钟分的过程,加上分别连接的键叫A,B,C键, 则当A=0,B=1,C=0时是对时钟进行校时,时个位和时十位会以二十四进制循环自动增加。仿真波形: 当A=0,B=0,C=0时是对时钟进行校分,分个位和分十位会以六十进制循环增加,并且不对时进位。仿真波形: 当A=0,B=1,C=1时是对闹钟进行校分,闹钟时个位和时十位会以二十四进制循环自动增加。仿真波形: 当A=

42、0,B=0,C=1时是对闹钟进行校时,闹钟分个位和分十位会以六十进制循环增加,并且不对时进位。仿真波形: 而当A=1,B=0,C=0或者A=1,B=1,C=0是正常的计时时间,秒从零开始计时,每秒加一,当到达五十九在来一个脉冲后,秒十位和秒个位清零,从零开始直到六十一直循环,并且向分个位清零;分位的原理同秒的一样;而时与秒,分的不同之处是,当时计数到二十三时清零并且不向任何位进位。仿真波形: 另外当计数的时,分和闹钟所事先设置时、分相等时,“梁祝”这首歌会响起,作为闹钟并且维持一分钟,一分钟歌曲自动停止。 在有条件的情况下,为验证所设计程序是否正确,将程序下载到FPGA器件中进行

43、硬件测试。在QuartusⅡ开发环境中进行管脚锁定,连接好数码管驱动电路,然后将目标文件下载到器件中。最终可以看到时、分、秒正常显示。引脚分配如下(选择模式5) 五、 结束语 通过本次实验,系统的复习整个EDA的知识,并且了解了CPLD可编程芯片的结构和引脚,能够熟练的运用quartus II这个软件,尤其可贵的是,学会了使用这个软件来给程序配置引脚,并且实际的通过实验箱的几个按键就可以控制整个操作的过程,终于感到自己所学到的知识可以付诸到实践了。 六、 参考资料 1 周润景《基于quartus II的FPGA/CPLD数字系统设计实例》[M]电子工业出版社、 2 汪国强 《EDA技术与应用》[M]电子工业出版社 3 赵雅兴《 FPGA原理、设计与应用》[M]天津大学出版社 4 湖南科技学院电子工程与物理系.基于FPGA的仪表用多功能数字时钟的嵌入 设计[J]《电测与仪表》2008年01期 5 张子刚 基于VHDL的数字时钟的设计[J]《气象水文海洋仪器》2008年第2期

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服