多功能电子钟设计报告.doc

上传人:sccc 文档编号:5040112 上传时间:2023-05-31 格式:DOC 页数:53 大小:663.01KB
返回 下载 相关 举报
多功能电子钟设计报告.doc_第1页
第1页 / 共53页
多功能电子钟设计报告.doc_第2页
第2页 / 共53页
多功能电子钟设计报告.doc_第3页
第3页 / 共53页
多功能电子钟设计报告.doc_第4页
第4页 / 共53页
多功能电子钟设计报告.doc_第5页
第5页 / 共53页
点击查看更多>>
资源描述

《多功能电子钟设计报告.doc》由会员分享,可在线阅读,更多相关《多功能电子钟设计报告.doc(53页珍藏版)》请在三一办公上搜索。

1、兰州理工大学电子技术综合训练设计报告题目: 多功能电子钟设计 姓名: 蔡冰倩 学号: 10230625 班级: 控制工程基地一班 同组成员: 吴博 指导教师: 杨新华 日期: 2012年1月1号 摘要通过CPLD/FPGA可编程逻辑器件实现多功能电子钟。电子钟的主要功能有计时功能、校正功能、整点报时功能及定时闹叫功能。针对功能要求利用硬件描述语言设计程序,通过Quartus软件进行仿真分析,将程序下载到电路中,观察数码管可知实现其逻辑功能。利用可编程逻辑器件可简化电路,实现功能的多样性。关键字:多功能电子钟 硬件描述语言 可编程逻辑器件目录 1 设计任务和要求4 1.1设计任务4 1.2设计要

2、求42 系统设计5 2.1系统要求5 2.2方案设计6 2.3系统工作原理63 电子钟功能模块及仿真.73.1分频模块及其仿真73.2计时模块及其仿真93.3定时模块及其仿真113.4按键消抖模块及其仿真14 3.5译码显示模块及其仿真15 3.6例化模块184 元件的选择445 电路安装、调试与测试.45 5.1电路安装.45 5.2电路调试.46 5.3系统功能及性能测试.465.3.1测试方法设计.465.3.2测试结果及分析.476 结论.487 参考文献.488 总结、体会和建议.49 附录:电路原理图.50 元器件清单.53 1设计任务及要求1.1设计任务 设计任务是进行设计的基础

3、,根据对设计任务的分析和理解进行设计电路及相应元器件的选择,从而进行电路仿真和调试。所以对设计任务的理解和分析是进行设计的关键。本设计的设计任务为:利用CPLD/FPGA设计一个多功能电子钟。数字电子钟是一种用数字显示秒、分、时的计时装置,由于十足集成电路技术的发展,使数字钟走时准确、多功能化且性能稳定等优点。利用CPLD/FPGA设计一个可实现计时、校时、整点报时、定时闹叫多功能的电子钟,需要分两步走。首先,通过Verilog HDL 硬件描述语言进行代码的编写,利用Quartus进行编译和仿真。其次,根据设计任务和要求选择器件进行电路的焊接。1.2设计要求 设计要求是完成设计指标的导航,只

4、有很好的分析和了解设计的要求,才可以完成相应的设计。设计要求:利用实验室EDA实验箱上的CPLD/FPGA、LED显示器、扬声器、拨码开关等资源,设计一个多功能电子钟,要求具有以下功能:1、 数字形式显示月、日、时、分、秒,在分和秒之间显示“:”,并按1次/秒的速度闪烁;2、 日以24小时为一个记时周期;3、 有校正功能,能够在任何时刻对电子钟进行方便的校正;4、 有定时闹叫功能,能够按照任意预先设置的时间闹叫,驱动小型扬声器工作,并要求在闹叫状态能够手动消除闹叫;5、 整点时刻通过扬声器给出提示;6、 采用CPLD/FPGA可编程逻辑器件实现;针对设计要求可做简单分析:所设计的多功能电子钟需

5、要实现计时、整点报时、定时闹叫和校正功能。计时需要有相应的计时器实现,整点报时需要相应的报时电路和小功率扬声器,定时闹叫需要通过编写的Verilog HDL 程序实现定时和在时间到时驱动小功率扬声器报时,校正电路需要有拨码开关和其他电路实现。对设计要求的理解:2 系统设计2.1系统要求通过FPGA/CPLD实现多功能电子钟的设计。电子钟要实现计时、校时、定时闹叫等功能。通过对设计要求的每条的详细分析可得出如下结果:1、 要实现显示月、日、时、分、秒,需要十个LED数码管;要在分和秒之间显示“:”,可以利用两个发光二极管,也可以选择含有“:”的LED数码管;要按1次/秒的速度闪烁,则需要1Hz的

6、输入脉冲控制,所以需要通过晶振产生方波,经过分频产生1Hz的方波。2、 要实现24小时为一个计时周期,则需要一个24进制计时器控制其计数。3、 要实现校正功能,则需要一个校正电路(含校正开关)和相应的校正程序。4、 要实现定时闹叫功能,则需要一个时钟脉冲来控制,使其在设定的时刻报时。外接一个小型扬声器,在设定时刻闹叫,并通过开关消除闹叫,同时也需要相应的程序控制。5、 通过分频电路实现整点报时所需时钟信号,需设计相应的程序段使其在59分,59秒时报时。6、 根性要求设计Verilog HDL程序,并在Quartus 软件上进行编译和仿真,从而根据资源的需求选择CPLD/FPGA可编程逻辑器件。

7、 要实现系统要求,需要Verilog HDL程序和Quartus 软件的支持。下面对其进行简单介绍:(1)利用Verilog HDL硬件描述语言实现功能程序。Verilog HDL是广泛应用的硬件描述语言,可以用在硬件设计流程的建模、综合和模拟等多个阶段。通过应用Verilog HDL对多功能电子钟的设计,可实现系统的设计要求。Verilog HDL硬件描述语是一种实用性很强的编程语言,可以实现软件程序和硬件程序的结合,即将所编写的程序在仿真通过后利用下载器下载到电路板上,通过程序控制器件的工作。模块是Verilog 的基本描述单位,用于描述某个设计的功能或结构及其与其他模块通信的外部端口。一

8、个设计的结构可使用开关级原语、门级原语和用户定义的原语方式描述; 设计的数据流行为使用连续赋值语句进行描述; 时序行为使用过程结构描述。一个模块可以在另一个模块中使用。(2)Quartus是Alterat提供的FPGA/CPLD开发集成环境,支持Verilog HDL 的设计流程。其包括模块化的编辑器,也可以利用第三方的综合工具,具有仿真功能。Quartus的设计流程为:设计输入,综合或编译,适配器件,仿真,下载。通过Quartus可实现对程序的仿真和下载,从而实现系统的要求。2.2方案设计 根据系统要求,将设计程序分为计时模块、整点报时模块、定时闹叫模块、校正模块四大模块,通过模块的例化实现

9、所有功能。所对应的硬件连接可分为集成芯片、复位电路、校正电路、晶振电路、响铃电路、译码显示电路几个模块。 对可编程逻辑器件的选择是实现硬件电路的基础。根据要求本设计可选择芯片EPM7023或者芯片EP2C5T144 C8。但通过查阅资料可知EPM7023只有44个引脚,可能会导致资源不足,即引脚不够用,驱动能力不足,所以选择altera公司的cyclone 系列的EP2C5T144 C8芯片。下面对芯片做简要介绍: 拥有丰富的User IO(用户IO引脚),即144个IO接口可供使用。开发板通过2.54mm标准排针,引出了所有的用户IO引脚。芯片引脚分为四组(Bank),每组(每个Bank)的

10、IO引脚供电是独立的,因此可以采用不同的电平标准。 内部需要三个电压:5V、3.3V、1.2V,其中3.3V给IO接口供电,1.2V给内核供电。含有2个PLL。PLL的作用是产生各种频率的时钟,在FPGA中拥有重要的地位。2.3系统工作原理通过晶振产生一个时钟脉冲,成为主时钟。在通过分频电路输出所需要的时钟脉冲,即1Hz的计时脉冲。计时时,当秒计数器计到59时,向分计时器进1;当分钟计数器计到59,秒计数器计到59时,向小时计时器进1;当小时计时器计到23,分钟计数器计到59,秒计数器计到59时,向日期计时器进1;当日期计时器计到29,小时计时器计到23,分钟计数器计到59,秒计数器计到59时

11、,向月份计数器进1。将所计时间通过LED数码管显示出来。定时闹叫时,设置闹铃的分钟和小时,设置的时候由转换按键控制调整分钟及调整小时之间的切换,每按一次调整键,所调整的计数器加1,分钟计数器计满60就清0,小时计时器计满24就清0。当到所定时间时,驱动小功率扬声器工作,发出响铃声。整点报时的工作原理为当秒计数器为0,分计时器为0时,驱动小功率扬声器发出报时声。校时为修正日期、月份、小时和分钟的时间以及秒钟的精确调整清零。由转换按键控制调整分钟和调整小时之间的切换,每按一下调整键所调整的计数器加1,分钟计数器满60清零,小时计数器满24清零;秒种的精确调整清零具体为在正常计时的情况下,长时间按住

12、转换按键,即可使秒钟清零,进行精确调时。秒表工作原理为进行手动计时,按一下计数按键为计时,再按一次计数按键为停止计时,保存计数数值,依此类推;按一次清零键为计数清零,停止计数。3电子钟功能模块及仿真3.1分频模块分频模块的程序:timescale 1ns/100ps module count32 ( asyn_clr_n , /input, 异步清零信号 syn_clr , /input, 同步清零信号 clk , /input, 全局时钟信号 en , /input, 计数使能信号, 计数器的门控开关,计数器关闭后,保持数值不变。 counter /output,计数器计数值 );/* 参数

13、声明 */parameter U_DLY = 1 ; / Unit delay input asyn_clr_n ; /0-clear counter;input syn_clr ; /1-clear counter;input clk ; input en ; /1-enable; 0-disable.output 31:0 counter ;reg 15:0 cnt_high ; /计数器高16位reg 15:0 cnt_low ; /计数器低16位reg cnt_low_max ; /cnt_low达到最大值的标志assign counter = cnt_high, cnt_low;/3

14、2位计数器由2个16位计数器拼接而成。/分段计数:低16位计数器always ( posedge clk or negedge asyn_clr_n ) if (asyn_clr_n = 1b0) /异步清零 cnt_low = 16h0000; /删除时序逻辑中异步复位的单位延时 else if (syn_clr = 1b1) /同步清零 cnt_low = #U_DLY 16h0000; else if (en = 1b1) /计数器使能 cnt_low = #U_DLY cnt_low + 16h0001; else; /保持/低16位计数器的进位标志always ( posedge c

15、lk or negedge asyn_clr_n ) if (asyn_clr_n = 1b0) /异步清零,清除进位 cnt_low_max = 1b0; /删除时序逻辑中异步复位的单位延时。 else if (syn_clr = 1b1) /同步清零,清除进位 cnt_low_max = #U_DLY 1b0; else if (en = 1b1 & cnt_low = 16hfffe) /计数器使能,且低16位计满则产生进位。 /因为从进位产生到cnt_high进程读到此进位需要一个时钟周期,所以计数器只计到16hfffe cnt_low_max = #U_DLY 1b1; else /

16、否则无进位产生 cnt_low_max = #U_DLY 1b0; /分段计数:高16位计数器always ( posedge clk or negedge asyn_clr_n ) if (asyn_clr_n = 1b0) /异步清零 cnt_high = 16h0000; /删除时序逻辑中异步复位的单位延时 else if (syn_clr = 1b1) /同步清零 cnt_high = #U_DLY 16h0000; else if (en = 1b1 & cnt_low_max = 1b1) /计数器使能,且低16位计数器已计满 cnt_high = #U_DLY cnt_high

17、+ 16h0001; else; /保持endmodule仿真波形图:3.2 计时模块计数模块仿真程序:timescale 1ns/100psmodule counter(/*/输入PORT 说明 /*/ input wire clk , /输入时钟 input wire rst_n , /输入复位 input wire counter_clk_pul,/计数时钟脉冲 input wire set_add , /设定进位 input wire cin , /设定进位 /*/输出PORT 说明 /*/ output wire cout , /满进位 output wire 3:0 gewei ,

18、 /输出个位 output wire 3:0 shiwei /输出十位 );parameter 6:0 MAX_NUM = 6d59; reg 6:0 current_num ;always ( posedge clk or negedge rst_n) begin if ( rst_n = 1b0) begin current_num6:0 = 7h00 ; end else if (set_add = 1b1 & cin = 1b1 & counter_clk_pul = 1b1)begin current_num6:0 = current_num6:0 + 7h03 ; end else

19、 if (set_add = 1b1 & cin = 1b1 )begin current_num6:0 = current_num6:0 + 7h02 ; end else if( (set_add = 1b1 | cin = 1b1 ) & counter_clk_pul = 1b1)begin current_num6:0 = current_num6:0 + 7h02 ; end else if( (set_add = 1b1 | cin = 1b1 ) )begin current_num6:0 = current_num6:0 + 7h01 ; end else if (count

20、er_clk_pul = 1b1)begin current_num6:0 MAX_NUM ) begin current_num6:0 MAX_NUM) ;/只取一个时钟脉冲长度assign gewei3:0 = current_num6:0%10 ;assign shiwei3:0 = (current_num6:0/10)%10 ; endmodule仿真波形图:3.3 按键消抖模块按键消抖模块程序:timescale 1ns/100ps /表示时延单位为1ns, 时延精度为100ps module delay_filter_glitch_high ( input wire rst_n

21、, /input, 异步清零信号 input wire clk , /input, 全局时钟信号 input wire en_cnt , /input, 计数使能信号, 可决定计数频率 input wire signal_in_n , /input, 输入信号 output reg signal_out_n /output, 处理后的信号 ); /*/ /参数声明 /*/ parameter U_DLY = 1 ; /Unit delay parameter CNT_WIDTH = 5b11111 ; /计数位宽 parameter CNT_TH = 5b11111 ; /计数门限, 可决定延

22、时时长 /* / / 内部信号申明 /*/ reg CNT_WIDTH-1:0 cnt ; /计数器 reg signal_in_n_1dly; reg signal_in_n_2dly; reg signal_in_n_3dly; wire signal_in_edge ; /指示输入信号的上升/下降沿 /* 行为描述 */ /异步信号的同步处理 always ( posedge clk or negedge rst_n ) begin if ( rst_n = 1b0 ) begin signal_in_n_1dly = #U_DLY 1b1; signal_in_n_2dly = #U_

23、DLY 1b1; signal_in_n_3dly = #U_DLY 1b1; end else begin signal_in_n_1dly = #U_DLY signal_in_n; signal_in_n_2dly = #U_DLY signal_in_n_1dly; signal_in_n_3dly = #U_DLY signal_in_n_2dly; end end assign signal_in_edge = signal_in_n_3dly signal_in_n_2dly; /产生信号上升/下降沿指示信号 always ( posedge clk or negedge rst_n ) begin if ( rst_n = 1b0 ) cnt = #U_DLY 1d0; else if (signal_in_edge = 1b1) /检测输入信号有跳变后,计数器就清零 cnt = #U_DLY 1d0; else if (en_cnt = 1b1 & cnt != CNT_TH) /计数器没计满后加1计数 cnt = #U_DLY cnt + 1d1; else; /否则,保持原来的数值 end always ( posedge clk or negedge rst_n ) begin if ( rst_n =

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号