|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
转——FPGA Verilog中计数器的两种写法对比
7 v- R3 @+ Y# t. O2 Z! b. N. J# G1 M, b5 G% }" q7 ]
功能是,计数记到24,清零,重新计数….
$ R1 Y: X4 [% r0 }' k8 X/ v5 R* x2 i* H% c. w1 B
第一种写法:* ^6 S+ F; w1 h$ h
) A( ~ Z7 u; g. k" U. G+ Q
module count_debug (0 ^! @8 }+ M1 B9 ?7 i, \4 ] M" y
0 f! v2 |! y6 w) J @
clk,
0 {6 P1 j) ^, B" O4 V E# B: b4 |, a) M1 K3 z
rst_n,/ r9 J+ u; O2 V, x( {* T Z
D- Q$ \7 {/ L8 o9 n* {' N dout
+ O4 q& F ]9 ]6 a% ]8 o7 F. S9 j# C/ j2 {* Z
);
0 K7 \, X9 V6 ^! V1 B
% `3 [6 H; x* D9 s i$ F- f9 o# Tinput clk;
1 G4 y8 Y0 i/ D' D# J; ~
3 F l- ^; H- n! finput rst_n;# F) d5 M: g+ p7 S# S0 c
X$ d! V4 P2 ~; `; _) g% M% s7 I1 m6 ]
output [4:0] dout;% I/ _: l* _4 q; ]& N! E
0 O' l* B/ P0 g5 T- |; @reg [4:0] cnt;
0 W5 T$ E& l3 S/ u/ Y. \* z8 D" `5 q8 b3 B
always @(posedgeclk or negedge rst_n) begin
8 V0 v" F2 |/ X" n- X2 u
+ D0 z5 n0 a, P; m7 L if(rst_n == 1'b0) begin
4 {. S0 k! Q) p4 `7 [5 s9 ]- F& m1 G! e
cnt <= {5{1'b0}};
9 A9 \$ J1 t. s+ r- V1 w8 H$ ~7 _) y+ ^1 _# e2 h1 m2 s+ Y
end else if(cnt == 5'd24)begin
4 e6 R% X: l4 h
8 v7 w9 Z z2 W( x1 @8 p cnt <= {5{1'b0}};
$ W& V- J0 |- z
# u* X+ w1 d# V2 ] end else begin
+ Q: n8 v, ~1 n D! T
9 S$ K! b7 r$ _6 \- `) ?6 u cnt <= cnt + 1'b1;
, d$ H) U, P* {( J, M( ^3 h0 Y) `' [9 Y0 b
end. v* G A% t0 b, z
0 h8 G# @4 K* Z' Y" E# L% d
end
: |4 o* T" t5 | a7 U i0 C! w$ Q6 v6 `1 v
assign dout = cnt;
* q) e. F* i& a* G8 m9 P. P2 C0 z. c/ S& l
endmodule6 D# F' N7 k# \5 S" G3 X; m! g
9 A3 x) a" [9 {0 \
这种写法是我常用的方式,现在来看看消耗的逻辑单元
6 E2 `& h9 N0 ~" Y; ~) _) O
6 b" s5 i/ ~& N, K3 |
" O* L" G& O4 L: s1 H) A
f$ a: Q9 ^+ \; t" h! [; t; Family ; Cyclone II ;6 t* n j- m/ V4 M3 [" E
! x2 T$ R& Y8 p; ^- R6 C& H
; Device ; EP2C8Q208C8 ;6 R B' T' V3 [0 x2 C7 k' q0 A
4 G; C+ _$ S* J* ]; w
; TimingModels ; Final ;
6 n, u7 X% Q6 |# ?9 `" U9 Z, z" p7 ^& U" y2 E( X2 U$ ]1 [
; Total logicelements ; 9 / 8,256 ( <1 % ) ;6 q( F, O1 J0 s0 b/ W) O4 ^
* i, _8 \5 |- h/ H) D g; h; e+ s; Total combinational functions ; 9 / 8,256 ( < 1 % ) ;
4 g3 c+ Z3 A# o. y. Z9 n* }, Z+ m j" D& x" S2 Y9 t
; Dedicated logic registers ; 5 / 8,256 ( < 1 % ) ;, x: I( T' S9 `2 M" b, _1 e0 s
7 t* Z9 n+ a$ [* \: `
; Totalregisters ; 5 ;4 s4 O( V. b$ G$ K! K+ o7 n
! D: ?6 c( W8 q! w/ l* n3 A, c7 {
; Total pins ; 7 / 138 ( 5 % ) ;
1 A" @+ a+ Q( ]# f- s& r* \7 ]7 y/ T' A& D# W0 g
; Total virtualpins ; 0 ;- d# `: O, a) h2 i+ m% |6 l0 a, s+ l
7 K3 i$ [ t5 Y
; Total memorybits ; 0 / 165,888 ( 0 %) ;. `3 C* N8 W; Q- B |
2 z& ~" ?+ y, L2 Z3 j; EmbeddedMultiplier 9-bit elements ; 0 / 36 ( 0 % ) ;
1 ^6 S* K Q2 [2 L- Y/ X4 V1 a$ h8 g" O0 m# i
RTL图如下:3 `$ s: K* l: v! F g" h8 o
0 u( G w4 @; `. H8 O& L: Z
* C% Z4 ~; q/ N6 L; g+ @' U第二种写法:
2 [" U; G* z5 ?7 C% P2 @+ p: V/ c8 o, S- w" m" `* H K
module count_debug (
0 H `( L, Y2 H4 P/ }, {$ @7 h
" u s' i" ?0 x2 V: h7 e clk,
& U/ b1 ?/ V! p
5 U4 Q" q, N' K8 E rst_n,4 k9 ^: l/ G, m& @" z5 s# o0 P+ g( W
\. i/ J' O/ m: H5 y7 N dout
, ~, w; j& x, y2 k0 I4 i
) o& z4 g8 F! J );8 J- w6 S3 _$ P" I" h) k: I
2 L" H8 }; n* T$ }: E
- J' i6 s) w$ Y% q) T& h
" {: a4 Z4 G- v1 B) s' j* v3 R
input clk;! ?/ V6 ^0 t8 V" R4 P
+ a5 ], E- Q0 [+ y' Z
input rst_n;7 R" K# _, B$ H
; t! A' ~9 y( b& q
output [4:0] dout;
1 B* u: w; j0 ~1 d7 Q3 n" ?9 l: ^) G% R" P/ ~ {' d+ T" \
reg [4:0] cnt;
. D! D+ v0 `1 T; m" A
8 u' s$ V. C1 @& J3 \7 V+ i( T* @always @(posedgeclk or negedge rst_n) begin
! }4 B2 ]$ R( Y" G6 Y
/ p9 u: ^, `# g7 ?# x9 y" Q if(rst_n == 1'b0) begin: ^! B' D7 P- a1 T
* H$ V7 `6 h. U* X3 Y2 E: S
cnt <= {5{1'b0}};+ c- A" x8 ~0 t- L: o% r
7 g, n) ?: G, o1 T" D$ P
end else if(cnt < 5'd24)begin
9 I$ T, Y$ H \9 ~* E+ _, c& D# y" e& ]: J8 V, t1 v& f- R
cnt <= cnt + 1'b1;
8 `$ o* E9 g0 Y7 ^3 n
' M* W5 G P5 }: R6 s" I: s( m! w end else begin% x9 d! k! T0 \" R1 ], H
) ^: u7 p: L2 a4 ?" W cnt <= {5{1'b0}};2 h( e7 i" r X
6 D7 K8 |, u8 [( ?3 q1 [% m end
3 t5 ~/ y' @: h0 V) A2 V ?
; E" B9 H7 r! ^% e Cend
& f$ s* _% Z6 L. x, I. c1 n: j+ y) ~3 r) H8 X( N3 R
assign dout = cnt;
, M7 I4 [& Z* K* l
8 L* _4 T; p, n! rendmodule
, j( p/ X0 J+ @7 C7 {5 {0 z' x" p4 ?- O' A
消耗的逻辑单元:
, x4 Q* y& A: e! R4 I0 g7 K; x, }
; Family ; Cyclone II ;
5 M" b" v9 L6 X1 Z$ C: a# Z0 l$ ?/ H: U$ {6 ^' L
; Device ; EP2C8Q208C8 ;6 _- h( i" y7 S2 ?& E8 J
" o$ s9 ~4 n# {# x4 j; TimingModels ; Final ;6 R* }* C$ ]& Z. q7 @/ F
7 W0 k& V1 z) k+ p5 w, h
; Met timingrequirements ; Yes ;
/ F9 w; g+ b6 C! ~5 j4 i- C. H* a
- @- s3 Q, \: {- d( U4 n' H; Total logicelements ; 6 / 8,256 ( <1 % ) ;
& e! j8 p6 A% u! m; F4 c2 }5 u) B- J9 E
; Total combinational functions ; 6 / 8,256 ( < 1 % ) ;
. P" X' N6 n9 V; Z6 g. [0 O
0 E) k: t& i6 m) w9 C; Dedicated logic registers ; 5 / 8,256 ( < 1 % ) ;$ n: q/ M9 g4 W$ P' i
" P x6 A: e3 y; ?8 V' O' G; Totalregisters ; 5 ;7 ]- Z# X1 h" j [/ q1 y
" D, s1 q' M! T* D! ~! S; Q4 m( ?
; Total pins ; 7 / 138 ( 5 % ) ;0 f L- V3 u7 W! ]0 {* i
* H7 K- a% s- s: V3 G
; Total virtualpins ; 0 ;
, _( t' ?/ d; G! I' I% r
D; A( F" x; W! z! ]% r6 L; Total memorybits ; 0 / 165,888 ( 0 %) ;' f1 q4 z) S0 s' [ R, M- a1 s
4 G" W( ?3 }6 j# d" S7 r6 D; EmbeddedMultiplier 9-bit elements ; 0 / 36 ( 0 % ) ;* H8 x# {0 Y# C1 J+ Y! G
% _. Y4 D" {' c4 M
$ s) r* p; ]* b8 N
RTL图如下:. r* e! o! ~( R" i* Z2 D! m! I {1 i
4 e3 G* z' P. Z' B/ z* _$ z 3 ?4 C& V* A* X* [8 v3 k
( J* N* b2 v. y, z }0 [2 T
第一种写法比第二种写法多耗了3个逻辑单元。# q5 R! K9 R; w9 k/ J
; J# } H9 o& z3 K! k Y
从上面的逻辑单元和RTL图对比,在用计数器实现相同的功能时,可以看出 == COUNT 消耗的逻辑单元比 < COUNT 消耗的逻辑单元要多。
" V" V! j6 C/ W0 \# `+ l; \
2 O& f; Z% n6 L8 }, p0 T% B! b这只是从例子上看出来的,那具体其他情况是不是,就不知道了。目前我在学习中, c$ E/ Z0 A( k5 [6 a" A
& M- w ]7 t, x& }1 C
以上结论仅供参考。
+ b1 ]- D u) Y x' S& c& ]; i: S. e7 |/ D& g" Y$ B8 r
6 {2 Y6 a" y: g9 g仿真波形如下:( j9 A' ~+ S4 q: _9 x! }
0 v/ h, K. S3 F
|
8 w& n) v8 _& Y M |
|