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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    如何写时钟模块才比较规范合理,大侠给个标准模板吧
    9 i) X& P5 p1 C5 k
    ( U/ w- h. N* E8 s7 }2 Z0 V3 k`timescale 10ns / 1ns7 L6 w% R, S, |0 j7 Q- u
    module clktest(
    - b+ ^$ i$ J7 f* ^: @1 r clk,
    + p% I! Q& D7 Y& S reset,
    6 ^% h6 }- ^2 M) V: X datain,9 e( J5 v0 t$ h3 Q9 ~- m: l! \/ Y* ^
    dataout);* g! f" |4 ^' A% v$ O) v$ x
    input clk;
    . n$ n+ b; J' V) T, ^1 P9 V2 [ input reset;
    ' F" n) t) s: `) l6 L9 y# s input [3:0]datain;
    " t3 s# ?; O- p* B+ \ output[3:0]dataout;
    + h- w1 G7 D; H( a wire clk;
    1 q  A6 @5 D9 l; P7 L' m: ~. k% h wire reset;4 Z5 A0 S3 b# Q  N/ P" S# c
    wire clkout1;$ t1 Y- B) U: x. p. |" ~
    wire clkout2;& s* w9 h) L. L$ j3 I2 t
    wire clkout11;
    6 b1 H! T7 O% @: G! e/ |3 G wire clkout22;
    , ]1 k( t) D% G! [( U1 Dclkgen clkgen(clk,reset,clkout1,clkout2);
    4 c6 r1 @9 q) b, L, X2 W- cdatain_dataout datain_dataout(clkout1,clkout2,reset,datain,dataout);
    1 O7 v3 |% V* R' }! Nendmodule# {/ N8 L6 v1 B
    /////////////////////////////////////////////////////////////////
    - S, N7 S3 ]/ Gmodule clkgen(clk,reset,clkout1,clkout2);; _6 I$ ~  ?0 Q( d7 U6 Z! `
    input clk;
    + R5 G2 z9 Q2 q+ ^8 w6 a; v0 \ input reset;' |! B; F, b; ^  [2 b$ q4 }5 q- m
    output clkout1;
    2 f8 ~$ b% E# H& s( K output clkout2;  
    0 V( f: Y0 z( J6 A* { reg [3:0]cnt;" W' D- u. V0 E" m( M  W# U
    reg clkout11;2 R% V2 |6 l- u" H
    reg clkout22;2 o: V& t3 h8 ~" t
    assign clkout1=!clkout11;
    3 e' `& P) M( q assign clkout2=!clkout22;
    : X, b/ ~: e0 h) S# m/ K4 c
    9 P% B% V* ?$ B8 W9 P always @(posedge clk)begin 5 ~* ?) L3 g! X" ]/ n" ?. n
       if(!reset)" e1 d: b' q  E0 T
        cnt<=0;  ~  s$ t% p/ k. h* I" f
       else
    3 r( @7 {# v' r' Z2 G. n4 B" h    cnt<=cnt+1;/ D/ ~# g3 l! r# e, R* E2 @
      end$ Q2 f, s1 L) ?+ h9 d6 ]+ e
    always @(posedge clk)
    2 r1 F1 k! Y! v* u3 n  begin  & U% B6 y! q" _1 G
       clkout11=~cnt[2];& D& J: d2 O* [7 l
       clkout22=~cnt[3];
    5 C$ e  o( S( @6 ?, D+ Q, @: l   end
    2 O( J( ?- y" O: sendmodule! C8 R* [& t/ t
    ////////////////////////////////////////////////////////- m# o* ~* L# e2 s9 P
    module datain_dataout(clkout1,clkout2,reset,datain,dataout);
    6 P+ t& L- g/ r8 T input clkout1;9 y8 W5 ?" s* T1 {! b4 E& L/ [
    input clkout2;1 ^( \: I, q7 `" j
    input reset;1 m6 s; I" K$ p3 O  C$ ]% K7 ^5 |
    input [3:0]datain;: |/ E4 k1 G& s$ g9 Q. w0 _/ ^
    output [3:0]dataout;
    4 K# m" W, c" U8 W$ k8 _% _7 ? reg [3:0]datatemp;
    0 D- _: k! U) }) R9 H' A reg [3:0]dataout; ; m+ p+ a- _8 B# C
    reg [3:0]cntt;' g& O4 H; I( \% P3 x9 _" l
    always @(posedge clkout2)begin ' W9 l& {  x& |* C0 L4 {! y
       if(!reset)
    ; o9 k3 b& @/ G% V    cntt<=0;
    6 ?9 ?) m7 |% t) y- x0 b4 h" M   else
    7 c: S. P0 s, q* d- F. z    cntt<=cntt+1;$ }  L- s# ^/ t: ^" h  e1 R
      end* ?# g  v4 ~  _# r' e( T

    + E/ T# `% f- w1 o% N, T always @(posedge clkout1)begin $ L9 J" n6 s) t  M6 s3 u
       if(!reset)
    1 O5 n- T% l; I    datatemp<=0;4 w( b/ n$ O6 p
       else
    . l  D8 z% C- u    datatemp<=datain; 5 P2 m7 I) O6 y. y# Z' @
      end
    1 s- S4 S7 o3 b% M+ n+ S$ R, K& i always @(posedge clkout1)begin
    / C8 w. o' t3 C7 R2 s   if(!reset), h( g) N7 ?( _& a$ E. V
        dataout<=0;
    . \0 ^( ]4 N% F. c& z- I; v7 p   else
    # R/ l  N$ c+ a2 l) G    dataout<=datatemp; . y8 o  |3 e. ]2 v; s5 K$ U
      end. ^: k4 W  D8 ]

    % j* p" n) i- e1 J8 Gendmodule7 ^+ Q7 ~5 s& t( l. A9 ~" S
    ////////////////////////////////////////////////
    & c) ?- r7 i/ W" p9 T, O) W8 i提示下面的警告:: K2 B1 f7 r) J$ ]7 J# W( d
    clkgen.v(14): clock signal should not be driven (gated) by inverted logic (clock: "clkout1" (datain_dataout.v(28)); inverted logic output: "clkout1")& q5 |# ^# I  X+ A) ]# m+ \

    % q8 \8 }$ O5 s
    7 d/ d  F( P1 u4 G, q3 i8 x: Y# iclkgen.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")
    & a* C6 @* \/ X" O+ M. C
    1 A/ h+ m8 b! rclkgen.v(25): BLOCKING assignment should not be used in an edge triggered block
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-7-18 09:09 , Processed in 0.109375 second(s), 24 queries , Gzip On.

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

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

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