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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
转——FPGA Verilog中计数器的两种写法对比
; d5 L* _/ e+ ]

  g) {" X. [2 {6 N, o
功能是,计数记到24,清零,重新计数….  f7 |- ]9 k% U; D$ t& z0 N

) N* L$ ]% _5 @1 M; Z+ y6 r' {( C第一种写法:
# A: w% A8 F+ t" ]" ]; x( Y& L0 ^. K* ]
module   count_debug        () e) C7 `1 l- d% c$ Z% p

. j4 I- P& K" H* w" W8 k                                     clk,/ a" ~7 N( S9 m4 F

+ f6 ?2 Q% _: g6 X                                     rst_n,
$ [9 T- b7 J- \- o' N0 @8 i% F4 e7 m% s3 |- K* d
                                     dout$ g0 G8 h8 Q/ ^8 Z6 u9 s
0 W" V7 H/ Z, D. F
                                     );
& ]5 T) T5 v# b/ i
& {  @  p6 T# ]9 ~4 u& T* g0 Z9 Pinput                    clk;
- M% g1 f% K6 q; \9 o3 `  l- J. W* j, ]9 F, ]& G5 T
input                    rst_n;
9 K. K% s( E+ s6 P9 Y2 i9 r9 ^2 i# R# L
output         [4:0]  dout;
8 E) C9 e2 h: ~, c$ l
- p0 R, \% l8 ^7 Areg              [4:0]  cnt;1 d( H+ G1 n3 ~: h4 e2 E6 P0 G0 t7 B

5 g$ [2 t1 [  `3 t4 q# b/ Lalways @(posedgeclk or negedge rst_n) begin
- w) ^7 i) q0 h; ]1 t$ S* [" p) b  i- h5 x' ]
         if(rst_n == 1'b0) begin
. t6 p" V" Q2 Q% ]2 x* [3 Z
- S& W4 k# N) c                   cnt <= {5{1'b0}};* L1 `5 a7 n0 F$ g, i2 \

, ^% Z) N8 X( ~# }# K7 J: S         end else if(cnt == 5'd24)begin
. ^* d- g* W  d/ Q& i# l+ b9 F& R! ~; Y& W
                   cnt <= {5{1'b0}};
# f; Q2 J7 v7 _5 g/ I8 ]0 N9 y8 p- @1 r; u& d
         end else begin
5 z& j- Q  `+ ]8 u5 j- v7 `: |7 L5 n% g' ]3 T9 ?% \0 p' @
                   cnt <= cnt + 1'b1;
* I% p- _& j$ V8 M) v; g/ G- T8 Q* A  c6 _
         end+ n# C; r7 G/ d2 M; C
7 [+ Y" {+ `; V& t* u
end+ H1 O: e6 G; ^$ j/ G; @9 y

4 }. S" f  u1 G1 p! Massign                  dout = cnt;# `0 u: z' f" Z, {

  j( t$ r! A9 Xendmodule
) s: @: d9 Z7 m' _, g" p1 {( O7 h6 }/ k
         这种写法是我常用的方式,现在来看看消耗的逻辑单元
* ~) q1 R; h% F% ^5 k
% C7 W! k* F( y& o0 L$ \# ~2 N1 p& c

' `* i$ v% A1 _: S" v; Family                             ; Cyclone II                                    ;
* q  [% T( v5 V
* [7 m: G0 @0 r% h1 h: k# f; Device                             ; EP2C8Q208C8                                 ;7 P# b7 L  o+ f- t9 E3 m2 t3 m
; C5 x4 P) [9 A0 \0 d( ?
; TimingModels                      ; Final                                           ;
) V9 A4 B+ A8 A! t8 b& T% I5 k7 Q# \" {4 r
; Total logicelements               ; 9 / 8,256 ( <1 % )                     ;: I1 h2 K. R. x3 X1 Q

5 v  K! f8 m$ ~;     Total combinational functions  ; 9 / 8,256 ( < 1 % )           ;
$ v% h( C! _% g  r: v8 X0 I: ^% w3 h; U6 z/ a
;     Dedicated logic registers      ; 5 / 8,256 ( < 1 % )               ;
. `4 o, ]% K; v. P
5 S/ l; H: W$ W" C; Totalregisters                    ; 5                                              ;, \3 W3 U7 D# J! ?% ~. H

" ]/ X  m$ V9 R* j! [) ]; Total pins                         ; 7 / 138 ( 5 % )                                ;
* {, Z6 d8 ~% }; L  v0 x4 C) f; p) G. t( l- S% X0 N5 s  b5 A+ ^
; Total virtualpins                 ; 0                                              ;
- A# }( R/ k0 n! E4 c, o* p6 w1 v! ~7 A1 u/ h2 D0 E
; Total memorybits                  ; 0 / 165,888 ( 0 %)                    ;5 {8 v( m9 P+ b% K
; i. {! b) |$ n2 J, n. |- _: D
; EmbeddedMultiplier 9-bit elements ; 0 / 36 ( 0 % )              ;
4 h; x1 F! D9 r7 T" S# J/ V- X/ Z% b- v. L6 V! q
RTL图如下:% [: C( L+ f) p+ p6 c  W

/ G/ D9 I, W. f. W
' k5 T* _0 P+ M- x# R. I* h) ]第二种写法:" W2 D2 U  a# j  ~- ]

; A% A! c5 V0 d2 n; L" _) J! A" gmodule   count_debug        (
2 M' R3 Q6 O) _* E; V' k6 g0 ?6 |  s- l2 Z' O3 ^# Z$ @" o8 D
                                      clk,% Y' Z4 v( v; C* ^( j+ n$ `

- |/ V) b9 D  \                                   rst_n,
5 B+ X2 n8 D& Q  n& X6 [! {
) \- P, Y; }! z. k0 X                                         dout7 d. g9 v6 }% g! J' o: T! |! i* S9 W! M
: r) L2 o6 ~9 q" ~. d+ n4 F
                                     );
7 S5 C( A% A3 ^6 F. @6 Y1 Q
8 H1 y6 B6 |4 j1 s
% d6 L. Z1 J8 k+ G" O( e) V9 X+ N/ l2 d3 k+ a
input                    clk;
+ j6 D8 Z+ y7 W
4 I1 z* _, R% Q5 T5 y, Minput                    rst_n;
' M6 T) A& K" z  a  I4 n( |* ~+ G3 A: g7 _  G; m4 O( m9 g+ N; N
output         [4:0]  dout;7 ?3 a0 {/ l3 ]6 u5 S
8 y0 t8 ~5 A& \0 p
reg              [4:0]  cnt;* L; E3 [: Z+ ]; q7 [1 g* R( }$ A+ x& W
, U6 U  c6 C- I: Q/ {
always @(posedgeclk or negedge rst_n) begin
7 O2 P1 B9 I  D
, Y" Q. W8 u+ ^         if(rst_n == 1'b0) begin7 j5 R) i/ q* `$ ~* B

2 ]# Z- T  I. B+ x6 i5 n2 E) H                   cnt <= {5{1'b0}};& V' e5 d( A1 e3 V9 W2 f
. n0 N" c7 F. q" p3 g$ b
         end else if(cnt < 5'd24)begin
: {, }  z8 X3 B! I" b( K! L: y- C& d
                   cnt <= cnt + 1'b1;
# _  l  ~5 q& D2 o5 z* u' O* c0 _3 j9 L; W; {6 X
         end else begin  z" @3 e+ J: s0 G2 f6 l0 G

9 h. X) n3 q: c: s: o                   cnt <= {5{1'b0}};) f- H1 `  G; D/ q. Q4 e) u
; T; e7 t: S* _( U" }4 {
         end
( d. R9 {8 j. b, u: M! `' t, K5 R; ^( W
end1 I) h; u% z0 ]- I/ Y4 ^" N

& F9 W+ a1 y. X0 ?! f0 Wassign                  dout = cnt;
3 a) Z/ [7 D; W/ f9 a
+ S7 J! ]2 o( l6 ?) _; N. Zendmodule
: i% C: a' b0 W# |9 ]
& C4 u# ]7 M6 _9 J8 t; {消耗的逻辑单元:, P/ P1 v" R1 I

" |2 H8 X- H5 X, T; Family                             ; Cyclone II                                    ;
9 F6 \9 l0 L$ H( T) l
1 W! g+ c" o, i; @6 d. R0 `; Device                             ; EP2C8Q208C8                                 ;
7 `* r3 i6 c2 b8 B% ^8 I& E1 T) W& e
; TimingModels                      ; Final                                           ;) y2 L5 J. ~) J+ X
, R* g/ X" U- ?, P" O+ q
; Met timingrequirements            ; Yes                                         ;# ?7 b+ ]1 `# U9 r: h
$ ~; c0 [7 i8 D, |4 Q
; Total logicelements               ; 6 / 8,256 ( <1 % )                      ;2 s5 ^/ q+ ~& S2 M# v8 j9 ]! d
% ^5 Y; u# D! C
;     Total combinational functions  ; 6 / 8,256 ( < 1 % )            ;. F1 q2 N% f" C

! Y2 z6 m/ z: F- b( z3 f' _;     Dedicated logic registers      ; 5 / 8,256 ( < 1 % )                ;  _2 P: I6 R3 Z
" @- p  I' J* g; M: d
; Totalregisters                    ; 5                                                ;
* y+ L  c+ r, {" Z, m* J
" R7 [" J: J2 `5 e" y; Total pins                         ; 7 / 138 ( 5 % )                                  ;- ~+ I0 x3 ]; U" s3 |! q

* s' F  `' Y* J* q+ b4 s; Total virtualpins                 ; 0                                                ;
/ G4 U4 Z4 f- l/ X+ X4 Y3 r( E1 Q; y, ]9 C) H- e
; Total memorybits                  ; 0 / 165,888 ( 0 %)                       ;
! O% I& W# g) g7 H+ u$ `4 m& k- y: S- [( A6 ]6 B; ]
; EmbeddedMultiplier 9-bit elements ; 0 / 36 ( 0 % )                 ;
  G) B$ C; \! f: c) R7 P" |; Q/ E  A  T0 E
9 H) h+ C1 `9 A
RTL图如下:
$ ~. G8 A/ k2 E- O( I! x6 o, C7 i
% m6 u$ K9 J4 V- `
8 ^+ U5 o# @! E0 B
第一种写法比第二种写法多耗了3个逻辑单元。
. y8 E9 n* Y% s* ]  j0 \  D& I6 i  L9 r* q3 V3 @7 c6 n' U; S* k
从上面的逻辑单元和RTL图对比,在用计数器实现相同的功能时,可以看出  ==  COUNT 消耗的逻辑单元比   <   COUNT  消耗的逻辑单元要多。" Y$ P% a7 `% |/ p/ A7 `/ f
7 e9 C5 L# t1 u: |
这只是从例子上看出来的,那具体其他情况是不是,就不知道了。目前我在学习中,
8 ^! k* J- s0 y- F
2 d5 y2 G" B  m4 R) h8 Z) k/ ^以上结论仅供参考。
3 ]% @4 L$ g* E4 x
- E( i& G2 S4 u( g* O) E
$ D+ O7 l$ e, H- O仿真波形如下:
" C9 `7 h$ q: A! A3 g+ V
# t7 n8 ]; b- [- V8 k* j

) F% `: R) ], \' D! f/ D, c
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-29 15:14 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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