当前位置:   article > 正文

Verilog笔记——奇数分频和小数分频_verilog奇数分频器为什么要用两个?

verilog奇数分频器为什么要用两个?

MATLAB与FPGA数字信号处理(数字滤波器设计)、数字IC、无线通信、图像处理、信道编码系列

1.偶数分频

简单,只是注意时钟翻转的条件是(N/2)还是(N/2)-1,非阻塞赋值在下一个时钟才会更新值。

2.奇数分频

奇数分频比偶数分频复杂一些,当不要求分频的占空比时,对输入时钟clk上升沿计数,可以设置两个计数的翻转点,一个是(N-1)/2,一个是(N-1),计数到(N-1)时输出时钟翻转且将计数器清零,假设计数器计数0~(N-1)/2区间输出低电平,则输出时钟的低电平有(N-1)/2 + 1个clk周期,高电平的计数是(N-1)/2+1 ~ (N-1),共(N-1)/2个clk周期,可见不是50%占空比。
当要求占空比为50%时,对输入时钟clk的上升沿下降沿分别计数,根据两个计数器得到两个错位输出的时钟,将两个时钟做“或”运算,可以弥补相差的时钟,达到50%占空比。
在这里插入图片描述
以7分频为例,代码如下:

/********************************************
		计数器实现 7 分频
*********************************************/
module Odd_Divider(
	input clk,
	input rst_n,
	output clk_divider
);

reg [2:0] count_p;	//上升沿计数
reg [2:0] count_n;	//下降沿计数
reg clk_p;				//上升沿分频
reg clk_n;				//下降沿分频

//上升沿计数
always @ ( posedge clk or negedge rst_n )
begin 
	if( !rst_n ) 
		count_p <= 3'b0;
	else if( count_p == 3'd6 ) 
		count_p <= 3'b0;
	else  
		count_p <= count_p + 1'b1;
end

//上升沿分频
always  @ ( posedge clk or negedge rst_n )
begin 
	if( !rst_n ) begin 
		clk_p <= 1'b0;
	end 
	else begin 
		if( count_p == 3'd3 || count_p == 3'd6 ) begin 
			clk_p <= ~clk_p;
		end
	end
end 

//下降沿计数
always @ ( negedge clk or negedge rst_n )
begin 
	if( !rst_n ) 
		count_n <= 3'b0;
	else if( count_n == 3'd6 ) 
		count_n <= 3'b0;
	else  
		count_n <= count_n + 1'b1;
end

//下降沿分频
always  @ ( negedge clk or negedge rst_n )
begin 
	if( !rst_n ) begin 
		clk_n <= 1'b0;
	end 
	else begin 
		if( count_n == 3'd3 || count_n == 3'd6 ) begin 
			clk_n <= ~clk_n;
		end
	end
end 

assign clk_divider = clk_p | clk_n;

endmodule
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65

仿真如下:
在这里插入图片描述
在这里插入图片描述

3.小数分频

N+0.5分频,如N=3时进行3.5分频。
先将clk时钟周期的一半记作clk_half,即一个高电平或一个低电平时间。
对2*(N+0.5) = 2N+1,这个数一定是奇数,按照奇数分频的思路做,也取clk_p和clk_n,但是计数值不一样,一个计数N个clk时钟周期(2N个clk_half周期),一个计数2N+2个clk_half,且两者的位置关系如图所示,这样,两者做“与”运算,则所得信号一个周期的高低电平共有2N+1个clk_half周期,即(N+0.5)个clk周期
在这里插入图片描述

/********************************************
		计数器实现 3.5 分频,N=3,2N=6
*********************************************/
module Npoint5_Divider(
	input clk,
	input rst_n,
	output clk_divider
);

reg [2:0] count_p;	//上升沿计数
reg [2:0] count_n;	//下降沿计数
reg clk_p;				//上升沿分频
reg clk_n;				//下降沿分频

//上升沿计数
always @ ( posedge clk or negedge rst_n )
begin 
	if( !rst_n ) 
		count_p <= 3'b0;
	else if( count_p == 3'd6 ) 
		count_p <= 3'b0;
	else  
		count_p <= count_p + 1'b1;
end

//上升沿分频
always  @ ( posedge clk or negedge rst_n )
begin 
	if( !rst_n ) begin 
		clk_p <= 1'b0;
	end 
	else begin 
		if( count_p == 3'd4 || count_p == 3'd0 ) begin 
			clk_p <= ~clk_p;
		end
	end
end 

//下降沿计数
always @ ( negedge clk or negedge rst_n )
begin 
	if( !rst_n ) 
		count_n <= 3'b0;
	else if( count_n == 3'd6 ) 
		count_n <= 3'b0;
	else  
		count_n <= count_n + 1'b1;
end

//下降沿分频
always  @ ( negedge clk or negedge rst_n )
begin 
	if( !rst_n ) begin 
		clk_n <= 1'b1;
	end 
	else begin 
		if( count_n == 3'd4 || count_n == 3'd1 ) begin 
			clk_n <= ~clk_n;
		end
	end
end 

assign clk_divider = clk_p & clk_n;

endmodule
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65

仿真结果:
在这里插入图片描述
MATLAB与FPGA数字信号处理(数字滤波器设计)、数字IC、无线通信、图像处理、信道编码系列

欢迎关注:FPGA探索者
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/519213
推荐阅读
相关标签
  

闽ICP备14008679号