我是靠谱客的博主 大胆烧鹅,最近开发中收集的这篇文章主要介绍FPGA时钟(1)进制和调节功能实现前言一、变模计数器是什么二、组成24进制和60进制三、校准时间功能与时分进位总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

利用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进制三、校准时间功能与时分进位总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部