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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    如何写时钟模块才比较规范合理,大侠给个标准模板吧7 ]2 D5 L/ i! O7 |

    ! o1 R% ~% P9 Y. C0 ~`timescale 10ns / 1ns
    : @9 D. f- H2 u9 l; x' Hmodule clktest(
    0 X+ ]* Y6 h) t& v clk,
    - v7 C: a8 N2 [ reset,
    ' `% Z- N: l8 F4 t/ G datain,
    / g% Q, @( h) Y8 k dataout);$ g% d. c5 G6 Q' ?* x* G% y
    input clk; ( C# {" m$ _6 O9 t' L% Y
    input reset;* B" b5 N" B% }- F6 ^, H- ^6 H
    input [3:0]datain;
    8 Y7 N9 l1 J/ d3 \% m* b output[3:0]dataout;
    ( U3 ^& b# P# C8 L; ]& s* h) e wire clk;" a! A5 H* E  M9 E
    wire reset;# f% W, c& a3 p$ B8 P& P! I
    wire clkout1;
    4 y! b# X9 `% }  W# J4 D$ X- G: g wire clkout2;
    6 q) ]3 U! `% T) }5 A wire clkout11;
    5 q% v4 B# t1 d( D wire clkout22;  ]9 R* D9 a5 ^" l# T5 B
    clkgen clkgen(clk,reset,clkout1,clkout2);
    & _; }1 i( G& X) Z( Vdatain_dataout datain_dataout(clkout1,clkout2,reset,datain,dataout);- n- {% ]$ X+ H" H* d- g
    endmodule( d% A: t7 N7 D5 N6 J
    /////////////////////////////////////////////////////////////////0 p, h1 W' Y8 d' ?
    module clkgen(clk,reset,clkout1,clkout2);
    : p( X3 x' E$ m& m- D7 V! s1 ` input clk;
    1 p' P1 K* C/ k9 O) T0 {; j2 F input reset;8 y1 a& B+ P/ k" M3 W& [
    output clkout1;# n8 X5 {! U! W$ [. S7 k2 A, d+ [
    output clkout2;  
    * x/ G- y  s2 I3 y0 E' j reg [3:0]cnt;
    ! S# u+ u3 n, ?$ S! Z reg clkout11;3 n  ]- j! u( E% P* B4 f& d$ i' p
    reg clkout22;
    4 E8 V# \6 Y0 X* @2 I* ^9 E% T assign clkout1=!clkout11;3 S+ z; m4 ]! r" o9 s% n
    assign clkout2=!clkout22;. g) y& X" [: _  F7 Y& ~: Y
    ' M5 Y" b) G0 J9 \+ Z$ {, q
    always @(posedge clk)begin   ?% {% V: \$ {6 I" q
       if(!reset)
    8 M# Y* {7 Y$ d& z    cnt<=0;
    4 y, Z/ i5 s1 }5 N+ `   else& Q$ _" j4 R$ |' c1 x, [( I5 N0 o" A
        cnt<=cnt+1;' X2 G! y, N5 ~# t: M3 ]6 a( R
      end
    & \& R4 ^& Y: H always @(posedge clk) 9 a, s4 H& o6 s/ R3 V
      begin  
    * ^$ E7 g4 {4 J2 K- b: ?   clkout11=~cnt[2];2 ^& n4 D- k, g# J: l- K% d; b
       clkout22=~cnt[3];) r- @% ~! K# N$ \7 a
       end- `& p* L( k( o0 H' }5 H
    endmodule* f# }, Y+ g6 D% R$ ~
    ////////////////////////////////////////////////////////+ Y9 m3 O4 y( y5 ]
    module datain_dataout(clkout1,clkout2,reset,datain,dataout);! ~- ?( w9 m# c: d, P5 _
    input clkout1;2 X" ^0 A& n8 n" W5 x9 O# \$ R5 C( N
    input clkout2;
    ; v8 j$ ]+ t. P1 i4 M input reset;# V0 w% ]$ r  f+ i) j5 T
    input [3:0]datain;
    ' G" A$ _1 R* b1 d% N output [3:0]dataout;1 D; w( ]2 a- H# w1 f; `* K' d
    reg [3:0]datatemp;
    - W0 o8 Q1 i( {$ e+ u reg [3:0]dataout; : \- g+ f& ]1 ]# e( B' T
    reg [3:0]cntt;
    ( O# n# N$ K8 G! h+ j0 z always @(posedge clkout2)begin   J' K$ m8 p" A1 P/ v
       if(!reset)1 T% D$ v$ H; n0 N( l, }
        cntt<=0;
    * M$ h- S! B  ^   else3 f+ i1 w$ q- W, |* W3 b
        cntt<=cntt+1;5 K, l& K# n8 O
      end
    " N- ]* w8 y' I" m8 q& [/ {
    ' j8 ?0 Y  x3 y8 y' J. ?4 ? always @(posedge clkout1)begin
      Z1 y* T" e8 H   if(!reset). H3 U" y1 z: ]7 R/ T1 [
        datatemp<=0;
    2 `, ?: W& {$ S( G  L4 {. b5 s   else
    2 {3 {- N# C: J  o5 r$ G2 {- }    datatemp<=datain;
      N9 S( B5 q* _  end
    ' ?0 X2 Y; G" W, V. x) g' \ always @(posedge clkout1)begin
    # ?' D7 v# R: `7 J  b6 g' R   if(!reset)
    ' S0 Y/ \$ D4 O5 B+ I+ a    dataout<=0;
    + R* S. J  l: n9 r6 y" U0 V% L   else7 g8 P3 ?6 m% q# V# {
        dataout<=datatemp; + a0 h3 W  C) |3 M: b- _  e3 W- A
      end- a2 d: ]1 _$ k) C7 J2 X* Z7 T

    ! m( S. Y" e' v) d$ @endmodule
    " Q* M6 Z8 l" R6 A: n////////////////////////////////////////////////- Z, B* i+ t/ o9 Q1 _
    提示下面的警告:7 n1 |' Z' W$ z0 O5 {' [3 s
    clkgen.v(14): clock signal should not be driven (gated) by inverted logic (clock: "clkout1" (datain_dataout.v(28)); inverted logic output: "clkout1")  T- v: `) f4 Y6 E9 U& j! b* u
    2 @/ l4 k: {6 W/ ?  ]

    8 W' l, n( D, j+ ^1 N3 Dclkgen.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")
    7 y7 m' ~# J8 ?5 M3 b; u8 s! D0 Y$ c7 N
    clkgen.v(25): BLOCKING assignment should not be used in an edge triggered block
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

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

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

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

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