找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 940|回复: 0
打印 上一主题 下一主题

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

[复制链接]

604

主题

2859

帖子

1万

积分

EDA365版主(50)

Rank: 5

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

EDA365欢迎您!

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

x
如何写时钟模块才比较规范合理,大侠给个标准模板吧
- T2 C4 A+ A& U6 ]) N! S  T3 G  H4 G, y( b. N5 A; u
`timescale 10ns / 1ns
, B' L& i  ~5 w) ], dmodule clktest(# z  w6 C& Q- t! m! Q. N3 p
clk,
: f& H# s7 n: p" P  H$ \ reset,6 x: v$ O% O: v/ u( e' V! N$ j$ V2 A
datain,
& |4 q' X2 S" M* O2 C" [- V! U! Y' Z dataout);
: }4 I; e/ ?4 a% A input clk;
! q+ z. D& Z" h- n input reset;
: r1 j# L+ K. B  l input [3:0]datain;; n2 Z: T" ^* S. H; O$ B: n& e6 [
output[3:0]dataout;
+ }1 V# `% t: p7 q% ^; Q# ?% T wire clk;0 t( H7 j* ?' ?5 U* h4 s
wire reset;6 ?" y: r( u$ f$ e! y0 D! e/ b0 v
wire clkout1;5 y  p6 f" z) E1 T& b0 U' X
wire clkout2;  }! w* J7 a+ K3 @$ _' {  J* ^/ d
wire clkout11;0 D* K2 ]  Z, F0 c. |# }* d
wire clkout22;
8 y" }$ s) C1 ~( F9 cclkgen clkgen(clk,reset,clkout1,clkout2); + i7 Z+ }' T/ C/ |; [, H# s- V
datain_dataout datain_dataout(clkout1,clkout2,reset,datain,dataout);
- c9 _; T4 n, R* f6 ]% _! Bendmodule
! z' _) f: Q' w. e4 w& J/////////////////////////////////////////////////////////////////
$ |; F) ]  G5 t5 b) d; n) Ymodule clkgen(clk,reset,clkout1,clkout2);
8 c5 k0 _. l& b6 J; j! R input clk;3 F  w0 A2 L4 O2 t/ s
input reset;
8 g& p* b) i4 [$ t0 |/ y output clkout1;1 b6 ]  Q: r  `8 V; D+ {
output clkout2;  
2 a/ I" u* O% C9 f4 V# Z/ E reg [3:0]cnt;
" b; p+ ^4 q. v6 j, C3 Y reg clkout11;, h2 Z$ \& K. X4 q2 ~6 d
reg clkout22;4 u) T1 P" d7 {# q. r" O' d+ m
assign clkout1=!clkout11;
- Z) d1 b0 s! Q) r0 X% ^ assign clkout2=!clkout22;
+ d' U. h3 a9 [* O 0 v5 ?+ ?* i; y4 I0 C
always @(posedge clk)begin ' U  p. E2 Z: q3 M6 O9 S. t
   if(!reset)
+ m6 S' C3 B2 @( n% {    cnt<=0;
) C, P$ @# P# U+ _+ M: _- c   else, ^# |: P$ \, [, d! J" _/ \. m
    cnt<=cnt+1;4 Y, C* q' b+ e* a) F
  end
% B! f& B9 c4 u' K2 Q% I8 g. k always @(posedge clk) 0 ~) ?" j  h/ X+ B+ |
  begin  
! o: I5 G) }% A9 K$ R# j4 w   clkout11=~cnt[2];
  Q8 z/ Q# m/ h2 o$ m2 ?6 D   clkout22=~cnt[3];: |0 L$ T0 L% A/ K/ h: L" B
   end2 A0 A4 `4 e0 V7 g7 q7 [2 ~! P' [, z
endmodule
& m2 H1 e4 I# x0 a, R+ F////////////////////////////////////////////////////////
5 q5 T- d4 f+ J1 ?, bmodule datain_dataout(clkout1,clkout2,reset,datain,dataout);
: a( A  h$ d% |( Z! q, U) r input clkout1;
. Y* \& i* |8 n input clkout2;& _* u# ]( G8 b
input reset;' Z# [  ~8 s+ R5 j
input [3:0]datain;7 o2 L4 f5 F6 o# a' Y
output [3:0]dataout;
% U" c1 ?  Y; l* n- M5 Y* ` reg [3:0]datatemp; ; V: [8 c- C* O( i# m$ p. q1 m3 q
reg [3:0]dataout; . ?" a: |3 d$ K' _
reg [3:0]cntt;
; y% j3 Q6 s! N0 I' c always @(posedge clkout2)begin . d( P: X: O2 D
   if(!reset)
8 p& e7 P5 Q8 U* e% P7 ]9 t8 U    cntt<=0;
0 D: H3 n1 G! R$ N7 z/ m+ `7 G$ n   else0 Y" m5 s+ c8 w* X! |
    cntt<=cntt+1;! ^3 _. Z7 e/ d4 M* E. [; V' W0 J
  end2 e8 D) J. C1 V* c
$ {( v7 V/ h% O4 R
always @(posedge clkout1)begin 3 c0 q7 \. m! L
   if(!reset)- ~' c0 k4 h+ i6 B* h! E/ d
    datatemp<=0;' q& I- q1 M. j7 f% _
   else/ }, s; @! b/ _  u' ^# t: u
    datatemp<=datain;
2 \4 F/ z7 U% I3 y7 [. u% |+ A  G  end
: m+ ~- P" E; D+ ? always @(posedge clkout1)begin
" d2 Q7 j2 x  K/ \   if(!reset)! p- [- {* t% e) ]( }( ?" _- O
    dataout<=0;
) D7 I/ }- n7 @. F$ W% J- w   else
+ S$ m+ t) o7 W# y! G    dataout<=datatemp;
" }6 ]' W0 ]2 O# D, U- Q  end
. C) a, F7 G: j3 g" G 3 Q' S: T2 E9 g$ n$ _4 ]! S
endmodule
0 ~2 V4 P/ j* n/ f& m6 U) w////////////////////////////////////////////////* M) m$ l. c* U3 _# P
提示下面的警告:
  g; X4 l+ V5 _" g  [clkgen.v(14): clock signal should not be driven (gated) by inverted logic (clock: "clkout1" (datain_dataout.v(28)); inverted logic output: "clkout1")
9 I1 _3 Z& X' y6 W
: {( {& f, P  j0 a/ X7 H
6 D, O; @! @! W; J$ k7 g, 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")
3 Z9 U' i; z; h8 B- d1 _. j* \/ i0 }- s. S0 d) b! |# I2 w  t  r
clkgen.v(25): BLOCKING assignment should not be used in an edge triggered block
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2025-4-11 15:48 , Processed in 0.054469 second(s), 32 queries , Gzip On.

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

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

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