找回密码
 注册
查看: 1764|回复: 0
打印 上一主题 下一主题

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    如何写时钟模块才比较规范合理,大侠给个标准模板吧
    # G/ v- F: T' X. ~+ s
    9 ^1 H! Q7 N3 ^: R0 m2 b`timescale 10ns / 1ns
    ) h4 i: T& T, F* g9 ^% ?module clktest(
    : C7 |/ B9 C. S* t clk," b4 M$ g4 y% H
    reset,1 z$ b0 p$ \; V( Z2 v- L
    datain,
    ! m1 \, p7 Z8 V6 A8 T dataout);
    ! b  Z9 \- G& _& F input clk; 6 [" u, ]0 q7 C
    input reset;( m) S+ r8 W& |, o* i% D7 ]1 D+ P
    input [3:0]datain;' J: J. G6 ?& U$ n7 P" O
    output[3:0]dataout;! T* B) k; ~3 O7 _0 a
    wire clk;
    ; F9 W2 w$ F9 l: d# V- Q5 I wire reset;
    $ s7 p, y( t/ Z. @$ x- X# v wire clkout1;& l, s6 T, A! M
    wire clkout2;; R: B8 \. i2 a* a/ o) u
    wire clkout11;
    ' O' z" u9 M7 n; q5 X wire clkout22;
    2 {" e3 B# L) z2 d* B/ Gclkgen clkgen(clk,reset,clkout1,clkout2);
    ' B( ~& C3 S, m* ddatain_dataout datain_dataout(clkout1,clkout2,reset,datain,dataout);
    5 d, R$ b% k, i2 c4 y6 jendmodule, G2 E. b6 ?) U& T0 R
    /////////////////////////////////////////////////////////////////# |7 d+ L7 A7 ?/ M' K8 O1 S+ d: Q5 |
    module clkgen(clk,reset,clkout1,clkout2);+ e4 E$ }) V. |% d& ~' K
    input clk;+ k* b' a# w$ o- p
    input reset;2 R/ F6 x3 m- g' P
    output clkout1;( p5 A$ O0 A. y) w1 s2 J) n
    output clkout2;  
    $ q. F9 e* P4 d4 X- R4 e6 q  B reg [3:0]cnt;8 G+ j+ @4 w, F
    reg clkout11;
    3 H1 a5 q9 ~" z1 \* G' y: _7 ` reg clkout22;5 V- Q( q5 Z) @+ Z6 z
    assign clkout1=!clkout11;
    & s8 p9 c: F! [ assign clkout2=!clkout22;
    ) M/ J$ X# C1 t* J! F. ^9 F
    ! N7 V+ \# w  O  _ always @(posedge clk)begin
    7 _$ u* H- y  H" N3 d8 i/ C/ N   if(!reset)1 k8 _' |, Z) _+ [0 Z7 R# Z' T- ?" m
        cnt<=0;
    , j% T$ s: y! f) A   else  E: k, g. b9 R# Z
        cnt<=cnt+1;* u& d& @4 _; d3 r1 Z( f
      end+ D" q. _$ a& R- b) b! q# n& |) i1 H
    always @(posedge clk) 8 P# q" L% n: N) c' s- {
      begin  
    ' n( O, t# X! d" w) Y   clkout11=~cnt[2];
    4 p! @7 ]# c+ b0 W   clkout22=~cnt[3];* v( P+ X( @- Q
       end2 E7 g  D, v7 @4 z/ K: A
    endmodule( W4 S' s$ ?1 [( F
    ////////////////////////////////////////////////////////! b6 ^2 R" M1 e
    module datain_dataout(clkout1,clkout2,reset,datain,dataout);
      F, Z$ _5 K* D) ], p% o input clkout1;$ V( {- g! y2 m
    input clkout2;) j  j9 V; B$ |. A
    input reset;) \+ S& R# u5 m
    input [3:0]datain;3 m' B, E: t1 B- ?
    output [3:0]dataout;" F  M6 m: p9 l8 I1 T
    reg [3:0]datatemp; 7 k0 K# f, ^# \& B. P- |( l% ]
    reg [3:0]dataout; 7 Q5 D% P8 a+ Q. D* K
    reg [3:0]cntt;5 j1 V' j% b( Z8 q
    always @(posedge clkout2)begin . R, _( H# S; @; @. n
       if(!reset)7 N2 ?3 o/ j! a, \, A# ~0 Q2 f# A
        cntt<=0;
    2 U  j" r2 a9 i# y( N   else$ }. z9 ]% I7 y6 Z  @3 J
        cntt<=cntt+1;* e" o2 ~: f: t' d
      end
    8 y. p% |) D% F* ~; x5 Q ( d- ^$ x& W' Z  \9 D4 @2 B* |
    always @(posedge clkout1)begin
    ) k! b) ], `7 X5 @9 y- u   if(!reset)
    # z6 H' _0 j: M( A5 Q& k4 E    datatemp<=0;$ Z$ J4 C3 J' Z$ q& h/ l8 A
       else) \1 T$ F2 Y, r, E) U
        datatemp<=datain;
    $ Y: Z7 C6 g' {  end
    + X+ e" {4 [# ?9 Y1 A always @(posedge clkout1)begin
    ) J1 s# B0 v) I2 M8 i, k   if(!reset)2 Y0 Q. t3 W6 M1 C8 K( n7 G
        dataout<=0;8 @' k+ y' W6 i/ x& g$ U
       else
    6 u2 F. p! t5 t! R. ]    dataout<=datatemp; 5 U" R2 N1 {5 i2 B  ]3 A( I
      end
    2 M) O8 ]$ g9 v! k# N7 }$ C3 u 7 j8 L9 i* O1 \! w6 ~/ d" B! y
    endmodule. ]+ S. _' M) R. O; S! ?
    ////////////////////////////////////////////////
    / k0 h& D! b% ^+ k# |8 c提示下面的警告:1 ]) m8 V9 _0 Y: @# y. k
    clkgen.v(14): clock signal should not be driven (gated) by inverted logic (clock: "clkout1" (datain_dataout.v(28)); inverted logic output: "clkout1")
    ! h. d, V$ J  z" P/ G) }
    ' n; ~1 a/ O% t
    * D$ P5 q9 F& r* F1 L2 Nclkgen.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) q; f4 h  k

    2 p8 \6 L& l  G" F" E& h# A1 ?clkgen.v(25): BLOCKING assignment should not be used in an edge triggered block
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-5-30 19:45 , Processed in 0.062500 second(s), 24 queries , Gzip On.

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

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

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