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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    如何写时钟模块才比较规范合理,大侠给个标准模板吧3 L4 F/ r" O- b1 z6 Z( e. R# ~

    . G) M# D' o& o/ ~`timescale 10ns / 1ns5 h" [1 }  \6 b1 k; S6 m. N
    module clktest(
    9 B9 B) i% S! a% s clk,  r8 k. a5 h4 V7 q
    reset,
    9 ?2 o$ j1 D' s/ K) H2 O datain,9 U  q* ]* _' |2 c6 P
    dataout);
    3 O0 Y/ \! }5 G0 V input clk; ; j8 z; e, M7 |* m4 [  m- x
    input reset;
    8 \3 g, ~" P' i2 z* E input [3:0]datain;! [; s- @1 w7 B" q& w' [: V
    output[3:0]dataout;0 L$ }8 P* |3 l
    wire clk;
    0 K" b3 r8 `& R/ R6 w4 ?( l wire reset;3 z6 ]$ p0 C0 T. U1 T( [
    wire clkout1;- I: G* S0 E. H$ @5 F
    wire clkout2;
    . B2 R5 a4 H$ A2 ^6 \" S- Z wire clkout11;
    3 I- @7 a& i9 v0 b3 V' [  A wire clkout22;$ {( Y( ?8 s- b$ u
    clkgen clkgen(clk,reset,clkout1,clkout2); ( r) b% Y3 C- e" s' w0 k" N0 U
    datain_dataout datain_dataout(clkout1,clkout2,reset,datain,dataout);5 R+ W& Z9 e! t$ `) K% z
    endmodule6 ]0 e1 N6 @& n  x7 B, A
    /////////////////////////////////////////////////////////////////- H4 T: Y4 r# F. p; G9 ?
    module clkgen(clk,reset,clkout1,clkout2);1 G0 v; w9 }/ U! U9 I
    input clk;
    $ c1 r) Z8 z4 v0 g5 b input reset;
    " z7 A% h1 q0 {  | output clkout1;
    0 q" b4 R+ g, o8 S4 W5 j$ V output clkout2;  
    $ F% N: B( Y$ r# e. E. ^ reg [3:0]cnt;: Z' q& @1 H; J: X
    reg clkout11;
    # r! e! g8 V9 _  M% {% } reg clkout22;
    # B$ M7 @; c+ w- d2 i assign clkout1=!clkout11;# C( Q* m  p6 w- @0 k' U% a2 e, C3 z
    assign clkout2=!clkout22;
    0 e' i5 g9 \0 \% v2 t
    " _9 m& Q7 \2 X& t2 K always @(posedge clk)begin
    % ^; A' w# I$ ]* W4 _. C   if(!reset)
    8 {0 @+ O$ V+ }! Y- m( u  Y    cnt<=0;7 d5 |% \) k, t' q& o! q" ?5 b) H
       else
    - a0 v" ^5 k% e0 k3 [    cnt<=cnt+1;
    & g9 w3 |% \2 F* C* z  end$ s- v. d; i0 x
    always @(posedge clk) 6 J) i8 V8 V7 c2 U) R
      begin  
    ) t  R* p) ^4 c, E' X   clkout11=~cnt[2];2 _( H0 |5 K" s+ J$ e7 v
       clkout22=~cnt[3];
    8 @9 E7 @6 n& p, Q/ H: D$ O; O   end% c/ G: M1 b. k: N9 \9 `
    endmodule- G8 p# u6 L( P& I: ~
    ////////////////////////////////////////////////////////
    $ v9 a, n- }) E: f3 O9 Umodule datain_dataout(clkout1,clkout2,reset,datain,dataout);
    - z' b* b3 @3 k# |6 V5 w; i. ~ input clkout1;% z& b! T7 s% W1 d' L/ v
    input clkout2;. y+ V4 ]) s* C
    input reset;5 v: N( O* g; w  h7 m" Y% M5 G- E
    input [3:0]datain;* ?* L; U, \$ I& D2 W" a/ h$ z; d
    output [3:0]dataout;( s4 a0 Y8 l+ v6 r* V, k
    reg [3:0]datatemp;
    8 H7 v" K. [! i. U9 ~: Q reg [3:0]dataout;
    & f& g2 x4 L5 F- |. F reg [3:0]cntt;
    : H: h. |$ g9 ~4 A1 f3 H always @(posedge clkout2)begin
    7 `1 j& \& c; K0 ^( s( i8 C  _- U   if(!reset)
    2 \$ x: [/ ^- H- j% V0 v    cntt<=0;
    & Z+ a. m5 l8 K8 \   else; f5 s/ P. k; o5 e  }3 p$ L' v
        cntt<=cntt+1;+ ^6 W" s: o8 P2 ^2 w5 A; [2 X( {
      end
    . a( x# Q! E- x6 C% X
    ! n8 w* ?  {0 `5 P, q- F# _ always @(posedge clkout1)begin 6 c; N+ R) Q5 }: a6 j
       if(!reset)
    + N' t% L6 ?  \: V# Z4 }2 G    datatemp<=0;- D7 y+ Q8 W2 z& @& q" X, e: z- {
       else% t4 v& T$ v1 t4 ]0 f4 K4 b& b
        datatemp<=datain;
    # k9 u2 U3 r' j/ k  \% e  end- y: x- G  r6 J1 A
    always @(posedge clkout1)begin 8 M( T5 Y1 o5 J* X' h
       if(!reset)
    - M6 J4 I+ E7 r! ]* [- ?    dataout<=0;% r. N* ]) C8 |  b9 z. L; F5 G
       else
    & p% M- @+ p. l3 `    dataout<=datatemp; 9 b7 q0 S+ S5 b2 r+ x& Y
      end7 b) H2 _3 b$ s: l# }+ h9 M% r

    ( ?6 _( r% d4 m0 ~- Q8 c' Kendmodule
    - w0 ~% T! L. ]4 q) z. \6 {+ G* b2 |- P////////////////////////////////////////////////
    . I# f6 w  R6 W" v提示下面的警告:! }& B( l8 J2 c% R2 d7 }( L
    clkgen.v(14): clock signal should not be driven (gated) by inverted logic (clock: "clkout1" (datain_dataout.v(28)); inverted logic output: "clkout1")& p* n" w  K% V

    # g* K1 s+ [/ [) e
    9 W( @9 K) ]) R6 u1 K+ c7 wclkgen.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")
    & _& j* p8 l# J6 `" f3 q
    ! k  U1 ~1 B& ~0 f# v6 E. `' }! oclkgen.v(25): BLOCKING assignment should not be used in an edge triggered block
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-11-22 07:44 , Processed in 0.156250 second(s), 24 queries , Gzip On.

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

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

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