题解 | #时钟分频(偶数)#【计数器实现】

时钟分频(偶数)

https://www.nowcoder.com/practice/49a7277c203a4ddd956fa385e687a72e

思路

本道题的解决思路有很多。这里介绍计数器的方法。为什么执着于计数器方法呢?因为小编认为计数器方法是解决分频问题最根本的办法。无论多少次分频,都可以使用这种方法来解决。

通过观察题目的波形图我们可以看出,clk_out2是每经历一个完整周期就要翻转一次,clk_out4是每经历两个完整周期就要翻转一次,clk_out8是每经历4个完整周期就要翻转一次。

如果能考虑到上面的点,那么思路就很清晰了。接下来就只是一些细节问题。

代码

`timescale 1ns/1ns
module even_div
    (
    input     wire rst ,
    input     wire clk_in,
    output    wire clk_out2,
    output    wire clk_out4,
    output    wire clk_out8
    );
//*************code***********//
	reg clk_out2_r=0,clk_out4_r=0,clk_out8_r=0;
	reg [2:0]cnt;
	always @(posedge clk_in or negedge rst) begin
		if (!rst)begin
            cnt=0;
        end
		else begin
            if (cnt==3'd3)cnt<=0;
			else cnt<=cnt+1;
            // cnt=cnt+1;
		end
	end

	always @(posedge clk_in or negedge rst)begin
		if (!rst)begin
			clk_out2_r=0;
			clk_out4_r=0;
			clk_out8_r=0;
		end
		else begin
			clk_out2_r=~clk_out2_r;
			if (cnt==0||cnt==3'b010)clk_out4_r<=~clk_out4_r;
			if (cnt==0)clk_out8_r=~clk_out8_r;
		end	
	end
	assign clk_out2=clk_out2_r;
	assign clk_out4=clk_out4_r;
	assign clk_out8=clk_out8_r;
//*************code***********//
endmodule








细节问题:

实不相瞒。小编做这道题目时,花了大量时间。因为clk_out4的时钟一直对不上。究其原因,还是小编太菜了,呜呜呜呜,哭晕在厕所了。。。。。

  1. 如何做到三个clk最开始都是高

观察波形图不难发现,当rst为1后的第一个clk_in上升沿,三个clk_outx都是1。所以如何做到最开始三个clk_outx都是1呢?很简单,当cnt计数到0时,就让它们翻转。

2.为何计数器是cnt<=cnt+1;

最开始小编写的是cnt=cnt+1,但最后一直通不过【小编也是因为这花费了很多时间。。。】。小编去问cha老师,cha老师说,用cnt=cnt+1也是可以的,但是会有一些问题,如下:

咱也不知道会有啥逻辑错误和难以调试的问题。反正为了保险,咱还是统一全部用cnt<=cnt+1吧。

3.为何clk_out4_r是在cnt=0或cnt=2时变化?而不是在cnt=0或cnt=1时变化?

这个问题就要看看此代码的波形图:

发现没?clk_out4是在cnt为0或者为2时翻转的。咱小伙伴就要问了,明明从0开始计数,为什么不在0和1处翻转,而在0和2呀?原因是,rst为0时,cnt就为0了,当rst为1后的第一次clk_in上升沿时,cnt此时变成1了。所以第一轮的cnt计数不是从0开始的,而是从1开始计数的。

全部评论

相关推荐

不愿透露姓名的神秘牛友
2025-12-17 16:48
今天九点半到公司,我跟往常一样先扫了眼电脑,屁活儿没有。寻思着没事干,就去蹲了个厕所,回来摸出手机刷了会儿。结果老板刚好路过,拍了我一下说上班别玩手机,我吓得赶紧揣兜里。也就过了四十分钟吧,我的直属领导把我叫到小隔间,上来就给我一句:“你玩手机这事儿把老板惹毛了,说白了,你可以重新找工作了,等下&nbsp;HR&nbsp;会来跟你谈。”&nbsp;我当时脑子直接宕机,一句话都没憋出来。后面&nbsp;HR&nbsp;找我谈话,直属领导也在旁边。HR&nbsp;说我这毛病不是一次两次了,属于屡教不改,不光上班玩手机,还用公司电脑看论文、弄学校的事儿。我当时人都傻了,上班摸鱼是不对,可我都是闲得发慌的时候才摸啊!而且玩手机这事儿,从来没人跟我说过后果这么严重,更没人告诉我在公司学个习也算犯错!连一次口头提醒都没有,哪儿来的屡教不改啊?更让我膈应的是,昨天部门刚开了会,说四个实习生里留一个转正,让大家好好表现。结果今天我就因为玩手机被开了。但搞笑的是,开会前直属领导就把我叫去小会议室,明明白白告诉我:“转正这事儿你就别想了,你的学历达不到我们部门要求,当初招你进来也没打算给你这个机会。”合着我没入贵厂的眼是吧?可我都已经被排除在转正名单外了,摸个鱼至于直接把我开了吗?真的太离谱了!
rush$0522:转正名单没进,大概率本来就没打算留你
摸鱼被leader发现了...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务