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

如何写时钟模块才比较规范合理,大侠给个标准模板吧

[复制链接]
  • TA的每日心情
    擦汗
    2020-1-14 15:59
  • 签到天数: 1 天

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    如何写时钟模块才比较规范合理,大侠给个标准模板吧+ U' @- l: S! k5 d

    2 D" x, Y2 M  X  D4 Z# f`timescale 10ns / 1ns
    : s) v  L# l0 j2 {: wmodule clktest(
      a7 W1 o, a+ t+ f) W clk,& [1 H$ P; _  D: s2 V3 k
    reset,  w- U' z3 Y1 y  Z9 D# |! O5 U4 j
    datain,
    # p0 ^) O6 J, M7 T! u" | dataout);7 S4 Y! S( e& X) C$ E# \# Q4 t
    input clk; + |% H, b7 ~& }/ w5 A; C' ^5 j
    input reset;9 a# w% r" s, O3 L$ k
    input [3:0]datain;, M+ n& J" M' R6 e
    output[3:0]dataout;
    / {- T' \& v5 M- j. ]3 @2 _/ T: r wire clk;
    4 r% g( X" @& a# y5 h8 Y9 d- G0 o3 ] wire reset;
    , H3 }. E) v! o wire clkout1;
    " K$ s6 z1 i) Z. H( C! S wire clkout2;
    + y+ p2 |! W; d+ \( t1 p% d wire clkout11;
    5 b8 \4 q6 W$ X% f/ D& b% L wire clkout22;) w5 L. l0 r) J; k+ y8 }
    clkgen clkgen(clk,reset,clkout1,clkout2);
    ) j9 Q. H( j2 q' h8 ~6 _$ Hdatain_dataout datain_dataout(clkout1,clkout2,reset,datain,dataout);
    & F: t: q2 `& ?% o& x# M, Pendmodule
    , r5 b. }) {0 K; J9 e/////////////////////////////////////////////////////////////////
    + W' F% {/ h7 u' [' ]module clkgen(clk,reset,clkout1,clkout2);
    ! x$ w3 e. P2 ~7 C+ H; F7 c input clk;3 K! ^0 {' x: W$ ~
    input reset;
    " ?9 P' U$ r. s. X3 o+ n1 o7 n output clkout1;
    " C+ @$ w4 P4 p4 b3 x7 s output clkout2;  $ M# ~0 s& T! e& s  s& e- {
    reg [3:0]cnt;
    ) D3 C7 F1 ~: u& ?  E' q7 _2 }% L reg clkout11;
    # }+ A4 d2 \  k$ P" n% P reg clkout22;3 {# F( u1 a  u1 W: d
    assign clkout1=!clkout11;
    ) D# v# n# y" Q assign clkout2=!clkout22;$ P( G# j' f; I9 y

    5 H, B8 Q7 g8 d; G( |5 w, r always @(posedge clk)begin
    8 [9 U8 ~! D, I! d2 n7 \% n   if(!reset)  z4 h! T: S6 Y
        cnt<=0;/ w* X( s: g& I; K9 G5 }
       else- x( q% W+ }2 ^5 a, r7 q" F
        cnt<=cnt+1;
    8 x% l: n7 z3 y  end8 u& |9 ~" h( q
    always @(posedge clk)
    ( {* p1 L- [" U! ?  r, y  begin  3 ~) ?5 m$ N7 Q) w
       clkout11=~cnt[2];' V+ m; `, l% t0 T  F; l* F+ U% T
       clkout22=~cnt[3];
    1 ~( O; K9 F, r; X# m# i: F$ i4 B   end# O5 g" Q( N' C! G% |5 w! s
    endmodule  _$ n# k& j! P' z
    ////////////////////////////////////////////////////////
    6 D- |9 F8 h9 t' S) r* ?module datain_dataout(clkout1,clkout2,reset,datain,dataout);/ i; v9 G. ?* V" L4 t
    input clkout1;
    - ^3 \! k% E: B6 ]+ Q) } input clkout2;
    1 c, v0 H5 X- p, K" q input reset;& S8 g2 ?0 |. a2 t! Q- E
    input [3:0]datain;
    & r; l4 F) s7 X& A" Y# M output [3:0]dataout;
    & G' u. Z1 v7 G0 ^6 X% x$ t& ]' x reg [3:0]datatemp; - Z6 ^- n# c" H
    reg [3:0]dataout; 1 X& u2 z- u7 E7 d+ }0 S3 T
    reg [3:0]cntt;
    3 }# P. J, q' q  ~0 U always @(posedge clkout2)begin
    $ Z! d; u% e' }  _' X   if(!reset)+ g- Z4 S; r! h+ g
        cntt<=0;
    # w1 F8 I/ `# B& f   else
    + z$ y) H: V7 n3 w" H& \# v2 q7 ~    cntt<=cntt+1;: [. t% _2 e/ [) Q6 ^5 z, u3 j  C
      end
    : M2 z6 D+ t( n! a+ G 4 f- ]+ h) `$ `' f: \) Q5 A
    always @(posedge clkout1)begin ) ^- D" X/ A# u
       if(!reset)# F3 D# W4 k' o4 Q0 j
        datatemp<=0;3 O& O9 h6 ~& |) x6 J
       else
    $ j. o2 h: r& K9 t7 {4 o& A    datatemp<=datain;
      J6 t% ~% x7 e) f  end0 z/ D- V* O. @# a* v' Z8 ]
    always @(posedge clkout1)begin
    2 P8 Q$ q0 q* X: s4 b+ n# k   if(!reset)
    * o( M0 B' k- R0 b9 |1 F    dataout<=0;
    * z/ t9 F- m, C   else
    0 c  G  h0 z( Y) N. E3 _3 w    dataout<=datatemp; / V: F$ n# I2 y( J- w! D
      end+ c) Y. Q# D( f% y

    $ W4 p7 i2 b* Z, {: iendmodule
    : B% R) I* B# t" V/ P  l8 N; m4 ~////////////////////////////////////////////////
    / t& P0 b; D" j  t提示下面的警告:+ G9 J: U3 A0 _$ o' E) x" k
    clkgen.v(14): clock signal should not be driven (gated) by inverted logic (clock: "clkout1" (datain_dataout.v(28)); inverted logic output: "clkout1")
    # N. i5 i# \3 I; [" v7 }
    7 E0 i- Y" k4 I7 a" D# R) B  S. q/ F1 P2 Q
    clkgen.v(14): clock signal should not be driven by logic which is not in clock_gen module (clock: "clkout1" (datain_dataout.v(22)); driving logic output: "clkout1")- _) P) w( U8 m$ B1 v: ]
    5 C* ]' d) {" U: f/ f& e7 L4 c6 L
    clkgen.v(25): BLOCKING assignment should not be used in an edge triggered block
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-10-11 06:34 , Processed in 0.140625 second(s), 24 queries , Gzip On.

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

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

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