基于FPGA的数字电子时钟设计与实现 下载本文

内容发布更新时间 : 2024/12/23 1:41:02星期一 下面是文章的全部内容请认真阅读。

桂林电子科技大学课程设计(论文)报告用纸 第 5 页 共 18 页

开始CP↑or nCR↓YnCR=0 ?YNNEN=0 ?YNNQH>2 or Q>23Y清零保持清零Q=Q+1 图16 24进制程序流程图

3.1.2 10进制流程图

当CP↑,EN和nCR为高电平时计数,计数范围为[0,9],使能信号EN等于0时,计时器保持。当计时到9的时候,计时器清零,否则继续计时。流程图见下图。

开始CP↑or nCR↓YnCR=0 ?YNNNEN=0 ?YQ=9 ?Y清零保持清零NQ=Q+1

图17 10进制流程图

桂林电子科技大学课程设计(论文)报告用纸 第 6 页 共 18 页

3.1.3 6进制

当CP↑,EN和nCR为高电平时计数,计数范围为[0,5],使能信号EN等于0时,计时器保持。当计时到5的时候,计时器清零,否则继续计时。流程图见下图。

开始CP↑or nCR↓YnCR=0 ?YNNNNEN=0 ?YQ=5 ?Y清零保持清零Q=Q+1 图18 6进制流程图

3.1.4 60进制

分、秒采用60进制计时,当CP↑,EN和nCR为高电平时计数,计数范围为[0,59],使能信号EN等于0时,计时器保持。当个位等于9时向十位进位;当个位等于9十位等于5,计时器清零,否则继续计时。流程图见下图。

开始CP↑or nCR↓NnCR=0?NEN=0?Y个位Q1=9?NYQ2=Q2+1Q2=5?YQ1=9?NNN清零保持Q1=Q1+1Y清零Q1=Q1+1 图19 60进制流程图

桂林电子科技大学课程设计(论文)报告用纸 第 7 页 共 18 页

3.1.5 from0to9

数码管有7段组成,分共阳极和共阴极,本次设计采用共阳极数码管。当输入为低电平时,数码管显示;当输入为高电平时,数码管不显示。用这样的方法输入不同的高低信号控制数码管的显示。

HEX=7'b0000001HEX=1001111HEX=b0010010HEX=7'b0000110HEX=7'b1001100开始Case DNHEX=7'b0100000HEX=7'b1111111HEX=7'b0001111HEX=7'b0000000HEX=7'b0000100显示7显示8显示9显示6YHEX=7'b0100100显示5显示0显示1显示2显示3显示4 图20 from0to9流程图

3.1.6 分频模块

开始50MHz方波10^2分频500KHz方波10^2分频5KHz方波10^2分频50Hz方波10^2分频0.5Hz方波

图21 分频模块流程图

桂林电子科技大学课程设计(论文)报告用纸 第 8 页 共 18 页

3.1.7 总流程图

开始开始NCPCP↑↑or nCRor nCR↓↓Y分频模块YYNYAdjHrkey=1?AdjHrkey=1?NNN时低位时低位=9?=9?NYYAdjMinKey=1?AdjMinKey=1?YY低位清零高位进位低位清零高位进位N高位高位>2or>2or时时>23>23YNN分低位分低位=9=9??NN清零清零YY秒低位秒低位=9=9??NNNY低位清零高位进位低位清零高位进位YY低位计数低位计数低位计数低位计数YNY秒高位秒高位=5=5??低位清零高位进位低位清零高位进位低位计数低位计数NYY高位高位=5=5??NN秒高位清零,分低位进位秒高位清零,分低位进位高位计数高位计数清零清零Y高位计数高位计数N低位计数低位计数Y低位清零高位进位低位清零高位进位N分低位分低位=9=9??NN分高位分高位=5=5??YY高位计数高位计数Y分清零,时低位位进位分清零,时低位位进位低位清零高位进位低位清零高位进位Y时低位时低位=9=9??NNNNYY高位高位>2or>2or时时>23>23清零清零低位计数低位计数

图22 总流程图

桂林电子科技大学课程设计(论文)报告用纸 第 9 页 共 18 页

3.2 程序清单

3.2.1头文件complete_clock程序

module complete_clock(HEX0,HEX1,HEX2,HEX3,HEX4,HEX5,_50MHzIn,_1Hz,_50Hz, _5KHz,_500KHz,AdjMinkey,AdjHrkey,nCR,Alarm,LED0,LED10,LED3,LED4,LED5,LED6,LED7,LED8,LED9);

output [7:0] HEX0,HEX1,HEX2,HEX3,HEX4,HEX5; output Alarm,_1Hz,_50Hz,_5KHz,_500KHz; output LED0; output LED10; output LED3; output LED4; output LED5; output LED6; output LED7; output LED8; output LED9;

wire [7:0] HEX0,HEX1,HEX2,HEX3,HEX4,HEX5; input nCR,_50MHzIn;

wire _1Hz,_50Hz,_5KHz,_500KHz; wire LED0; wire LED10; wire LED3; wire LED4; wire LED5; wire LED6; wire LED7; wire LED8; wire LED9;

input AdjMinkey,AdjHrkey;

wire [7:0] Second,Minute,Hour;

Divided_Frequency C1(_5KHz,_500KHz,nCR,_50MHzIn);//调用分频模块,输入50MHz的

频率,经两次分频后变为5KHz

Divided_Frequency U0(_1Hz,_50Hz,nCR,_5KHz);//调用分频模块,输入5KHz的频率,经 两次分频后变为1Hz

top_clock U1(Hour,Minute,Second,_1Hz,nCR,AdjMinkey,AdjHrkey);//调用校时模块,

对时、分模块进行校时 baoshi U2(Alarm_Ring,Minute,Second,_50Hz,_5KHz); assign Alarm=Alarm_Ring;

assign LED0=({Minute,Second}==16'h5951);//定义LED0为59分51秒时灯亮 assign LED10=({Minute,Second}==16'h5952);//定义LED10为59分52秒时灯亮 assign LED3=({Minute,Second}==16'h5953);//定义LED3为59分53秒时灯亮 assign LED4=({Minute,Second}==16'h5954);//定义LED4为59分54秒时灯亮 assign LED5=({Minute,Second}==16'h5955);//定义LED5为59分55秒时灯亮 assign LED6=({Minute,Second}==16'h5956);//定义LED6为59分56秒时灯亮