HDL刷题:Count clock
要写一个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的更多相关文章
- LeetCode 刷题记录(二)
写在前面:因为要准备面试,开始了在[LeetCode]上刷题的历程.LeetCode上一共有大约150道题目,本文记录我在<http://oj.leetcode.com>上AC的所有题目, ...
- leetcode 算法刷题(一)
今天开始刷Leetcode上面的算法题.我会更新我刷题过程中提交的代码(成功和不成功的都有)和比较好的解法 第二题 Add Two Numbers 题目的意思:输入两个链表,这两个链表都是倒序的数字, ...
- PAT甲级训练刷题代码记录
刷题链接:https://www.patest.cn/contests/pat-a-practise 1001 #include <iostream> #include <stdio ...
- leetcode每日刷题计划-简单篇day5
刷题成习惯以后感觉挺好的 Num 27 移除元素 Remove Element 跟那个排序去掉相同的一样,len标记然后新的不重复的直接放到len class Solution { public: i ...
- leetcode每日刷题计划-简单篇day1
orzorz开始刷题 争取坚持每周平均下来简单题一天能做两道题吧 非常简单的题奇奇怪怪的错误orz越不做越菜 Num 7 整数反转 Reverse Integer 刚开始多给了一个变量来回折腾占地方, ...
- LeetCode刷题指南(字符串)
作者:CYC2018 文章链接:https://github.com/CyC2018/CS-Notes/blob/master/docs/notes/Leetcode+%E9%A2%98%E8%A7% ...
- NOIp2018停课刷题记录
Preface 老叶说了高中停课但是初中不停的消息后我就为争取民主献出一份力量 其实就是和老师申请了下让我们HW的三个人听课结果真停了 那么还是珍惜这次机会好好提升下自己吧不然就\(AFO\)了 Li ...
- [LeetCode] 系统刷题5_Dynamic Programming
Dynamic Programming 实际上是[LeetCode] 系统刷题4_Binary Tree & Divide and Conquer的基础上,加上记忆化的过程.就是说,如果这个题 ...
- 好像leeceode题目我的博客太长了,需要重新建立一个. leecode刷题第二个
376. Wiggle Subsequence 自己没想出来,看了别人的分析. 主要是要分析出升序降序只跟临近的2个决定.虽然直觉上不是这样. 455. 分发饼干 ...
- LeetCode刷题记录(python3)
由于之前对算法题接触不多,因此暂时只做easy和medium难度的题. 看完了<算法(第四版)>后重新开始刷LeetCode了,这次决定按topic来刷题,有一个大致的方向.有些题不止包含 ...
随机推荐
- IIC总线学习笔记
IIC(Inter-Integrated Circuit)其实是IICBus简称,所以中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,由飞利浦公司在1980年代为了让主板.嵌入式系统或手 ...
- 标题:在Godot中使用Node2D创建自定义的Label
在Godot游戏引擎中,我们经常需要在游戏中显示文本信息.通常,我们可以使用Label节点来实现这一点.但是,在某些情况下,你可能希望更灵活地控制文本的显示和样式.在本篇博客中,我们将学习如何通过使用 ...
- 《SQL与数据库基础》06. 函数
目录 函数 字符串函数 数值函数 日期函数 流程函数 本文以 MySQL 为例 函数 函数是指一段可以直接被另一段程序调用的程序或代码. 要查看函数操作的结果,可以使用 SELECT 函数(参数); ...
- WPF 自定义窗体(一)
.Net默认的窗体样式只有四种:None.SingleBorderWindow.ThreeDBorderWindow.ToolWindow,都比较"丑".而很多时候,我们希望自定义 ...
- 在线问诊 Python、FastAPI、Neo4j — 创建药品节点
目录 前提条件 创建节点 Demo 准备数据 创建药品标签节点 在线问诊 Python.FastAPI.Neo4j - 创建节点 Neo4j 节点的标签可以理解为 Java 中的实体. 根据常规流程: ...
- 每日一题:如何判断是否是数组,一个既简单又复杂的问题。(不要再用Object.prototype.toString.call、instance of判断了!!!)
1.不要使用Object.prototype.toString.call() 正常情况下: const arr = [1,2,3,4,5] const obj = {} console.log(Obj ...
- 使用GPU训练Pytorch模型
如何使用GPU训练Pytorch模型 这两天的深度学习实验真实让人头疼,传说中的"猫狗大战",对模型的训练用CPU的话9h起步,12h是常态,大学生哪耗得起,因此查找资料搭建了GP ...
- python入门基础(14)--类的属性、成员方法、静态方法以及继承、重载
上一篇提到过类的属性,但没有详细介绍,本篇详细介绍一下类的属性 一 .类的属性 方法是用来操作数据的,而属性则是建模必不的内容,而且操作的数据,大多数是属性,比如游戏中的某个boss类,它的生命值就是 ...
- [HNCTF 2022 WEEK2]e@sy_flower
花指令分析 如果没接触过花指令,先看这个博客,大致了解一下花指令 https://www.cnblogs.com/Here-is-SG/p/15802040.html 点击此处下载附件 查壳 32位, ...
- C++ STL快速入门方法
在数月之前的机试中第一次体验到STL的威力,因为自己本来一直在用C语言做开发,很多数据结构都是自己造的,比如链表.队列等,第一次接触C++ STL后发现这些数据结构都已经给我提供好了,我直接拿去调用就 ...