原题链接

要写一个12小时的时钟。

由题目得知,reset信号的优先级最高,其次是enable,这里很好实现。

我的思路:

写了一个4位的bcd计数器,并实例化了4个,对ss与mm的[7:4]与[3:0]分别考虑,低位到8就可以进行发送进位信号即可,高位加1;

hh有两个临界点,11:59:59->12:00:00与12:59:59->1:00:00,其他就是一个8位bcd计数器了;

pm只有在hh11:59:59->12:00:00时进行反转即可,其他时间保持。

还有就是要注意细节了。

代码

module bcd_count
#(
parameter MOD = 4'd9,
parameter RESET_VAL = 4'd0
)
(
input clk,
input reset,
input ena,
input c_in, output reg[3:0]q
);
always @(posedge clk) begin
if (reset == 1'b1)
q <= RESET_VAL;
else if (ena == 1'b1 && c_in == 1'b1) begin
if (q == MOD)
q <= RESET_VAL;
else
q <= q + 4'd1;
end
else
q <= q;
end
endmodule module top_module(
input clk,
input reset,
input ena,
output reg pm,
output reg [7:0] hh,
output [7:0] mm,
output [7:0] ss
); reg c_in_qss_high;
reg c_in_qmm_low, c_in_qmm_high; always @(posedge clk) begin
if (reset == 1'b1) begin
pm <= 1'b0;
hh <= 8'b0001_0010;
c_in_qss_high <= 1'b0;
c_in_qmm_low <= 1'b0;
c_in_qmm_high <= 1'b0;
end
else if (ena == 1'b1) begin
if (ss[3:0] == 4'd8)
c_in_qss_high <= 1'b1;
else
c_in_qss_high <= 1'b0; if (ss[7:4] == 4'd5 && ss[3:0] == 4'd8)
c_in_qmm_low <= 1'b1;
else
c_in_qmm_low <= 1'b0; if (mm[3:0] == 4'd9 && ss[7:4] == 4'd5 && ss[3:0] == 4'd8)
c_in_qmm_high <= 1'b1;
else
c_in_qmm_high <= 1'b0; if (mm[7:4] == 4'd5 && mm[3:0] == 4'd9 && ss[7:4] == 4'd5 && ss[3:0] == 4'd9) begin
if (hh == 8'b0001_0001) begin //11:59:59
pm <= ~pm;
hh <= 8'b0001_0010;
end
else if (hh == 8'b0001_0010) begin //12:59:59
pm <= pm;
hh <= 8'b0000_0001;
end
else begin
pm <= pm;
if (hh == 8'b0000_1001) //bcd:9
hh <= 8'b0001_0000; //->bcd:10
else if (hh == 8'b0001_0000) //bcd:10
hh <= 8'b0001_0001; //->bcd11
else if (hh == 8'b0001_0001) //bcd:11
hh <= 8'b0001_0010; //->bcd12
else
hh <= hh + 8'b0000_0001;
end
end
end
else begin
c_in_qss_high <= c_in_qss_high;
c_in_qmm_low <= c_in_qmm_low;
c_in_qmm_high <= c_in_qmm_high;
pm <= pm;
hh <= hh;
end
end //ss
bcd_count
#(
.MOD(4'd9),
.RESET_VAL(4'd0)
) bcd_count_inst0
(
.clk(clk),
.reset(reset),
.ena(ena),
.c_in(1'b1),
.q(ss[3:0])
); bcd_count
#(
.MOD(4'd5),
.RESET_VAL(4'd0)
)bcd_count_inst1
(
.clk(clk),
.reset(reset),
.ena(ena),
.c_in(c_in_qss_high),
.q(ss[7:4])
); //mm
bcd_count
#(
.MOD(4'd9),
.RESET_VAL(4'd0)
)bcd_count_inst2
(
.clk(clk),
.reset(reset),
.ena(ena),
.c_in(c_in_qmm_low),
.q(mm[3:0])
); bcd_count
#(
.MOD(4'd5),
.RESET_VAL(4'd0)
)bcd_count_inst3
(
.clk(clk),
.reset(reset),
.ena(ena),
.c_in(c_in_qmm_high),
.q(mm[7:4])
); endmodule

HDL刷题:Count clock的更多相关文章

  1. LeetCode 刷题记录(二)

    写在前面:因为要准备面试,开始了在[LeetCode]上刷题的历程.LeetCode上一共有大约150道题目,本文记录我在<http://oj.leetcode.com>上AC的所有题目, ...

  2. leetcode 算法刷题(一)

    今天开始刷Leetcode上面的算法题.我会更新我刷题过程中提交的代码(成功和不成功的都有)和比较好的解法 第二题 Add Two Numbers 题目的意思:输入两个链表,这两个链表都是倒序的数字, ...

  3. PAT甲级训练刷题代码记录

    刷题链接:https://www.patest.cn/contests/pat-a-practise 1001 #include <iostream> #include <stdio ...

  4. leetcode每日刷题计划-简单篇day5

    刷题成习惯以后感觉挺好的 Num 27 移除元素 Remove Element 跟那个排序去掉相同的一样,len标记然后新的不重复的直接放到len class Solution { public: i ...

  5. leetcode每日刷题计划-简单篇day1

    orzorz开始刷题 争取坚持每周平均下来简单题一天能做两道题吧 非常简单的题奇奇怪怪的错误orz越不做越菜 Num 7 整数反转 Reverse Integer 刚开始多给了一个变量来回折腾占地方, ...

  6. LeetCode刷题指南(字符串)

    作者:CYC2018 文章链接:https://github.com/CyC2018/CS-Notes/blob/master/docs/notes/Leetcode+%E9%A2%98%E8%A7% ...

  7. NOIp2018停课刷题记录

    Preface 老叶说了高中停课但是初中不停的消息后我就为争取民主献出一份力量 其实就是和老师申请了下让我们HW的三个人听课结果真停了 那么还是珍惜这次机会好好提升下自己吧不然就\(AFO\)了 Li ...

  8. [LeetCode] 系统刷题5_Dynamic Programming

    Dynamic Programming 实际上是[LeetCode] 系统刷题4_Binary Tree & Divide and Conquer的基础上,加上记忆化的过程.就是说,如果这个题 ...

  9. 好像leeceode题目我的博客太长了,需要重新建立一个. leecode刷题第二个

    376. Wiggle Subsequence               自己没想出来,看了别人的分析. 主要是要分析出升序降序只跟临近的2个决定.虽然直觉上不是这样. 455. 分发饼干     ...

  10. LeetCode刷题记录(python3)

    由于之前对算法题接触不多,因此暂时只做easy和medium难度的题. 看完了<算法(第四版)>后重新开始刷LeetCode了,这次决定按topic来刷题,有一个大致的方向.有些题不止包含 ...

随机推荐

  1. Magick.NET跨平台压缩图片的用法

    //首先NuGet安装:Magick.NET.Core,Magick.NET-Q16-AnyCPUusing ImageMagick; /// <summary> /// 压缩图片 /// ...

  2. Blazor前后端框架Known-V1.2.9

    V1.2.9 Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行. Gitee: https://gitee.com/known/Known Gith ...

  3. npm与package.json的联系

    在nodejs编写的脚手架项目中,npm是不可缺少的包管理工具,当使用npm初始化时,会生成package.json文件来对项目进行整体的管理和描述   以下是新建的练习项目中package.json ...

  4. mysql拓展

    事务定义 就是将一组SQL语句放在同一批次内去执行 如果一个sql语句出错,则改批次内的所有sql都将被取消执行 (1)原子性 一个事务要么全部提交成功,要么全部失败回滚,不能只执行其中的一部分操作, ...

  5. Hybird 技术讨论:热更新原理解析

    原生应用 VS 混合应用 大家对于原生应用和混合应用已经非常熟悉了,这里就不再进行详细的介绍,用通俗易懂的话解释下他们的一些特点.   1.原生应用 在 Android.iOS 等移动平台上利用提供的 ...

  6. LVS专访阿里云席明贤,从视频云2.0到“数能生智”的超长畅谈

    这是一篇人物专访,源自LiveVideoStack与阿里云视频云负责人席明贤(花名右贤)的对话.面对风云变幻的内外环境,阿里云在视频云赛道是坚定向前的,右贤没有回避多媒体当下行业面临的困难以及业务面临 ...

  7. 给微软.Net runtime运行时提交的几个Issues

    前言 因为目前从事的CLR+JIT,所以会遇到一些非常底层的问题,比如涉及到微软的公共运行时和即时编译器或者AOT编译器的编译异常等情况,这里分享下自己提的几个Issues. Issues 一.iss ...

  8. 《Kali渗透基础》08. 弱点扫描(二)

    @ 目录 1:OpenVAS / GVM 1.1:介绍 1.2:安装 1.3:使用 2:Nessus 2.1:介绍 2.2:安装 2.3:使用 3:Nexpose 本系列侧重方法论,各工具只是实现目标 ...

  9. QEMU tap数据接收流程

    QEMU直接从tap/tun取数据 QEMU tap数据接收步骤: qemu从tun取数据包 qemu将数据包放入virtio硬件网卡. qemu触发中断. 虚拟机收到中断,从virtio读取数据. ...

  10. 简单了解PyCharm

    简单了解PyCharm PyCharm的简单使用 修改主题 1 2 切换解释器 1 如何创建pythin文件 1 2 3 4 注释语法 行注释 这里是注释 块注释 '''这里是注释''' 常量和变量的 ...