TA的每日心情 | 擦汗 2020-1-14 15:59 |
---|
签到天数: 1 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
如何写时钟模块才比较规范合理,大侠给个标准模板吧
# G/ v- F: T' X. ~+ s
9 ^1 H! Q7 N3 ^: R0 m2 b`timescale 10ns / 1ns
) h4 i: T& T, F* g9 ^% ?module clktest(
: C7 |/ B9 C. S* t clk," b4 M$ g4 y% H
reset,1 z$ b0 p$ \; V( Z2 v- L
datain,
! m1 \, p7 Z8 V6 A8 T dataout);
! b Z9 \- G& _& F input clk; 6 [" u, ]0 q7 C
input reset;( m) S+ r8 W& |, o* i% D7 ]1 D+ P
input [3:0]datain;' J: J. G6 ?& U$ n7 P" O
output[3:0]dataout;! T* B) k; ~3 O7 _0 a
wire clk;
; F9 W2 w$ F9 l: d# V- Q5 I wire reset;
$ s7 p, y( t/ Z. @$ x- X# v wire clkout1;& l, s6 T, A! M
wire clkout2;; R: B8 \. i2 a* a/ o) u
wire clkout11;
' O' z" u9 M7 n; q5 X wire clkout22;
2 {" e3 B# L) z2 d* B/ Gclkgen clkgen(clk,reset,clkout1,clkout2);
' B( ~& C3 S, m* ddatain_dataout datain_dataout(clkout1,clkout2,reset,datain,dataout);
5 d, R$ b% k, i2 c4 y6 jendmodule, G2 E. b6 ?) U& T0 R
/////////////////////////////////////////////////////////////////# |7 d+ L7 A7 ?/ M' K8 O1 S+ d: Q5 |
module clkgen(clk,reset,clkout1,clkout2);+ e4 E$ }) V. |% d& ~' K
input clk;+ k* b' a# w$ o- p
input reset;2 R/ F6 x3 m- g' P
output clkout1;( p5 A$ O0 A. y) w1 s2 J) n
output clkout2;
$ q. F9 e* P4 d4 X- R4 e6 q B reg [3:0]cnt;8 G+ j+ @4 w, F
reg clkout11;
3 H1 a5 q9 ~" z1 \* G' y: _7 ` reg clkout22;5 V- Q( q5 Z) @+ Z6 z
assign clkout1=!clkout11;
& s8 p9 c: F! [ assign clkout2=!clkout22;
) M/ J$ X# C1 t* J! F. ^9 F
! N7 V+ \# w O _ always @(posedge clk)begin
7 _$ u* H- y H" N3 d8 i/ C/ N if(!reset)1 k8 _' |, Z) _+ [0 Z7 R# Z' T- ?" m
cnt<=0;
, j% T$ s: y! f) A else E: k, g. b9 R# Z
cnt<=cnt+1;* u& d& @4 _; d3 r1 Z( f
end+ D" q. _$ a& R- b) b! q# n& |) i1 H
always @(posedge clk) 8 P# q" L% n: N) c' s- {
begin
' n( O, t# X! d" w) Y clkout11=~cnt[2];
4 p! @7 ]# c+ b0 W clkout22=~cnt[3];* v( P+ X( @- Q
end2 E7 g D, v7 @4 z/ K: A
endmodule( W4 S' s$ ?1 [( F
////////////////////////////////////////////////////////! b6 ^2 R" M1 e
module datain_dataout(clkout1,clkout2,reset,datain,dataout);
F, Z$ _5 K* D) ], p% o input clkout1;$ V( {- g! y2 m
input clkout2;) j j9 V; B$ |. A
input reset;) \+ S& R# u5 m
input [3:0]datain;3 m' B, E: t1 B- ?
output [3:0]dataout;" F M6 m: p9 l8 I1 T
reg [3:0]datatemp; 7 k0 K# f, ^# \& B. P- |( l% ]
reg [3:0]dataout; 7 Q5 D% P8 a+ Q. D* K
reg [3:0]cntt;5 j1 V' j% b( Z8 q
always @(posedge clkout2)begin . R, _( H# S; @; @. n
if(!reset)7 N2 ?3 o/ j! a, \, A# ~0 Q2 f# A
cntt<=0;
2 U j" r2 a9 i# y( N else$ }. z9 ]% I7 y6 Z @3 J
cntt<=cntt+1;* e" o2 ~: f: t' d
end
8 y. p% |) D% F* ~; x5 Q ( d- ^$ x& W' Z \9 D4 @2 B* |
always @(posedge clkout1)begin
) k! b) ], `7 X5 @9 y- u if(!reset)
# z6 H' _0 j: M( A5 Q& k4 E datatemp<=0;$ Z$ J4 C3 J' Z$ q& h/ l8 A
else) \1 T$ F2 Y, r, E) U
datatemp<=datain;
$ Y: Z7 C6 g' { end
+ X+ e" {4 [# ?9 Y1 A always @(posedge clkout1)begin
) J1 s# B0 v) I2 M8 i, k if(!reset)2 Y0 Q. t3 W6 M1 C8 K( n7 G
dataout<=0;8 @' k+ y' W6 i/ x& g$ U
else
6 u2 F. p! t5 t! R. ] dataout<=datatemp; 5 U" R2 N1 {5 i2 B ]3 A( I
end
2 M) O8 ]$ g9 v! k# N7 }$ C3 u 7 j8 L9 i* O1 \! w6 ~/ d" B! y
endmodule. ]+ S. _' M) R. O; S! ?
////////////////////////////////////////////////
/ k0 h& D! b% ^+ k# |8 c提示下面的警告:1 ]) m8 V9 _0 Y: @# y. k
clkgen.v(14): clock signal should not be driven (gated) by inverted logic (clock: "clkout1" (datain_dataout.v(28)); inverted logic output: "clkout1")
! h. d, V$ J z" P/ G) }
' n; ~1 a/ O% t
* D$ P5 q9 F& r* F1 L2 Nclkgen.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")- }# Z) q; f4 h k
2 p8 \6 L& l G" F" E& h# A1 ?clkgen.v(25): BLOCKING assignment should not be used in an edge triggered block |
|