FPGA学习——分频

        分频,简单来说就是根据输入时钟,使用计数器计数输入时钟的上升沿个数或者时钟下降沿个数,而后在你想设置分频数的位置进行输出信号的高低电平翻转,以此实现将输入信号的高频率信号转变为低频率输出信号。

        下面介绍分频的两种方式,原理都是一样的,只是代码编写略有不同。

1.常规操作,手动将分频系数除以2

        在此处进行设置分频系数时,可手动除以2,例如设置的分频系数为4,则此处的div直接设置成2即可。

module fenpin(
    clk,    //system clock
    rst,    //reset
    div,    //分频系数
    clk_out //输出时钟
);

input       clk;
input       rst;
input [3:0] div;    //自行设置

output      clk_out;

reg   [3:0] cnt;    //计数器

always @(posedge clk or negedge rst)
  begin
    if(!rst)
      begin
        cnt     <= 4'b1;
        clk_out <= 1'b0;
      end
     else
       begin
         if(cnt==div)    //此处设置时就将分频系数先除以2
           begin
             cnt     <= 4'b1;
             clk_out <= ~clk_out;
           end
         else 
           cnt <= cnt+1'b1;
       end
  end

endmodule

2.在编写程序时,用if() ,else if(),来帮助判断

        此处的div[3:1]可以换成div/2或者div>>1,都是除以2的意思,看个人习惯。

module fenpin(
    clk,    //system clock
    rst,    //reset
    div,    //分频系数
    clk_out //输出时钟
);

input       clk;
input       rst;
input [3:0] div;    //自行设置

output      clk_out;

reg   [3:0] cnt;    //计数器

always @(posedge clk or negedge rst)
  begin
    if(!rst)
      begin
        cnt     <= 4'b1;
        clk_out <= 1'b0;
      end
     else
       begin
         if(cnt==div[3:1])    //相当于除以2    
           begin
             cnt     <= cnt+1'b1;
             clk_out <= 1'b1;
           end
         else if(cnt==div)
           begin
             cnt     <= 1'b1;
             clk_out <= 1'b0;
           end
         else 
           cnt <= cnt+1'b1;
       end
  end

endmodule

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值