HDLBits网址:https://hdlbits.01xz.net/wiki/Main_Page

题目

From a 1000 Hz clock, derive a 1 Hz signal, called OneHertz, that could be used for the digital wall clock. Build the frequency divider using modulo-10 (BCD) counters and as few other gates as possible. Also output the enable signals from each of the BCD counters you use (c_enable[0] for the fastest counter, c_enable[2] for the slowest).

The following BCD counter is provided for you. Enable must be high for the counter to run. Reset is synchronous and set high to force the counter to zero. All counters in your circuit must directly use the same 1000 Hz signal.

我的设计

通过例化一个10进制bcd码计数器,来实现1000分频的分频器,即把一个1KHz的时钟通过分频的手段,变成一个1Hz的信号,那就计数到999给一个输出作为1Hz信号输出。

那怎么样计数到999?这个时候就要利用题目提供的BCD计数器,例化成为个位计数器、十位计数器、百位计数器。个位计数器计数到9,进位到十位计数器,十位计数器计数到9,进位到百位计数器,直到计数到999为止。综上所述,设计如下:

法一(输出为时序逻辑)

由于时序逻辑是上升沿触发,所以总是会慢一拍。为了使c_enable的翻转与个位计数器计数到9同步,所以要提前一拍,所以code的15行和17行的个位计数器计数是判断是否等于8。

module top_module (    input clk,    input reset,    output reg OneHertz,    output reg [2:0] c_enable); //    wire [3:0] Q1,Q2,Q3;    always@(posedge clk)begin        if(reset) begin             c_enable <= 1;            OneHertz <= 0;        end        else begin               if(Q1 == 4'd8)begin                c_enable <= 3'd3;                if(Q2==4'd9 && Q1==4'd8 )begin                    c_enable <= 3'd7;                    if(Q3 == 4'd9)                        OneHertz <= 1;                end            end            else begin                c_enable <= 1;                OneHertz <= 0;              end        end    end    bcdcount counter0 (clk, reset, c_enable[0],Q1);    bcdcount counter1 (clk, reset, c_enable[1],Q2);    bcdcount counter2 (clk, reset, c_enable[2],Q3);endmodule

法二(输出为组合逻辑)

既然要慢一拍处理,那为什么不直接组合逻辑输出?这样就可以实现同步的效果了,而且更加简单易懂,设计如下:

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};    assign OneHertz = {q2 == 4'd9 && q1 == 4'd9 && q0 == 4'd9};     bcdcount counter0 (clk, reset, c_enable[0], q0);    bcdcount counter1 (clk, reset, c_enable[1], q1);    bcdcount counter2 (clk, reset, c_enable[2], q2); endmodule

仿真波形

微信公众号

建立了一个微信公众号“Andy的ICer之路”,此公众号主要分享数字IC相关的学习经验,做公众号的目的就是记录自己的学习过程,很多东西回过头来可能就忘记了,为了记住知识和分享知识,希望自己可以保持更新,有兴趣的朋友可以关注一下!

Verilog专题(十三)计数器的级联实现1000分频的分频器相关推荐

  1. HDLBits 系列(17) 计数器的级联实现1000分频的分频器

    目录 原题复现 审题 我的设计 原题复现 原题 From a 1000 Hz clock, derive a 1 Hz signal, called OneHertz, that could be u ...

  2. (2021-07-14~)“kuangbin带你飞”专题计划——专题十三:基础计算几何

    目录 前言 参考博客 自己总结的东西: 难度判断? 题目 1.[TOYS POJ - 2318 ](解决) 2.[Toy Storage POJ - 2398 ](解决) 3.[Segments PO ...

  3. (24)System Verilog设计十进制计数器

    (24)System Verilog设计十进制计数器 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog设计十进制计数器 1.十进制计数器 ...

  4. (4)verilog语言编写计数器

    2.4 verilog语言编写计数器 2.4.1 本节目录 1)本节目录: 2)FPGA简介: 3)verilog简介: 4)verilog语言编写计数器: 5)本节结束. 2.4.2 FPGA简介 ...

  5. Verilog实现按键计数器

    Verilog实现按键计数器 文章目录 Verilog实现按键计数器 一.简介 二. 代码实现 三.效果 一.简介 计数器我们都知道,这里我们旨在使用Verilog HDL 来实现按键计数器的操作,功 ...

  6. 使用Verilog语言描述计数器——脉动计数器;脉动计数器具有减法计数功能。采用模块设计和行为级设计方法。

    使用Verilog语言描述计数器--脉动计数器. 内容说明: 本次设计的计数器属于脉动计数器.使用Verilog语言设计,并且设计方法采用模块设计和简单的行为级设计.会有这两种设计的对比测试.最后,会 ...

  7. 74161功能表_计数器74ls161工作原理(分频电路、真值表、逻辑功能)

    74LS161为二进制同步计数器,具有同步预置数.异步清零以及保持等功能. 1.74LS161引脚图 2.74LS161真值表及功能 注:QCC=CTr·Q0·Q1·Q2·Q3 从功能表的第一行可知, ...

  8. Verilog专题(二十三)Lemmings2

    ​HDLBits网址:https://hdlbits.01xz.net/wiki/Main_Page 题目 In addition to walking left and right, Lemming ...

  9. verilog实现二进制计数器,约翰逊(Johnson)计数器,环形计数器

    https://github.com/zsylov/verliog-study/blob/master/2019.5.6%E8%AE%A1%E6%95%B0%E5%99%A8.md 用verilog实 ...

最新文章

  1. ARM Linux (S3C6410架构/2.6.35内核)的内存映射(三)
  2. 中tr不能显示字符_BeautifulSoup4中find 和find_all的比较
  3. 杨桃32开发版最小核心板和底板接口定义以及各io口功能
  4. 那些想坐等AI成熟再采用的公司,可能永远也跟不上AI浪潮
  5. java Math类中的pow方法的问题Math.pow(64,1/3)是1而不是4
  6. Mysql数据类型之整数型的一些细节你get到了吗?
  7. 【Android游戏开发十一】手把手让你爱上Android sdk自带“9妹”
  8. 原来 Sql Server 的存储过程是可以调试的
  9. 使用frp实现将内网映射到公网 无需花生壳
  10. 安徽工程大学大学计算机基础,安徽工程大学.pdf
  11. springboot的三种启动方式
  12. 4.Zabbix企业级分布式监控系统 --- 快速配置和使用
  13. 通过简单案例,理解观察者模式
  14. 输入法里打出特殊符号
  15. 数据结构 --- c语言实现双向循环链表
  16. write函数的详解与read函数的详解
  17. 《2023新一代数字办公白皮书》正式发布!| 爱分析报告
  18. 计算机表格 求差,教大家Excel2013中表格求差函数公式怎么使用
  19. 多表联查--01---LEFT JOIN 实现多表联查
  20. 端到端的文本无关说话人确认的深度神经网络嵌入

热门文章

  1. 如何设计一个牛逼的 Feed 流系统
  2. DB2建表时报错:DB2 SQL Error: SQLCODE=-286, SQLSTATE=42727
  3. 毕业设计 基于Arduino的肺活量计
  4. IOS In-App Events
  5. 去掉字符串最后一个字符的方法
  6. FFmpeg入门详解之19:音视频封装原理简介
  7. 案例 | 信安运维基于 TKE 平台的容器技术实践
  8. 全球与中国钓鱼和狩猎设备市场运营态势及未来发展前景预测报告2021年版
  9. php webshell原理,php webshell分析和绕过waf原理解析
  10. 自动化测试框架Pytest(二)——前后置处理