TA的每日心情 | 擦汗 2020-1-14 15:59 |
|---|
签到天数: 1 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
如何写时钟模块才比较规范合理,大侠给个标准模板吧
* m' j9 s1 S6 o3 ], l# _$ p' x( H* {6 Q7 R; m
`timescale 10ns / 1ns
+ [/ N- {( P }& j. S- fmodule clktest(
% W! o7 _0 R1 t3 s( D! K clk,9 W6 I9 A0 a* W2 J
reset,
. g# J% P* s( |6 M* E+ X datain,
; b1 _7 X8 q+ T! j, O6 o$ X dataout);! x3 y! q' m" ]
input clk; & w& p' T( V" ^0 r' P2 y+ y
input reset;+ Z; Q v2 v) j ~
input [3:0]datain;
( x; s% C4 M& n$ O/ n- S- b output[3:0]dataout;. p2 e$ v& p& G$ j4 F
wire clk;
8 d0 J' t" b; \2 b wire reset;* a+ [+ x" X+ O5 C6 D: S+ @" y8 }# P0 F
wire clkout1;4 ]; z5 |& }4 r8 L8 r
wire clkout2;
: Z9 Z* C9 z' ~. N% B wire clkout11;0 c* Z8 F% v8 |
wire clkout22;7 @2 |* @7 |: [* D' H
clkgen clkgen(clk,reset,clkout1,clkout2);
# _! U8 e% {+ b, x" {1 Ddatain_dataout datain_dataout(clkout1,clkout2,reset,datain,dataout);9 j6 J/ H& w; ?7 E
endmodule( }- \5 \0 F: q% V
/////////////////////////////////////////////////////////////////5 ]8 s! L4 _2 Y0 u
module clkgen(clk,reset,clkout1,clkout2);: ~% N% _, i; E# `# n
input clk;8 i: _4 I3 G7 v; @7 Q3 f4 c2 R
input reset;
% _6 \7 g- c6 t7 n, S% @1 `; E output clkout1;
' P2 N9 ~4 w3 d7 Z3 L8 ]' M output clkout2;
, z( L( t; ?9 }; O {/ w/ h reg [3:0]cnt;
8 f( |) [ T/ Y( x) S+ X reg clkout11;/ T3 ]! H% [+ H8 n0 H& M
reg clkout22;
7 u- X2 B9 a V- T assign clkout1=!clkout11;$ E& I$ s* `- I1 c* @. z+ k
assign clkout2=!clkout22;
7 O ^9 ^, Y0 g1 A
) k- _) B; u, J* Q/ i always @(posedge clk)begin
6 r1 w6 t3 G2 Q2 t* W9 I2 Z9 Y% b if(!reset)
# A8 h$ y3 ~+ v, H, s; n0 s cnt<=0;0 h( O$ q7 F- M6 }& ^
else# I2 g7 W* i0 i \: ~/ W8 h
cnt<=cnt+1;9 e% T0 F- W& F) u e- L. F
end
z- P3 W- ^1 w5 |% ]# i always @(posedge clk)
- Y4 x3 X% b3 [2 G2 ^ begin 4 u: U B; u6 n* r
clkout11=~cnt[2];
$ x4 g, `9 d4 N' f/ ]$ g clkout22=~cnt[3];
& j# [ u) ]4 B P9 S) Y end
- m) k+ U( K, X, `& W/ kendmodule
6 \7 ?- S2 ~* e////////////////////////////////////////////////////////1 |3 M8 F8 F8 M) m! R$ i. d3 z6 l: U9 A
module datain_dataout(clkout1,clkout2,reset,datain,dataout);, I' E! j; A. ^% ~7 r4 v! z, I* X
input clkout1;
; s) U' D, S6 m2 c9 w- k input clkout2;- D" [, M2 z @; i) S; L" [
input reset;( K) J6 a) U3 Q
input [3:0]datain;$ L2 f! v% k3 o) F1 T/ [% Y3 k
output [3:0]dataout;
4 N. \* Y2 O% Q4 d7 B reg [3:0]datatemp; + N: R1 t. m, P" Q, i
reg [3:0]dataout; 5 c$ ?! S8 c3 u4 d
reg [3:0]cntt;6 d! ~; Y, j) j, d
always @(posedge clkout2)begin & H" x3 @' l, X1 S0 w
if(!reset)
7 R, U2 S% `5 V) r/ b+ m: _4 @ cntt<=0;
1 d/ J- I) L; Z else! i$ d& M1 ?# l) w- s
cntt<=cntt+1;6 O1 i! L% [/ i& ]0 C- f0 J
end
9 \: F/ E, Q/ J ; U# {' s6 [' _7 s/ w2 g+ c
always @(posedge clkout1)begin
1 \3 z( X& F d2 T0 K5 Q- z' t if(!reset)2 q% q) S/ J4 n: G' B
datatemp<=0;
8 J) J+ p1 f& y5 [8 x" K* s else
9 h6 K* ], y/ @( Q1 O& ? datatemp<=datain;
7 `# S% q, p- J" i! z end
) J8 \( ?- }4 g5 u# T always @(posedge clkout1)begin
; Q8 _0 x0 \. j% U A9 v/ ? if(!reset)& W) t! W X, i2 v
dataout<=0;
) U! A! s0 G( ]' |) J: U else8 y8 |/ G2 x) e8 V \' M
dataout<=datatemp;
$ h1 _+ p6 k2 H6 | end
( |: _2 X) k9 O B$ j. v. l ( b- ]2 t* s7 C# ?# {7 h$ ? ~3 Q( T
endmodule1 |8 y1 R* _6 D. ]. p
////////////////////////////////////////////////
4 l. y# p5 N+ }9 J# u提示下面的警告:# H7 W$ x* ^5 o5 i3 j9 k
clkgen.v(14): clock signal should not be driven (gated) by inverted logic (clock: "clkout1" (datain_dataout.v(28)); inverted logic output: "clkout1")$ _& I" \# I* R) D' L5 n" S
8 e5 M( g6 m( t) Q( V6 Y4 ]0 F2 E
# I/ S6 l" N/ k: ?- [; E
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")
& s1 ^+ C6 h ^8 {# y# A, U" @9 ^) H! P5 G) f J' w g# r# J
clkgen.v(25): BLOCKING assignment should not be used in an edge triggered block |
|