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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    如何写时钟模块才比较规范合理,大侠给个标准模板吧& x& c( r! {; }% j$ R$ H

    % ~* Q8 v& D1 p! y: f) B`timescale 10ns / 1ns0 M. k7 A; C# R1 R
    module clktest(
    , D1 b: m/ V1 R% d+ I; `2 j clk,
    6 j# i- v, ^6 g8 b! q# Q3 a reset,, \# @5 Z$ s4 U, p
    datain,& }' Q* {6 f3 w7 Q' T) s& b9 \! r
    dataout);5 L, D4 K3 J; {, d) H$ `  \# V
    input clk; 4 C7 B: j; T! {4 I5 n
    input reset;
    + B1 J' t* x: C; u input [3:0]datain;. E# M. }" b; L' L+ p
    output[3:0]dataout;
    - o2 i% @' g, l) | wire clk;
    8 f4 H4 z  a) }8 e# z  b' b wire reset;
    * E5 h4 U, X1 P& ^ wire clkout1;
    % f1 {5 y4 D# Q8 _ wire clkout2;
    / m6 F: q0 f, K: m7 } wire clkout11;4 x. H1 A' r- u9 i+ I* A+ l4 n3 U& L
    wire clkout22;
    9 Z0 S  R  k' ~0 Wclkgen clkgen(clk,reset,clkout1,clkout2);
    0 r9 q7 ]( B1 i. S: E4 E- ddatain_dataout datain_dataout(clkout1,clkout2,reset,datain,dataout);
    1 R, A- P+ z! |# t8 d, Nendmodule
      _7 Y. Y0 o0 p3 ~) v# w9 d9 e8 g/////////////////////////////////////////////////////////////////
    " T! ?  I1 _  D4 s' ?module clkgen(clk,reset,clkout1,clkout2);
    : T' K( m5 j; B; ^; w input clk;& I: R$ C0 L" i) n. c  \) [
    input reset;% c% K  A2 K! Y" y
    output clkout1;
    " m, H2 U, F. e% }! d( t5 g output clkout2;  ( h$ Z7 _- a) k1 c& [9 @) {+ X
    reg [3:0]cnt;# B/ h$ e$ z* M6 J- ]* X
    reg clkout11;! `9 s) ^# i0 g
    reg clkout22;
    9 P1 v  `3 e2 f+ p/ V  |% I assign clkout1=!clkout11;
    / Z$ j7 I: \7 A- D assign clkout2=!clkout22;
    ) o3 ~5 ?$ H4 Y 8 f( p& Y& J' d4 R# g, _
    always @(posedge clk)begin
    2 ~2 @$ L' k0 H  h  S4 `   if(!reset)
    ! x; X5 n/ H% W* D5 B    cnt<=0;
    - D/ G' `. i0 i/ W* X   else- d  @# v& h8 V$ s+ s- E6 g, ^
        cnt<=cnt+1;
    6 a: O. p' m* r4 z, b  end
    4 z- i+ M  j7 Q! f always @(posedge clk)
    * R' B: B( e; K/ V+ N" Q  begin  
    ; [( L# g; \$ [) U$ n6 e   clkout11=~cnt[2];, O  K, Q9 I& v# l
       clkout22=~cnt[3];
    - X+ S& Z/ P# F7 T" [; t   end
    ' O- s; o' _" J6 a  O' ~. \  F8 Oendmodule0 |& \( A1 k2 G+ s
    ////////////////////////////////////////////////////////  X  E$ Y7 u) m% I3 h
    module datain_dataout(clkout1,clkout2,reset,datain,dataout);% P' J* S; S% q& U  I/ I
    input clkout1;- u% m' Q! r* y
    input clkout2;# X% u3 t6 h. N2 c1 t
    input reset;2 p# Y# X3 |' }3 \
    input [3:0]datain;/ `. l! d' y* k5 V8 t) K- q+ }
    output [3:0]dataout;
    : v7 f) K6 e. Z) {: a" Y. S reg [3:0]datatemp;
    . I" R* h- Z: o2 V' d/ H reg [3:0]dataout; ; c% c2 ?# e% w$ B+ ?
    reg [3:0]cntt;
    & j) T" @4 I1 U/ d4 R always @(posedge clkout2)begin 6 x* ]# X# \' e- O$ P( D3 {
       if(!reset)
    ( t  @) [5 n! W& V    cntt<=0;
    4 G$ D5 Q% ~. _" E; r   else
    2 i, a6 u% w1 o; ^. ]! M    cntt<=cntt+1;  ~. Q2 d2 d( D! V
      end
    6 l. W! A  E) e. m; B7 Y 4 y, N1 t+ `: W" W
    always @(posedge clkout1)begin - i# l' a' S9 N. p' N; P
       if(!reset)
    6 s$ w+ A; G1 @    datatemp<=0;
    1 I4 v7 a  \0 S* L   else! x. J; B8 S5 t# n+ B  n
        datatemp<=datain;
    ) X4 b1 r. D9 D+ q  end& ~. V0 G/ n+ K  |! o
    always @(posedge clkout1)begin 3 P  y2 ^% Y# B: E
       if(!reset)
    $ q  M4 R* o6 K- V7 w9 n- h1 F    dataout<=0;- z# `* ]. ?, k% m  }4 }
       else
    & S8 w1 v% _! I5 ~    dataout<=datatemp;
    , f9 F1 s) R" h' l7 b% g6 w( X  end
    8 L$ j, b: W4 V   d" v$ S8 ~: n
    endmodule3 G# f- I+ `6 n) y" x( d5 O
    ////////////////////////////////////////////////# ]; _+ m# `% H) f1 ~  P
    提示下面的警告:
    ( ^) f: U6 U3 Z$ R1 [clkgen.v(14): clock signal should not be driven (gated) by inverted logic (clock: "clkout1" (datain_dataout.v(28)); inverted logic output: "clkout1")
    ; F" Q% e) ^1 {" K) I' j7 v) h& _
    " i# `0 |5 N( M
    ) E$ x5 w. }1 I( 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")0 B# \0 o) Z$ i
    1 ]* H* a1 T: m1 j+ A
    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 15:08 , Processed in 0.140625 second(s), 25 queries , Gzip On.

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

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

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