




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、湖南理工学院-物电学院-自动打铃系统设计说明书考试序号:#自动打铃系统设计说明书 学 生 姓 名:# 学 号:# 专 业 班 级:# 报告提交日期:2014.12.5 湖 南 理 工 学 院 物 电 学 院 目录第一部分:设计题目及总体要求简介41.设计题目:自动打铃系统设计。42.设计要求简介:4第二部分:设计方案说明4设计方案:4第三部分:各部分功能介绍及程序(部分)61.系统框图62.选择的FPGA芯片及配置63.各模块(元件)说明7各子模块说明7顶层文件说明13端口说明14顶层文件引脚映射说明14第四部分:仿真结果(附图)151.仿真结果图152.说明16输入激励信号说明17输出结果说
2、明17附录:源程序(附注释)17第一部分:设计题目及总体要求简介1.设计题目:自动打铃系统设计。2.设计要求简介: 基本计时和显示功能(24小时制显示),包括:1. 24小时制显示;2. 动态扫描显示;3. 显示格式:88-88-88; 能设置当前时间(含时、分); 能实现基本打铃功能,规定:06:00起床铃,打铃5s;clk: 标准时钟信号;clk_1k:扫描时钟;mode: 功能控制信号; 为0:计时功能;为1:闹钟功能;为2:手动校时功能;turn: 接按键,在手动校时功能时,选择是调整小时,还是分钟;change: 接按键,手动调整时,每按一次,计数器加1;alert: 输出到扬声器的
3、信号,用于产生打铃声;第二部分:设计方案说明设计方案:自动打铃是一种现代提醒工具,有着广泛的应用。例如学校的上课铃声,每天在既定的时间响铃,这就是自动打铃系统的具体应用之一。打铃系统设置从早上的6点开始起床打铃,铃声持续响5秒。利用IF语句控制打铃的时间,在规定的时间内到打设既定的打铃间隔时间时给出一个5秒的高电平脉冲,让铃声连续响起。还需要一个校时功能。本次设计主要采用Verilog HDL硬件描述性语言、分模块法去设计。由于这次开发板提供的是50M晶振,所以首先要对时钟进行分频,当计时到2FA_F07F时完成1s分频,通过计时到60s产生分钟进位信号,再通过60分钟产生进位信号。最后通过6
4、个寄存器对时分进行锁存最终输出到8个数码管上完成显示。当显示时钟和默认闹钟时钟相等时,驱动打铃模块。通过mode,turn,change查看闹钟,时钟显示,调整时钟。总体设计框图如下图所示。控制模块时钟模块闹钟模块打铃模块闹钟显示时钟显示分频模块显示模块晶振数码管扬声器校时模块按键部分软件控制流程示意图如下:开始mode校时功能闹铃功能计时功能调整小时调整小时调整分钟调整分钟返回计时返回计时turnLD_hour亮LD_min亮LD_alert亮change第三部分:各部分功能介绍及程序(部分)1. 系统框图 顶层电路主要由FPGA实现,输出信号接到八位数码管、LED指示灯及扬声器上,系统框图
5、如图所示clkclk_1kmodechangealertLD_alertLD_hourLD_minture(hour、min、sec)outAltera顶层模块2. 选择的FPGA芯片及配置 EP1K10TC100-3本系统采用ACEX1K 系列的EP1K10TC100-3,由于FPGA器件的规模可以做的非常大,其内部主要由大量纵横排列的逻辑块(Logic Block,LB)构成,大量这样的逻辑块通过内部连线和开关就可以实现非常复杂的逻辑功能。由于FPGA是基于SRAM结构的,具有易失性,在此采用被动串行配置(PS)方式,由外部的计算机控制配置过程,使用USB-Blaster下载电缆下载程序。
6、ACEX 系列是当今Altera CPLD 中应用前景最好的器件系列之一1,2。该系列的 FPGA 由逻辑阵列块,LAB、嵌入式阵列块EAB、快速互联一计IO单元构成,每个逻辑阵列块包含8个逻辑单元LE(logic element)和一个局部互联。每个逻辑单元则有一个4输入查找表(LUT)、一个可编程触发器、快速进位链、级连链组成,对个LAB和多个EAB则可通过快速通道互相连接。EAB是ACEX 系列器件在结构设计上的一个重要的部件,他是输入端口和输出端口都带有的触发器的一种灵活的RAM快,其主要功能是实现一些规模不太大FIFO,ROM、RAM和双端口RAM等8段共阴极LED显示(seg3-s
7、eg10)扬声器开关及校时按钮3. 各模块(元件)说明各子模块说明(1) 校正模块:在实验中,产生基准信号,校正时间。always (posedge clk)begin clk_2hz <= clk_2hz;if(sound = 3) begin sound <= 0;ear<=1; end /ear用于产生或屏蔽声音信号else begin sound <= sound + 1;ear <= 0; end endalways (posedge clk_2hz)/用4hz的输入信号产生1hz的时基信号clk_1hz <= clk_1hz;(2)计时和闹铃模块
8、下的调整模块:当mode信号为0时,在基准时钟信号clk下,系统按60进制加1计时;当mode信号为2时,若检测到turn信号的脉冲时,在校对小时和分钟之间作切换,当前的调整状态可通过LD_hour或LD_min指示灯查看,change信号每来一个脉冲,计数器加1,这样可以将系统当前的时间调到任意时刻。当mode信号为2,在检测到turn信号的脉冲时,闹铃定时在小时和分钟之间作切换,当前的调整状态可通过LD_hour或LD_min指示灯查看,change信号每来一个脉冲,计数器加1,这样可以给系统设置任意时刻的闹铃,设置完成之后LD_alert指示灯会常亮。always (negedge cl
9、k) /如果长按"change"信号,则生成信号用于连续快速加1 if(count2)begin if(loop1 = 3) num1 <= 0;else begin loop1 <= loop1 + 1;num1 <= 0; endendelse begin loop1 <= 0; num1 <= 0; endalways (negedge clk)/产生num2信号if(countb)beginif(loop2 = 3)num2 <= 1;else begin loop2 <= loop2+1;num2 <= 0;ende
10、ndelse begin loop2 <= 0; num2 <= 0; endalways (negedge clk)if(count1)begin if(loop3 = 3) num3 <= 1;else begin loop3 <= loop3+1;num3 <= 0; endendelse begin loop3 <= 0; num3 <= 0; endalways (negedge clk)if(counta)begin if(loop4 = 3) num4 <= 1;else begin loop4 <= loop4 + 1; n
11、um4 <= 0; endendelse begin loop4 <= 0;num4 <= 0; endassign ct1 = (num3&clk)|(!num3&m_clk);/ct1用于及计时、较时中的分钟计数assign ct2 = (num1&clk)|(!num1&count2);/ct2用于定时状态下调整分钟信号 assign cta = (num4&clk)|(!num3&h_clk);/cta用于及计时、较时中的小时计数assign ctb = (num2&clk)|(!num3&countb)
12、;/ctb用于定时状态下调整小时信号always (posedge clk_1hz)/秒计时和秒调整进程if(!(sec18'h59)|turn&(!m)begin sec1 <= 0; if(!(turn&(!m) minclk <= 1; end /按住"turn"秒信号清0else begin if(sec13:0 = 4'b1001)begin sec13:0 <= 4'b0000; sec17:4 <= sec17:4 + 1;end else sec13:0 <= sec13:0 + 1; m
13、inclk <= 0; end assign m_clk = minclk | count1;always (posedge ct1)/分计时和分调整进程beginif(min1 = 8'h59) begin min1 <= 0;hclk <= 1; endelse begin if(min13:0 = 9)begin min13:0 <= 0; min17:4 <= min17:4 + 1; endelse min13:0 <= min13:0 + 1; hclk <= 0;endendassign h_clk = hclk | counta
14、;always (posedge cta)/小时计时和小时调整进程 if(hour1 = 8'h23) hour1 <= 0; elseif(hour13:0 = 9)begin hour17:4 <= hour17:4 + 1; hour13:0 <= 0; endelse hour13:0 <= hour13:0 + 1; always (posedge ct2)/闹钟定时功能中的分钟调整进程if(amin = 8'h59) amin <= 0;elseif(amin3:0 = 9)begin amin7:4 <= amin7:4 + 1
15、; amin3:0 <= 0; endelse amin3:0 <= amin3:0 + 1; always (posedge ctb)/闹钟定时功能中的小时调整进程if(ahour = 8'h23) ahour <= 0;elseif(ahour3:0 = 9)begin ahour7:4 <= ahour7:4 + 1; ahour3:0 <= 0; endelse ahour3:0 <= ahour3:0 + 1; always/闹铃功能if(min1 = amin)&&(hour1 = ahour)&&(ami
16、n|ahour)&&(!change)/若按住键不放,可屏蔽闹铃音if(sec1 < 8'h20) alert1 <= 1; /控制闹铃的时间长短else alert1 <= 0;else alert1 <= 0;always/时、分、秒的显示控制case(m)3'b00: begin hour <= hour1; min <= min1; sec <= sec1; end/计时状态下的时、分、秒显示3'b01: begin hour <= ahour; min <= amin; sec <=
17、8'hzz; end/定时状态下的时、分、秒显示3'b10: begin hour <= hour1; min <= min1; sec <= 8'hzz; end /校时状态下的时、分、秒显示endcase(3)模式控制子模块:此模块通过mode信号0、1、2三种状态的控制,使系统分别在计时、闹铃、校时三种模式下工作。always (posedge mode) /mode信号控制系统在三种功能间的转换begin if(m = 2) m <= 0;else m <= m+1; end always (posedge turn)fm <
18、= fm;always/产生count1,count2,counta,countb四个信号begincase(m)2:begin if(fm)begin count1 <= change; LD_min,LD_hour <= 2; endelsebegin counta <= change; LD_min,LD_hour <= 1; endcounta,countb <= 0; end1:begin if(fm) begin count2 <= change; LD_min,LD_hour <= 2; endelse begin countb <
19、= change; LD_min,LD_hour <= 1; end count1,countb <= 2'b00; end default:count1,count2,counta,countb,LD_min,LD_hour <= 0; endcaseend(4)六点闹铃5s模块assign LD_alert = (ahour|amin)?1:0;assign alert = (alert1)?clk_1k&clk:0) | alert2;alwaysbeginif(hour1=8'h06)&&(min1 = 8'h00)&a
20、mp;&(sec1 < 8'h05) | (!(hour1 | min1 | sec1)if(sec1<8'h05) alert2 <= ear&clk_1k;else alert2 <= !ear&clk_1k;else alert2 <= 0;end(5)数码管显示译码模块:此模块用于将实时时间(包括调整过程中时钟的状态)输出到八位数码管中,通过sel信号位选的控制动态扫描显示当前时钟。module decoder(decodeout,dec_in);output7:0 decodeout;input3:0 dec_in
21、;reg7:0 decodeout;always (dec_in)begincase(dec_in)4'h0: decodeout<=8'b00111111;4'h1: decodeout<=8'b00000110;4'h2: decodeout<=8'b01011011;4'h3: decodeout<=8'b01001111;4'h4: decodeout<=8'b01100110;4'h5: decodeout<=8'b01101101;4'h6:
22、decodeout<=8'b01111101;4'h7: decodeout<=8'b00000111;4'h8: decodeout<=8'b01111111;4'h9: decodeout<=8'b01101111;4'h-: decodeout<=8'b01000000;endcaseendendmodule(6)数码管扫描时钟产生模块module count8(out,clk);output2:0 out;input clk;reg2:0 out;always (posedge clk
23、)beginout<=out+1;endendmodule(7)数码管段选扫描模块 module segscan(dout,din,sel);output3:0 dout;input31:0 din;input2:0 sel;reg3:0 dout;always (sel,din)begincase(sel)3'b000: dout<=din31:28;3'b001: dout<=din27:24;3'b010: dout<=din23:20;3'b011: dout<=din19:16;3'b100: dout<=d
24、in15:12;3'b101: dout<=din11:8;3'b110: dout<=din7:4;3'b111: dout<=din3:0;endcaseendendmodule顶层文件说明 /定义各控制信号的控制变量的符号module alarmclock(clk,clk_1k,mode,change,turn,alert,hour,min,sec,LD_alert,LD_hour,LD_min);input clk,clk_1k,mode,change,turn;output alert,LD_alert,LD_hour,LD_min;outp
25、ut7:0 hour,min,sec;reg7:0 hour,min,sec,hour1,min1,sec1,ahour,amin;reg1:0 m,fm,num1,num2,num3,num4;reg1:0 loop1,loop2,loop3,loop4,sound;reg LD_hour,LD_min;reg clk_1hz,clk_2hz,minclk,hclk;reg alert1,alert2,ear;reg count1,count2,counta,countb;wire ct1,ct2,cta,ctb,m_clk,h_clk;端口说明clk: 标准时钟信号;clk_1k:扫描时钟
26、;mode: 功能控制信号; 为0:计时功能;为1:闹钟功能;为2:手动校时功能;turn: 接按键,在手动校时功能时,选择是调整小时,还是分钟;change: 接按键,手动调整时,每按一次,计数器加1;alert: 输出到扬声器的信号,用于产生打铃声;LD_alert: 指示是否设置了闹钟功能;LD_hour: 指示当前调整的是小时信号;LD_min: 指示当前调整的是分钟信号;hour7.0: 小时信号的输出min7.0: 分钟信号的输出sec7.0: 秒信号的输出顶层文件引脚映射说明 输入引脚5个,输出引脚15个,引脚锁定关系如图所示第四部分:仿真结果(附图)1.仿真结果图 计时仿真图(
27、以12:59:59计时进位为例)计时进位具体理解为:时钟每产生一个时钟脉冲,秒钟加一,秒钟总加满六十次时,产生一个进位,然后分钟加一,当分钟加满六十次时,产生一个时钟进位,然后时钟加一,当时钟加满二十四次时,进行一次初始化。手动校时仿真图(以手动调到7:06为例)手动校时具体操作为:首先给mode输入2个连续的高脉冲使系统进入校时模式,再给change输入7个连续高脉冲使小时调到七,此过程中LD_hour指示灯亮,再给turn一个高脉冲切换到调分钟状态,再给change输入6个连续高脉冲使小时调到六分钟,此过程中LD_min指示灯亮,再给mode一个高脉冲回到计时模式,系统从07:06分开始计
28、时。 打铃仿真图(以六点整闹铃为例,打铃5s)2.说明 输入激励信号说明 clk:标准时钟信号; clk_1k:数码管扫描时钟; mode:功能模式控制信号,为0:计时功能; 为1:闹铃功能; 为2:校时功能; turn:接按键,在手动校时功能时,选择调整小时/分钟; change:接按键,手动调整时,每按一次,计数器加1;输出结果说明 alert:输出到扬声器的信号,用于产生闹铃声; LD_alert:接LED,灯亮表示设置了闹铃; LD_hour:接LED,灯亮表示正在调整小时;L
29、D_min:接LED,灯亮表示正在调整分钟。hour,min,sec:分别表示时分秒信号,采用BCD码计数,分别驱动6个数码显示管显示时间;附录:源程序(附注释)(程序来自于EDA技术与Verilog设计P268P272)/*信号定义:clk: 标准时钟信号;clk_1k:扫描时钟;mode: 功能控制信号:为0:计时功能;为1:闹钟功能;为2:手动校时功能;turn: 接按键,在手动校时功能时,选择是调整小时,还是分钟;change: 接按键,手动调整时,每按一次,计数器加1;hour,min,sec:分别表示时分秒信号,采用BCD码计数,分别驱动6个数码显示管显示时间;alert: 输出到
30、扬声器的信号,用于产生打铃声;LD_alert:接发光二极管,指示是否设置了闹钟功能;LD_hour: 接发光二极管,指示当前调整的是小时信号;LD_min: 接发光二极管,指示当前调整的是分钟信号 .*/module clock(clk,clk_1k,mode,change,turn,alert,hour,min,sec,LD_alert,LD_hour,LD_min);input clk,clk_1k,mode,change,turn;output alert,LD_alert,LD_hour,LD_min;output7:0 hour,min,sec;reg7:0 hour,min,se
31、c,hour1,min1,sec1,ahour,amin;reg1:0 m,fm,num1,num2,num3,num4;reg1:0 loop1,loop2,loop3,loop4,sound;reg LD_hour,LD_min;reg clk_1Hz,clk_2Hz,minclk,hclk;reg alert1,alert2,ear;reg count1,count2,counta,countb;wire ct1,ct2,cta,ctb,m_clk,h_clk;always (posedge clk)begin clk_2Hz <= clk_2Hz;if(sound = 3) be
32、gin sound <= 0;ear<=1; end /ear用于产生或屏蔽声音信号else begin sound <= sound + 1;ear <= 0; end endalways (posedge clk_2Hz)/用4hz的输入信号产生1hz的时基信号clk_1Hz <= clk_1Hz;always (posedge mode) /mode信号控制系统在三种功能间的转换begin if(m = 2) m <= 0;else m <= m+1; end always (posedge turn)fm <= fm;always/产生c
33、ount1,count2,counta,countb四个信号begincase(m)2:begin if(fm)begin count1 <= change; LD_min,LD_hour <= 2; endelsebegin counta <= change; LD_min,LD_hour <= 1; endcounta,countb <= 0; end1:begin if(fm) begin count2 <= change; LD_min,LD_hour <= 2; endelse begin countb <= change; LD_mi
34、n,LD_hour <= 1; end count1,countb <= 2'b00; end default:count1,count2,counta,countb,LD_min,LD_hour <= 0; endcaseendalways (negedge clk) /如果长按"change"信号,则生成信号用于连续快速加1 if(count2)begin if(loop1 = 3) num1 <= 0;else begin loop1 <= loop1 + 1;num1 <= 0; endendelse begin loop
35、1 <= 0; num1 <= 0; endalways (negedge clk)/产生num2信号if(countb)beginif(loop2 = 3)num2 <= 1;else begin loop2 <= loop2+1;num2 <= 0;endendelse begin loop2 <= 0; num2 <= 0; endalways (negedge clk)if(count1)begin if(loop3 = 3) num3 <= 1;else begin loop3 <= loop3+1;num3 <= 0; e
36、ndendelse begin loop3 <= 0; num3 <= 0; endalways (negedge clk)if(counta)begin if(loop4 = 3) num4 <= 1;else begin loop4 <= loop4 + 1; num4 <= 0; endendelse begin loop4 <= 0;num4 <= 0; endassign ct1 = (num3&clk)|(!num3&m_clk);/ct1用于计时、校时中的分钟计数assign ct2 = (num1&clk)|(!
37、num1&count2);/ct2用于定时状态下调整分钟信号 assign cta = (num4&clk)|(!num4&h_clk);/cta用于计时、校时中的小时计数assign ctb = (num2&clk)|(!num2&countb);/ctb用于定时状态下调整小时信号always (posedge clk_1Hz)/秒计时和秒调整进程if(!(sec18'h59)|turn&(!m)begin sec1 <= 0; if(!(turn&(!m) minclk <= 1; end /按住"tur
38、n"秒信号清0else begin if(sec13:0 = 4'b1001)begin sec13:0 <= 4'b0000; sec17:4 <= sec17:4 + 1;end else sec13:0 <= sec13:0 + 1; minclk <= 0; end assign m_clk = minclk | count1;always (posedge ct1)/分计时和分调整进程beginif(min1 = 8'h59) begin min1 <= 0;hclk <= 1; endelse begin if(min13:0 = 9)begin min13:0 <= 0; min17:4 <= min17:4 + 1; endelse min13:0 <= min13:0 + 1; hclk <= 0;endendassign h_clk = hclk | counta;always (posedge cta)/小时计时和小时调整进程 if(hour1 = 8'h23
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论