TA的每日心情 | 擦汗 2020-1-14 15:59 |
|---|
签到天数: 1 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
如何写时钟模块才比较规范合理,大侠给个标准模板吧3 L4 F/ r" O- b1 z6 Z( e. R# ~
. G) M# D' o& o/ ~`timescale 10ns / 1ns5 h" [1 } \6 b1 k; S6 m. N
module clktest(
9 B9 B) i% S! a% s clk, r8 k. a5 h4 V7 q
reset,
9 ?2 o$ j1 D' s/ K) H2 O datain,9 U q* ]* _' |2 c6 P
dataout);
3 O0 Y/ \! }5 G0 V input clk; ; j8 z; e, M7 |* m4 [ m- x
input reset;
8 \3 g, ~" P' i2 z* E input [3:0]datain;! [; s- @1 w7 B" q& w' [: V
output[3:0]dataout;0 L$ }8 P* |3 l
wire clk;
0 K" b3 r8 `& R/ R6 w4 ?( l wire reset;3 z6 ]$ p0 C0 T. U1 T( [
wire clkout1;- I: G* S0 E. H$ @5 F
wire clkout2;
. B2 R5 a4 H$ A2 ^6 \" S- Z wire clkout11;
3 I- @7 a& i9 v0 b3 V' [ A wire clkout22;$ {( Y( ?8 s- b$ u
clkgen clkgen(clk,reset,clkout1,clkout2); ( r) b% Y3 C- e" s' w0 k" N0 U
datain_dataout datain_dataout(clkout1,clkout2,reset,datain,dataout);5 R+ W& Z9 e! t$ `) K% z
endmodule6 ]0 e1 N6 @& n x7 B, A
/////////////////////////////////////////////////////////////////- H4 T: Y4 r# F. p; G9 ?
module clkgen(clk,reset,clkout1,clkout2);1 G0 v; w9 }/ U! U9 I
input clk;
$ c1 r) Z8 z4 v0 g5 b input reset;
" z7 A% h1 q0 { | output clkout1;
0 q" b4 R+ g, o8 S4 W5 j$ V output clkout2;
$ F% N: B( Y$ r# e. E. ^ reg [3:0]cnt;: Z' q& @1 H; J: X
reg clkout11;
# r! e! g8 V9 _ M% {% } reg clkout22;
# B$ M7 @; c+ w- d2 i assign clkout1=!clkout11;# C( Q* m p6 w- @0 k' U% a2 e, C3 z
assign clkout2=!clkout22;
0 e' i5 g9 \0 \% v2 t
" _9 m& Q7 \2 X& t2 K always @(posedge clk)begin
% ^; A' w# I$ ]* W4 _. C if(!reset)
8 {0 @+ O$ V+ }! Y- m( u Y cnt<=0;7 d5 |% \) k, t' q& o! q" ?5 b) H
else
- a0 v" ^5 k% e0 k3 [ cnt<=cnt+1;
& g9 w3 |% \2 F* C* z end$ s- v. d; i0 x
always @(posedge clk) 6 J) i8 V8 V7 c2 U) R
begin
) t R* p) ^4 c, E' X clkout11=~cnt[2];2 _( H0 |5 K" s+ J$ e7 v
clkout22=~cnt[3];
8 @9 E7 @6 n& p, Q/ H: D$ O; O end% c/ G: M1 b. k: N9 \9 `
endmodule- G8 p# u6 L( P& I: ~
////////////////////////////////////////////////////////
$ v9 a, n- }) E: f3 O9 Umodule datain_dataout(clkout1,clkout2,reset,datain,dataout);
- z' b* b3 @3 k# |6 V5 w; i. ~ input clkout1;% z& b! T7 s% W1 d' L/ v
input clkout2;. y+ V4 ]) s* C
input reset;5 v: N( O* g; w h7 m" Y% M5 G- E
input [3:0]datain;* ?* L; U, \$ I& D2 W" a/ h$ z; d
output [3:0]dataout;( s4 a0 Y8 l+ v6 r* V, k
reg [3:0]datatemp;
8 H7 v" K. [! i. U9 ~: Q reg [3:0]dataout;
& f& g2 x4 L5 F- |. F reg [3:0]cntt;
: H: h. |$ g9 ~4 A1 f3 H always @(posedge clkout2)begin
7 `1 j& \& c; K0 ^( s( i8 C _- U if(!reset)
2 \$ x: [/ ^- H- j% V0 v cntt<=0;
& Z+ a. m5 l8 K8 \ else; f5 s/ P. k; o5 e }3 p$ L' v
cntt<=cntt+1;+ ^6 W" s: o8 P2 ^2 w5 A; [2 X( {
end
. a( x# Q! E- x6 C% X
! n8 w* ? {0 `5 P, q- F# _ always @(posedge clkout1)begin 6 c; N+ R) Q5 }: a6 j
if(!reset)
+ N' t% L6 ? \: V# Z4 }2 G datatemp<=0;- D7 y+ Q8 W2 z& @& q" X, e: z- {
else% t4 v& T$ v1 t4 ]0 f4 K4 b& b
datatemp<=datain;
# k9 u2 U3 r' j/ k \% e end- y: x- G r6 J1 A
always @(posedge clkout1)begin 8 M( T5 Y1 o5 J* X' h
if(!reset)
- M6 J4 I+ E7 r! ]* [- ? dataout<=0;% r. N* ]) C8 | b9 z. L; F5 G
else
& p% M- @+ p. l3 ` dataout<=datatemp; 9 b7 q0 S+ S5 b2 r+ x& Y
end7 b) H2 _3 b$ s: l# }+ h9 M% r
( ?6 _( r% d4 m0 ~- Q8 c' Kendmodule
- w0 ~% T! L. ]4 q) z. \6 {+ G* b2 |- P////////////////////////////////////////////////
. I# f6 w R6 W" v提示下面的警告:! }& B( l8 J2 c% R2 d7 }( L
clkgen.v(14): clock signal should not be driven (gated) by inverted logic (clock: "clkout1" (datain_dataout.v(28)); inverted logic output: "clkout1")& p* n" w K% V
# g* K1 s+ [/ [) e
9 W( @9 K) ]) R6 u1 K+ c7 wclkgen.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")
& _& j* p8 l# J6 `" f3 q
! k U1 ~1 B& ~0 f# v6 E. `' }! oclkgen.v(25): BLOCKING assignment should not be used in an edge triggered block |
|