Chinaunix首页 | 论坛 | 博客
  • 博客访问: 27551
  • 博文数量: 13
  • 博客积分: 325
  • 博客等级: 一等列兵
  • 技术积分: 100
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-09 15:49
文章分类
文章存档

2012年(13)

我的朋友

分类: Delphi

2012-08-22 09:31:08

奇数分频----5分频

这里介绍一种奇数分频的设计方法,基本思路如下。

1. 确定计数子:设计上升沿和下降沿计数子,计数子的宽度根据分频系数决定。比如,5分频就是5了。

2. 计数子自加:在时钟信号的上升沿将计数子自加1,这里当计数子等于4 = 5 -1 的时候,将其清零。

3. 输出寄存器:分别输出上升沿和下降沿,因为 5 >> 1 = 2 ,所以输出下降沿和上升沿的时候做个简单的处理,上升沿和下降沿寄存器的值在时钟信号的上升沿到来时,如果小于或等于2 = 5 >> 1 ,就输出高电平,否则输出低电平。

4. 综合寄存器值:将上升沿和下降沿寄存器的值做个与运算,即可得到时钟信号的5分频。

 

以下为Verilog代码:等占空比的5分频电路

 

module div_5(clk,o_clk);
input clk;
output o_clk;

reg [2:0]cnt_down, cnt_up;
reg clk_down, clk_up;

always @(posedge clk)

begin
if(cnt_up == 4)
    cnt_up <= 0;
else
    cnt_up <= cnt_up + 1;

end

always @(negedge clk)

begin
if(cnt_down == 4)
    cnt_down <= 0;
else
    cnt_down <= cnt_down + 1;

end

  
always @(posedge clk)

begin
if(cnt_up<2)
    clk_up <= 0;
else
    clk_up <= 1;

end
 
always @(negedge clk)

begin
if(cnt_down<2)
    clk_down <= 0;
else
    clk_down <= 1;

end
 
assign o_clk = clk_down & clk_up;

endmodule


对于其他奇数倍分频同样的道理即可

阅读(1161) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~