FPGA学习笔记三:基于Verilog描述语言的12H时钟 [代码开源]

本文介绍了如何使用Verilog语言设计12小时制时钟,包括基于BCD码的60进制和12进制计数器,以及如何处理重置和进位信号以防止错误。重点讨论了设计思路、代码实现和仿真结果,同时提到了一些常见的设计问题和解决方案。
摘要由CSDN通过智能技术生成


(一)前言

本次博客基于HDLBits(题目传送门☞HDLBits:Count Clock相关题目),旨在使用Verilog描述语言设计一种非常常见的12h时钟(时钟的具体功能见下文功能描述),根据题目要求,时钟必须基于四位BCD码并且尽量减小综合出的电路面积。


时钟功能描述:

  1. 端口说明:12h时钟包含时钟输入端口(clk)、重置信号端口(reset)、使能端口(enable)、时/分/秒时间输出端口(hh/mm/ss)、上下午时段输出标志位(am/pm)
/*端口列表与端口说明*/
module top_module(
	input clk,
	input reset,
	input ena,
	output pm,
    output am,
	output [7:0] hh,
	output [7:0] mm,
	output [7:0] ss); 
  1. 重置(reset==1)时, 时钟输出位12:00:00AM,从AM到PM的跨越可参考:11:59:59AM之后是12:00:00PM。
  2. 重置信号reset和使能端信号enable全部是同步信号。
  3. 依据12h时钟功能給出以下参考波形图:
    在这里插入图片描述

(二)电路结构

一、适用于本题的BCD码计数器

  • 设计思路:如果是设计单纯的BCD码加法器则非常简单,我们只需要在计数值count计到9时将其清零即可。但是本题设计时应该注意以下两点:
    a. 此题中的BCD码计数器需要在清零信号有效时,部分位的清零数据并不为零,如时针清零后显示应为12,因此设计时在普通BCD计数器的基础上应加上清零置数数据data_reset;另外,本题中的时针进位之后是1而不是0,因此也应该另设一个进位置数数据data_reload。
    b. 此题中reload即进位信号的响应优先级应低于使能信号,以免产生Bug.

  • 现可根据这一思路设计电路,代码如下:

module  counter_bcd(clk,reset,enable,reload,dreset,dreload,q);
    input  clk;                 //输入时钟端口
    input  reset;               //输入重置信号端口
    input  enable;              //输入使能信号端口
    input  reload;              //输入重装载信号端口
	input  [3:0]data_reset;     //重置时的数据输入:时针为1和2/分针和秒针都为0
	input  [3:0]data_reload;    //计满进位数据输入:时针计到12后进位到01/分针和秒针进位到00
    output [3:0]q;        
   
    reg    [3:0]count;
	 
    assign q=count;
    always @(posedge clk) begin
        if(reset)               //同步重置信号其响应优先级应高于使能信号
            count<=data_reset;
        else if(enable) begin
            if(reload)
               count<=data_reload;
            else if(count==4'b1001)
					count<=0;  //根据BCD码的计数原理,在使能端允许的情况下,计满9必须清零
				else
            	count<=count+1'b1;
        end   
        else
            count<=count+1'b0;
    e
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值