概述
利用FPGA完成时钟 (1)利用变模计数器完成60进制和24进制,实现最基本功能
文章目录
- 前言
- 一、变模计数器是什么
- 二、组成24进制和60进制
- 1.先完成6进制和10进制
- 2.组成60进制
- 3.创建24进制
- 三、校准时间功能与时分进位
- 总结
前言
时钟简介:
利用fpga实现时钟,首先要思考需要几个模块,以及其分别的作用。首先是时钟的基本功能:显示,调节,进制,和标准秒脉冲信号,以及闹钟模块,整点报时模块,乃至24小时和12小时转换功能。
本节简介:
作为时钟的第一部分,首先学习如何利用变模计数器创造进位,也就是每过60秒进1分,每过60分进一小时。和调节功能的巧妙实现
提示:以下是本篇文章正文内容,下面案例可供参考
一、变模计数器是什么
变模计数器的变模是相对于同步计数器而言的,指的是模数可改变的计数器,计数器是最常用的时序电路之一,他们不仅可以对脉冲进行计数,还可以用于分频,定时,产生节拍脉冲以及其他时序信号,其根本由D触发器和逻辑门组成。
1.什么是D触发器
D触发器的特性就是触发器的输出变化之发生在时钟脉冲信号CP的某一个边沿,可以分为上升沿触发和下降沿触发。所以有输出部分概念现态Q和次态Qn+1,Qn+1始终和输入D相同,但是Qn需要时钟脉冲信号处于指定边沿才会改变
2.如何利用D触发器和逻辑门设计同步计数器(以六进制为例)
先分析需要几个触发器,由于3个触发器能储存三位二进制,所以能表示八个状态,8>6,故选择三个触发器。再次态信号与下一个触发器的D端相连,成为下一个触发器的激励信号,逻辑电路如下图所示
3.同步计数器的Verilog HDL建模,以counter6为例
module counter6(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'b0101) Q<=4'b0000//逢6为0
else Q<=Q+1'b1;
end
endmodule
二、组成24进制和60进制
1.先完成6进制和10进制
10进制如下(6进制为上方代码块):
module counter10(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) Q<=4'b0000;
else Q<=Q+1'b1;
end
endmodule
2.组成60进制
代码如下(示例):
module counter60(input CP,nCR,En,output[7:0] Cnt);//Cnt的前四位和后四位为60进制分的十位和个位,创建Enp用于进位
wire ENP;
counter10 UC1(.Q(Cnt[3:0]),.CP(CP),.nCR(nCR),.En(En));
counter6 UC2(.Q(Cnt[7:4]),.CP(CP),.nCR(nCR),.En(ENP));
assign ENP=(Cnt[3:0]==4'h9) & En;
endmodule
3.创建24进制
module counter24(input CP,nCR,En,output reg[3:0]CntH,CntL);//CntH和CntL代表24进制的十位和个位
always @(posedge CP,negedge nCR)
begin
if (~nCR) {CntH,CntL}<=8'h00;//清0信号nCR
else if (~En) {CntH,CntL}<={CntH,CntL};
else if ((CntH>2)||(CntL>9)||((CntH==2)&&(CntL>=3)))
{CntH,CntL}<=8'h00;
else if ((CntL==2)&&(CntL<3)) begin
CntH<=CntH;CntL<=CntL+1'b1;
end
else if(CntL==9) begin
CntH<=CntH+1'b1;CntL<=4'h0;
end
else begin
CntL=CntL+1'b1;
CntH=CntH;
end
end
endmodule
三、校准时间功能与时分进位
module top_clock(input CP,nCR,ADJminKEY,ADJhourKEY,output[7:0] Hour,Minute,Second);
wire MinCP,HourCP;
supply1 Vdd;
counter60 UT1(CP,nCR,Vdd,Second);
counter60 UT2(~MinCP,nCR,Vdd,Minute);//使分和时的脉冲信号为上一级的59,以此实现进位
counter24 UT3(~HourCP,nCR,Vdd,Hour[7:4],Hour[3:0]);
assign MinCP=ADJminKEY?CP:(Second==8'h59);//使脉冲信号不只是上一级59,而是在ADJminKEY为1的时候为秒脉冲,可以以1秒为单位快速递增,实现便捷调时。
assign HourCP=ADJhourKEY?CP:({Minute,Second}==16'h5959);
endmodule
总结
本章主要讲了进制的实现,包括60进制的个位向十位进制和分向时的进制,还有调节功能的巧妙实现,其中进制用到了变模计数器的思想
最后
以上就是大胆烧鹅为你收集整理的FPGA时钟(1)进制和调节功能实现前言一、变模计数器是什么二、组成24进制和60进制三、校准时间功能与时分进位总结的全部内容,希望文章能够帮你解决FPGA时钟(1)进制和调节功能实现前言一、变模计数器是什么二、组成24进制和60进制三、校准时间功能与时分进位总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复