《基于VHDL的学校作息时间系统设计》由会员分享,可在线阅读,更多相关《基于VHDL的学校作息时间系统设计(35页珍藏版)》请在金锄头文库上搜索。
1、学校作息时间系统1 / 35北京邮电大学电子工程学院2012 级数字电路与逻辑设计实验报告学校作息时间管理系统班级:2012211207学号:班内序号:姓名: 2014/11/9学校作息时间系统2 / 35目录任务要求 .3系统设计 .4设计思路 .4设计框图 .4分块介绍 .6仿真波形 .6VHDL 源程序 .10功能说明 .25元器件清单 .25故障及问题分析 .26实验总结 .26学校作息时间系统3 / 35任务要求题目一、学校作息时间管理系统基本要求:1、 该管理系统有常态、 考试和假日三种工作模式, 三种模式用一个按键 BTN 实现切换,并用点阵进行显示:常态模式显示 N,考试模式显
2、示 E,假日模式显示 H。 2、 常态模式:每天上午的 7 点 50、下午 13 点 20 和 18 点 20 打预备铃,上午的 8 点、 9 点、10 点 10 分、11 点 10 分、下午的 13 点 30、14 点 30、15 点 40、16 点 40、18 点 30 和 19 点 30 打上课铃,上午的 8 点 50、9 点 50、11 点、12 点、下午的 14 点 20、15 点 20、16 点 30、17 点 30、19 点 20 和 20 点 20 打下课铃,每天晚上的 23 点打熄灯铃。 3、 考试模式:每天上午的 7 点 50、下午 12 点 50 打预备铃,上午的 8 点
3、、10 点、下午的 13 点、15 点打考试铃,上午的 12 点和下午的 17 点打收卷铃,每天晚上的 23 点打熄灯铃。 4、 假日模式:只在晚上 23 点打熄灯铃。 5、 铃声要求:预备铃声、上课玲声、下课铃声、熄灯铃声、考试铃声和收卷铃声至少用 3 种用不同的乐曲表示,每种铃声不短于 10 秒,不长于 20 秒,且上课铃声和考试铃声必须终止于开始时间, 下课铃声和收卷铃声必须起始于课程或考试结束时间。 6、 任何模式下,时钟都要走时正确,且可以用按键 BTN 进行校正调节,时间用 6 个数码管显示。提高要求:1、 打铃时间可以人工修改2、 自拟其它功能。系统设计设计思路程序采用自顶向下设
4、计的思路,先将主程序启动,然后依次启动子程序,主程序为蜂鸣器响铃部分,子程序包括数码管时间显示部分、点阵状态显示部分、时间校正部分、逻辑判断部分及按键防抖部分。设计框图系统结构图学校作息时间系统4 / 35总体设计框图ASM 图主控部分按键输入时高位时低位 分高位分低位 秒高位秒低位数码管输出晶振振荡电路50k 分频 250 分频4 分频 按键防抖点阵显示响铃时间响铃时长响铃种类等的存储时间比较及响铃选择响铃学校作息时间系统5 / 35NYESNOYESYESY YNY分频模块设计开始状态选择是否为 N时间是否为 7 点50、下午 13 点 20响铃 1时间是否为8: 00,9:00。 。 。
5、 。 。 。响铃 2时间是否为8:50,9:50.。 。 。 。 。响铃 3时间是否为 23:00响铃 4是否为H学校作息时间系统6 / 35晶体振荡器是构成数字时钟的核心,振荡器的稳定度及频率的精度决定了数字钟计时的准确程度,它保证了时钟的走时准确及稳定。石英晶体的选频特性非常好,只有某一频率点的信号可以通过它,其它频率段的信号均会被它所衰减,而且振荡信号的频率与振荡电路中的 R、C 元件的数值无关。因此,这种振荡电路输出的是准确度极高的信号。本设计 FPGA 外部使用的是 50MHz 晶振,在其内部再根据需要进行分频。分频模块分别产生 1kHZ、250HZ、1HZ 脉冲信号。其中 1KHZ
6、 作为读写时钟信号,250HZ 为刷新频率, 1HZ 作为时钟基准时钟信号。VHDL 源程序分频模块-50k 分频,本程序中将 50Mhz 时钟信号分频至 1khzlibrary ieee;use ieee.std_logic_1164.all;entity div_50k isport (clk_in : in std_logic;clk_out : out std_logic);end entity;architecture a of div_50k issignal tmp1 :integer range 0 to 999;-signal tmp2 :integer range 0 to
7、 24;-signal clktmp :std_logic;beginprocess(clk_in)beginif (clk_inevent and clk_in=1) thenif (tmp1=999) thentmp1sl2 sh2 ml2 mh2 hl2 hh2 学校作息时间系统13 / 35if (hh2=2) then hh2 if (hh2=2) then hh2 if (hh2=2) then hh2 if (hh2=2) then hh2 case hh2 iswhen 0=hh2hh2hh2null;end case;elseend if;end if;end process
8、;end a;学校作息时间系统14 / 35时间显示模块(在程序中,为方便验证,只在部分响铃时间点精确到了秒位)library ieee;use ieee. std_logic_1164.all;use ieee.std_logic_unsigned.all;entity show isport(clk:in std_logic;SW7:in std_logic;signal q1_temp,q2_temp,q3_temp,q4_temp,q5_temp,q6_temp:in std_logic_vector(3 downto 0) ;-p1a:in std_logic_vector(2 do
9、wnto 0);- 歌曲选择choose:in std_logic_vector(1 downto 0);- 模式选择clk_out:out std_logic;ROW:out std_logic_vector(7 downto 0);COL:out std_logic_vector(7 downto 0);end show;学校作息时间系统15 / 35architecture a of show issignal ring:integer range 0 to 5;-有五种歌曲signal tmp:integer range 0 to 20000;signal tmp2:integer r
10、ange 0 to 6249999;signal tmp1:integer range 0 to 12499999;signal tmp5:integer range 0 to 2000;-1signal tmp3:integer range 0 to 5;signal tmp4:integer range 0 to 7;signal clk_out3:std_logic;signal clk_out4:std_logic;signal clk_out2:std_logic;signal tmp10:integer range 0 to 20000;signal tone:std_logic_
11、vector(2 downto 0);signal clktmp,clktmp1,clktmp2,clktmp3,clktmp4:std_logic;signal ROW_temp:std_logic_vector(7 downto 0);signal COL_temp:std_logic_vector(7 downto 0);signal Areg1,in1_a:std_logic;signal start:std_logic;beginChooseScene:process(choose,clk,a)-无用信号,最后并未用到variable divide:integer:=0;variab
12、le count:integer:=0;variable nothing:integer:=0;beginif clkevent and clk=1 then -点阵分频clk_out3divide:=23899;-1,25Mhzwhen010=divide:=21283;-2when011=divide:=18959;-3when100=divide:=17894;-4when101=divide:=15943;-5when110=divide:=14204;-6when111=divide:=12653;-7 七种音符when others=divide:=0;end case;if clk_out4event and clk_out4=1 thenif tmp4=7 thentmp4ringringringringringringclk_out COL COL COL COL COL COL COL COLCOL COL COL COL COL COL COL COL COLCOL COL COL COL COL COL COL COL COLCOL COL COL CO