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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    如何写时钟模块才比较规范合理,大侠给个标准模板吧
    * m' j9 s1 S6 o3 ], l# _$ p' x( H* {6 Q7 R; m
    `timescale 10ns / 1ns
    + [/ N- {( P  }& j. S- fmodule clktest(
    % W! o7 _0 R1 t3 s( D! K clk,9 W6 I9 A0 a* W2 J
    reset,
    . g# J% P* s( |6 M* E+ X datain,
    ; b1 _7 X8 q+ T! j, O6 o$ X dataout);! x3 y! q' m" ]
    input clk; & w& p' T( V" ^0 r' P2 y+ y
    input reset;+ Z; Q  v2 v) j  ~
    input [3:0]datain;
    ( x; s% C4 M& n$ O/ n- S- b output[3:0]dataout;. p2 e$ v& p& G$ j4 F
    wire clk;
    8 d0 J' t" b; \2 b wire reset;* a+ [+ x" X+ O5 C6 D: S+ @" y8 }# P0 F
    wire clkout1;4 ]; z5 |& }4 r8 L8 r
    wire clkout2;
    : Z9 Z* C9 z' ~. N% B wire clkout11;0 c* Z8 F% v8 |
    wire clkout22;7 @2 |* @7 |: [* D' H
    clkgen clkgen(clk,reset,clkout1,clkout2);
    # _! U8 e% {+ b, x" {1 Ddatain_dataout datain_dataout(clkout1,clkout2,reset,datain,dataout);9 j6 J/ H& w; ?7 E
    endmodule( }- \5 \0 F: q% V
    /////////////////////////////////////////////////////////////////5 ]8 s! L4 _2 Y0 u
    module clkgen(clk,reset,clkout1,clkout2);: ~% N% _, i; E# `# n
    input clk;8 i: _4 I3 G7 v; @7 Q3 f4 c2 R
    input reset;
    % _6 \7 g- c6 t7 n, S% @1 `; E output clkout1;
    ' P2 N9 ~4 w3 d7 Z3 L8 ]' M output clkout2;  
    , z( L( t; ?9 }; O  {/ w/ h reg [3:0]cnt;
    8 f( |) [  T/ Y( x) S+ X reg clkout11;/ T3 ]! H% [+ H8 n0 H& M
    reg clkout22;
    7 u- X2 B9 a  V- T assign clkout1=!clkout11;$ E& I$ s* `- I1 c* @. z+ k
    assign clkout2=!clkout22;
    7 O  ^9 ^, Y0 g1 A
    ) k- _) B; u, J* Q/ i always @(posedge clk)begin
    6 r1 w6 t3 G2 Q2 t* W9 I2 Z9 Y% b   if(!reset)
    # A8 h$ y3 ~+ v, H, s; n0 s    cnt<=0;0 h( O$ q7 F- M6 }& ^
       else# I2 g7 W* i0 i  \: ~/ W8 h
        cnt<=cnt+1;9 e% T0 F- W& F) u  e- L. F
      end
      z- P3 W- ^1 w5 |% ]# i always @(posedge clk)
    - Y4 x3 X% b3 [2 G2 ^  begin  4 u: U  B; u6 n* r
       clkout11=~cnt[2];
    $ x4 g, `9 d4 N' f/ ]$ g   clkout22=~cnt[3];
    & j# [  u) ]4 B  P9 S) Y   end
    - m) k+ U( K, X, `& W/ kendmodule
    6 \7 ?- S2 ~* e////////////////////////////////////////////////////////1 |3 M8 F8 F8 M) m! R$ i. d3 z6 l: U9 A
    module datain_dataout(clkout1,clkout2,reset,datain,dataout);, I' E! j; A. ^% ~7 r4 v! z, I* X
    input clkout1;
    ; s) U' D, S6 m2 c9 w- k input clkout2;- D" [, M2 z  @; i) S; L" [
    input reset;( K) J6 a) U3 Q
    input [3:0]datain;$ L2 f! v% k3 o) F1 T/ [% Y3 k
    output [3:0]dataout;
    4 N. \* Y2 O% Q4 d7 B reg [3:0]datatemp; + N: R1 t. m, P" Q, i
    reg [3:0]dataout; 5 c$ ?! S8 c3 u4 d
    reg [3:0]cntt;6 d! ~; Y, j) j, d
    always @(posedge clkout2)begin & H" x3 @' l, X1 S0 w
       if(!reset)
    7 R, U2 S% `5 V) r/ b+ m: _4 @    cntt<=0;
    1 d/ J- I) L; Z   else! i$ d& M1 ?# l) w- s
        cntt<=cntt+1;6 O1 i! L% [/ i& ]0 C- f0 J
      end
    9 \: F/ E, Q/ J ; U# {' s6 [' _7 s/ w2 g+ c
    always @(posedge clkout1)begin
    1 \3 z( X& F  d2 T0 K5 Q- z' t   if(!reset)2 q% q) S/ J4 n: G' B
        datatemp<=0;
    8 J) J+ p1 f& y5 [8 x" K* s   else
    9 h6 K* ], y/ @( Q1 O& ?    datatemp<=datain;
    7 `# S% q, p- J" i! z  end
    ) J8 \( ?- }4 g5 u# T always @(posedge clkout1)begin
    ; Q8 _0 x0 \. j% U  A9 v/ ?   if(!reset)& W) t! W  X, i2 v
        dataout<=0;
    ) U! A! s0 G( ]' |) J: U   else8 y8 |/ G2 x) e8 V  \' M
        dataout<=datatemp;
    $ h1 _+ p6 k2 H6 |  end
    ( |: _2 X) k9 O  B$ j. v. l ( b- ]2 t* s7 C# ?# {7 h$ ?  ~3 Q( T
    endmodule1 |8 y1 R* _6 D. ]. p
    ////////////////////////////////////////////////
    4 l. y# p5 N+ }9 J# u提示下面的警告:# H7 W$ x* ^5 o5 i3 j9 k
    clkgen.v(14): clock signal should not be driven (gated) by inverted logic (clock: "clkout1" (datain_dataout.v(28)); inverted logic output: "clkout1")$ _& I" \# I* R) D' L5 n" S
    8 e5 M( g6 m( t) Q( V6 Y4 ]0 F2 E
    # I/ S6 l" N/ k: ?- [; E
    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")
    & s1 ^+ C6 h  ^8 {# y# A, U" @9 ^) H! P5 G) f  J' w  g# r# J
    clkgen.v(25): BLOCKING assignment should not be used in an edge triggered block
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-11-22 04:49 , Processed in 0.156250 second(s), 25 queries , Gzip On.

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

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

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