TA的每日心情 | 擦汗 2020-1-14 15:59 |
|---|
签到天数: 1 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
如何写时钟模块才比较规范合理,大侠给个标准模板吧& x& c( r! {; }% j$ R$ H
% ~* Q8 v& D1 p! y: f) B`timescale 10ns / 1ns0 M. k7 A; C# R1 R
module clktest(
, D1 b: m/ V1 R% d+ I; `2 j clk,
6 j# i- v, ^6 g8 b! q# Q3 a reset,, \# @5 Z$ s4 U, p
datain,& }' Q* {6 f3 w7 Q' T) s& b9 \! r
dataout);5 L, D4 K3 J; {, d) H$ ` \# V
input clk; 4 C7 B: j; T! {4 I5 n
input reset;
+ B1 J' t* x: C; u input [3:0]datain;. E# M. }" b; L' L+ p
output[3:0]dataout;
- o2 i% @' g, l) | wire clk;
8 f4 H4 z a) }8 e# z b' b wire reset;
* E5 h4 U, X1 P& ^ wire clkout1;
% f1 {5 y4 D# Q8 _ wire clkout2;
/ m6 F: q0 f, K: m7 } wire clkout11;4 x. H1 A' r- u9 i+ I* A+ l4 n3 U& L
wire clkout22;
9 Z0 S R k' ~0 Wclkgen clkgen(clk,reset,clkout1,clkout2);
0 r9 q7 ]( B1 i. S: E4 E- ddatain_dataout datain_dataout(clkout1,clkout2,reset,datain,dataout);
1 R, A- P+ z! |# t8 d, Nendmodule
_7 Y. Y0 o0 p3 ~) v# w9 d9 e8 g/////////////////////////////////////////////////////////////////
" T! ? I1 _ D4 s' ?module clkgen(clk,reset,clkout1,clkout2);
: T' K( m5 j; B; ^; w input clk;& I: R$ C0 L" i) n. c \) [
input reset;% c% K A2 K! Y" y
output clkout1;
" m, H2 U, F. e% }! d( t5 g output clkout2; ( h$ Z7 _- a) k1 c& [9 @) {+ X
reg [3:0]cnt;# B/ h$ e$ z* M6 J- ]* X
reg clkout11;! `9 s) ^# i0 g
reg clkout22;
9 P1 v `3 e2 f+ p/ V |% I assign clkout1=!clkout11;
/ Z$ j7 I: \7 A- D assign clkout2=!clkout22;
) o3 ~5 ?$ H4 Y 8 f( p& Y& J' d4 R# g, _
always @(posedge clk)begin
2 ~2 @$ L' k0 H h S4 ` if(!reset)
! x; X5 n/ H% W* D5 B cnt<=0;
- D/ G' `. i0 i/ W* X else- d @# v& h8 V$ s+ s- E6 g, ^
cnt<=cnt+1;
6 a: O. p' m* r4 z, b end
4 z- i+ M j7 Q! f always @(posedge clk)
* R' B: B( e; K/ V+ N" Q begin
; [( L# g; \$ [) U$ n6 e clkout11=~cnt[2];, O K, Q9 I& v# l
clkout22=~cnt[3];
- X+ S& Z/ P# F7 T" [; t end
' O- s; o' _" J6 a O' ~. \ F8 Oendmodule0 |& \( A1 k2 G+ s
//////////////////////////////////////////////////////// X E$ Y7 u) m% I3 h
module datain_dataout(clkout1,clkout2,reset,datain,dataout);% P' J* S; S% q& U I/ I
input clkout1;- u% m' Q! r* y
input clkout2;# X% u3 t6 h. N2 c1 t
input reset;2 p# Y# X3 |' }3 \
input [3:0]datain;/ `. l! d' y* k5 V8 t) K- q+ }
output [3:0]dataout;
: v7 f) K6 e. Z) {: a" Y. S reg [3:0]datatemp;
. I" R* h- Z: o2 V' d/ H reg [3:0]dataout; ; c% c2 ?# e% w$ B+ ?
reg [3:0]cntt;
& j) T" @4 I1 U/ d4 R always @(posedge clkout2)begin 6 x* ]# X# \' e- O$ P( D3 {
if(!reset)
( t @) [5 n! W& V cntt<=0;
4 G$ D5 Q% ~. _" E; r else
2 i, a6 u% w1 o; ^. ]! M cntt<=cntt+1; ~. Q2 d2 d( D! V
end
6 l. W! A E) e. m; B7 Y 4 y, N1 t+ `: W" W
always @(posedge clkout1)begin - i# l' a' S9 N. p' N; P
if(!reset)
6 s$ w+ A; G1 @ datatemp<=0;
1 I4 v7 a \0 S* L else! x. J; B8 S5 t# n+ B n
datatemp<=datain;
) X4 b1 r. D9 D+ q end& ~. V0 G/ n+ K |! o
always @(posedge clkout1)begin 3 P y2 ^% Y# B: E
if(!reset)
$ q M4 R* o6 K- V7 w9 n- h1 F dataout<=0;- z# `* ]. ?, k% m }4 }
else
& S8 w1 v% _! I5 ~ dataout<=datatemp;
, f9 F1 s) R" h' l7 b% g6 w( X end
8 L$ j, b: W4 V d" v$ S8 ~: n
endmodule3 G# f- I+ `6 n) y" x( d5 O
////////////////////////////////////////////////# ]; _+ m# `% H) f1 ~ P
提示下面的警告:
( ^) f: U6 U3 Z$ R1 [clkgen.v(14): clock signal should not be driven (gated) by inverted logic (clock: "clkout1" (datain_dataout.v(28)); inverted logic output: "clkout1")
; F" Q% e) ^1 {" K) I' j7 v) h& _
" i# `0 |5 N( M
) E$ x5 w. }1 I( 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")0 B# \0 o) Z$ i
1 ]* H* a1 T: m1 j+ A
clkgen.v(25): BLOCKING assignment should not be used in an edge triggered block |
|