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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    如何写时钟模块才比较规范合理,大侠给个标准模板吧" A* a% c0 B2 U8 ^- g7 Y

    9 }5 Z! H+ l& s3 X' T5 |`timescale 10ns / 1ns
    ( t8 I+ @  E3 {% H9 pmodule clktest(
    6 J- t' X; O4 H' A2 i, J clk,
    2 z7 Y/ Z9 x, D8 y# N2 l5 f reset,
    3 Y+ j! d- b0 P; A datain,+ d8 f% x+ w: }$ A; \6 S
    dataout);7 W) v& @. X4 q3 |* p
    input clk;
    & [( u) O, {/ |. u$ Y/ `( t# L3 S input reset;1 e) P, v: x  K2 P' B, V1 s2 h$ \- L
    input [3:0]datain;7 Z# `% e- H, l! Q4 I7 D1 `0 a
    output[3:0]dataout;
    ) e1 G! Q1 M4 ?9 _6 P wire clk;
    / B/ {( a% `( \, y wire reset;
    3 F  W1 J7 K4 O wire clkout1;
    1 I/ _5 |- D9 H6 e: F. g) B  Q7 T0 [5 P wire clkout2;
    $ {: t- v- i3 E/ q6 T wire clkout11;0 u5 u: s2 P, C, \/ y
    wire clkout22;' g4 E' u2 `$ [* Y7 x* [
    clkgen clkgen(clk,reset,clkout1,clkout2);
    2 B3 ~: h! e) W, Q) k2 m0 r: Udatain_dataout datain_dataout(clkout1,clkout2,reset,datain,dataout);* f5 j) R% w3 Z4 a2 Z+ A7 U& n
    endmodule) D3 N2 I; i' r- \+ }0 w5 `
    ////////////////////////////////////////////////////////////////// C4 F1 Z$ y0 {7 T
    module clkgen(clk,reset,clkout1,clkout2);
    : F  Z& T/ ?9 X: q3 j/ r input clk;$ c# d* K" s1 Z' n2 ?0 q0 S
    input reset;* [' `# M( P5 a- k! M9 n$ L
    output clkout1;* f% @: k! O8 R8 l8 x$ b
    output clkout2;  , J& m; F, B" y$ P4 ~
    reg [3:0]cnt;. R* L2 p. i8 o) Y* j: h
    reg clkout11;
    3 Q, |8 p  T& I; }9 X reg clkout22;0 x# s- n, ~  U$ }
    assign clkout1=!clkout11;
    + q  M' X* \0 F2 o8 ] assign clkout2=!clkout22;! F7 e7 |# i% G1 b, }9 z

    ) P8 M$ u! Q- @ always @(posedge clk)begin ; M2 T) W3 F( \3 z1 J6 _
       if(!reset); o0 U# Y" W% Y& x
        cnt<=0;( j$ `% g' L* B, C" j
       else0 N4 i/ N( j9 ]
        cnt<=cnt+1;
    ' q: g4 [5 S/ ?9 X% O: j) h  N  end) V+ L" s5 \/ d2 I: d4 d
    always @(posedge clk) 0 |# y8 r9 s9 W4 S, [
      begin  
    + ]" T4 |0 n3 n/ F3 U   clkout11=~cnt[2];" t+ q- G7 a/ F- W/ R8 k! v6 a# O. Q
       clkout22=~cnt[3];* S4 T# T8 Z- ]: N( y
       end! F) A  [" v1 a' \/ G* `
    endmodule
    6 u( G% v, b: |////////////////////////////////////////////////////////1 m  }& _9 T" L% B0 S5 M$ n. x4 x  t
    module datain_dataout(clkout1,clkout2,reset,datain,dataout);
    % M& h6 J2 r) v input clkout1;; H0 J2 X2 @$ ?& e
    input clkout2;/ O7 Z, L, I5 X. ]; ]- A0 _
    input reset;
    6 K$ S- `& o- f+ X8 Z( i8 @ input [3:0]datain;
    " i5 f; M- v( A( c4 \2 A% ]* i output [3:0]dataout;  C* s9 i# v, c0 ]
    reg [3:0]datatemp;
    4 q9 D, f; u$ R7 f0 M9 U reg [3:0]dataout;
    ; C8 K# Y( f4 A. H4 S reg [3:0]cntt;
    ( w% o+ o$ r5 l  x# a always @(posedge clkout2)begin
    4 r! u' ~2 ?: l, R2 ]; `   if(!reset)2 {1 p2 [% t- p/ [
        cntt<=0;  k# x' e) D& L' {
       else
    1 J+ G" P, V1 q( B! U    cntt<=cntt+1;
    : I" D3 R0 v4 }5 ^+ p, h& X  end
    4 l0 F! m5 h( y1 c, H& G$ l ! h$ y2 y* f5 E
    always @(posedge clkout1)begin
    , d8 Z" \8 e; {/ J3 J8 B   if(!reset)
    " [/ _& L; W7 V. `    datatemp<=0;
    ' I. u( Q7 n  c( i$ a7 A   else. V% g2 _4 I- b8 s7 R
        datatemp<=datain; 3 k) K  ?$ b' f3 R
      end
    7 E! m' S  b2 `: k1 P always @(posedge clkout1)begin , J$ N/ G! y) Y* j4 B* z; }2 `/ V
       if(!reset)
    9 ?* T" V- ?) b, S    dataout<=0;; R( j7 q" U( G  X6 U
       else
    + C8 [* z9 `1 A& ?    dataout<=datatemp;
    ( H5 P3 A, V6 C0 r& J  _. w, `# t  end+ @3 h# o) [' }+ L: ?! h
    # V& o* X' Q7 s4 y# |
    endmodule
    % Z7 B: ^! a$ s7 c# o% H////////////////////////////////////////////////
    8 {. C" J* h5 u1 e提示下面的警告:
    ! I* Y, b4 ^( s$ j8 ]. fclkgen.v(14): clock signal should not be driven (gated) by inverted logic (clock: "clkout1" (datain_dataout.v(28)); inverted logic output: "clkout1")+ I( g2 l2 y8 U! s. p- w
    3 r" j4 |+ B3 ~; X6 }, M
    4 Z  ~8 k$ y( l5 x
    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")
    ) q3 {8 @% G" M: m3 }4 E( ]. ?4 B2 e0 v
    clkgen.v(25): BLOCKING assignment should not be used in an edge triggered block
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-8-20 19:54 , Processed in 0.109375 second(s), 24 queries , Gzip On.

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

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

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