找回密码
 注册
关于网站域名变更的通知
查看: 1029|回复: 1
打印 上一主题 下一主题

用Verilog语言实现奇数倍分频电路3分频、5分频、7分频

[复制链接]
  • TA的每日心情
    开心
    2019-11-19 15:19
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2018-11-15 11:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

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

    x
    用Verilog语言实现奇数倍分频电路3分频、5分频、7分频

    / ?7 o0 M: h" R- S" r" R5 D! t2 t5 A% _# C3 T9 L8 [

    0 B$ ~0 E6 |/ h3 T$ w; `/ Q       分频器是FPGA设计中使用频率非常高的基本设计之一,尽管在目前大部分设计中,广泛使用芯片厂家集成的锁相环资源,如赛灵思(Xilinx)的DLL.来进行时钟的分频,倍频以及相移。但是对于时钟要求不高的基本设计,通过语言进行时钟的分频相移仍然非常流行,首先这种方法可以节省芯片内部的锁相环资源,再者,消耗不多的逻辑单元就可以达到对时钟操作的目的。另一方面,通过语言设计进行时钟分频,可以看出设计者对设计语言的理解程度。因此很多招聘单位在招聘时往往要求应聘者写一个分频器(比如奇数分频)以考核应聘人员的设计水平和理解程度。下面讲讲对各种分频系数进行分频的方法:
    $ x9 ]- L9 W0 U5 \# E8 X7 ?! K; b, g( R3 t8 c
           第一,偶数倍分频:偶数倍分频应该是大家都比较熟悉的分频,通过计数器计数是完全可以实现的。如进行N倍偶数分频,那么可以通过由待分频的时钟触发计数器计数,当计数器从0计数到N/2-1时,输出时钟进行翻转,并给计数器一个复位信号,使得下一个时钟从零开始计数。以此循环下去。这种方法可以实现任意的偶数分频。
    & R2 u2 B* ]. {( S3 Q* _& H! c! n" C: t  u. u* e9 f
           第二,奇数倍分频:奇数倍分频常常在论坛上有人问起,实际上,奇数倍分频有两种实现方法:
      F5 X# P% c5 k6 ^. F首先,完全可以通过计数器来实现,如进行三分频,通过待分频时钟上升沿触发计数器进行模三计数,当计数器计数到邻近值进行两次翻转,比如可以在计数器计数到1时,输出时钟进行翻转,计数到2时再次进行翻转。即是在计数值在邻近的1和2进行了两次翻转。这样实现的三分频占空比为1/3或者2/3。* V) r" _1 n% }. {2 [  Q, `
    % I. c+ h- r: S! c/ E1 m
           如果要实现占空比为50%的三分频时钟,可以通过待分频时钟下降沿触发计数,和上升沿同样的方法计数进行三分频,然后下降沿产生的三分频时钟和上升沿产生的时钟进行相或运算,即可得到占空比为50%的三分频时钟。这种方法可以实现任意的奇数分频。归类为一般的方法为:对于实现占空比为50%的N倍奇数分频,首先进行上升沿触发进行模N计数,计数选定到某一个值进行输出时钟翻转,然后经过(N-1)/2再次进行翻转得到一个占空比非50%奇数n分频时钟。再者同时进行下降沿触发的模N计数,到和上升沿触发输出时钟翻转选定值相同值时,进行输出时钟时钟翻转,同样经过(N-1)/2时,输出时钟再次翻转生成占空比非50%的奇数n分频时钟。两个占空比非50%的n分频时钟相或运算,得到占空比为50%的奇数n分频时钟。) G  R- p$ T' _$ I6 ^# x1 p& N
    . z4 b9 X) Y. A4 }# [7 O- B
           另外一种方法:对进行奇数倍n分频时钟,首先进行n/2分频(带小数,即等于(n-1)/2+0.5),然后再进行二分频得到。得到占空比为50%的奇数倍分频。下面讲讲进行小数分频的设计方法1 B& f3 s5 i+ H$ ]

    ) {8 j) Y" O% W( ?       第三,小数分频:首先讲讲如何进行n+0.5分频,这种分频需要对输入时钟进行操作。基本的设计思想:对于进行n+0.5分频,首先进行模n的计数,在计数到n-1时,输出时钟赋为‘1’,回到计数0时,又赋为0,因此,可以知道,当计数值为n-1时,输出时钟才为1,因此,只要保持计数值n-1为半个输入时钟周期,即实现了n+0.5分频时钟,因此保持n-1为半个时钟周期即是一个难点。从中可以发现,因为计数器是通过时钟上升沿计数,因此可以在计数为n-1时对计数触发时钟进行翻转,那么时钟的下降沿变成了上升沿。即在计数值为n-1期间的时钟下降沿变成了上升沿,则计数值n-1只保持了半个时钟周期,由于时钟翻转下降沿变成上升沿,因此计数值变为0。因此,每产生一个n+0.5分频时钟的周期,触发时钟都是要翻转一次.
    7 x7 R; U: S: w& b  E3 X* Z) G9 d7 d5 o& U- S" C9 l0 a
    举例:用Verilog语言写的三分频电路* ~# v2 _, d6 O, S: V+ A1 H
    方法一:
    8 f! Q6 B) C& H- t& z9 o! b* _8 G//上升沿触发的分频设计
    . y1 N- Y, K$ Z) Q3 Q* Emodule three(clkin, clkout);
    * Q. Q" r' A$ [7 K# b+ v' linput clkin;//定义输入端口  g- j) q- w2 _8 `4 G1 t$ e
    output clkout;//定义输出端?
    / c* N! Y4 h) P% Y4 Breg [1:0] step1, step;
    6 w7 K) T5 v- {: Z: _& y- malways @(posedge clkin)" z/ H, |4 {$ x) {
    begin
    # f6 i8 L( h) j  W9 \# f$ i6 z- j9 pcase (step)
    : y: ^: X+ v1 P2 X: G9 S3 L2'b00: step<=2'b01;
    " k+ |0 _6 Z$ g- `) O9 J. |1 k; Y2'b01: step<=2'b10;4 d( o; M. v' b+ B5 Q7 m
    2'b10: step<=2'b00;
    1 [/ M2 @$ G+ A( Udefault :step<=2'b00;( C# s# n' B1 N7 ], I
    endcase' W3 U: R" x$ d; T
    end
    " E' i" ]: G+ O4 B- d9 ^always @(negedge clkin)7 C* t- Y# X! b( a5 h8 w4 Z
    begin: a; i+ e, A& _: j/ N, z
    case (step1)
    . [% O- i: f& s9 Z( U% `) j2'b00: step1<=2'b01;/ A. R, o- D' b* m
    2'b01: step1<=2'b10;
    - y. N- H, B. a% ~: K( g$ J2'b10: step1<=2'b00;
    8 w6 u3 ?; N9 |0 W8 Tdefault :step1<=2'b00;' F/ G" P4 {. w) Y6 r1 Z# S5 f( o
    endcase
    . j. `- F  t" gend, a+ e/ t3 E2 y3 x. ?) c
    assign clkout=~(step[1]|step1[1]);7 |8 v  F. \; ~3 u8 C" x2 |5 b
    endmodule
    9 [  h  B# Q1 j6 ]$ A7 W0 K" s方法二:
    $ n4 b1 Y) k' W1 l8 D( S// 如果duty cycle =50%, 可以第一个周期
    5 ]3 U: r) B4 `第二个周期输出原先clock,第三个周期输出低
      P, r6 N  P$ b% ~% A) s) b这样可以实现三分频,0 S( c; o' l9 F6 a- g
    输出是占空比1:1的三分频.module three(clk,throut) ;' u- ?2 ^' P9 s
    input clk ;# G" n5 [% \7 N
    output throut;
    " k+ h2 R$ D( ]) y% Y5 Mreg q1,q2,d,throut;
    ! D! t7 i3 ^& _* n. D. {always @(posedge clk)) m; X) s0 H7 ]3 h7 w* |
    if(!d)
    0 W, n( B7 p  k$ w+ P6 Hq1=1'b1;  |- h$ t0 {" P" u% z: \
    else3 ?1 y, l# t) \* F
    q1=~q1 ;
    5 o6 s4 [9 |% I+ Z' Ualways @(negedge clk)
    7 T; ], W. n3 p' [9 gif(!d)
      r/ r% B+ d0 j% n; ]) g  N5 o% lq2=1'b1;; F+ ?9 H6 X% l7 A# Q
    else- T( v9 H# y' Q
    q2=~q2 ;
    # s# H6 ?, Y; ^* galways @(q1 or q2)
    . u3 }# }$ q; y* L- c- K+ i* ld=q1&q2 ;
    $ O% D- b2 K8 K. I* _' Ualways @(posedge d)
    ; H  @  r0 x! N0 o0 S6 ^3 {2 V  Fthrout=~throut;
    , T6 F! r" F6 O9 i1 w9 y' ?# \endmodule
    1 X1 A2 G5 u0 b: |/ l用Verilog语言写五分频电路,占空比为50%:module div_5 ( clkin,rst,clkout );; j2 _6 S( l! S( U  u# B6 y3 v
    input clkin,rst;% v& l9 O" Z1 }
    output clkout;; Q; h3 Y5 c# \* x
    reg [2:0] step1, step2;+ _, w3 d& Q/ g. s
    always @(posedge clkin )- d/ A. O- F+ F6 ]# P2 e0 k: M- s2 ^
    if(!rst)2 o% }6 C( U8 x' ?6 C5 i
    step1<=3'b000;
    3 O: h9 y; _: w, I5 Qelse
    4 Z- D& l, d# rbegin" ~! J4 g- F5 U4 V6 o
    case (step1). l! [: `. Y0 {
    3'b000: step1<=3'b001;
    6 e0 g2 S; s" O0 x3'b001: step1<=3'b011;
    8 u, g/ U! a8 S( p: B1 q3'b011: step1<=3'b100;8 t4 w) ]: V& d* I6 y7 j; i
    3'b100: step1<=3'b010;  I( b9 f$ w5 r' `: C
    3'b010: step1<=3'b000;
    , v% i9 j) }5 G+ J  G1 l8 Bdefault:step1<=3'b000;2 T: o$ ~4 H8 R4 _: D9 R( `, y+ x
    endcase" `' d6 a, C" T4 f  Q, M. M% S
    end. h8 |/ W) o/ L/ b7 u
    always @(negedge clkin )
    ' g2 @3 J, l' gif(!rst)/ ]; r. f( ]8 r  C
    step2<=3'b000;( P. `% R# R! o" O
    else
    ( d# R+ N1 Q; c) abegincase (step2)/ z/ m# |3 q6 b! \3 E# A+ L/ \* U
    3'b000: step2<=3'b001;9 F' F. A( u, U3 w
    3'b001: step2<=3'b011;4 l. r& U9 |8 A0 [1 V
    3'b011: step2<=3'b100;: h! r' l: {' E4 @3 w, q
    3'b100: step2<=3'b010;* `2 Q8 ?5 l8 p: l! {* a- u! N
    3'b010: step2<=3'b000;+ y( i3 _5 u0 X, F* C$ V
    default:step2<=3'b000;* z2 o1 E) u3 S2 A' \
    endcase$ r- P0 w  \3 H# q  K- [
    end' X: {+ p, H+ a0 h
    assign clkout=step1[0]|step2[0];: y0 n1 F# z% @: r; ?9 |
    endmodule1 o/ B/ m! C, t( ^' e
    7 L1 h6 ^+ E- s7 A6 O
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-7-23 12:10 , Processed in 0.125000 second(s), 24 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表