【数电基础】分频器

1.偶数分频器

相信大多数朋友在学习FPGA过程中接触到的第一个实验应该就是偶数分频器了,偶数分频器的设计较为简单,用一个简单的计数器就可以实现。比如要实现一个N分频(N为偶数)的分频器,可以先写一个计数器,当计数到(N/2-1)时,让输出状态翻转,并将计数器清零,这样输出的信号就是输入时钟的N分频了。具体代码如下:

偶数分频器示例,20分频即N=20,占空比50%。

代码:

module clk_div(clk_out, clk, rst_n);

input clk, rst_n;
output clk_out;

reg clk_out;
reg [4:0] cnt;

always @(posedge clk or negedge rst_n)
if(!rst_n)
    begin
    cnt <= 5'b0;
    clk_out <= 1'b0;
    end
else if(cnt == 4'd9)
    begin
    cnt <= 5'b0;
    clk_out <= ~clk_out;
    end
else cnt <= cnt + 1'b1;

endmodule
2.奇数分频
 

奇数分频器的设计比偶数分频器复杂一些,特别是占空比为50%的奇数分频器。如果对占空比没有明确的要求,则可以直接对上升沿计数,计数到(N-1)/2 时让输出翻转,计数到(N-1)时让输出状态再次翻转,并将计数器清零,这样就可以得到一个占空比为2:3的N分频(N为奇数)的分频器。而如果要实现50%的占空比,可以通过“错位相或”的方法实现。具体方法是用刚才的方法先通过对上升沿计数产生一个占空比为不是50%的N分频器,再用同样的方法对下降沿计数产生一个占空比也不是50%的N分频器,最后将这两个分频器的输出进行“或”运算,就可以得到占空比为50%的奇数N分频器,具体实现代码如下:

module div_odd
(
    input clk,
    input rst_n,
    output clk_out
 );
 
//----------count the posedge---------------------
reg [2:0] cnt_p;
reg clk_p;

always @ (posedge clk or negedge rst_n) 
if(!rst_n) 
    cnt_p <= 3'd0;
else if(cnt_p == 3'd4)
    cnt_p <= 3'd0;
else 
    cnt_p <= cnt_p + 1'b1;

always @ (posedge clk or negedge rst_n) 
if(!rst_n)     
    clk_p <= 1'b0;
else if((cnt_p == 3'd2) || (cnt_p == 3'd4))
    clk_p <= ~ clk_p;
//---------------------------------------------

//----------count the negedge------------------
reg [2:0] cnt_n;
reg clk_n;

always @ (negedge clk or negedge rst_n) 
if(!rst_n) 
    cnt_n <= 3'd0;
else if(cnt_n == 3'd4) 
    cnt_n <= 3'd0;
else
    cnt_n <= cnt_n + 1'b1;
    
always @ (negedge clk or negedge rst_n) 
if(!rst_n) 
    clk_n <= 1'b0;
else if((cnt_n == 3'd2) || (cnt_n == 3'd4)) 
    clk_n <= ~clk_n;
//----------------------------------------------

assign clk_out = clk_p | clk_n;

    
endmodule

 

  • 5
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值