TA的每日心情 | 擦汗 2020-1-14 15:59 |
---|
签到天数: 1 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
如何写时钟模块才比较规范合理,大侠给个标准模板吧
9 i) X& P5 p1 C5 k
( U/ w- h. N* E8 s7 }2 Z0 V3 k`timescale 10ns / 1ns7 L6 w% R, S, |0 j7 Q- u
module clktest(
- b+ ^$ i$ J7 f* ^: @1 r clk,
+ p% I! Q& D7 Y& S reset,
6 ^% h6 }- ^2 M) V: X datain,9 e( J5 v0 t$ h3 Q9 ~- m: l! \/ Y* ^
dataout);* g! f" |4 ^' A% v$ O) v$ x
input clk;
. n$ n+ b; J' V) T, ^1 P9 V2 [ input reset;
' F" n) t) s: `) l6 L9 y# s input [3:0]datain;
" t3 s# ?; O- p* B+ \ output[3:0]dataout;
+ h- w1 G7 D; H( a wire clk;
1 q A6 @5 D9 l; P7 L' m: ~. k% h wire reset;4 Z5 A0 S3 b# Q N/ P" S# c
wire clkout1;$ t1 Y- B) U: x. p. |" ~
wire clkout2;& s* w9 h) L. L$ j3 I2 t
wire clkout11;
6 b1 H! T7 O% @: G! e/ |3 G wire clkout22;
, ]1 k( t) D% G! [( U1 Dclkgen clkgen(clk,reset,clkout1,clkout2);
4 c6 r1 @9 q) b, L, X2 W- cdatain_dataout datain_dataout(clkout1,clkout2,reset,datain,dataout);
1 O7 v3 |% V* R' }! Nendmodule# {/ N8 L6 v1 B
/////////////////////////////////////////////////////////////////
- S, N7 S3 ]/ Gmodule clkgen(clk,reset,clkout1,clkout2);; _6 I$ ~ ?0 Q( d7 U6 Z! `
input clk;
+ R5 G2 z9 Q2 q+ ^8 w6 a; v0 \ input reset;' |! B; F, b; ^ [2 b$ q4 }5 q- m
output clkout1;
2 f8 ~$ b% E# H& s( K output clkout2;
0 V( f: Y0 z( J6 A* { reg [3:0]cnt;" W' D- u. V0 E" m( M W# U
reg clkout11;2 R% V2 |6 l- u" H
reg clkout22;2 o: V& t3 h8 ~" t
assign clkout1=!clkout11;
3 e' `& P) M( q assign clkout2=!clkout22;
: X, b/ ~: e0 h) S# m/ K4 c
9 P% B% V* ?$ B8 W9 P always @(posedge clk)begin 5 ~* ?) L3 g! X" ]/ n" ?. n
if(!reset)" e1 d: b' q E0 T
cnt<=0; ~ s$ t% p/ k. h* I" f
else
3 r( @7 {# v' r' Z2 G. n4 B" h cnt<=cnt+1;/ D/ ~# g3 l! r# e, R* E2 @
end$ Q2 f, s1 L) ?+ h9 d6 ]+ e
always @(posedge clk)
2 r1 F1 k! Y! v* u3 n begin & U% B6 y! q" _1 G
clkout11=~cnt[2];& D& J: d2 O* [7 l
clkout22=~cnt[3];
5 C$ e o( S( @6 ?, D+ Q, @: l end
2 O( J( ?- y" O: sendmodule! C8 R* [& t/ t
////////////////////////////////////////////////////////- m# o* ~* L# e2 s9 P
module datain_dataout(clkout1,clkout2,reset,datain,dataout);
6 P+ t& L- g/ r8 T input clkout1;9 y8 W5 ?" s* T1 {! b4 E& L/ [
input clkout2;1 ^( \: I, q7 `" j
input reset;1 m6 s; I" K$ p3 O C$ ]% K7 ^5 |
input [3:0]datain;: |/ E4 k1 G& s$ g9 Q. w0 _/ ^
output [3:0]dataout;
4 K# m" W, c" U8 W$ k8 _% _7 ? reg [3:0]datatemp;
0 D- _: k! U) }) R9 H' A reg [3:0]dataout; ; m+ p+ a- _8 B# C
reg [3:0]cntt;' g& O4 H; I( \% P3 x9 _" l
always @(posedge clkout2)begin ' W9 l& { x& |* C0 L4 {! y
if(!reset)
; o9 k3 b& @/ G% V cntt<=0;
6 ?9 ?) m7 |% t) y- x0 b4 h" M else
7 c: S. P0 s, q* d- F. z cntt<=cntt+1;$ } L- s# ^/ t: ^" h e1 R
end* ?# g v4 ~ _# r' e( T
+ E/ T# `% f- w1 o% N, T always @(posedge clkout1)begin $ L9 J" n6 s) t M6 s3 u
if(!reset)
1 O5 n- T% l; I datatemp<=0;4 w( b/ n$ O6 p
else
. l D8 z% C- u datatemp<=datain; 5 P2 m7 I) O6 y. y# Z' @
end
1 s- S4 S7 o3 b% M+ n+ S$ R, K& i always @(posedge clkout1)begin
/ C8 w. o' t3 C7 R2 s if(!reset), h( g) N7 ?( _& a$ E. V
dataout<=0;
. \0 ^( ]4 N% F. c& z- I; v7 p else
# R/ l N$ c+ a2 l) G dataout<=datatemp; . y8 o |3 e. ]2 v; s5 K$ U
end. ^: k4 W D8 ]
% j* p" n) i- e1 J8 Gendmodule7 ^+ Q7 ~5 s& t( l. A9 ~" S
////////////////////////////////////////////////
& c) ?- r7 i/ W" p9 T, O) W8 i提示下面的警告:: K2 B1 f7 r) J$ ]7 J# W( d
clkgen.v(14): clock signal should not be driven (gated) by inverted logic (clock: "clkout1" (datain_dataout.v(28)); inverted logic output: "clkout1")& q5 |# ^# I X+ A) ]# m+ \
% q8 \8 }$ O5 s
7 d/ d F( P1 u4 G, q3 i8 x: Y# iclkgen.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")
& a* C6 @* \/ X" O+ M. C
1 A/ h+ m8 b! rclkgen.v(25): BLOCKING assignment should not be used in an edge triggered block |
|