资源预览内容
第1页 / 共31页
第2页 / 共31页
第3页 / 共31页
第4页 / 共31页
第5页 / 共31页
第6页 / 共31页
第7页 / 共31页
第8页 / 共31页
第9页 / 共31页
第10页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
NJUST多功能数字钟设计基于 VerilogHDL 语言学院: 电子工程与光电技术学院学号: 912104220139 姓名: 匡鑫 指导教师: 谭雪琴 20142014 年年 1111 月月 2121 日星期五日星期五摘要:基于 FPGA 平台,运用 Verilog 语言编写设计一多功能数字钟,包括基本 的时钟,校时校分,整点报时功能。扩展闹钟,秒表,万年历,键盘输入功能。Abstract:FPGA-based platform, using Verilog language to design a multi-functional digital clock, including basic function of clock, school hours, school minutes,the whole point timekeeping. And extended function of alarm clock, stopwatch, calendar, keyboard input. 关键词:多功能数字钟,可编程逻辑器件,EDA 设计,VerilogKeywords:multi-functional digital clock, FPGA, EDA disign, Verilog目录目录1 设计要求22 设计方案选择及思路分析.23 各子模块设计原理和分析 33.1 分频模块 33.2 时分秒模块.53.3 时分调整模块63.4 报时模块 73.5 扫描显示模块73.6 秒表模块 93.7 闹钟模块 103.8 万年历模块.123.9 键盘扫描模块134 调试仿真155 编程下载166 结论 167 参考文献178 实验感想179 源代码.171 设计要求基于 FPGA 可编程逻辑器件,用 quatusII 软件设计一个多功能数字钟,其基本要求如下:1.有基础的计时显示功能,即时、分、秒显示在 6 个七段管上2.K0,K1,K2,K3 分别为系统使能(暂停),时钟清零,校时,校分开关。由于按键是长期处于“1”状态,故在这里采用低电平“0”为有效电平(本人认为原要求中“1”为有效电平不合理)。3. 使时钟具有整点报时功能(当时钟计到 5953”时开始报时,在 5953”, 5955”,5957”时报时频率为 500Hz,5959”时报时频率为 1KHz, )。提高部分要求:添加按键:K4,K5 分别为设置位选择,设置位加一。K6,K7 为组合功能选择,当 K6K7 值:(11)为时钟功能,(10)为秒表功能,(01)为闹钟设置,(00)为万年历功能。1.闹时功能,按动方式键,使电路工作于预置状态,此时显示器与时钟脱开,而与预置计数器相连,利用前面手动校时,校分方式进行预置,预置后回到正常模式。当计时计至预置的时间时,扬声器发出闹铃信号,时间为半分钟,闹铃信号可以用开关“止闹”,按下此开关后,闹铃声立刻中止,正常情况下应将此开关释放,否则无闹时作用。2.秒表功能。按 start 键开始计秒,按 stop 键停止计秒并保持显示数不变,直到复位信号加入。3.万年历功能,4使用 4*4 矩阵键盘输入设置信号2 设计方案选择及思路分析由于之前参加过华为杯电子设计大赛,当时采用的是 VerilogHDL 语言,而且 EDA 实验一曾经做过用器件搭数字钟的实验,如果再用原理图方法的话没有挑战性,而且 VerilogHDL 语言更为灵活方便,因此决定采用其完成本次电子设计。设计的总体部分按照要求可以分为基本模块:分频模块、时钟计时及调整模块、扫描显示。附加模块:万年历、整点报时、闹钟功能和秒表功能。其总体设计框图如下:3 各子模块设计原理和分析3.1 分频模块初步分析后面所需要的信号频率,分频器的功能主要有 4 个:分别是产生计时用的标准秒脉冲 1HZ 信号;闹钟及万年历设置时用的 2HZ 闪烁信号整点报时及显示扫描用的 1kHZ 高音频信号和 500HZ 低音频信号。分析系统时钟为48M,经过 48K 的分频后得到 1K 信号,再经过 2 分频可以得到 500HZ 方波,1K经过 5 分频得到 200HZ 信号,最后 100 分频得到的 2HZ 信号,再 2 分频得到1HZ 的时钟。原理框图如下图 5 所示。图 5 分频信号框图 Verilog 设计分频器很简单,在偶数分频时,在输入脉冲下直接计数到所分频 数的一半,然后翻转即可。如:分频秒分时计数日月年计数扫描显示秒表闹钟报时嗡鸣器48M1K 500HZ200HZ 2HZ1HZalways(posedge clk) begin f1kminute-hour/-day-month-year/ /always(posedge clk_1hz or negedge key1 or negedge key2 or negedge key3) always(posedge clk_1hz or negedge key1) begin if(key1=0)/clear begin hour=8b0; minute=8b0; second=8b0; end else if(key7:6=2b11 if(hour3:0=4ha) begin hour3:0=4h0; hour7:4=hour7:4+1; if(hour7:4=4h6) hour7:4=4h0; end endelse if(key7:6=2b11 if(minute3:0=4ha) begin minute3:0=4h0; minute7:4=minute7:4+1; if(minute7:4=4h6) minute7:4=4h0; end endelse if(key0)/no pause begin second3:0=second3:0+1b1; if(second3:0=4ha) begin second3:0=4h0; second7:4=second7:4+1b1; if(second7:4=4h6) begin second7:4=4h0; minute3:0=minute3:0+1b1; if(minute3:0=4ha) begin minute3:0=4h0; minute7:4=minute7:4+1b1; if(minute7:4=4h6) begin minute7:4=4h0; hour3:0=hour3:0+1b1; if(hour3:0=4ha) begin hour3:0=4h0; hour7:4=hour7:4+1b1; if(hour=8h24) begin hour7:4=4h0; day3:0=day3:0+1b1; if(day3:0=4ha) begin day3:0=4h0; day7:4=day7:4+1b1; if(day7:4=4h3) begin day7:4=4h0; month3:0=month3:0+1b1; if(month3:0=4ha) begin month3:0=4h0; month7:4=month7:4+1b1; if(month7:0=8h12) begin month=8h0; year=year+1; end end end endend end end end end end end end / /设置闹钟 always(negedge key) if(key7:6=2b01) begin if(!key2) hour1=hour+1; else if(!key3) minute1=minute1+1; end / /秒表 always(posedge clk_1k) begin f100hz=50) begin clk_500khz=clk_500khz;count=0;end else count=count+1; endalways (posedge clk_500khz or negedge reset) if(!reset) begin col=4b0000;state=3d0;end else begin case (state) 3d0: begin col3:0=4b0000; key_flag=1b0; if(row3:0!=4b1111) begin state=3d1;col3:0=4b1110;end /有键按下,扫 描第一列 else state=3d0; end 3d1: begin if(row3:0!=4b1111) begin state=3d5;end /判断是否是第一列 else begin state=3d2;col3:0=4b1101;end /扫描第二列 end 3d2: begin if(row3:0!=4b1111) begin state=3d5;end /判断是否是第二列 else begin state=3d3;col3:0=4b1011;end /扫描第三列 end 3d3: begin if(row3:0!=4b1111) begin state=3d5;end /判断是否是第三列 else begin state=3d4;col3:0=4b0111;end /扫描第四列 end 3d4: begin if(row3:0!=4b1111) begin state=3d5;end /判断是否是第一行 else state=3d0;end 3d5: begin if(row3:0!=4b1111) begin col_reg=col; /保存扫描列值 row_reg=row; /保存扫描行值 state=3d5; key_flag=1b1; /有键按下 end else begin state=0; end end endcase endalways (clk_500khz or col_reg or row_reg)beginif(key_flag=1b1) begincase (col_reg,row_reg)8b1110_1110:key_value=8h7;8b1110_1101:key_value=8h4;8b1110_1011:key_value=8h1;8b1110_0111:key_value=8h0;8b1101_1110:key_value=8h8;8b1101_1101:key_value=8h5;8b1101_1011:key_value=8h2;8b1101_0111:key_value=8ha;8b1011_1110:key_value=8h9;8b1011_1101:
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号