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来刷题,有一个大致的方向.有些题不止包含 ...
随机推荐
- Angular: 点击一次按钮,增加一个元素
解决方案 思路 在组件的typesscript文件中,创建一个数组来存储每个按钮的信息 在模板中使用 *ngFor 指令来循环渲染按钮列表 在按钮事件的处理函数中,每次点击按钮时向按钮数组添加一个新的 ...
- React报错:This is probably not a problem with npm. There is likely additional logging output above.
解决方案 删除node_modules和package-lock.json,之后运行npm cache clear --force,重新安装模块npm install,另外要注意 npm 5.0版本之 ...
- pycharm:插件translation 更新TTK失败
解决方案 1.修改C:\Windows\System32\drivers\etc 下hosts文件, 添加 203.208.40.66 translate.google.com 203.208.40. ...
- centos7安装weblogic
前言 简介:weblogic是java应用服务器软件的一种,类似于tomcat,但功能更多,适用于大型应用场景. 版本: 系统:centos 7(最小化安装,无图形化界面) jdk: oraclejd ...
- html5 3.0 表单
表单的定义:多个输入框,以表格的形式展示 表单常用在网页登录和注册功能中 表单的元素属性:<input type="text"name=" "valu ...
- springboot jar thin
springboot jar thin springboot 应用 jar 瘦身.springboot jar 太大.jar与依赖包分离. 两种方法,第一种,spring-boot-thin-laun ...
- Conda 命令深入指南
Conda 命令深入指南 Conda 是一个功能强大的包管理系统,允许您为不同的项目创建和管理隔离的环境,从而更轻松地处理不同的依赖项集. 安装 可以按照 Conda 官方网站 (https://co ...
- docker搭建dvwa靶场
查看有哪些DVWA镜像 docker search dvwa 这里选择拉取第一个镜像 docker pull citizenstig/dvwa 访问 https://hub.docker.com/ 搜 ...
- 拉普拉斯金字塔在多图HDR算法中的应用以及多曝光图像的融合算法简介。
在SSE图像算法优化系列二十九:基础的拉普拉斯金字塔融合用于改善图像增强中易出现的过增强问题(一) 一文中我们曾经描述过基于几种高频融合法则的拉普拉斯金字塔融合算法,那里是主要针对2副图像的.实际的应 ...
- redisson分布式锁的应用——秒杀、超卖 简单例子(分布式锁相关)
1.常见的分布式事务锁 1.数据库级别的锁 乐观锁,给予加入版本号实现 悲观锁,基于数据库的for update实现 2.Redis,基于SETNX.EXPIRE实现 3.Zookeeper,基于In ...