基于fpga的电子钟的设计(编辑修改稿)内容摘要:

基于 FPGA的电子钟的设计 第 14 页 共 56 页 图 38 时间计数模块电路图 该模块逻辑框图如图 39 所示。 仿真波形图如图 310 所示。 图 39 时间计数模块逻辑框图 图 310 时间计数模块仿真波形图  秒计数 子 模块逻辑框图如图 311所示。 图 311 秒计数子模块框图 EN 是时间显示信号,当 Timepiece_En=1 时有效; clk 是秒脉冲输入端口;输出端口second_data0[3..0]是秒时钟的低位, second_data1[3..0]是高位; EO 端口是进位输出端口,当秒计数到 59 时输出高电平,其它时候输出低电平。 北方民族大学学士学位论文 基于 FPGA的电子钟的设计 第 15 页 共 56 页  分计数子模块的设计原理与秒模块的类似。 逻辑框图如图 312 所示。 图 312 分计数子模块框图  时计数 子 模块逻辑框图如图 313 所示。 图 313 时计数模块框图 时间设置模块( timeset) 该模块主要完成对时间的设置相关的闪烁显示控制以及时间中的小时、分钟、秒等数据的改变,流程图如图 314 所示,逻辑框图如 315 所示,波形仿真图如 316 所示。 初 始 化 , 将 当 前 时 间 赋予 设 置 后 的 时 间开 始T i m e s e t _ E N = 1 ?d i s p _ d r i v e 3 39。 b 1 0 1 ?d i s p _ d r i v e = d i s p _ d r i v e + 3 39。 b 1依 S W 2 , 按 位 进 行 数 字 调 整结 束d i s p _ d r i v e = 3 39。 b 0是否S W 1是 图 314 时间设置模块流程图 北方民族大学学士学位论文 基于 FPGA的电子钟的设计 第 16 页 共 56 页 图 315 时间设置模块框图 图 316 时间设置模块波形仿真图 表 31 时间设置模块的端口说明 输入端口 功能 TimeSet_EN 时间设置使能,当其电平为高时,时间设置有效 SW1,SW2 调整键 1 与调整键 2 输入信号 hour1,hour0 当前时间的小时数输入 minute1,minute0 当前时间的分钟数输入 second0,second1 当前时间的秒数输入 输出端口 功能 hour_set1,hour_set0 设置时间后的小时数 minute_set1,minute_set0 设置时间后的分钟数 second_set1,second_set0 设置时间后的秒数 disp_drive 设置中的闪烁显示设置 当 Timeset_EN 为 1 时,即实现时间设置功能。 SW1 实现时间格式中小时高、低位,北方民族大学学士学位论文 基于 FPGA的电子钟的设计 第 17 页 共 56 页 分钟高、低位,秒高、低位的位选,即每出现一个 SW1 上升沿, disp_drive 的相应数值加1(选择具体的需要调整的位置)。 SW2 实现相应得位的数值的调整,即每出现一个 SW2上升沿,相应位的数值增加 1。 时间数据多路选择模块 ( time_mux) 该模块用来选择向显示单元传输所要显示的数据,流程图如图 317 所示,逻辑框图如图 318 所示,波形仿真如图 319 所示。 依 输 入 条 件 , 判 断 是 自 动 显示 时 间 或 显 示 调 整 后 的 时 间开 始T i m e s e t _ E N = 1 ?显 示 设 置 后 的 时 间 显 示 自 动 模 式 时 的 时 间是否结 束 图 317 多路选择模块的流程图 表 32 多路选择模块的端口说明 输入端口 功能 TimeSet_EN 时间设置使能信号 hour1,hour0 自动模式中当前时间的小时数输入 minute1,minute0 自动模式中当前时间的分钟数输入 second0,second1 自动模式中当前时间的秒数输入 hour_set1,hour_set0 时间设置后的小时数输入 北方民族大学学士学位论文 基于 FPGA的电子钟的设计 第 18 页 共 56 页 minute_set1,minute_set0 时间设置后的分钟数输入 second_set1,second_set0 时间设置后的秒数输入 输出端口 功能 hour_1,hour_0 当前需要显示的小时输出 minute_1,minute_0 当前需要显示的分钟输出 second_0,second_1 当前需要显示的秒输出 图 318 时间数据多路选择模块框图 图 319 时间数据多路选择模块波形仿真图 时间显示 动态位选模块( time_disp_select) 该模块用来分时显示时间数据, TimeSet_EN 表示时间设置使能, Time_EN 表示时间自动显示使能, clk_1kHz 用于动态显示时, clk_200Hz 用于闪烁显示时间, timeset_disp_drive北方民族大学学士学位论文 基于 FPGA的电子钟的设计 第 19 页 共 56 页 表示时间设置数据显示的同步信号, time_disp_select 表示显示动态位选输出信号。 当TimeSet_EN 为 0, Time_EN 为 1 时,以 clk_1kHz为时钟信号,输出自动显示的时间,按位依次显示;当 TimeSet_EN 为 1, Time_EN 为 0 时,则 以 clk_200Hz 为时钟信号,输出以 timeset_disp_drive 对应的位置。 逻辑框图如图 320 所示,波形仿真如图 321 所示。 图 320 时间显示动态位选模块框图 图 321( a)时间显示动态位选模仿真波形图 图 321( b)时间显示动态位选模仿真波形图 该模块的 VerilogHDL 程序如下: module time_disp_select(clk_1khz,clk_200hz,Time_EN,TimeSet_EN, timeset_disp_drive,time_disp_select)。 output [5:0] time_disp_select。 input clk_1khz。 北方民族大学学士学位论文 基于 FPGA的电子钟的设计 第 20 页 共 56 页 input clk_200hz。 input Time_EN。 input TimeSet_EN。 input [2:0] timeset_disp_drive。 reg [5:0] time_disp_select。 reg [2:0] auto_disp_drive。 reg clk。 reg [2:0] disp_drive。 always @(posedge clk_1khz) /*实现自动运行模式中的动态显示 “位选的驱动 ”*/ begin if(auto_disp_drive 339。 b101) auto_disp_drive = auto_disp_drive + 339。 b1。 else auto_disp_drive = 339。 b0。 end always begin /*实现自动运行模式中时间动态显示位选驱动与时间设置中的时间动态显示位选驱动的二选一 */ if(Time_EN == 139。 b1) begin clk= clk_1khz。 disp_drive = auto_disp_drive。 end 北方民族大学学士学位论文 基于 FPGA的电子钟的设计 第 21 页 共 56 页 else if(TimeSet_EN == 139。 b1) begin clk= clk_200hz。 disp_drive = timeset_disp_drive。 end end always @(posedge clk) begin case(disp_drive) 339。 b000: time_disp_select = 639。 b100000。 339。 b001: time_disp_select = 639。 b010000。 339。 b010: time_disp_select = 639。 b001000。 339。 b011: time_disp_select = 639。 b000100。 339。 b100: time_disp_select = 639。 b000010。 339。 b101: time_disp_select = 639。 b000001。 default: time_disp_select = 639。 b000000。 endcase end endmodule 显示模块( disp_data_mux) 该 模块是时间、日期等数据用数码管显示的控制与数据传输模块,包括数据的传输以及 BCD 码的译码等。 逻辑框图如图 322 所示,仿真波形如图 323 所示。 北方民族大学学士学位论文 基于 FPGA的电子钟的设计 第 22 页 共 56 页 图 322 显示模块逻辑框图 图 323 显示模块波形仿真图 该模块的 VerilogHDL 程序如下 : module disp_data_mux(Timepiece_EN,TimeSet_EN,Stopwatch_EN,time_disp_select, Alarmclock_EN,alarmclock_disp_select,hour1,hour0,minute1,minute0,second1,second0,Date_EN,DateSet_EN,date_disp_select,month1,month0,day1,day0,disp_select,disp_data)。 output [5:0] disp_select。 output [6:0] disp_data。 北方民族大学学士学位论文 基于 FPGA的电子钟的设计 第 23 页 共 56 页 input Timepiece_EN,TimeSet_EN,Stopwatch_EN。 input [5:0] time_disp_select。 input Alarmclock_EN。 input [5:0] alarmclock_disp_select。 input [3:0] hour1,hour0,minute1,minute0,second1,second0。 input Date_EN,DateSet_EN。 input [5:0] date_disp_select。 input [3:0] month1,month0,day1,day0。 reg [5:0] disp_select。 reg [6:0] disp_data。 reg [3:0] Data。 always @(Timepiece_EN,TimeSet_EN,Stopwatch_EN,time_disp_select,Alarmclock_EN,alarmclock_disp_select,hour1,hour0,minute1,minute0,second1,second0,Date_EN,DateSet_EN,date_disp_select,month1,month0,day1,day0,disp_select) begin //时钟,秒表显示 if((Timepiece_EN || TimeSet_EN || Stopwatch_E。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。