HDLbits 刷题答案practice——Counters
目录
3.2.2.1 Four-bit binary counter(Count15)
3.2.2.2 Decade counter(Count10)
3.2.2.3 Decade counter again(Count1to10)
3.2.2.4 Show decade counter(Countslow)
3.2.2.5 Counter 1-12(Exams/ece241 2014 q7a)
3.2.2.6 Counter 1000(Exams/ece241 2014 q7b)
3.2.2.7 4-digit decimal counter(Countbcd)
3.2.2.8 12-hour clock(Count clock)
3.2.2.1 Four-bit binary counter(Count15)
module top_module (input clk,input reset, // Synchronous active-high resetoutput reg [3:0] q);always @(posedge clk)beginif(reset == 1)beginq <= 4'b0;endelse beginq <= q + 1'b1; endendendmodule
3.2.2.2 Decade counter(Count10)
module top_module (input clk,input reset, // Synchronous active-high resetoutput reg [3:0] q);always @(posedge clk)beginif(reset == 1)beginq <= 4'b0;endelse if(q == 9)beginq <= 4'b0; endelse beginq <= q + 1'b1; endend
endmodule
3.2.2.3 Decade counter again(Count1to10)
module top_module (input clk,input reset,output [3:0] q);always @(posedge clk)beginif(reset)beginq <= 4'b1;endelse if(q == 10)beginq <= 4'b1;endelse beginq <= q + 1'b1;end endendmodule
3.2.2.4 Show decade counter(Countslow)
module top_module (input clk,input slowena,input reset,output reg [3:0] q);always @(posedge clk)beginif(reset)beginq <= 4'b0;endelse if(slowena)beginif(q == 4'd9)beginq <= 4'b0;endelse beginq <= q + 1'b1; endendendendmodule
3.2.2.5 Counter 1-12(Exams/ece241 2014 q7a)
module top_module (input clk,input reset,input enable,output [3:0] Q,output c_enable,output c_load,output [3:0] c_d
); //assign c_enable = enable;assign c_load = reset | ((Q == 4'd12) && enable == 1);assign c_d = c_load ? 4'b1 : 4'b0;count4 the_counter (clk, c_enable, c_load, c_d, Q);endmodule
3.2.2.6 Counter 1000(Exams/ece241 2014 q7b)
module top_module (input clk,input reset,output OneHertz,output [2:0] c_enable
); //wire [3:0] q0, q1, q2;assign c_enable ={((q1==4'd9) & (q0==4'd9)), (q0==4'd9), 1'b1};bcdcount counter0 (clk, reset, c_enable[0], q0);bcdcount counter1 (clk, reset, c_enable[1], q1);bcdcount counter2 (clk, reset, c_enable[2], q2);assign OneHertz = ((q2==4'd9) & (q1==4'd9) & (q0==4'd9));endmodule
3.2.2.7 4-digit decimal counter(Countbcd)
module top_module (input clk,input reset, // Synchronous active-high resetoutput [3:1] ena,output [15:0] q);//申明低位到高位的寄存器,用作各个BCD计数器reg [3:0] cnt_0, cnt_1, cnt_2, cnt_3;//cnt_0计数器,个位always @(posedge clk)beginif(reset)begincnt_0 <= 4'b0;endelse if(cnt_0 == 4'd9)begincnt_0 <= 4'b0;endelse begincnt_0 <= cnt_0 + 1'b1; endend//cnt_1计数器,十位always @(posedge clk)beginif(reset)begincnt_1 <= 4'b0;endelse if(cnt_0 == 4'd9)beginif(cnt_1 == 4'd9)begincnt_1 <= 4'b0;endelse begincnt_1 <= cnt_1 + 1'b1; endendend//cnt_2计数器,百位always @(posedge clk)beginif(reset)begincnt_2 <= 4'b0;endelse if((cnt_1 == 4'd9) & (cnt_0 == 4'd9))beginif(cnt_2 == 4'd9)begincnt_2 <= 4'b0;endelse begincnt_2 <= cnt_2 + 1'b1; endendend//cnt_3计数器,千位always @(posedge clk)beginif(reset)begincnt_3 <= 4'b0;endelse if((cnt_2 == 4'd9) & (cnt_1 == 4'd9) & (cnt_0 == 4'd9))beginif(cnt_3 == 4'd9)begincnt_3 <= 4'b0;endelse begincnt_3 <= cnt_3 + 1'b1; endendend//物理连线assign q = {cnt_3, cnt_2, cnt_1, cnt_0};assign ena = {(cnt_2 == 4'd9)&(cnt_1 == 4'd9)&(cnt_0 == 4'd9), (cnt_1 == 4'd9)&(cnt_0 == 4'd9), (cnt_0 == 4'd9)};endmodule
3.2.2.8 12-hour clock(Count clock)
//时钟设计,分为时(01~12)、分(00~59)、秒(00~59)
module top_module(input clk, //上升沿检测input reset, //同步复位,因此需要放在always块里面input ena, //ena为高电平才能进行时间加减output reg pm, //pm 0-am 1-pm 当hh-mm-ss:11-59-59时,pm由0变到1output reg [7:0] hh,output reg [7:0] mm,output reg [7:0] ss); //sec设计 ss范围为00~59,此处的一秒为一个clk周期//不能把ss的8位直接拿来作为一个整体寄存器,否则12会输出为c//因此需要把这三个8位寄存器都分为2个4位的BCD计数器always @(posedge clk)beginif(reset)begin //reset复位信号ss <= 8'b0;endelse if(ena)beginif((ss[7:4] == 4'd5) & (ss[3:0] == 4'd9))begin //当ss到59后下一个clk归0ss <= 8'b0;endelse begin //需要考虑其中的两位BCD详细情况if(ss[3:0] == 4'd9)begin //当ss的个位达到9需要归零,且ss的十位加1ss[3:0] <= 4'b0;ss[7:4] <= ss[7:4] + 1'b1;endelse beginss[3:0] <= ss[3:0] + 1'b1;endendendend//min设计 mm范围为00~59, clk的目的就是为了给mm归0always @(posedge clk)beginif(reset)begin //reset复位信号 mm <= 8'b0;endelse if(ena & (ss[7:4] == 4'd5) & (ss[3:0] == 4'd9))begin //当ena与ss达到59秒后,才可以后面操作加一if((mm[7:4] == 5) & (mm[3:0] == 9))beginmm <= 8'b0;endelse beginif(mm[3:0] == 4'd9)begin //当mm的个位达到9需要归零,且mm的十位加1mm[3:0] <= 4'b0;mm[7:4] <= mm[7:4] + 1'b1;endelse beginmm[3:0] <= mm[3:0] + 1'b1; endendendend//hour设计 hh的范围为01~12always @(posedge clk)beginif(reset)begin //reset复位信号 hh[7:4] <= 4'd1;hh[3:0] <= 4'd2;endelse beginif(ena & ((ss[7:4] == 4'd5) & (ss[3:0] == 4'd9)) & ((mm[7:4] == 5) & (mm[3:0] == 9)))beginif((hh[7:4] == 4'd1) & hh[3:0] == 2)beginhh[7:4] <= 4'd0;hh[3:0] <= 4'd1;endelse beginif(hh[3:0] == 4'd9)beginhh[3:0] <= 4'b0;hh[7:4] <= hh[7:4] + 1'b1;endelse beginhh[3:0] <= hh[3:0] + 1'b1;endendendendend//pmalways @(posedge clk)beginif(reset)beginpm <= 1'b0;endelse if((hh[7:4] == 4'd1) & (hh[3:0] == 4'd1) &(mm[7:4] == 4'd5) & (mm[3:0] == 4'd9) &(ss[7:4] == 4'd5) & (ss[3:0] == 4'd9))beginpm <= ~pm; //当经过了12h后,pm进行翻转操作endend
endmodule
HDLbits 刷题答案practice——Counters相关推荐
- 【HDLBits 刷题】所有答案直达链接汇总
写在前面 以下为HDLBits全部答案,有些题的解法不唯一,我的也许不是最优解,欢迎提出更好的想法,HDLBits总的来说比较适合初学者. HDLBits 答案汇总 Language [HDLBits ...
- 牛客网Veirlog刷题答案目录(持续更新)
牛客网Veirlog刷题答案目录(持续更新) 基础篇 进阶篇 基础篇 1.VL1--四选一多路选择器 2.VL2--异步复位的串联T触发器 3.VL3--奇偶校验 4.VL4--移位运算与乘法 5.V ...
- SQL leetcode 刷题答案(二)
承接上篇 SQL leetcode 刷题答案https://blog.csdn.net/hahaha66888/article/details/89925981 5.Big Countries sel ...
- 【HDLBits 刷题 9】Circuits(5)Finite State Manchines 1-9
目录 写在前面 Finite State Manchines Fsm1 Fsm1s Fsm2 Fsm2s Fsm3comb Fsm3onehot Fsm3 Fsm3s Design a Moore F ...
- 【HDLBits 刷题 10】Circuits(6)Finite State Manchines 10-17
目录 写在前面 Finite State Manchines Lemmings1 Lemmings2 Lemmings3 Lemmings4 Fsm onehot Fsm ps2 Fsm ps2dat ...
- 【HDLBits 刷题 11】Circuits(7)Finite State Manchines 18-26
目录 写在前面 Finite State Manchines Fsm serialdata Fsm serialdp Fsm hdlc Design a Mealy FSM ece241 2014 q ...
- 【HDLBits 刷题 12】Circuits(8)Finite State Manchines 27-34
目录 写在前面 Finite State Manchines 2014 q3c m2014 q6b m2014 q6c m2014 q6 2012 q2fsm 2012 q2b 2013 q2afsm ...
- HDLBits刷题合集—9 Arithmetic Circuits
HDLBits刷题合集-9 Arithmetic Circuits HDLBits-66 Hadd Problem Statement 创建一个半加器.半加器将两个输入(不带低位的进位)相加产生和和向 ...
- 《LeetCode刷题答案》pdf出炉,学习者乐坏了
很多朋友在后台留言说,刷LeetCode上的数据结构+算法题时难免会遇到困难,想要找一本答案题解做参考. 其实几个月之前,咱们这里已经分享过一本<LeetCode算法题的PDF版题解>,只 ...
最新文章
- Visio绘制功能分解图
- python编程语言零基础入门-程序员大佬,给Python零基础入门书籍教程的一些建议!...
- 在网页中直接显示office文档,
- python接收邮件g_Python接收Gmail新邮件并发送到gtalk的方法
- Mysql定时执行任务实现方法
- python 社区网络转化_python-将numpy打开网格转换为坐标
- 前端学习(2546):debugger
- python sklearn 梯度下降法_科学网—Python_机器学习_总结4:随机梯度下降算法 - 李军的博文...
- 疫情相关电信诈骗涉案金额超3.51亿元,谨防这四类骗局!
- mysql学习day04
- 【mfc】vs2019创建MFC基于对话框的项目没有插入任何代码运行报错:0xC0000005:读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突
- Mac 升级到protoc 指定版本
- 卸载精灵(bue directx) r4.0 完美版 绿色
- Linux 对命令起别名
- 如何优雅的将Mybatis日志中的Preparing与Parameters转换为可执行SQL
- ubuntu使用meld/beyond compare 做git的diff工具
- ARduino接KY-040电位编码器
- 华为nova5 pro怎么升级鸿蒙系统,鸿蒙系统终于来了!这几款华为手机都可以升级了...
- 中国石油大学《化工原理一》第一阶段在线作业
- AI如何让视频更智能?人工智能技术在视频监控中的应用
热门文章
- python电影推荐系统 github_GitHub - Holy-Shine/movie_recommend_system: 一个简单的电影推荐系统...
- android拍照滤镜代码,Android OpenGLES如何给相机添加滤镜详解
- 资深程序员解惑:Android发行多年移动App趋近饱和,Android开发还有好的前景吗?能者居之!
- 机器人开发--扫地机器人系统的解决方案
- 深度学习应用篇-计算机视觉-语义分割综述[5]:FCN、SegNet、Deeplab等分割算法、常用二维三维半立体数据集汇总、前景展望等
- 美团外卖商家版多开工具
- 螺丝头部及其相关知识点
- linux 网络带宽和延时测试
- 电力线巡检--输电线路杆塔异物检测数据集(4500+图片,xml标注)
- 【求资源】Hadoop-native 3.3.1