我是靠谱客的博主 舒服钢笔,最近开发中收集的这篇文章主要介绍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

最后

以上就是舒服钢笔为你收集整理的FPGA学习——分频的全部内容,希望文章能够帮你解决FPGA学习——分频所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部