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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    如何写时钟模块才比较规范合理,大侠给个标准模板吧; B5 u0 e6 z; {* q4 `
    6 ?+ g+ h& m/ t, A+ o/ k. y
    `timescale 10ns / 1ns+ S. |# A7 j5 e" H8 C
    module clktest(3 a# o' h  L; S" i  {# W/ |
    clk,
    ) y& A, H$ ]" Q# t$ F$ p- }" d reset,( |( p! Z$ y5 B* V8 \
    datain,
    3 M: [4 F, y" Q, |# x  u$ N dataout);
    5 M4 H' y' Y+ c" T2 ?' ~& m/ m input clk;
    ! O% n; O. i6 r input reset;
    1 W7 [. |0 a: k input [3:0]datain;
    - B, h& _1 G! L3 r5 J output[3:0]dataout;6 c+ a- g7 a% a7 ?
    wire clk;
    6 {0 i+ |% i( c6 z$ B wire reset;
    ) n7 V8 L% X7 s+ g; t( C wire clkout1;2 L- O& \5 L! \  K4 k1 s
    wire clkout2;
    % i/ Q0 h& y/ K7 ` wire clkout11;
    . g3 W4 P! K! y7 _4 M( J wire clkout22;/ ~% G) n9 T  y1 p: i+ s
    clkgen clkgen(clk,reset,clkout1,clkout2);   i' F) h, p* c5 `- L+ ~
    datain_dataout datain_dataout(clkout1,clkout2,reset,datain,dataout);8 F1 W3 s  w& w/ c
    endmodule* a0 w0 L' [' V" ?4 `" w
    /////////////////////////////////////////////////////////////////! w+ a  u+ m1 z
    module clkgen(clk,reset,clkout1,clkout2);
    5 q0 C* ~9 ?+ I& R( s! L input clk;- k) f; i) T6 ?6 P4 O
    input reset;9 h& h9 I, m: w: h# f( @
    output clkout1;/ a! e" p* p+ X4 p5 W' r
    output clkout2;  ( ]+ {, l( I5 G* |
    reg [3:0]cnt;8 d, b+ |% q- y6 ]
    reg clkout11;. Z  y' x6 {" g5 e8 ?/ {# h
    reg clkout22;
    / n/ L- r  b( J$ O# i3 Z  K assign clkout1=!clkout11;: J6 _0 A" L+ ]3 J1 M, N
    assign clkout2=!clkout22;
    6 U. R& M, g0 d# \% g  s! Y! u+ u3 t ; g- }1 ]: V/ f9 ?
    always @(posedge clk)begin + {- J9 u2 \0 p# x, }1 `
       if(!reset)
    3 @% z; w1 \  Z- [0 X    cnt<=0;
      G+ s- a4 P, h9 |9 f/ ~   else
    ) G" |1 I+ N" }1 f) |    cnt<=cnt+1;+ i* Y5 [) T  p' L5 O% E
      end
    ( o7 ?8 v7 n! x8 F" P. I2 ` always @(posedge clk) - X/ ]) ]6 F, ?/ ?) B0 R8 A
      begin  
    5 t% E8 B8 i: |, |  q   clkout11=~cnt[2];
    8 a" d# b6 J- R; y9 }   clkout22=~cnt[3];
    $ h/ I( i8 j6 {) a: K   end
    4 h2 X1 T  E  k& f' Z% @2 \7 {# gendmodule
    ( l( d, G$ k6 D$ _8 t///////////////////////////////////////////////////////// @6 A& T+ y6 h, j, H) S6 s; g% o
    module datain_dataout(clkout1,clkout2,reset,datain,dataout);4 \$ Q0 S3 f6 ^7 ^' E. e) _4 @
    input clkout1;7 A' m% K. [1 V
    input clkout2;
    + @0 X$ X" U; s6 ` input reset;
    ( p8 T5 J9 {2 n5 n+ U input [3:0]datain;7 @" h( x7 z& X- x1 \6 g
    output [3:0]dataout;& t* l& m6 d) K
    reg [3:0]datatemp; , `/ {5 W! d5 x' L
    reg [3:0]dataout;
    ; k* X8 E9 F# F reg [3:0]cntt;
    & z1 n; \* X$ T; r always @(posedge clkout2)begin % @7 F+ f8 y' r; A5 [0 s5 |/ A
       if(!reset)9 h% x( v0 E2 [  f
        cntt<=0;
    ! }' D/ {( p% G& `+ N7 b$ r   else  W2 Z5 W& G! o* l% A5 k8 E
        cntt<=cntt+1;% U1 \- `! p  w* a% g5 f, p
      end
    ! ~4 H2 s7 V% J8 ^& D
    # C1 ~7 r! L) Z' N always @(posedge clkout1)begin
    7 m* _! m; F  i0 i   if(!reset)
    0 v- z6 |: @$ P) f4 q    datatemp<=0;
    7 u1 }4 U" T! I1 I1 W   else
    - ^' [' k* |  f: D3 R/ C    datatemp<=datain;
    5 `  g2 S5 E! x. Z. \4 y9 u  end
    , A7 h3 S: q6 E: | always @(posedge clkout1)begin
    3 M; r% a% M' l8 ?% ^   if(!reset)
    2 s5 N$ G" g6 [1 x5 m% q    dataout<=0;$ `7 f9 T! K9 n- Y& a
       else
    ( U+ Z; C7 u4 ?' p9 a    dataout<=datatemp; $ g0 s* S  b. I" I- v7 o. I
      end
    1 s. R  H1 \& f6 L % p7 p% V, K* I$ X& H1 q9 s( R
    endmodule
    9 J5 \# I" x( y. g) E////////////////////////////////////////////////
    , V" J2 m8 Z, F# ?. p提示下面的警告:9 G5 o2 f  n: B1 L. |5 f! _
    clkgen.v(14): clock signal should not be driven (gated) by inverted logic (clock: "clkout1" (datain_dataout.v(28)); inverted logic output: "clkout1")
    / g: m- q, o% s/ h9 f% s2 }4 A! b. T6 Q3 U' |" N) i, Y

    . T0 f% m, H! Q0 S3 k" Y* q3 d2 Q. lclkgen.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")
    % r$ w) a. \5 `/ `6 {7 f/ O- _. P5 F+ }- l4 Y1 U. _
    clkgen.v(25): BLOCKING assignment should not be used in an edge triggered block
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-10-31 22:18 , Processed in 0.140625 second(s), 25 queries , Gzip On.

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

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

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