FPGA课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
FPGA课程设计报告
多功能数字钟电路设计报告
任务书
设计一个具有时、分、秒计时的电子钟电路,按24小时制计时。要求:
1.准确计时,以数字形式显示时、分、秒的时间;
2.具有分、时校正功能,校正输入脉冲频率为1Hz;
3.具有仿广播电台整点报时的功能,即每逢59分51秒、53秒、55秒、57秒时发出4声500Hz低音,在59分59秒发出一声1KHz高音,它们的持续时间均为1秒,最后一声高音结束时刻恰为正点时刻;
4.具有定时闹钟功能,且最长闹铃时间为1分钟。要求可任意设置闹钟的时、分;闹铃信号为500Hz和1KHz的方波信号,交替输出,且均持续1秒。设置一个停止闹铃控制键,可以停止输出闹铃信号。
摘要
数字钟是一种用数字电路技术实现日、时、分、秒计时的装置,与传统的机械式时钟相比,具有更高的准确性和直观性,且无机械传动装置,具有更更长的使用寿命,因此得到了广泛的使用。小到人们日常生活中的电子手表,大到车站、码头、机场等公共场所的大型数
显电子钟。
本课程设计要用通过简单的逻辑芯片实现数字时钟。要点在于用555芯片连接成输出一秒的多谐振荡器用于时钟的秒脉冲,用74LS90(10进制计数器)74LS192(4位二进制计数器)等连接成60和12进制的计数器,再通过七段数码管显示,外加上校时电路和整点报时电路即构成了简单数字钟。扩展电路可实现定点报时功能。
原理图
概述
(一)、分频器:
分频器的作用是将脉冲频率调整为500Hz和1kHz两种脉冲频率,作为适中的输入信号。
其Verilog语言描述为:module divider(f,_500HzOut,_1KHzOut, ncR,CLOCK_50,s);
input ncR,CLOCK_50,s;
output _500HzOut,_1KHzOut,f;
wire _1HzOut,_5HzOut;
assign f=s?_5HzOut:_1HzOut;
divn #(.WIDTH(26),.N(50000000))
u0(.clk(CLOCK_50),
.rst_n(ncR),
.o_clk(_1HzOut)
);
divn #(.WIDTH(17),.N(100000))
u1(.clk(CLOCK_50),
.rst_n(ncR),
.o_clk(_500HzOut)
);
divn #(.WIDTH(16),.N(50000))
u2(.clk(CLOCK_50),
.rst_n(ncR),
.o_clk(_1KHzOut)
);
divn #(.WIDTH(24),.N(10000000))
u3(.clk(CLOCK_50),
.rst_n(ncR),
.o_clk(_5HzOut)
);
Endmodule
(二)、计数器:
时钟里,分和秒都是六十进制计数,我们利用两个十进制计数器相连组成六十进制计数器。当低级输入端全零且高位输入端从高到低依次为0110时,计数器反馈清零,即实现60进制计数需要。
同六十进制计数器,二十四进制计数器也可由八进制计数器和三进制计数器级联组成,即当从高到低排列时,高级和低级输入端分别为0011,1000时,计数器反馈清零,即实现24进制计数需要。
整个时钟的计数即由两个60进制计数器和一个24进制计数器组成,如下图:
其中,24进制计数器的Verilog语言如下:module counter24(CntH,CntL,ncR,EN,CP);
input CP,ncR,EN;
output [3:0]CntH,CntL;
reg [3:0]CntH,CntL;
always @(posedge CP,negedge ncR)
begin
if(~ncR)
{CntH,CntL}<=8'h00;
else if(~EN)
{CntH,CntL}<={CntH,CntL};
else if((CntH>2)||(CntL>9)||((CntH==2)&&(CntL>=3))) {CntH,CntL}<=8'h00;
else if((CntH==2)&&(CntL<3))
begin
CntH<=CntH;
CntL<=CntL+1'b1;
end
else if(CntL==9)
begin
CntH<=CntH+1'b1;
CntL<=4'b0000;
end
else
begin
CntH<=CntH;
CntL<=CntL+1'b1;
end
end
Endmodule
60进制计数器的Verilog语言如下:
//countuer 60
//counter10.v (BCD: 0--9)
module counter10(Q,ncR,EN,CP);
input CP,ncR,EN;
output reg [3:0]Q;
always @(posedge CP,negedge ncR) begin
if(~ncR)
Q<=4'b0000;
else if(~EN)
Q<=Q;
else if(Q==4'b1001)