在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2665|回复: 2

[求助] 求高倍率分频的设计思路

[复制链接]
发表于 2012-11-7 22:15:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
最近找工作,笔试时碰到了个奇怪的问题,原题意思如下

设计一个2的128次方分频器,占空比25%,要求用到pipeline   
PS:不是128分频,而是2exp(128)分频

我直接傻掉了,各位大侠可有好的方案,麻烦给个思路或者直接给出verilog吧,万分感激!虽然那次应聘黄掉了,我还是想知道答案,好奇害死猫啊 。
发表于 2012-11-7 23:49:11 | 显示全部楼层
回复 1# zzj0329



  1. module div_2e128(clk,
  2.                  rst_n,
  3.                  clk_div2e128
  4.                  );
  5. input clk;
  6. input rst_n;
  7. output clk_div2e128;

  8. //wire cnt_en0,cnt_en1,cnt_en2,cnt_en3,cnt_en4,cnt_en5,cnt_en6,cnt_en7;
  9. wire cnt_en0;
  10. wire cnt_tick0,cnt_tick1,cnt_tick2,cnt_tick3,cnt_tick4,cnt_tick5,cnt_tick6;

  11. reg clk_div2e128;
  12. reg [2:0] cnt;
  13. assign cnt_en0=1'b1;
  14. //2^8分频
  15. u0 div256(.clk          (clk),
  16.           .rst_n        (rst_n),
  17.           .cnt_en       (cnt_en0),
  18.           .cnt_tick     (cnt_tick0)
  19.          );
  20. //2^8分频
  21. u1 div256(.clk          (clk),
  22.           .rst_n        (rst_n),
  23.           .cnt_en       (cnt_tick0),
  24.           .cnt_tick     (cnt_tick1)
  25.          );
  26. //2^4分频
  27. always @(posedge clk,negedge rst_n)
  28.    if(!rst_n)
  29.       cnt <= 3'd0;
  30.    else if(cnt_tick1)
  31.       cnt <= cnt+1'b1;

  32. always @(posedge clk,negedge rst_n)
  33.    if(!rst_n)
  34.       clk_div2e128 <= 1'b0;
  35.    else if(((cnt==3'd2)||(cnt==3'd0))&&cnt_tick1)
  36.       clk_div2e128 <= ~clk_div2e128;
  37.       
  38. endmodule



  39. module div256(clk,
  40.               rst_n,
  41.               cnt_en,
  42.               cnt_tick
  43.               );
  44. input clk;
  45. input rst_n;
  46. input cnt_en;
  47. output cnt_tick;

  48. reg cnt_tick;
  49. reg [7:0] cnt;
  50. always @(posedge clk,negedge rst_n)
  51.    if(!rst_n)
  52.       cnt <= 8'd0;
  53.    else if(cnt_en)
  54.       cnt <= cnt+1'b1;
  55.       
  56. always @(posedge clk,negedge rst_n)
  57.    if(!rst_n)
  58.       cnt_tick <= 1'b0;
  59.    else if((cnt==255)&&cnt_en)
  60.       cnt_tick <= 1'b1;
  61.    else
  62.       cnt_tick <= 1'b0;

  63. endmodule      


复制代码
div_2e128实现了一个(2^8)*(2^8)*(2^4)=2^20的分频,占空比为25%
    你可以用类似的方式实现一个2^128的分频....
    基本思想是使用时钟使能的方式来实现,通过多个时钟使能分频的流水线叠加,最后采用分频后得到的时钟使能信号进行占空比的分配以及最后一级的分频。
    太晚了,就没写注释了,有什么疑问再交流哈
 楼主| 发表于 2012-11-8 13:45:45 | 显示全部楼层
非常感谢,已经弄明白了整个思路
按你上诉所说的,用15个256分频的级联(前级的输出为后级的使能输入),再最后接一个2^8分频的1/4占空比的分频器,同样使能端接前级的输出,这样就能得到(2^8)^15*(2^8)=2exp(8*16)=2^128的分频器了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-14 22:19 , Processed in 0.047758 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表