提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
分频器往往会使用计数器以及组合逻辑来完成分频,以下是对于计数器的学习和相关分频器如何设计;
一、计数器
计数器主要注意的就是时序逻辑与组合逻辑分开写,这样符合RTL设计代码规范
例:10进制的计数器
module counter_10(
input clk,
input rst_n,
output q);
//时序部分
always@(posedge clk or negedge rst_n)begin
if(!rst_n)
q<='d0;
else if(end_counter==1'b1)begin
q<=q+1'b1;
end
end
//组合逻辑
assign end_counter=(q<=9)?1'b1:1'b0;
endmodule
二、分频器
1.偶数分频
偶数分频,是指的是分频的系数是偶数,如果采用计数器进行分频的话计数为N/2-1时进行时钟翻转
代码如下(示例)4分频:
module F_2(
input clk,
input rst_n,
output reg q,
output clk4);
wire not_over;
always@(posedge clk or negedge rst_n)begin
if(!rst_n)begin
q<=0;clk4<=0;
end
else if(not_over)begin
q<=0;
clk4<=~clk4
end
else begin
q<=q+1;
clk4<=clk4;
end
end
assign not_over=q==((4/2)-1)?1:0;
endmodule

2.奇数分频
奇数分频根据占空比要求分为以下两种,一种是hi没有占空比要求的直接就可以搭配就可以,比如说3分频就=1+2,也可以是2+1;5分频可以是 1+4,4+1,2+3,3+2;如1+4就是在计数为1的时候输出时钟进行翻转,然后计数到5的时候再次翻转,计数到5的时候清零;
代码如下(示例):
module div_5(clk,rst_n,clk_div);
input clk ;
input rst_n;
output reg clk_5;
reg[2:0] q;
always@(posedge clk or negedge rst_n)begin
if(!rst_n)begin
q<=1;
clk_5<=0;
end
else if(q==1)begin
clk_5=~clk_5;
q<=q+1;
end
else if(q==5)
begin
clk_5=~clk_5;
q<='d1;
end
else begin q<=q+1;
clk_5<=clk_5;
end
endmodule

下一种
主要就是利用上升沿下降沿来得到占空比50%的分频电路;
从0计数,在(N-1)/2,以及N-1处进行翻转

分别得到上升沿与下降沿的情况,然后进行或得到奇数分频
3.小数分频
小数分频又称为分数分频,比如说33/6分频,很显然要在33个时钟周期下产生6个新的周期,等于5.5,显然是由5个的周期和6分频周期组合而成,需要几个5分频周期,需要几个6分频周期能,假设5分频需要N个,6分频需要M个,所以N+M=6;
5N+6M=33;
所以N=3,M=3;
所以33个时钟周期内可以直接由3个五分频加上3个6分频
4.其他
例使用10进制计数器来实现1000hz分频为1hz的分频
思路使用10分频然后对结果在进行分频,在进行分频;分开来看,每次进行的都是偶数分频,所以,采用计数到10/2-1=4;代码如下:


总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
本文详细介绍了数字电路中计数器和分频器的应用。首先讲解了计数器的基本原理,以10进制计数器为例展示代码实现。接着,讨论了不同类型的分频器设计,包括偶数分频、奇数分频以及小数分频。对于奇数分频,区分了无占空比要求和保持50%占空比的实现方式。最后,提到了通过组合分频器实现小数分频的方法,并给出了1000Hz到1Hz分频的示例。整体内容深入浅出,适合数字电路学习者参考。

2582

被折叠的 条评论
为什么被折叠?



