EDA365电子论坛网

标题: multi-cycle [打印本页]

作者: haidaowang    时间: 2020-9-4 16:30
标题: multi-cycle
引言
9 B( C2 L, l# [& X前面我们介绍了流水线的写法(pipeline的写法),流水线是数字设计中很常用的一种设计方法,可以提高运行频率,提高吞吐量。
0 u3 v! [8 t' e% {& W9 R6 V) R. j: k  D% V/ P2 W  j5 Y4 ^
如果组合逻辑延迟较大,一个时钟周期完成不了时,除了插入寄存器将组合逻辑拆分成流水线外,还可以采用multi-cycle的方式。9 W0 ?! o3 _" c) W: |
6 @+ S9 s  ?' O: }
multi-cycle的工作机制很简单,从给定输入之后,等待多个周期之后,再去采样输出结果。
$ f+ A1 J$ W3 _3 t4 r$ ~' J* b" D! j
3 U) u0 ]6 o! c! X, X: [1 r. [; ^- Z本小节我们将通过一个小实验来说明multi-cycle的具体RTL实现。
& v6 a3 p9 D! |4 M
5 U9 t8 Y8 B! c6 T- @: X; U; _( L% B4 }$ a6 u+ e9 D

3 `7 Z8 E5 `& E1 e1,功能介绍
+ t- y6 \5 k2 o- F6 u+ Y假设有某个模块,其计算量很大,以致延迟较大,一个周期完成不了,需要3个cycle才行。
2 b, @$ @5 j# h0 y. y4 h/ h$ r& A' o. q7 y  e+ q: w* n7 C. e
假设时钟周期是10,这个模块的运算分为“加法,左移,减法”三个操作,分别用时7,8,9。
, q) o' p- x% ?) j' j* e! A9 v: k2 G0 n
8 B# D: O+ k! T$ W, o7 F- ^$ A

3 n8 Y! ^" o; S7 G! R6 m2,RTL实现( Q  F2 t- \/ u3 u

1 z. s" w; v# s9 h/ h- w) ^如果在数字设计时,遇到上述模块描述的情况时,可以考虑multi-cycle实现。
; ]0 ^* S! T% F8 Y
- x) O0 i% G9 d( s6 W) j具体RTL如下:mc.v& k5 I! ?5 K3 T  K4 h. r6 ]

- r0 @% I* T& i( O- E7 N5 g其中关于状态机的写法,我们之前有专门介绍,如有疑问,请参考(你知道状态机的四种写法都是什么吗?)。7 z  B( ?$ N. S- w( c
4 {- D2 }6 i! ^
   
+ @* s. s7 n" |3 ~7 |- l) g/ W( K% h* V% h* ~" c
3,testbench# l2 O) J9 ?2 Q; ?7 M

: x/ Y7 G' B6 c4 D! w" X% V具体multi-cycle模块是如何工作的呢,我们需要写个简单的TB验证一下:tb.v8 {2 ~$ l: N, C

' \* y6 n) `9 u- Z0 h4 h  f4 \4 B/ V! \9 Q8 D# f0 q
' O4 r: V) u# L9 z" Z8 \% f7 K

; {+ v( R* B: a% u$ C5 u
1 ^1 Q8 h: ~( q2 b! j0 U4,nc脚本和vflist
8 q+ P7 T; n( Z. w2 U+ m( U, j3 n: X0 d, k
mc.sh:
" v7 j& |) @2 Z9 w8 f, U% B6 M. P/ y% p  y  D. g( p# n. q1 a/ t
            ( J# }+ ~# _. Q; s- A
4 m% F$ i3 s9 O( V+ g( ~# z
vflist:- j7 Y% Z9 C3 w: Z  @9 Z1 ^

! x9 C3 N% y" P% r+ y0 G2 ^
& F, S, ~7 r/ Q; H5 P! n
# R/ |& |" V; N7 w: K+ @3 s: v* O
  n3 s: q4 R! P+ e. J2 |8 y5,验证
8 M: }- q' y" U! G; C2 N
2 s* z0 J# O8 M; X. c运行mc.sh c; mc.sh w即可得到仿真波形:" m$ X, P! ^% y* A2 E* B

# U& a9 m' W) Z
2 `' _1 P6 `8 m  i: h& a- n# `9 f/ @6 k; E

6 z& ~, Z5 f6 ~& {: |通过波形可以看出,mc模块在经过3个cycle之后输出了运算结果3。( D6 ~+ e3 H- [; g" @6 h
# y# {- {6 O4 V6 y$ }) ^, I9 [3 q

& @3 h" N1 K: w% Q6 G/ ?- G' U3 J8 x* k% ^/ v
6,小结( c2 r* p, q0 O% p7 t; P

" b- ~4 y4 h, spipeline和multi-cycle是处理长延迟逻辑常用的两种方式,我们都介绍过了。
) h7 F% O0 w5 J- a5 w! C/ J/ C5 I: e: m" e
Enjoy!
- F8 W9 a& w  B5 v6 N  l" |& z+ s
6 d* O# C' E4 s1 V4 Y/ ]3 F
作者: younicp    时间: 2020-9-4 17:25
multi-cycle




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2