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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    如何写时钟模块才比较规范合理,大侠给个标准模板吧& r  k8 \5 \. d0 r

    ; F3 P- S, r$ S  n+ l`timescale 10ns / 1ns
    % Q% Z$ b9 t7 d0 A9 Q) [# ~module clktest(. w3 @9 g9 W( o$ l3 x) |$ _
    clk,
    ' t) [- G& v( Y6 j6 ^' S reset,
    % I& k7 S) i, G2 E- ~8 i) Q, D$ e' C: V datain,
    ) N8 \; Z4 b; Y. z+ ^; m- _ dataout);
    + d% \5 @8 q) Y, ~7 W input clk;
    1 r% e/ b8 o$ W! V5 _" x6 O5 ? input reset;
    " w: o9 `% n1 S- j0 L. Q input [3:0]datain;
    5 k4 d+ J$ p; f7 F& D output[3:0]dataout;
    8 M# R8 X- e  F* q% y- I$ M, [0 D wire clk;" _& @" D& u0 R$ _- J
    wire reset;
    9 K7 }1 S7 G0 ]9 s. ?  w* W+ }: ? wire clkout1;
    8 Q, c8 D/ M1 \4 I9 H wire clkout2;  O+ J+ Q5 F  |0 T
    wire clkout11;0 L% O% E- B9 z0 y' {- Y
    wire clkout22;- T# R$ ^) j# W( ~
    clkgen clkgen(clk,reset,clkout1,clkout2);
    9 V  u. ], c. s6 A! `2 @datain_dataout datain_dataout(clkout1,clkout2,reset,datain,dataout);
    , S! D7 C6 o, P, y8 Uendmodule
    , X* L: ^. H+ r3 D  p1 c- `# G/////////////////////////////////////////////////////////////////
    ) z' q, y1 S2 [, i! smodule clkgen(clk,reset,clkout1,clkout2);" X+ m/ i% E9 v
    input clk;- F( Q/ s7 W# @! z* J3 t
    input reset;
    3 W! q& R0 d2 ^1 p. H output clkout1;. \1 {6 Q# t+ W! d( l
    output clkout2;  
    : R" r6 O0 ]' e. l# @ reg [3:0]cnt;
    5 `$ [5 k' k; c. y reg clkout11;
    9 ^* e7 w2 b/ M" o- r0 A. I reg clkout22;& E* _  c0 Z! [7 m/ b% v0 K; T
    assign clkout1=!clkout11;2 [  {9 Y" z: I4 N
    assign clkout2=!clkout22;
    $ c3 Q; ?  q5 K4 B 7 C3 ?! Q- L+ x
    always @(posedge clk)begin
    " Q$ q0 [& u; v- m3 B. N   if(!reset)( i0 m+ c& E: Q) h' P0 m  j, e
        cnt<=0;% E: }) v5 x! f. p) f
       else: y  J' e. y0 R/ Q0 R
        cnt<=cnt+1;" ]8 H3 B8 x6 H) V" w9 m. F
      end
    3 O! W) C4 K( B- W always @(posedge clk) ( K9 a" U4 z( v/ r
      begin  
    9 D2 \! K: ?- h2 ~/ D   clkout11=~cnt[2];
    2 W2 Z0 {  q+ t7 o   clkout22=~cnt[3];
    2 Y1 b2 l9 Z( O7 \5 z* @   end! w% U$ b$ Y$ I3 m
    endmodule- p( f( Y# @5 X
    ////////////////////////////////////////////////////////
    4 b7 F3 A+ ^9 e- X1 |% j2 m* Qmodule datain_dataout(clkout1,clkout2,reset,datain,dataout);6 _/ W; |) g6 _% S/ o
    input clkout1;: O) z% B! M% m" [
    input clkout2;
    2 ?) i# J! @- c9 ]: {$ G, r input reset;/ O) i1 s- f9 B# P7 R& p; S' B
    input [3:0]datain;. L- }) x! f7 v3 ]8 L! Z
    output [3:0]dataout;1 @& G. S# U! v7 {8 Y" L
    reg [3:0]datatemp;
    ) p/ P( L" J& R8 _ reg [3:0]dataout;
    4 {( C9 ^6 {$ A4 s5 |6 M reg [3:0]cntt;4 y+ B( ?' M% N, ~" p
    always @(posedge clkout2)begin 2 g+ S! u; a0 b& A
       if(!reset)
    / ]+ M8 Y. W9 ]    cntt<=0;4 b! |/ g( P$ J0 T
       else
    + j, A$ ]# R8 E  a" n6 z    cntt<=cntt+1;
    & n1 w. J, z6 x5 a  end
    . \" w0 p# ~( U+ b; ~ ) I" `" R* c* C  d( E
    always @(posedge clkout1)begin 2 S4 [& X! o. I( I
       if(!reset)- I; F4 \& M6 g9 W( j
        datatemp<=0;
    7 `* I! a% P9 q/ z   else, Z1 s: G* C9 ?  Q/ S% N
        datatemp<=datain;
    % ^; k  s6 k) }# D  E  end2 I8 ^  o1 W. u& P4 t) M
    always @(posedge clkout1)begin # m& z! c" H; r7 X! m' B7 e
       if(!reset)
    % u4 r' a! P4 l! |$ U3 ?    dataout<=0;
    , G4 w( e$ M0 ?' F1 w/ I3 l   else2 N9 l8 G% |$ b: c7 K3 }
        dataout<=datatemp;
    & t7 O7 N* y' V  Y  end% b2 R$ ]1 }# [2 z  E$ H
    . P7 h5 l4 H% w/ t( `* z8 t
    endmodule4 U% }  t  h8 S0 B7 k
    ////////////////////////////////////////////////! q. s' t9 Y% d; ?: H/ {2 X) E
    提示下面的警告:
    1 Y. K! w+ o& u: a- N% K2 s  qclkgen.v(14): clock signal should not be driven (gated) by inverted logic (clock: "clkout1" (datain_dataout.v(28)); inverted logic output: "clkout1")9 }, D) l) U. X; J4 {
    . [7 w. t8 \- u# O
    7 k" E) }# a0 o- t4 S: g' F
    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")
    * R/ g4 U1 W7 W4 @1 {- f# @
    6 l  f2 i9 a' S* J) n1 t. c. l5 D6 Hclkgen.v(25): BLOCKING assignment should not be used in an edge triggered block
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-11-23 16:31 , Processed in 0.140625 second(s), 25 queries , Gzip On.

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

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

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