学习FPGA——时钟分频

本文详细介绍了一种通过偶数分频(如2分频)和奇数分频(如4分频)实现5和10分频的Verilog代码。通过上升沿和下降沿计数器,以及异步复位,博主展示了如何生成占空比可调的时钟输出。理解并应用这些技术对于数字逻辑设计尤其重要。
摘要由CSDN通过智能技术生成

1、偶数分频和奇数分频,代码如下:
// 说 明:
// (1) 对输入时钟进行5分频,得到占空比为50%的时钟输;
// (2) DIV1=5/2,DIV2=5-(5%2) 5为分频数;
// (3) 若将5改为其他整数则表示其他分频数;
module clk_div
(
clk_in,rst_n,
clk_out
);
input clk_in; //输入时钟
input rst_n; //异步复位,低电平有效
output clk_out; //5分频信号输出

reg	[2:0]cnt1;		//上升沿计数器
reg 	[2:0]cnt2;		//下降沿计数器
reg	clk_out1;		//时钟寄存输出
reg 	clk_out2;
reg 	Cnt;				//2分频计数器
reg  	clk_cnt;			//2分频输出信号

parameter DIV1 = 2;	
parameter DIV2 = 4;	

//2分频
always @(posedge clk_in,negedge rst_n) //上升沿计数器
begin
if(!rst_n) //异步复位
Cnt <= 1’b0;
else if(Cnt==1’b1)
Cnt <= 1’b0;
else
Cnt <= Cnt+1’b1;
end

always @(posedge clk_in,negedge rst_n)	//上升沿输出时钟控制 
begin	
	if(!rst_n)						
		clk_cnt <= 1'b0;
	else if(Cnt==1'b1)				
		clk_cnt <= ~clk_cnt;
	else if(Cnt==1'b0)				
		clk_cnt <= ~clk_cnt;
end


always @(posedge clk_cnt,negedge rst_n)	//上升沿计数器
begin
	if(!rst_n)						
		cnt1 <= 1'b0;
	else if(cnt1<DIV2)				
		cnt1 <= cnt1 + 1'b1;
	else 
		cnt1 <= 1'b0;
end

always @(negedge clk_cnt,negedge rst_n)	//下降沿计数器
begin
	if(!rst_n)						
		cnt2 <= 1'b0;
	else if(cnt2<DIV2)				
		cnt2 <= cnt2 + 1'b1;
	else 
		cnt2 <= 1'b0;
end

always @(posedge clk_cnt,negedge rst_n)	//上升沿输出时钟控制 
begin	
	if(!rst_n)						
		clk_out1 <= 1'b0;
	else if(cnt1==DIV1)				//为2时翻转
		clk_out1 <= ~clk_out1;
	else if(cnt1==DIV2)				//为4时翻转
		clk_out1 <= ~clk_out1;
end

always @(negedge clk_cnt,negedge rst_n)	//下降沿输出时钟控制 
begin	
	if(!rst_n)						
		clk_out2 <= 1'b0;
	else if(cnt2==DIV1)				
		clk_out2 <= ~clk_out2;
	else if(cnt2==DIV2)				
		clk_out2 <= ~clk_out2;
end

//10分频
assign clk_out = clk_out1|clk_out2;

endmodule

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值