TA的每日心情 | 擦汗 2020-1-14 15:59 |
|---|
签到天数: 1 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
如何写时钟模块才比较规范合理,大侠给个标准模板吧& r k8 \5 \. d0 r
; F3 P- S, r$ S n+ l`timescale 10ns / 1ns
% Q% Z$ b9 t7 d0 A9 Q) [# ~module clktest(. w3 @9 g9 W( o$ l3 x) |$ _
clk,
' t) [- G& v( Y6 j6 ^' S reset,
% I& k7 S) i, G2 E- ~8 i) Q, D$ e' C: V datain,
) N8 \; Z4 b; Y. z+ ^; m- _ dataout);
+ d% \5 @8 q) Y, ~7 W input clk;
1 r% e/ b8 o$ W! V5 _" x6 O5 ? input reset;
" w: o9 `% n1 S- j0 L. Q input [3:0]datain;
5 k4 d+ J$ p; f7 F& D output[3:0]dataout;
8 M# R8 X- e F* q% y- I$ M, [0 D wire clk;" _& @" D& u0 R$ _- J
wire reset;
9 K7 }1 S7 G0 ]9 s. ? w* W+ }: ? wire clkout1;
8 Q, c8 D/ M1 \4 I9 H wire clkout2; O+ J+ Q5 F |0 T
wire clkout11;0 L% O% E- B9 z0 y' {- Y
wire clkout22;- T# R$ ^) j# W( ~
clkgen clkgen(clk,reset,clkout1,clkout2);
9 V u. ], c. s6 A! `2 @datain_dataout datain_dataout(clkout1,clkout2,reset,datain,dataout);
, S! D7 C6 o, P, y8 Uendmodule
, X* L: ^. H+ r3 D p1 c- `# G/////////////////////////////////////////////////////////////////
) z' q, y1 S2 [, i! smodule clkgen(clk,reset,clkout1,clkout2);" X+ m/ i% E9 v
input clk;- F( Q/ s7 W# @! z* J3 t
input reset;
3 W! q& R0 d2 ^1 p. H output clkout1;. \1 {6 Q# t+ W! d( l
output clkout2;
: R" r6 O0 ]' e. l# @ reg [3:0]cnt;
5 `$ [5 k' k; c. y reg clkout11;
9 ^* e7 w2 b/ M" o- r0 A. I reg clkout22;& E* _ c0 Z! [7 m/ b% v0 K; T
assign clkout1=!clkout11;2 [ {9 Y" z: I4 N
assign clkout2=!clkout22;
$ c3 Q; ? q5 K4 B 7 C3 ?! Q- L+ x
always @(posedge clk)begin
" Q$ q0 [& u; v- m3 B. N if(!reset)( i0 m+ c& E: Q) h' P0 m j, e
cnt<=0;% E: }) v5 x! f. p) f
else: y J' e. y0 R/ Q0 R
cnt<=cnt+1;" ]8 H3 B8 x6 H) V" w9 m. F
end
3 O! W) C4 K( B- W always @(posedge clk) ( K9 a" U4 z( v/ r
begin
9 D2 \! K: ?- h2 ~/ D clkout11=~cnt[2];
2 W2 Z0 { q+ t7 o clkout22=~cnt[3];
2 Y1 b2 l9 Z( O7 \5 z* @ end! w% U$ b$ Y$ I3 m
endmodule- p( f( Y# @5 X
////////////////////////////////////////////////////////
4 b7 F3 A+ ^9 e- X1 |% j2 m* Qmodule datain_dataout(clkout1,clkout2,reset,datain,dataout);6 _/ W; |) g6 _% S/ o
input clkout1;: O) z% B! M% m" [
input clkout2;
2 ?) i# J! @- c9 ]: {$ G, r input reset;/ O) i1 s- f9 B# P7 R& p; S' B
input [3:0]datain;. L- }) x! f7 v3 ]8 L! Z
output [3:0]dataout;1 @& G. S# U! v7 {8 Y" L
reg [3:0]datatemp;
) p/ P( L" J& R8 _ reg [3:0]dataout;
4 {( C9 ^6 {$ A4 s5 |6 M reg [3:0]cntt;4 y+ B( ?' M% N, ~" p
always @(posedge clkout2)begin 2 g+ S! u; a0 b& A
if(!reset)
/ ]+ M8 Y. W9 ] cntt<=0;4 b! |/ g( P$ J0 T
else
+ j, A$ ]# R8 E a" n6 z cntt<=cntt+1;
& n1 w. J, z6 x5 a end
. \" w0 p# ~( U+ b; ~ ) I" `" R* c* C d( E
always @(posedge clkout1)begin 2 S4 [& X! o. I( I
if(!reset)- I; F4 \& M6 g9 W( j
datatemp<=0;
7 `* I! a% P9 q/ z else, Z1 s: G* C9 ? Q/ S% N
datatemp<=datain;
% ^; k s6 k) }# D E end2 I8 ^ o1 W. u& P4 t) M
always @(posedge clkout1)begin # m& z! c" H; r7 X! m' B7 e
if(!reset)
% u4 r' a! P4 l! |$ U3 ? dataout<=0;
, G4 w( e$ M0 ?' F1 w/ I3 l else2 N9 l8 G% |$ b: c7 K3 }
dataout<=datatemp;
& t7 O7 N* y' V Y end% b2 R$ ]1 }# [2 z E$ H
. P7 h5 l4 H% w/ t( `* z8 t
endmodule4 U% } t h8 S0 B7 k
////////////////////////////////////////////////! q. s' t9 Y% d; ?: H/ {2 X) E
提示下面的警告:
1 Y. K! w+ o& u: a- N% K2 s qclkgen.v(14): clock signal should not be driven (gated) by inverted logic (clock: "clkout1" (datain_dataout.v(28)); inverted logic output: "clkout1")9 }, D) l) U. X; J4 {
. [7 w. t8 \- u# O
7 k" E) }# a0 o- t4 S: g' F
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")
* R/ g4 U1 W7 W4 @1 {- f# @
6 l f2 i9 a' S* J) n1 t. c. l5 D6 Hclkgen.v(25): BLOCKING assignment should not be used in an edge triggered block |
|