找回密码
 注册
关于网站域名变更的通知
查看: 352|回复: 2
打印 上一主题 下一主题

转——FPGA Verilog中计数器的两种写法对比

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-3-13 10:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
转——FPGA Verilog中计数器的两种写法对比
9 i9 H* h1 ]7 E, F# r/ H" U; J

6 o' S2 K. |1 N; ^( P8 L* b8 {6 O
功能是,计数记到24,清零,重新计数….- O4 L4 f. i3 b; ~/ [! C

9 y: |$ T; u, j5 k) h4 V) @. \第一种写法:! I3 Q" ?1 q( e) {8 [
( G% \& ^9 p5 ^; d6 V) H, V
module   count_debug        (( j  z5 _8 [" E+ O6 U; K

6 q( S( Q3 P9 N8 C1 H                                     clk,- M  f7 n6 J7 I- ?0 E

8 M' L. c3 C! H3 R                                     rst_n,
* {# w8 t3 ?' T, t" C' X2 w, L1 z, v! |  m* h; T# x+ u$ Q
                                     dout
  ]; [# U4 K6 p+ U3 X1 L6 P" W3 ~* j7 \
                                     );
: G: N! S# K% g0 y2 h: W
  w" U6 m4 J7 ]# K# h6 {input                    clk;: p- [: @5 ~, ^! l! \8 C
0 \1 M7 z! f6 p# e# O
input                    rst_n;7 h' D7 q) H/ `5 t2 i

' L, g8 ^2 R7 d# T" T* ?8 j$ F; Foutput         [4:0]  dout;
  h, Q% a3 U' ~$ Y
- ^( v+ c7 _! L* {7 a6 s# P! ]reg              [4:0]  cnt;# V7 x9 D, y/ U/ W* x

; ?& J8 L. ?) M. {always @(posedgeclk or negedge rst_n) begin9 D+ o6 i& h- k8 H. Y

6 o8 X* |& @* R' z         if(rst_n == 1'b0) begin
" |# J% @8 H8 s; W7 o6 b. _; n2 o/ Q0 c& }+ Y
                   cnt <= {5{1'b0}};4 N, ~+ M# X, i5 h% [; E& ]  r

$ y8 U0 ~* p- f         end else if(cnt == 5'd24)begin
5 T5 u# M' d% @
2 {0 N* \" n5 l1 e                   cnt <= {5{1'b0}};
! k" g+ C! q# M: ^5 c5 N* B/ P" I
/ r$ n- k1 x9 t) \2 x5 m         end else begin
5 ]0 E; n$ J* ?' R1 h4 i6 k
* H1 X+ B  y" d- y3 m                   cnt <= cnt + 1'b1;
. q+ w0 {" G5 P/ P6 a
6 ^# y7 `+ H/ n2 T         end* l) D% c" I4 M4 I# ~

+ l  D' a+ m4 A7 }6 G) x/ U) aend
; S8 G- P( j2 C4 ^6 a' N' N) u4 y
" T6 O3 X5 h* |# z' c2 O9 yassign                  dout = cnt;
# f6 b& v$ t6 D1 D2 P/ S, v" t( t1 ]- \
endmodule
3 e8 _; y0 A) A& O9 n/ y7 z* K8 y! h1 `6 A; V
         这种写法是我常用的方式,现在来看看消耗的逻辑单元
* H8 h5 _7 c/ V/ t) e+ @7 v, K" g4 [! o

) `9 }% c0 W8 I7 k; }* w% t2 M9 e. D3 ?* Y% B7 U+ x/ d
; Family                             ; Cyclone II                                    ;
  b9 O- _  S% ?% h( Y7 r8 s4 s0 M% w- f
; Device                             ; EP2C8Q208C8                                 ;
- U: m. `  f4 S$ K3 p7 U7 r( s. ~' p" m& \/ K2 R) v
; TimingModels                      ; Final                                           ;
& Z; G5 _  H; X( Y  Z7 ]
- H1 R7 c- ~& w; Total logicelements               ; 9 / 8,256 ( <1 % )                     ;* C" O+ @. v" w6 w  e
% C! g# O) \1 j
;     Total combinational functions  ; 9 / 8,256 ( < 1 % )           ;7 V' K2 L4 c# q

/ e6 E* _9 Q( W* \2 F+ L2 U;     Dedicated logic registers      ; 5 / 8,256 ( < 1 % )               ;9 }! \. w& J0 k1 s, _, c8 R" Z
- |* d. ?2 k* ?  A+ l+ `% r
; Totalregisters                    ; 5                                              ;! o. A0 {7 i1 q9 d) C% {
9 H2 v$ N$ D7 l: v
; Total pins                         ; 7 / 138 ( 5 % )                                ;4 m4 b! B: F& h: s$ T" v

3 c2 p! `8 W2 u% U; Total virtualpins                 ; 0                                              ;$ k7 u" s! R$ I! ^4 T2 M& v

$ l; @9 \5 ^  t& j, n$ U% Q2 z; Total memorybits                  ; 0 / 165,888 ( 0 %)                    ;
3 s7 ]7 W) l# c: ]+ O
, Q! i/ ^/ \( C" w; EmbeddedMultiplier 9-bit elements ; 0 / 36 ( 0 % )              ;) `, h# R* T) r3 [  D9 k

, n' F) s7 _2 z9 ?" W5 v/ hRTL图如下:
7 d- a2 }4 d" Y+ r. G2 |. a $ A0 y& o: Z2 I6 B# t: k
8 @1 n7 p+ O& |+ C
第二种写法:
* g+ }8 L6 P( [: \* I0 `5 F" o2 J8 K/ ?6 E4 Q) |" G
module   count_debug        (
8 b$ A1 Q: m9 ?+ x$ p9 d7 J: m5 t5 k0 V
                                      clk,
9 E8 J7 u! ?" m
6 y9 x  C5 g( a: P                                   rst_n,
8 J- k! E5 p8 f& `9 i$ d3 L/ k8 R+ Y  N1 p- {* E- G7 h( d
                                         dout
* V/ ~/ V) O$ J5 Z3 I
9 g  [: `9 T# _5 e* e: }, Z                                     );
2 p7 A6 l& ~1 J! y( K% S- t. Y0 q, s' V7 o. H3 |" `% j

0 s! d' f) |( C4 s6 w, s+ o' K5 q
7 a/ U  Y: f1 r) d+ w6 F* J  Einput                    clk;- C: G+ i! z  E) O( ~) Q& |

' Q" V, a! f3 _  d/ C. S0 h# ?  Rinput                    rst_n;
( \# n/ B8 [7 g- p5 K* P+ g, G
# B/ F& |# f8 N3 goutput         [4:0]  dout;
/ g0 x$ z, f( j: G9 }' H% Z, c
reg              [4:0]  cnt;# B9 g0 o3 M  V& T" `( C

9 r. b  w! Z- t" Kalways @(posedgeclk or negedge rst_n) begin( \) P5 v" N% y, y; R3 M

: [5 d) X6 {) r         if(rst_n == 1'b0) begin1 v- v$ K, j- z) Y: o* b

- y8 N9 m% c7 p0 s9 w7 x                   cnt <= {5{1'b0}};% N; o3 t, a0 G

% r9 v  t. g; d, Y  d$ S) |- T9 y         end else if(cnt < 5'd24)begin4 k1 \0 I2 q3 D( F4 g
$ v8 i  V" U, n2 I, Y
                   cnt <= cnt + 1'b1;
/ H0 {( u: k) p( I1 K" l, j! \" d( l  B4 ]& Y7 l) a
         end else begin/ b% Z! z( P6 t9 ~. J1 @! n3 J
1 b$ _) N& f: u& `5 ~# h7 m
                   cnt <= {5{1'b0}};
, D: i8 X9 s! H7 h" A6 P+ c; j% O" F& \4 h& h% B2 {
         end
5 X2 C! F( s) S
' H" z- B" R6 [0 dend
" a; W; B( S5 @& O" t( h# _
' E5 r2 }! O/ R7 Y8 b) y2 Lassign                  dout = cnt;! X* ]0 L; B: X# R) c
- Y/ H# ~3 i- x. U3 C  R/ ?
endmodule
' o  V& J( K6 _$ M% G0 \5 U3 E% z; i5 Q; {! U% g* T$ Z& X' F8 J' O, e
消耗的逻辑单元:
- y1 s$ h% d  y( Z0 Y- O0 |: R( {! Y- [1 S6 |
; Family                             ; Cyclone II                                    ;
  v) j6 _  P+ B; W) [" e6 b
* t' C( ]( l: [  l2 [" f& @: f; Device                             ; EP2C8Q208C8                                 ;
# Y1 G! W0 O  P: i8 o$ Q& S5 V- O! ^0 ~
; TimingModels                      ; Final                                           ;1 Y" F$ F7 }2 ^5 R4 [
( H0 w4 ?7 f1 r1 i& h6 {
; Met timingrequirements            ; Yes                                         ;
' l6 @3 a+ ?1 J, H# h. D! Q$ s2 E- A' A" m* D
; Total logicelements               ; 6 / 8,256 ( <1 % )                      ;! q0 {. z0 O- B1 U. R
3 G* \' X$ `4 D5 F0 ~$ i! y  V
;     Total combinational functions  ; 6 / 8,256 ( < 1 % )            ;
" z/ E5 `) G+ ?) q5 f; y- F) q: h0 i! \5 z2 @& {
;     Dedicated logic registers      ; 5 / 8,256 ( < 1 % )                ;# \. a* S( R6 a# w8 L

0 [# @+ `3 L/ d& l5 `; E- z; Totalregisters                    ; 5                                                ;
9 }% u: p4 G7 O5 O# \6 ~
( o( k9 z0 Q: z" C- {9 w; Total pins                         ; 7 / 138 ( 5 % )                                  ;
. ^6 l- C. U1 i6 t  W- f9 l( O! Y; Y0 Q" {
; Total virtualpins                 ; 0                                                ;
5 q/ s) g0 Z4 C3 [+ h6 l2 L  u
) ?0 f: m% u) O1 W# D3 u; Total memorybits                  ; 0 / 165,888 ( 0 %)                       ;
! M* j8 j5 ]6 f# G. E, M* O4 l" C: K) [0 X; G+ D+ D. ?8 ^
; EmbeddedMultiplier 9-bit elements ; 0 / 36 ( 0 % )                 ;
4 b6 @! Q8 z* X( f/ j$ I/ P' P, J) k% P+ E: {
9 z; q' X1 I1 X& [; w7 d
RTL图如下:
% t+ C3 R. V2 t
  @- a6 f0 R4 r' m( z4 C/ { 1 ^  N2 m9 X7 w1 R' i

0 Y2 E' d9 t; d3 V. |9 D第一种写法比第二种写法多耗了3个逻辑单元。  a4 ]6 F) L( d& \

, N. _1 T5 w$ h2 x. K从上面的逻辑单元和RTL图对比,在用计数器实现相同的功能时,可以看出  ==  COUNT 消耗的逻辑单元比   <   COUNT  消耗的逻辑单元要多。& O8 E1 N9 H3 [+ v' k! j! |6 @" M0 P
* H0 ^4 j! R$ P* m* b( i
这只是从例子上看出来的,那具体其他情况是不是,就不知道了。目前我在学习中,
/ n7 {* E9 `9 Y* x: E3 N  Z" Y0 T9 b
% Z6 O7 F8 q" m以上结论仅供参考。
6 Q5 \; a5 u3 i% F( R, z
0 o5 C6 \: r' o0 g
8 r  n5 b0 j9 x3 c1 w( o$ u仿真波形如下:, v- c3 c5 ]! e2 Y

+ L! z. M5 W* A6 r2 [( Q  @

2 M. S2 u; U. D
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-31 03:56 , Processed in 0.109375 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表