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

转——FPGA 设计的四种常用思想与技巧之一

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-5-30 07:00 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
转——FPGA 设计的四种常用思想与技巧之一

0 v# V) P' h( [" z7 \, B4 x+ y: j/ Y) Q( z  H4 X& u

$ S  N# h  n) \4 z* [' I& D' o0 z, y( v1 l4 W% B5 m

+ i1 d- C* H' Z, F" @    本文讨论的四种常用 FPGA/cpld设计思想与技巧: 乒乓操作、 串并转换、 流水线操作、 数据接口同步化, 都是 FPGA/CPLD 逻辑设计的内在规律的体现, 合理地采用这些设计思想能在FPGA/CPLD设计工作种取得事半功倍的效果。FPGA/CPLD的设计思想与技巧是一个非常大的话题, 由于篇幅所限, 本文仅介绍一些常用的设计思想与技巧, 包括乒乓球操作、 串并转换、 流水线操作和数据接口的同步方法。 希望本文能引起工程师们的注意, 如果能有意识地利用这些原则指导日后的设计工作, 将取得事半功倍的效果!# S& Z+ R/ i* L) m# j+ O
& o# Q/ [6 h% j" H- \5 L
) Z7 a9 [" M1 P0 a

! S, l8 L& N* X9 v& x& @3 C一、乒乓操作7 B7 }( ^- D: r. v, S

3 O5 Q/ v2 y4 ~2 Q' e! ~* M  \8 i

5 _9 v0 y. [, J  m  @. R    “ 乒乓操作” 是一个常常应用于数据流控制的处理技巧, 典型的乒乓操作方法如图 1 所示。6 j7 k4 X& w) w7 G* Z

# T. w% g% A) _4 k, Z 7 p6 B* b0 T0 F' p8 M! }, L

% W) h; |, X) w# N( y; w' s( C9 O& b8 r5 f

* z9 X: k) @3 |* _8 r    乒乓操作的处理流程为:输入数据流通过“ 输入数据选择单元” 将数据流等时分配到两个数据缓冲区, 数据缓冲模块可以为任何存储模块, 比较常用的存储单元为双口RAM(DPRAM)、单口RAM(SPRAM)、FIFO等。% g: s0 }( C+ a4 e; f% J' T& D

# L$ l: \/ R8 E& t7 a) s6 J+ L
1 D0 E3 q4 r) V" p: O4 M; L1 c% d; i  G& z
    在第 1个缓冲周期,将输入的数据流缓存到“ 数据缓冲模块1” ;3 h9 O$ L: M% Z* r% E- C/ V" l

- D) n; G: g2 B: Z7 d    在第2 个缓冲周期, 通过“ 输入数据选择单元” 的切换, 将输入的数据流缓存到“ 数据缓冲模块2” , 同时将“ 数据缓冲模块1” 缓存的第1 个周期数据通过“ 输入数据选择单元” 的选择, 送到“ 数据流运算处理模块” 进行运算处理; , c( V" f; ~  j( ]8 `4 m- L
2 U% U! V* E& r4 E' `. Y  m
    在第3 个缓冲周期通过“ 输入数据选择单元” 的再次切换,将输入的数据流缓存到“ 数据缓冲模块1” ,同时将“ 数据缓冲模块2”缓存的第2 个周期的数据通过“ 输入数据选择单元” 切换,送到“ 数据流运算处理模块” 进行运算处理。 如此循环。' U. N6 q% D( S+ C- q
( A; p2 o% h+ f) }2 O+ ~
* a" R' g- f$ n% }

- Q9 ?7 d/ o; f& i' O3 H    乒乓操作的最大特点是通过“ 输入数据选择单元” 和“ 输出数据选择单元” 按节拍、相互配合的切换, 将经过缓冲的数据流没有停顿地送到“ 数据流运算处理模块” 进行运算与处理。
& e& ~3 T4 q* `3 A9 ?8 v- I1 [& R' B
9 |3 Y4 V5 o$ i" \( }* D
. G7 _3 ~. V% w8 A% B
3 t! I8 N% d0 M6 l2 w  c" O' W    把乒乓操作模块当做一个整体, 站在这个模块的两端看数据, 输入数据流和输出数据流都是连续不断的, 没有任何停顿, 因此非常适合对数据流进行流水线式处理。 所以乒乓操作常常应用于流水线式算法, 完成数据的无缝缓冲与处理。
, B+ e) p% d4 x  b0 h# ]
2 u# ~1 T+ k$ y9 ~) t
6 j" f8 I" f0 e5 V6 T1 N8 J$ I) C! m5 r2 _
    乒乓操作的第二个优点是可以节约缓冲区空间。 比如在WCDMA 基带应用中,1 个帧是由15个时隙组成的, 有时需要将1 整帧的数据延时一个时隙后处理, 比较直接的办法是将这帧数据缓存起来, 然后延时1 个时隙进行处理。 这时缓冲区的长度是1 整帧数据长, 假设数据速率是3.84Mbps,1 帧长10ms, 则此时需要缓冲区长度是38400 位。 5 ]9 S! s+ `% ]+ n, k

9 B/ e# B" x9 S' E# ?
6 ~& |5 x; \; K7 p  J
- N( @- N; q4 ^    如果采用乒乓操作, 只需定义两个能缓冲1 个时隙数据的 RAM(单口 RAM 即可)。 当向一块RAM 写数据的时候, 从另一块 RAM 读数据, 然后送到处理单元处理, 此时每块 RAM 的容量仅需2560 位即可,2块 RAM 加起来也只有 5120 位的容量。; L3 y1 R/ d1 z" E3 L6 V+ O; e
$ _  o- }8 q9 N# B* R

; F( d# I5 p4 P9 ]' d# Z7 @* t: g4 O  s) V/ N5 f( J( l: X9 R2 m7 L
    另外, 巧妙运用乒乓操作还可以达到用低速模块处理高速数据流的效果。 如图2所示, 数据缓冲模块采用了双口 RAM, 并在 DPRAM 后引入了一级数据预处理模块, 这个数据预处理可以根据需要的各种数据运算, 比如在WCDMA 设计中, 对输入数据流的解扩、 解扰、去旋转等。 假设端口 A 的输入数据流的速率为 100Mbps, 乒乓操作的缓冲周期是 10ms。 以下分析各个节点端口的数据速率。2 C! ~/ q+ b/ s9 a  u' U) |, w

& y( j# V) V( |2 u7 ?7 m1 X5 b, q* J2 I7 o! I! F) A
) e5 l! k2 }6 }5 s  o

; h  F. \+ g) T% ?5 C# u+ l6 l
* \+ ~0 D5 A$ I* A    A 端口处输入数据流速率为 100Mbps, 在第1 个缓冲周期10ms 内, 通过“ 输入数据选择单元” , 从B1 到达DPRAM1。B1 的数据速率也是100Mbps,DPRAM1 要在10ms 内写入1Mb 数据。同理, 在第2 个 10ms, 数据流被切换到DPRAM2, 端口 B2 的数据速率也是 100Mbps, DPRAM2在第 2 个 10ms 被写入 1Mb 数据。 在第 3 个 10ms, 数据流又切换到 DPRAM1, DPRAM1 被写入1Mb数据。仔细分析就会发现到第 3 个缓冲周期时,留给 DPRAM1 读取数据并送到“ 数据预处理模块 1”的时间一共是 20ms。 有的工程师困惑于 DPRAM1 的读数时间为什么是 20ms, 这个时间是这样得来的: 首先, 在在第 2 个缓冲周期向DPRAM2 写数据的 10ms 内, DPRAM1 可以进行读操作;8 }0 J; r; d6 w4 ^, k
, u$ x1 n/ e$ Y; }

) [1 Y* |& s& D& s) m+ _' V
) ~% V: F2 R. d) x    另外, 在第 1 个缓冲周期的第 5ms起(绝对时间为5ms 时刻),DPRAM1 就可以一边向500K 以后的地址写数据, 一边从地址0 读数, 到达10ms 时,DPRAM1 刚好写完了1Mb 数据, 并且读了500K 数据, 这个缓冲时间内DPRAM1 读了5ms; 在第3 个缓冲周期的第5ms 起(绝对时间为35ms 时刻), 同理可以一边向500K 以后的地址写数据一边从地址0 读数, 又读取了5 个ms, 所以截止DPRAM1 第一个周期存入的数据被完全覆盖以前,DPRAM1 最多可以读取20ms时间, 而所需读取的数据为1Mb, 所以端口C1 的数据速率为:1Mb/20ms=50Mbps。 因此, “ 数据预处理模块1” 的最低数据吞吐能力也仅仅要求为50Mbps。 同理, “ 数据预处理模块2”的最低数据吞吐能力也仅仅要求为50Mbps。 换言之, 通过乒乓操作, “ 数据预处理模块”的时序压力减轻了, 所要求的数据处理速率仅仅为输入数据速率的1/2。
0 {( b) ?9 X3 B. y
1 y. L0 w3 t( d* L; T- f$ v1 b- u2 ^: u( \5 s" s
) b/ O* h7 n  N4 [9 q
    通过乒乓操作实现低速模块处理高速数据的实质是:通过DPRAM 这种缓存单元实现了数据流的串并转换, 并行用“ 数据预处理模块1” 和“ 数据预处理模块2” 处理分流的数据, 是面积与速度互换原则的体现!" b1 ?5 j, H2 L% @1 A
) ^9 _* m5 `5 W0 j
3 X2 t8 n8 o( s1 o3 L  n
# j$ `, M0 A, z8 W3 [
二、单RAM实现乒乓操作(原创)
9 g( l7 r: x+ t. K! h$ f) e2 G4 @) m7 w  w+ j* \- F+ D( A
0 Q4 A% C7 S4 ~7 r0 U# H
: E2 M. m& O# X. P9 M6 R
    先简单说一下乒乓RAM操作的应用场合,当对数据进行处理时,如果数据来的速率比较快,而处理数据的速率相对较慢,并且在进行数据处理的时候是需要先对进来的数据做一缓冲,等数据量达到一定的程度时再集中对数据进行处理,比如FFT运算就是一个典型的例子。现拿一个64点的FFT运算来举例外说明:假设输入的原始数据的速率是5M,而ADI信号处理器的工作时钟为100M,而每处理一次64点的FFT运算需要30个系统时钟(系统时钟频率是数据速率的20倍),假如现在输入数据数已经达到64个,则信号处理器需要进行FFT运算,当FFT运算结束时,下一个数据有可能已经过了,如果不采取缓存措施,则有可能会导致数据丢失,所以,为了防止上述情况发生,可采用双RAM操作,即:用两块64个存储单元的RAM,当数据来时先对数据进行一下缓存,比如,当前64个数据来时,先把数据缓存在第一块RAM里,当第一块RAM存储满时,这时便以系统时钟速率将第一块RAM的数据给FFT信号处理器,让其完成FFT去处,并将以后的数据缓存到第二块RAM里,由于系统时钟的速率是数据速率的20倍,当第二块RAM里的数据存储满后,FFT处理器有64*20=1280个系统时钟的工作时间,对于处理仅需94(30(FFT运算处理时间)+64(从RAM块里读出64个数据给FFT运算处理器所需的时间))个系统时钟的FFT运算来说已经足够。5 _! ?1 D) O: f1 T
/ l4 h* F1 f$ E: g  n
( K' M9 n% ^) x) N7 i- @2 Z4 m
" ^" w- h" L3 @0 \: K+ Z9 ~
图1 传统的双RAM操作框图1 V* x: T3 s% L$ r0 [
5 b7 x- W8 V# _# d
    但是,采用传统的双RAM块进行操作时也会存在一定的缺陷,比如,采用两块RAM会占用比较大的面积,这对集成电路的小型化发展带来不利,所以,考虑以上原因,现利用一块RAM完成双RAM乒乓操作的功能。将原来的两个RAM块合成一块,大小变为128*16bit,前64个数据存入地址为0-63的单元里,后64个数据存入64-127的单元中。结构如下图所示。
& |- ~0 c7 @; n/ s4 t% j
- ~% t! A0 e1 L* _1 h. L
9 L, x/ X& @) x+ L% U3 I% c" \0 [; y8 X: B  ]8 C  b6 v6 k3 C) i% c7 e; y
图2 一片RAM实现双RAM乒乓操作结构图. s# `+ K3 q" n9 f% q
: }$ S# \: c# l1 ?/ A+ Y3 m  L
   下图是利用ISE软件仿真的逻辑功能图( T' q  y. f. y7 Q  d" A5 d8 ]( d6 ^

& f( I0 _" Y2 K# U ; c8 D! \, g2 U  E5 |

/ D# {4 c: {! V4 x: P" O8 z. h, D& u图3 功能仿真图
; J& M5 n% a( `! s5 d( h) A* U) J
5 X- d) E$ N, W3 `    如上图所示,写地址线的操作只受输入数据的影响,而读地址线则受输入数据个数的影响,当第64个数据到来时,读地址线便从0变到63,并且将64个数据全部送入FFT处理器时,FFT处理器便在系统时钟下进行工作,当写地址线变到0时,便对64-127单元里的数据进行操作,如此循环,便实现一片RAM的双RAM乒乓操作功能。. N$ L  S" w( g$ N9 p
' C4 _- ]) p2 P& |1 \
$ d5 l- X" J# u

该用户从未签到

2#
发表于 2019-5-30 18:07 | 只看该作者
最近正在找这方面的资料 谢谢楼主分享

该用户从未签到

3#
发表于 2019-6-14 00:36 | 只看该作者
谢谢楼主分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-11 10:15 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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