TA的每日心情 | 擦汗 2020-1-14 15:59 |
|---|
签到天数: 1 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
如何写时钟模块才比较规范合理,大侠给个标准模板吧
, c$ ]; E# {$ f! j; G
* s, D+ f: d m/ q`timescale 10ns / 1ns
8 S: t) }' _( Tmodule clktest(
! O9 o8 n9 J. c- d+ M: P clk, r/ T8 J3 h) K+ O$ ^4 a' N' s
reset,2 S& S; n: U# _7 W. g k& |
datain,) h/ I R/ ~; E" x
dataout);
) J2 b1 G3 w8 c6 H x7 m input clk; 0 J, @0 ?+ R7 \; E/ p7 y4 |/ w- E
input reset;8 h' ^( n1 R- Q. y) ~
input [3:0]datain;
5 H" E, E( C, I7 J( W9 I- e output[3:0]dataout;
. S) h7 B, d& b6 h/ P) S wire clk;
" [# X/ m6 X# x& v4 ?0 ` wire reset;
/ j. L2 f+ [7 w6 f wire clkout1;
% c( d+ J& I" H( |8 F/ F* d wire clkout2;
2 Z8 J& @0 _5 a wire clkout11;7 A% c& d4 b. d: ?* G& `4 }
wire clkout22;
' f: R& r4 C' n" W f# Y4 T/ F/ Wclkgen clkgen(clk,reset,clkout1,clkout2);
5 T! G6 c( Y, E& J+ E9 F. vdatain_dataout datain_dataout(clkout1,clkout2,reset,datain,dataout);$ x& R4 G, T' ~8 M
endmodule
6 z9 Q i" K; i& A2 W2 q/ Q0 m5 f/////////////////////////////////////////////////////////////////
+ A' s' Y0 v! y& b5 K" Q+ D7 F% F! emodule clkgen(clk,reset,clkout1,clkout2);
2 p2 V/ V6 t1 `2 ~2 r input clk;, e: w4 s6 A8 s9 Z
input reset;
8 Z5 `/ Y1 r: b: S output clkout1;4 B4 E0 K9 w, h3 M
output clkout2;
# n' J, q' c8 _ reg [3:0]cnt;
R" ^( J+ Y0 F3 {) q3 K reg clkout11; A2 f( T; I9 w3 G; d( S9 U6 i
reg clkout22;& T, c+ Y7 g5 Q
assign clkout1=!clkout11;
7 P8 S# q5 J# s7 g: ]1 u9 V$ K assign clkout2=!clkout22;1 y7 C+ Q7 S# _
% z0 x. p1 o2 |% W' ?8 B% j) ?/ L
always @(posedge clk)begin $ z$ c) b+ s, W; E
if(!reset)9 f0 V1 Y+ u5 J' z0 \+ Y, V
cnt<=0;( a( w# _8 a- B1 H
else
* h: u& T' k5 F, r* P/ Q1 y cnt<=cnt+1;
% ^3 H" U$ U' J) P4 v3 Y, i end, C3 Z1 R1 ^& o& I* r e: E8 I
always @(posedge clk)
% Q) j$ e0 k& w6 W begin
; E2 f: ?/ c3 I. u( V6 h clkout11=~cnt[2];! R' H3 G1 U$ Y
clkout22=~cnt[3];! }( s. g! z3 r: O' ?0 h8 f
end4 f8 W7 E) S5 { U
endmodule
' T5 P. V+ w/ k* o- d$ W1 M3 n( ~////////////////////////////////////////////////////////
" G9 O/ x! S: C1 _# p3 o+ ]module datain_dataout(clkout1,clkout2,reset,datain,dataout);
6 u$ h8 S) S& a1 H, A) o input clkout1;
. I" \7 M6 d- f5 \% i input clkout2;
( g/ H. r, q# d4 V% q. e7 i input reset;" D( w4 r: T& v
input [3:0]datain;
1 a0 g" }/ n9 _. ?$ W output [3:0]dataout;/ p) V. l: F; Q
reg [3:0]datatemp;
. O: B; b4 j" l8 \1 Z( ?5 _ reg [3:0]dataout;
' Q1 q6 T) \6 f: | k$ F reg [3:0]cntt;
% k. d- K7 E" m# _! O always @(posedge clkout2)begin
( t$ F. ?, B5 w0 l if(!reset)
: _# t! R, @* G* |7 F; c9 x2 m/ b" x cntt<=0; B6 D* t# G8 S" }# g
else
* k7 t5 P7 \0 @% [/ Q cntt<=cntt+1;
0 w1 {3 j- M6 u7 V* G end0 A v0 C* v! x6 P. w2 y
% ^, b$ h5 O5 s; `7 X5 n4 }
always @(posedge clkout1)begin , l1 D% H, a) T: V6 [. X3 [
if(!reset)0 _4 M3 \2 j1 U' @$ a5 `& T' [7 i
datatemp<=0;
8 u! v) y. d2 \. t) k/ ]* y# l% V/ L* C else
* e4 O7 @6 o y! p1 P) \ b datatemp<=datain;
, }0 Q6 ?, v4 n* d f. | end. g0 [+ b s( ?" l* z; Q
always @(posedge clkout1)begin
, B3 a* r6 o1 d6 ? if(!reset), A5 c/ Z7 f8 b' C/ @, n$ m# _
dataout<=0;
7 p( r4 b' k4 a/ l& t else
6 h# W" ~. s) W" Z dataout<=datatemp;
" {6 i) h, V+ T% u, ^ end
x, b% v- W Y. A$ J/ I M2 Q: u/ v7 a( C& y1 f" _
endmodule0 H4 d" s W- M& _
////////////////////////////////////////////////
, m$ |- k: S; I+ A4 H; ?' N提示下面的警告:
, q9 A1 N! ~0 gclkgen.v(14): clock signal should not be driven (gated) by inverted logic (clock: "clkout1" (datain_dataout.v(28)); inverted logic output: "clkout1")- U& v) ^: `( }
' @# |3 B% o8 x6 K# _* o( o. K
6 b2 D# N) L( B! k
clkgen.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, L5 ^2 N% f: b
/ }8 x3 n- n4 j: x& W6 D& qclkgen.v(25): BLOCKING assignment should not be used in an edge triggered block |
|