奇数分频

该博客介绍了如何使用Verilog语言实现一个5分频器。作者陈泉秀提供了详细的代码实现,包括两个always块分别处理上升沿和下降沿的情况,最终通过组合逻辑产生分频后的时钟信号。在测试模块中,对分频器进行了测试,验证了其功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

//---------------------
// 奇数分频
//Author:陈泉秀
//---------------------
//实现5分频
module	clk_odd_divider
(
input			clk,
input			rst_n,
output			clk_out
);
reg		[2:0]	count;
reg				clk_p;
reg				clk_n;

always@(posedge clk or negedge rst_n)
	begin
		if(!rst_n)
			count	<=	3'd0;
		else if(count == 3'd4) //0-4
			count	<=	3'd0;
		else
			count	<=	count + 1'b1;
	end
	
always@(posedge clk or negedge rst_n)
	begin
		if(!rst_n)
			clk_p	<=	1'b0;
		else if((count==3'd2)||(count==3'd4))
			clk_p	<=	~clk_p;
	end

always@(negedge clk or negedge rst_n)
	begin
		if(!rst_n)
			clk_n	<=	1'b0;
		else if((count==3'd2)||(count==3'd4))
			clk_n	<=	~clk_n;
	end
	
assign	clk_out	=	clk_n|clk_p;

endmodule
//----------------
// Author: chenquanxiu
//-------------------
`timescale	1ns/1ns
module	clk_odd_divider_tb;
reg	clk;
reg rst_n;
reg data;
wire detector_out;

initial
	begin
		clk		=	1'b0;
		rst_n	=	1'b1;
	#10	rst_n	=	1'b0;
	#30	rst_n	=	1'b1;
	end
	
	always	#5	clk = ~clk;
	
clk_odd_divider
A(
			clk,
			rst_n,
			clk_out
);

endmodule

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值