备战秋招之Verilog分频器代码

一、偶数分频器

100Mhz二分频后为50Mhz. 偶数分频实现比较简单,假设为N(偶数)分频,只需计数到N/2 -1 然后时钟翻转,计数器清零。

 

使用Verilog语言设计4分频电路。

module divide_2

(

input  clk,

input  rst_n,

output reg  out_clk


);

parameter N = 4;  //N为偶数  

reg [N/2-1:0]  cnt;

always @ (posedge clk or negedge rst_n) begin
    if(!rst_n)begin
        cnt <= 0;
        out_clk <= 0;   
    end
    else bigin
        if(cnt==N/2-1)begin
          out_clk <= ~out_clk;
          cnt <= 0;
        end
    else
        cnt <= cnt + 1;
    end
end


endmodule

 

二、奇数分频器

分频方法(占空比为50%)

 

当 out_clk1 为 0 时, cnt_1 在 clk 时钟上升沿进行计数,当计数到 N/2+1 时 out_clk1 进行翻
转,同时 cnt_1 赋值为初始值 0 , 当 out_clk1 为 1 时, cnt_1 在 clk 时钟上升沿进行计数,当计数到
N/2 时 out_clk1 进行翻转,同时 cnt_1 赋值为初始值 0。
当 out_clk2 为 0 时, cnt_2 在 clk 时钟下降沿进行计数,当计数到 N/2+1 时 out_clk2 进行翻
转,同时 cnt_2 赋值为初始值 0 , 当 out_clk2 为 1 时, cnt_2 在 clk 时钟下降沿进行计数,当计数到
N/2 时 out_clk2 进行翻转,同时 cnt_2 赋值为初始值 0。

最后分频的结果为out_clk1和out_clk2相或

N/2取整  小数舍弃

以5分频为例 波形图如同所示

 

代码如下

module divide_5
(

input  clk,
input  rst_n,
output out_clk

);

parameter N = 5

reg [N/2 :0] cnt_1 ;
reg [N/2 :0] cnt_2 ;

reg  out_clk1 ;
reg  out_clk2 ;

always @ (posedge clk or negedge rst_n) begin //上升沿输出 out_clk1
 if(!rst_n) begin
     out_clk1 <= 0;
     cnt_1 <= 0;  
 end
 else begin
     if(out_clk1 == 0) begin
         if(cnt_1 == N/2+1) begin
             out_clk1 <= ~out_clk1;
             cnt_1 <= 0;
             end
         else
         cnt_1 <= cnt_1+1;
        end
    else if(cnt_1 == N/2) begin
        out_clk1 <= ~out_clk1;
        cnt_1 <= 1;
        end
    else
         cnt_1 <= cnt_1+1;
     end
 end

always @ (negedge clk or negedge rst_n) begin //下降沿输出 out_clk2
 if(!rst_n) begin
     out_clk2 <= 0;
     cnt_2 <= 0;  
     end
 else begin
     if(out_clk2 == 0) begin
         if(cnt_2 == N/2+1) begin
             out_clk2 <= ~out_clk2;
             cnt_2 <= 0;
             end
         else
             cnt_2 <= cnt_2+1;
         end
     else if(cnt_2 == N/2) begin
            out_clk2 <= ~out_clk2;
            cnt_2 <= 0;
         end
     else
         cnt_2 <= cnt_2+1;
     end
 end

 assign out_clk = out_clk1 | out_clk2;

 endmodule








 

如果是奇数分频器的占空比不是50%。则可以用三段式来写。以七分频器为例

  • 11
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

原月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值