TA的每日心情 | 擦汗 2020-1-14 15:59 |
---|
签到天数: 1 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
如何写时钟模块才比较规范合理,大侠给个标准模板吧" A* a% c0 B2 U8 ^- g7 Y
9 }5 Z! H+ l& s3 X' T5 |`timescale 10ns / 1ns
( t8 I+ @ E3 {% H9 pmodule clktest(
6 J- t' X; O4 H' A2 i, J clk,
2 z7 Y/ Z9 x, D8 y# N2 l5 f reset,
3 Y+ j! d- b0 P; A datain,+ d8 f% x+ w: }$ A; \6 S
dataout);7 W) v& @. X4 q3 |* p
input clk;
& [( u) O, {/ |. u$ Y/ `( t# L3 S input reset;1 e) P, v: x K2 P' B, V1 s2 h$ \- L
input [3:0]datain;7 Z# `% e- H, l! Q4 I7 D1 `0 a
output[3:0]dataout;
) e1 G! Q1 M4 ?9 _6 P wire clk;
/ B/ {( a% `( \, y wire reset;
3 F W1 J7 K4 O wire clkout1;
1 I/ _5 |- D9 H6 e: F. g) B Q7 T0 [5 P wire clkout2;
$ {: t- v- i3 E/ q6 T wire clkout11;0 u5 u: s2 P, C, \/ y
wire clkout22;' g4 E' u2 `$ [* Y7 x* [
clkgen clkgen(clk,reset,clkout1,clkout2);
2 B3 ~: h! e) W, Q) k2 m0 r: Udatain_dataout datain_dataout(clkout1,clkout2,reset,datain,dataout);* f5 j) R% w3 Z4 a2 Z+ A7 U& n
endmodule) D3 N2 I; i' r- \+ }0 w5 `
////////////////////////////////////////////////////////////////// C4 F1 Z$ y0 {7 T
module clkgen(clk,reset,clkout1,clkout2);
: F Z& T/ ?9 X: q3 j/ r input clk;$ c# d* K" s1 Z' n2 ?0 q0 S
input reset;* [' `# M( P5 a- k! M9 n$ L
output clkout1;* f% @: k! O8 R8 l8 x$ b
output clkout2; , J& m; F, B" y$ P4 ~
reg [3:0]cnt;. R* L2 p. i8 o) Y* j: h
reg clkout11;
3 Q, |8 p T& I; }9 X reg clkout22;0 x# s- n, ~ U$ }
assign clkout1=!clkout11;
+ q M' X* \0 F2 o8 ] assign clkout2=!clkout22;! F7 e7 |# i% G1 b, }9 z
) P8 M$ u! Q- @ always @(posedge clk)begin ; M2 T) W3 F( \3 z1 J6 _
if(!reset); o0 U# Y" W% Y& x
cnt<=0;( j$ `% g' L* B, C" j
else0 N4 i/ N( j9 ]
cnt<=cnt+1;
' q: g4 [5 S/ ?9 X% O: j) h N end) V+ L" s5 \/ d2 I: d4 d
always @(posedge clk) 0 |# y8 r9 s9 W4 S, [
begin
+ ]" T4 |0 n3 n/ F3 U clkout11=~cnt[2];" t+ q- G7 a/ F- W/ R8 k! v6 a# O. Q
clkout22=~cnt[3];* S4 T# T8 Z- ]: N( y
end! F) A [" v1 a' \/ G* `
endmodule
6 u( G% v, b: |////////////////////////////////////////////////////////1 m }& _9 T" L% B0 S5 M$ n. x4 x t
module datain_dataout(clkout1,clkout2,reset,datain,dataout);
% M& h6 J2 r) v input clkout1;; H0 J2 X2 @$ ?& e
input clkout2;/ O7 Z, L, I5 X. ]; ]- A0 _
input reset;
6 K$ S- `& o- f+ X8 Z( i8 @ input [3:0]datain;
" i5 f; M- v( A( c4 \2 A% ]* i output [3:0]dataout; C* s9 i# v, c0 ]
reg [3:0]datatemp;
4 q9 D, f; u$ R7 f0 M9 U reg [3:0]dataout;
; C8 K# Y( f4 A. H4 S reg [3:0]cntt;
( w% o+ o$ r5 l x# a always @(posedge clkout2)begin
4 r! u' ~2 ?: l, R2 ]; ` if(!reset)2 {1 p2 [% t- p/ [
cntt<=0; k# x' e) D& L' {
else
1 J+ G" P, V1 q( B! U cntt<=cntt+1;
: I" D3 R0 v4 }5 ^+ p, h& X end
4 l0 F! m5 h( y1 c, H& G$ l ! h$ y2 y* f5 E
always @(posedge clkout1)begin
, d8 Z" \8 e; {/ J3 J8 B if(!reset)
" [/ _& L; W7 V. ` datatemp<=0;
' I. u( Q7 n c( i$ a7 A else. V% g2 _4 I- b8 s7 R
datatemp<=datain; 3 k) K ?$ b' f3 R
end
7 E! m' S b2 `: k1 P always @(posedge clkout1)begin , J$ N/ G! y) Y* j4 B* z; }2 `/ V
if(!reset)
9 ?* T" V- ?) b, S dataout<=0;; R( j7 q" U( G X6 U
else
+ C8 [* z9 `1 A& ? dataout<=datatemp;
( H5 P3 A, V6 C0 r& J _. w, `# t end+ @3 h# o) [' }+ L: ?! h
# V& o* X' Q7 s4 y# |
endmodule
% Z7 B: ^! a$ s7 c# o% H////////////////////////////////////////////////
8 {. C" J* h5 u1 e提示下面的警告:
! I* Y, b4 ^( s$ j8 ]. fclkgen.v(14): clock signal should not be driven (gated) by inverted logic (clock: "clkout1" (datain_dataout.v(28)); inverted logic output: "clkout1")+ I( g2 l2 y8 U! s. p- w
3 r" j4 |+ B3 ~; X6 }, M
4 Z ~8 k$ y( l5 x
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")
) q3 {8 @% G" M: m3 }4 E( ]. ?4 B2 e0 v
clkgen.v(25): BLOCKING assignment should not be used in an edge triggered block |
|