原题链接

要写一个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. 实践分析丨AscendCL应用编译&运行案例

    本文分享自华为云社区<AscendCL应用编译&运行问题案例>,作者: 昇腾CANN. AscendCL(Ascend Computing Language)是一套用于在昇腾平台上 ...

  2. FlinkSQL类型系统

    类型有什么作用, 类型可以提供编译期检查, 避免到运行期才报错. 类型 首先Flink中自己定义了一套类型, 有LogicalType和DataType两个表示 LogicalType Logical ...

  3. [gin]数据解析和绑定

    前言 go version: 1.18 本文主要包含JSON.Form.Uri.XML的数据解析与绑定. JSON数据解析与绑定 go代码 package main import ( "ne ...

  4. [FlareOn4]login-buu ctf

    打开压缩包 是个html,我直接???? 这不是web弄的吗 离谱了,不过f12还是会的 不过其中的逻辑还是比较清楚的 先用伪代码确定加密逻辑,再直接写直接进行爆破解码 wo cao,wrong!fl ...

  5. Vue【原创】时间轴 【time-axis】&【date-axis】

    封装了关于时间轴的组件,有时候统计页面会用到. 效果图: 时间轴分为2种,一种是time-axis:范围选择模式,一种是date-axis:步长选择模式. 代码中涉及到的工具类和图片资源,请移步页面底 ...

  6. C盘无法创建文件处理

    icacls c:\ /setintegritylevel M 打开终端执行上方命令,亲测可用

  7. 2023年Vue开发中的8个最佳工具

    前言 Vue.js,一款当今非常流行的基于JavaScript的开源框架,旨在构建动态的可交互应用. Vue.js以其直观的语法和灵活的架构而广受全球开发者的欢迎和赞誉.随着时间的推移,Vue不断进化 ...

  8. 「codeforces - 585E」Present for Vitalik the Philatelist

    link. 设 \(\displaystyle f(x) = \# S', s.t. S' \subseteq S, S' \neq \varnothing, \gcd(S') = x\),\(g(x ...

  9. Blazor Server 发起HttpPost请求,但是多参数

    一.介绍 今天突然想起之前工作上遇到的一个问题,在做Blazor 开发时后端给的一个接口请求方式是Post ,但是他需要携带多个参数,新建一个公共类又觉得麻烦,我就尝试着怎么在Post请求中携带多个参 ...

  10. 解决软件安装无法自定义文件夹,自动安装在C盘 (Windows系统)

    其实就是软链接的简单应用 1.软件已经自动安装 2.完全退出当前软件 3.通过软件图标的属性找到其实际的安装目录 4.进入该软件的安装目录 5.将该软件整个剪切(你没有看错)到指定文件夹(自定义的安装 ...