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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    如何写时钟模块才比较规范合理,大侠给个标准模板吧
    , c$ ]; E# {$ f! j; G
    * s, D+ f: d  m/ q`timescale 10ns / 1ns
    8 S: t) }' _( Tmodule clktest(
    ! O9 o8 n9 J. c- d+ M: P clk,  r/ T8 J3 h) K+ O$ ^4 a' N' s
    reset,2 S& S; n: U# _7 W. g  k& |
    datain,) h/ I  R/ ~; E" x
    dataout);
    ) J2 b1 G3 w8 c6 H  x7 m input clk; 0 J, @0 ?+ R7 \; E/ p7 y4 |/ w- E
    input reset;8 h' ^( n1 R- Q. y) ~
    input [3:0]datain;
    5 H" E, E( C, I7 J( W9 I- e output[3:0]dataout;
    . S) h7 B, d& b6 h/ P) S wire clk;
    " [# X/ m6 X# x& v4 ?0 ` wire reset;
    / j. L2 f+ [7 w6 f wire clkout1;
    % c( d+ J& I" H( |8 F/ F* d wire clkout2;
    2 Z8 J& @0 _5 a wire clkout11;7 A% c& d4 b. d: ?* G& `4 }
    wire clkout22;
    ' f: R& r4 C' n" W  f# Y4 T/ F/ Wclkgen clkgen(clk,reset,clkout1,clkout2);
    5 T! G6 c( Y, E& J+ E9 F. vdatain_dataout datain_dataout(clkout1,clkout2,reset,datain,dataout);$ x& R4 G, T' ~8 M
    endmodule
    6 z9 Q  i" K; i& A2 W2 q/ Q0 m5 f/////////////////////////////////////////////////////////////////
    + A' s' Y0 v! y& b5 K" Q+ D7 F% F! emodule clkgen(clk,reset,clkout1,clkout2);
    2 p2 V/ V6 t1 `2 ~2 r input clk;, e: w4 s6 A8 s9 Z
    input reset;
    8 Z5 `/ Y1 r: b: S output clkout1;4 B4 E0 K9 w, h3 M
    output clkout2;  
    # n' J, q' c8 _ reg [3:0]cnt;
      R" ^( J+ Y0 F3 {) q3 K reg clkout11;  A2 f( T; I9 w3 G; d( S9 U6 i
    reg clkout22;& T, c+ Y7 g5 Q
    assign clkout1=!clkout11;
    7 P8 S# q5 J# s7 g: ]1 u9 V$ K assign clkout2=!clkout22;1 y7 C+ Q7 S# _
    % z0 x. p1 o2 |% W' ?8 B% j) ?/ L
    always @(posedge clk)begin $ z$ c) b+ s, W; E
       if(!reset)9 f0 V1 Y+ u5 J' z0 \+ Y, V
        cnt<=0;( a( w# _8 a- B1 H
       else
    * h: u& T' k5 F, r* P/ Q1 y    cnt<=cnt+1;
    % ^3 H" U$ U' J) P4 v3 Y, i  end, C3 Z1 R1 ^& o& I* r  e: E8 I
    always @(posedge clk)
    % Q) j$ e0 k& w6 W  begin  
    ; E2 f: ?/ c3 I. u( V6 h   clkout11=~cnt[2];! R' H3 G1 U$ Y
       clkout22=~cnt[3];! }( s. g! z3 r: O' ?0 h8 f
       end4 f8 W7 E) S5 {  U
    endmodule
    ' T5 P. V+ w/ k* o- d$ W1 M3 n( ~////////////////////////////////////////////////////////
    " G9 O/ x! S: C1 _# p3 o+ ]module datain_dataout(clkout1,clkout2,reset,datain,dataout);
    6 u$ h8 S) S& a1 H, A) o input clkout1;
    . I" \7 M6 d- f5 \% i input clkout2;
    ( g/ H. r, q# d4 V% q. e7 i input reset;" D( w4 r: T& v
    input [3:0]datain;
    1 a0 g" }/ n9 _. ?$ W output [3:0]dataout;/ p) V. l: F; Q
    reg [3:0]datatemp;
    . O: B; b4 j" l8 \1 Z( ?5 _ reg [3:0]dataout;
    ' Q1 q6 T) \6 f: |  k$ F reg [3:0]cntt;
    % k. d- K7 E" m# _! O always @(posedge clkout2)begin
    ( t$ F. ?, B5 w0 l   if(!reset)
    : _# t! R, @* G* |7 F; c9 x2 m/ b" x    cntt<=0;  B6 D* t# G8 S" }# g
       else
    * k7 t5 P7 \0 @% [/ Q    cntt<=cntt+1;
    0 w1 {3 j- M6 u7 V* G  end0 A  v0 C* v! x6 P. w2 y
    % ^, b$ h5 O5 s; `7 X5 n4 }
    always @(posedge clkout1)begin , l1 D% H, a) T: V6 [. X3 [
       if(!reset)0 _4 M3 \2 j1 U' @$ a5 `& T' [7 i
        datatemp<=0;
    8 u! v) y. d2 \. t) k/ ]* y# l% V/ L* C   else
    * e4 O7 @6 o  y! p1 P) \  b    datatemp<=datain;
    , }0 Q6 ?, v4 n* d  f. |  end. g0 [+ b  s( ?" l* z; Q
    always @(posedge clkout1)begin
    , B3 a* r6 o1 d6 ?   if(!reset), A5 c/ Z7 f8 b' C/ @, n$ m# _
        dataout<=0;
    7 p( r4 b' k4 a/ l& t   else
    6 h# W" ~. s) W" Z    dataout<=datatemp;
    " {6 i) h, V+ T% u, ^  end
      x, b% v- W  Y. A$ J/ I   M2 Q: u/ v7 a( C& y1 f" _
    endmodule0 H4 d" s  W- M& _
    ////////////////////////////////////////////////
    , m$ |- k: S; I+ A4 H; ?' N提示下面的警告:
    , q9 A1 N! ~0 gclkgen.v(14): clock signal should not be driven (gated) by inverted logic (clock: "clkout1" (datain_dataout.v(28)); inverted logic output: "clkout1")- U& v) ^: `( }
    ' @# |3 B% o8 x6 K# _* o( o. K
    6 b2 D# N) L( B! k
    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")! z, L5 ^2 N% f: b

    / }8 x3 n- n4 j: x& W6 D& qclkgen.v(25): BLOCKING assignment should not be used in an edge triggered block
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-11-22 05:14 , Processed in 0.140625 second(s), 25 queries , Gzip On.

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

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

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