三分频电路设计

三分频电路设计

文章目录

偶数分频二分频更大的2N偶数

奇数分频三分频

偶数分频

通常情况下,偶数倍分频器,可以借助计数器实现。

二分频

最简单的,二分频时,直接把输入时钟加到D触发器上,输出端Q取反后,接回输入D端,就可以了。参考代码如下。

module clk_div(

input i_clk ,

output o_clk_div

);

reg ro_clk_div = 0 ;

assign o_clk_div = ro_clk_div;

always @(posedge i_clk) begin

ro_clk_div <= ~ro_clk_div;

end

endmodule

更大的2N偶数

其余2N倍数分频时,就需要借助计数器。举例,4分频时,1个输出时钟周期内,有4个输入时钟,按照50%的占空比算,输出时钟需要在4/2=2个时钟周期处翻转。

可以产生一个 0 1 0 1 的循环计数器,计数器到1,翻转输出即可,参考代码。

module clk_div(

input i_clk ,

output o_clk_div

);

reg ro_clk_div = 0 ;

reg [1:0] r_cnt = 0;

assign o_clk_div = ro_clk_div;

always @(posedge i_clk) begin

if(r_cnt == 2-1)

r_cnt <= 0;

else

r_cnt <= r_cnt + 1;

end

always @(posedge i_clk) begin

if(r_cnt == 2-1)

ro_clk_div <= ~ro_clk_div;

end

endmodule

更具一般性的,4分频计数两个数,2N分频计数2N>>1个数,又由于计数器从0开始,则有:(2N>>1)-1 通式

module clk_div #(

parameter P_DIV_NUM = 6

)

(

input i_clk ,

output o_clk_div

);

reg ro_clk_div = 0 ;

reg [1:0] r_cnt = 0;

assign o_clk_div = ro_clk_div;

always @(posedge i_clk) begin

if(r_cnt == (P_DIV_NUM>>1)-1)

r_cnt <= 0;

else

r_cnt <= r_cnt + 1;

end

always @(posedge i_clk) begin

if(r_cnt == (P_DIV_NUM>>1)-1)

ro_clk_div <= ~ro_clk_div;

end

endmodule

至此,偶数倍分频都实现了。

奇数分频

三分频

三分频是面试、笔试高频问题。

如果只考虑信号在上升沿发生变化,3分频会有几种情况呢?

高电平:低电平 1 :2 2:1 两种而已,图示如下。

这种占空比非50%的是比较好实现的,只需要一个0~2的循环计数器即可

//1:2

module clk_div(

input i_clk ,

output o_clk_div

);

reg ro_clk_div = 0 ;

reg [1:0] r_cnt = 0 ;

assign o_clk_div = ro_clk_div;

always @(posedge i_clk) begin

if(r_cnt == 2)

r_cnt <= 0;

else

r_cnt <= r_cnt + 1;

end

always @(posedge i_clk) begin

if(r_cnt == 0 || r_cnt==1)

ro_clk_div <= ~ro_clk_div;

end

endmodule

//2:1

module clk_div(

input i_clk ,

output o_clk_div

);

reg ro_clk_div = 0 ;

reg [1:0] r_cnt = 0 ;

assign o_clk_div = ro_clk_div;

always @(posedge i_clk) begin

if(r_cnt == 2)

r_cnt <= 0;

else

r_cnt <= r_cnt + 1;

end

always @(posedge i_clk) begin

if(r_cnt == 0 || r_cnt==2)

ro_clk_div <= ~ro_clk_div;

end

endmodule

如果是占空比50%的三分频呢?图示如下。一定会用到下降沿。 借鉴上面非50%占空比的思路,还是用计数器实现。 考虑两个时钟 或 运算,得到输出三分频时钟。 参考代码:

module clk_div(

input i_clk ,

output o_clk_div

);

reg ro_clk_div = 0 ;

reg [1:0] r_cnt = 0 ;

reg clk1 = 0 , clk2 = 0 ;

assign o_clk_div = clk1 | clk2;

always @(posedge i_clk) begin

if(r_cnt == 2)

r_cnt <= 0;

else

r_cnt <= r_cnt + 1;

end

always @(posedge i_clk) begin

if(r_cnt == 0 || r_cnt == 1)

clk1 <= !clk1;

end

always @(negedge i_clk) begin

if(r_cnt == 1 || r_cnt == 2)

clk2 <= !clk2;

end

endmodule

这里clk2的变化是根据下降沿来的,数据稳定,建立时间、保持时间都能满足,所以在时钟沿立即就能变化,不会出现打一拍的现象。 而clk1的变化会有打一拍的现象。 另一种低翻转率的三分频。

module clk_div(

input i_clk ,

output o_clk_div

);

reg ro_clk_div = 0 ;

reg [1:0] r_cnt = 0 ;

reg clk1 = 0 , clk2 = 0 ;

assign o_clk_div = clk1 ^ !clk2;

always @(posedge i_clk) begin

if(r_cnt == 2)

r_cnt <= 0;

else

r_cnt <= r_cnt + 1;

end

always @(posedge i_clk) begin

if(r_cnt == 2)

clk1 <= !clk1;

end

always @(negedge i_clk) begin

if(r_cnt == 1)

clk2 <= !clk2;

end

endmodule

🌸 相关推荐

训犬花多少钱
完美体育365官方网站入口

训犬花多少钱

📅 06-27 👀 9753
枫树叶子的形状像什么?枫叶有哪些独特特点?
365体育官网平台手机

枫树叶子的形状像什么?枫叶有哪些独特特点?

📅 06-28 👀 8616
安康简介
nowgoal365live score

安康简介

📅 07-01 👀 2436