From 1000Hz clock to 1Hz--OneHertz
本文最后更新于:Tuesday, October 6th 2020, 9:20 am
problem link:https://hdlbits.01xz.net/wiki/Exams/ece241_2014_q7b
Background
从频率为1000Hz的时钟中得到频率为1Hz的信号(
OneHertz),它用来驱动一系列时/分/秒计数器的使能信号(Enable signal)以此创建一个数字时钟墙(digital wall clock)。因为需要时钟每秒计数一次,OneHertz信号必须每秒准确地断言一个周期(周期为1秒,且每周期只能翻转一次)。
Problem Description
用BCD计数器和少许其它的门构建
分频器(frequency divider)。并且输出你所使用的BCD计数器的使能信号。(c_enable[0] for the fastest counter, c_enable[2] for the slowest)如下的BCD计数器已经提供给你,
Enable为高电平计数器才能正常工作,Reset为同步高电平置位0;
1
2
3
4
5
6module bcdcount (
input clk,
input reset,
input enable,
output reg [3:0] Q
);
你设计的电路中所有的计数器必须直接使用相同的1000Hz时钟信号。
Template
1 | |
First Try
answer
1 | |
result❌


在计数90-99的时候: c_enable[2]本该为0却变为了1,导致输出c_enable=5=3’b101;
由于c_enable[2]=Q1[3] & Q1[0],起初我认为是Q1有问题;后续画出如下草图发现还是c_enable有问题

- 由于Q1是由计数器生成的,只要使能信号没问题,那么它就还🆗
- 又由于使能信号1和2是我们定义,所以从这里下手解决问题比较方便;
- 由上图知使能信号2有问题,它在计数90-99期间一直为高电平,我们只希望其在99时为高电平。
- 所有修改使能2的赋值:c_enable[2] = Q1[3] & Q1[0]
& c_enable[1] - 同理我们也要修改OneHertz = Q2[3] & Q2[0] &
c_enable[2];,让其只在999时才有效;否则其在900-999一直有效;
Final answer
1 | |
Advanced problem(❓)
⭐如何实现50%(xx%)占空比的10(xx)倍频电路
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!