10‐03 5層目のRAMアクセス(読み方/書き方)

●128個のデータが結合して1アドレスにある

 4層目と5層目のデータのやり取りはフレームバッファRAM_X4を使って行われます。図10‐20がそのイメージで、各アドレスに5bit x 128ch =
640bitのデータが格納されています。
 アドレスは0〜15まで、5層目はそれらからデータを順番に読み出し、5ビットづつ
128個に分離します。

図10-20 RAM_X4に5層目の入力。16 x 128ch x 5bit = 16 x 640bit

●データ128個×16=2048個を重み係数2048個と積和

 4層目はこのように1画面を320us(休み時間込み)で出力します。5層目も同様に320usで演算する必要があるため、乗算器
16個で並列動作させます(理由はここ)。

 図10‐21のRAM_X4_RD_ADDRは図10‐20のフレームバッファのアドレスで、まずアドレス0からデータX0を読みます。
 その期間にin5ChSelという信号でデータX0をデマルチプレクスします。全640ビットから順に5ビットづつ、X0,0 X0,1 X0,2... X0,127と取り出して積和演算器に送り、重み係数とともに
128回の積和が行われます。
 次にアドレス1からデータX1が読まれ、X1,0 X1,1 X1,2... X1,127が取り出されて128回の積和が行われます。
 同様にX2、X3... 最後にX15からそれぞれ128個が取り出され、合計128 x 16 =
2048回の積和が行われます。

 その下のW5Addr(10:0)は重み係数のアドレスで、このROMのアドレス0〜2047まで、
左端の列W0,0 W1,0 W2,0... W2047,0 が読み出されます。それらが上記の2048個のデータと積和され、最初の積和結果mac0になります。

 その下の(縮小)ではW5DataSel(2:0)が0から1になり、そこではROMの
隣の列W0,1 W1,1, W2,1... W2047,1が読み出されます。それらが上記の2048個のデータと積和され、それが次の積和結果mac1になります。
 同様にW5DataSel(2:0)が0〜7まで繰り返され、積和結果
mac0〜7までが得られます。

図10-21 フレームバッファと重み係数ROMのアクセス

●フレーム単位で同期をとってパイプライン動作

 5層目は積和演算器
16個で並列演算され8x16=128、すなわち積和結果mac0〜127が得られます。その期間は同図のように 10ns x 2048 x 8 = 163.84usとなり、CNNの1ブロックが入ってくる期間320usに間に合います。

 積和結果はRAM_X5(5層目の出力RAM)に書き込まれます。同図の下の方、ReluWrNのタイミング20.48usで16並列で128個書き込んだところで終了、これがCNN1ブロックぶんで、休み時間込み
320usで6層目に出力されます。

次のページへ

目次へ戻る