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

EDA实验与实践 任意整数分频模块

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-5-28 09:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
EDA实验与实践 任意整数分频模块
; b' i# \$ ]% B" j

$ U  k; f+ S6 G3 u1 y1 K" W' D8 {+ D  O: N( O! D" i6 Z$ n
//*******************************************************//) p( \# z  R) Q: O: Y/ G, u
//                  任意整数分频模块                     //
" o, x5 b$ l, v, Y) ?# X//*******************************************************//
0 c8 k) \0 v: A# X5 X2 @5 P, S//功能:对输入时钟clock进行F_DIV倍分频后输出clk_out。# }& T' H9 `9 i" s% t
//其中F_DIV为分频系数,分频系数范围为1~2^n (n=F_DIV_WIDTH)
9 [4 M& U% r, ^1 B8 V//若要改变分频系数,改变参数F_DIV或F_DIV_WIDTH到相应范围即可。
" }* c* a' z4 ~9 D! r# l//若分频系数为偶数,则输出时钟占空比为50%;8 k# E( B5 N  l4 r" C
//若分频系数为奇数,则输出时钟占空比取决于输入时钟占空比和分
) w( X. o2 d5 B//频系数(当输入为50%时,输出也是50%)。
  b0 e; y! J& B//--------------------------------------------------------
; |: Z5 E! m) L* V//奇数倍分频:三倍分频的时序图如下所示。
8 n3 X6 k( y1 z. s. T! e4 h//               1     2     3     4     5    6' N+ r; _5 Q5 C/ ~
//clock       |--|__|--|__|--|__|--|__|--|__|--|__|
1 [% [4 j% J, d9 j& ?//clk_p_r     |_____|-----------|_____|-----------|
6 d0 w$ H6 n3 M7 J$ A" p//clk_n_r     ---|_____|-----------|_____|---------' R) W& r; U/ L3 J/ T6 G
//clk_out     |________|--------|________|--------|1 s3 i# E& m. ~" w1 ^; @
7 ]8 @3 h3 F& n4 V
module  int_div(clock,clk_out);( F% R% G5 q) b- |

; G. b) i) y+ o//I/O口声明1 W% o9 y: g) p, J
input    clock;                    //输入时钟
, `$ ]% u# s7 L8 T( h  D1 z6 u; N+ ^output    clk_out;                //输出时钟
4 w7 r3 B3 m5 j2 G# r) M5 G
" l6 K: D: d; r4 ~1 p, }//内部寄存器4 n' F  J6 i3 Q( P) X6 J
reg    clk_p_r;                    //上升沿输出时钟
# h8 C+ A8 `) w# i/ ^reg clk_n_r;                    //下降沿输出时钟$ ~8 ~) L: b) b7 [  H
reg[F_DIV_WIDTH - 1:0] count_p;    //上升沿脉冲计数器
' E3 h0 {1 x1 s4 V; t3 k& zreg[F_DIV_WIDTH - 1:0] count_n;    //下降沿脉冲计数器& M, J! s! X2 s6 K) i
) `& u: V: m* O; @! d
//参数--分频系数
" ^( k! I# w+ H  V4 z2 Y( _* Aparameter F_DIV = 48000000;        //分频系数<<<<-----修改这里9 y; z5 ^- B! W" @: Y
parameter F_DIV_WIDTH = 32;     //分频计数器宽度6 ^2 s, a) s2 r$ G, V/ ]  t  O
: n2 ~: j8 H# w- X3 z
wire full_div_p;                //上升沿计数满标志& w2 a# a/ Z" R, x4 a7 x( P
wire half_div_p;                //上升沿计数半满标志, }$ D0 {3 o+ U1 ?: P1 T) ?" B
wire full_div_n;                //下降沿计数满标志0 s) N4 ]/ K+ X6 u
wire half_div_n;                //下降沿计数半满标志
' i+ U) z& F% n! }
  H5 @/ R1 x0 B( L8 |//判断计数标志位置位与否: T& \" x' Q1 d) [  X
assign full_div_p = (count_p < F_DIV - 1);
) R) ^2 `* L+ {1 \4 B  f0 fassign half_div_p = (count_p < (F_DIV>>1) - 1);' g5 E& e! X2 G. w) }$ N
assign full_div_n = (count_n < F_DIV - 1);
* K. Q7 v' E7 w) p+ o2 Passign half_div_n = (count_n < (F_DIV>>1) - 1);5 }, H5 g; _/ r& Q
+ J* f; F9 N6 d- K/ a9 V9 m
//时钟输出
$ O8 e$ w- t1 ]( M# ?# Yassign    clk_out = (F_DIV == 1) ?
3 j! I! Z( M* O' d                clock : (F_DIV[0] ? (clk_p_r & clk_n_r) : clk_p_r);/ k" b% |5 Y0 U5 w2 Z; z

- B$ a. D. a) z( z//上升沿脉冲计数
) _, _5 P, G7 g. p( G; d3 falways @(posedge clock)
' q( f6 K1 x5 o5 {0 h6 q( vbegin
) K. p& R+ j. M  u% r' `    if(full_div_p)
8 A8 Z/ D+ l! s# _3 X, a$ m$ G    begin0 N# o2 g2 l5 H& x9 t- Z2 |5 g) s
        count_p <= count_p + 1'b1;
8 y+ f$ n" J( R# [- G  N) m        if(half_div_p)' h1 k( \& R% j5 A6 B4 i6 \7 g
            clk_p_r <= 1'b0;+ A' |8 g# P( v/ r8 E% r
        else
: F% }. m8 p' h* N' ?            clk_p_r <= 1'b1;
7 {, T! D$ O# L5 o    end
3 s+ c8 K, o; ^    else
; u: ]7 g% ]3 l! B) o& o    begin  p8 _/ N5 N" M5 G) |* J3 O
        count_p <= 0;% K2 n0 Y" L. l4 u: r# |4 b2 s
        clk_p_r <= 1'b0;9 l' y! r0 ~7 G+ m
    end
. X: c7 K: v1 v' o: {: W2 f; Gend
! m7 C. w5 C! M; p
: Q% i0 v( `# H//下降沿脉冲计数: R  Z# O' ^2 ^; q
always @(negedge clock)
+ _  s, h" X( T+ B( ~- Gbegin
2 b/ x" F+ H7 o- k' \7 `    if(full_div_n)
* {+ ~  U5 u. x* h: Q    begin
* a! I* c: m" l" I        count_n <= count_n + 1'b1;
" M1 w) ~* m" A/ Y1 [        if(half_div_n)
/ m# R' p6 v0 K- B' U7 z. B            clk_n_r <= 1'b0;. x) x6 y6 @  e: @
        else
. o8 @1 t# ~, f; L            clk_n_r <= 1'b1;
0 u9 C8 g  a; V! Y  ?8 n+ E    end
( e' I- C* }; Q) k: [1 T$ Z    else
$ r$ w, S4 T) F2 {    begin
8 ?0 O5 E2 s, I( C  C        count_n <= 0;- D3 D2 |: c1 S* U- x- d) J, `5 S
        clk_n_r <= 1'b0;
' Y+ ~6 F7 T; B! k    end
. O2 z/ u1 a! D/ j; ^/ e, oend) a: [5 l/ z2 E% ~

$ R# h% r0 k4 k/ ?. e7 t0 Nendmodule
  T! f; x- q" W) o' O2 C  M+ X
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-9 20:37 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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