原题链接

要写一个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. 2022-1-10 控件学习2 Button、CheckBox、RadioButton、PasswordBox、Image、ToolTip

    Button         设置带图片的按钮: 设置button按钮通用类型:  CheckBox          IsChecked设置是否选中 RadioButton 使用GroupName这 ...

  2. 分布式ID性能评测:CosId VS 美团 Leaf

    分布式ID性能评测:CosId VS 美团 Leaf 基准测试环境 MacBook Pro (M1) JDK 17 JMH 1.36 运行在本机的Docker 的 mariadb:10.6.4 运行基 ...

  3. 四 APPIUM GUI讲解(Windows版)(转)

    Windows版本的APPIUM GUI有以下图标或者按钮: ·Android Settings  - Android设置按钮,所有和安卓设置的参数都在这个里面 ·General Settings – ...

  4. 论文解读(MCD)《Maximum Classifier Discrepancy for Unsupervised Domain Adaptation》

    Note:[ wechat:Y466551 | 付费咨询,非诚勿扰 ] 论文信息 论文标题:Maximum Classifier Discrepancy for Unsupervised Domain ...

  5. 并发工具类Phaser

    前言 在面试这一篇我们介绍过CountDownLatch和CyclicBarrier,它们都是jdk1.5提供的多线程并发控制类,内部都是用AQS这个同步框架实现. 在我们的实际项目中,有很多场景是需 ...

  6. 【LaTeX】环境配置以及中文支持

    目录 网页环境 Overleaf 本地环境 TeX Live TeXstudio VSCode 安装 LaTeX Workshop 扩展 编译链配置 正向同步 反向同步 其他可选配置 中文支持 XeL ...

  7. 《最新出炉》系列初窥篇-Python+Playwright自动化测试-14-playwright操作iframe-番外篇

    1.简介 通过前边三篇的学习,想必大家已经对iframe有了一定的认识和了解,今天这一篇主要是对iframe的一些特殊情况的介绍和讲解,主要从iframe的定位.监听事件和执行js脚本三个方面进行展开 ...

  8. API接口的设计思路

    ​ API接口设计是软件开发中非常重要的一环,良好的设计规范能够提高开发效率.减少问题和错误,并增强系统的可维护性和可扩展性.本文从程序员的视角,讨论一些常见的API接口设计规范. 一.遵循RESTf ...

  9. Codeforces 1462F The Treasure of The Segments

    题意 给\(n(1\leq n\leq 2*10^5)\)个线段$[l_i,r_i] (1≤l_i≤r_i≤10^9) $,问最少删除几个线段,使得剩下线段中,有至少一个线段与所有线段相交. 分析 对 ...

  10. Github、Gitee优秀的开源项目

    收集 Github.Gitee优秀的开源项目,并进行归类整理.项目地址 目录 编程语言项目 SprinBoot 项目 源码分析项目 前后端分离项目 Vue2 项目 Vue3 项目 微服务项目 Api ...