微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 关于输入输出均为50%占空比的任意整数分频实现

关于输入输出均为50%占空比的任意整数分频实现

时间:10-02 整理:3721RD 点击:
这是一个可综合的任意整数分频器,占空比均可调,本代码为升级版Duty=50%

  1. module Divclk(clk,tg_clk,rst);
  2. input clk,rst;
  3. output tg_clk;

  4. reg[23:0]counter;
  5. reg temp_tgp,temp_tgn;

  6. parameter countN=27000000/3200000;        //N=clkin/clkout 此处小数点是无意义的

  7. always@(posedge clk or posedge rst)     //频率近似,小数分频将在后面帖子讨论
  8. begin
  9.         if(rst)
  10.         counter<=24'b0;
  11.         else if(counter>(countN-2))
  12.         counter<=24'b0;
  13.         else
  14.         counter<=counter+1'b1;
  15. end

  16. always@(*)                                        //Duty 任意调整begin
  17.         if(countN%2)
  18.                 begin
  19.                 if(counter>(countN-3)/2)//counter odd
  20.                 temp_tgp<=1'b0;
  21.                 else
  22.                 temp_tgp<=1'b1;
  23.                 end
  24.         else
  25.                 begin
  26.                 if(counter>(countN-2)/2)//counter even
  27.                 temp_tgp=1'b0;
  28.                 else
  29.                 temp_tgp=1'b1;
  30.                 end
  31. end

  32. //以下完成Duty=50%调整,非50%占空比可以省略以下代码
  33. always@(negedge clk or posedge rst)
  34. begin
  35.         if(rst)
  36.         temp_tgn<=1'b0;
  37.         else
  38.                 temp_tgn<=temp_tgp;
  39. end

  40. assign tg_clk=(countN%2)?(temp_tgp|temp_tgn):temp_tgp;

  41. endmodule

复制代码



由于输入的时钟不能精确,所以在确定分频数的时候存在取整。countN不是完整四舍五入,但可以
由调试者进行四舍五入中的五入。偶数分频直接在占空比调整就可完成,奇数分频需要一个延迟,
以3分频为例:
首先循环计数3,然后将输出调节占空比为1/3,接着将占空比=1/3信号通过DFF在原时钟负跳沿下延
迟,将此DFF的输入输出进行OR操作就行。

小数分频程序呢?



  

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top