10‐03 5層目のRAMアクセス(HDL)
●タイムチャートを見ながらHDLを書いてみる
4層目はRAM_X4(2個のフレームバッファからなる)に書き、5層目はそれを読みます。
4層目はRAM_X4_WR_SELという信号でフレームバッファを0, 1, 0, 1...と代わりばんこに書き込みます。4層目は1画面の書き込みが320usなので、バッファの選択は図10‐24のようにCnnBlockH(0) (CNNの1ブロック周期でH/L)で行います(*1)。
5層目はRAM_X4_RD_SELという信号で読み出しバッファを選択しますが、それは書き込みの選択と逆論理
(not CnnBlockH(0)) となります(ピンポンモード)。
またcount32768(16×128×16進カウンタ)を設け、その下位7ビットをin5ChSel、その上の4ビットをRAM_X4_RD_ADDRとします。そうすれば、このタイムチャートのようにバッファからX0, X1, X2... X15を読み出し、さらにそれらをin5ChSelで128個に時分割し、計2048個のデータを得ることができます。
(*1)層が進むごとにレイテンシが発生するので図10-24では各信号は適宜遅延させてある(CnnBlockH_aftlay3など) |

図10-24 RAM_X4の読み出し信号の生成(gts_timing.vhd)
●フレームバッファのアドレスは共通
RAM_X4_RD_ADDRは図10‐25のように2つのRAMのアドレスとなり、RAM_X4_RD_DATA_0, 1が読み出されます。
それらはRAM_X4_RD_SELによって選択されRAM_X4_RD_DATAとなり、5層目 (conv_layer5) のLAY5INに入力されます。 |

図10‐25 RAM_X4を介して4層目から5層目に入力 (gts_hw.vhd)
●5層目conv_layer5.vhdの中で入力chが分離される
conv_layer5内部では入力信号の名前はLAY5INとなります。
LAY5INは640ビットですが、図10‐26のように5ビットづつ、in5ChSelによって時分割で多重化されます(inch)。フレームバッファの各アドレスに128chぶんのデータがあることを思い出しましょう。 |

図10‐26 このタイムチャートのin5ChSelで多重化 (conv_layer5.vhd)
●積和演算器16個で並列演算
inchは16個の積和演算器に入力されます。それぞれが出力8個を計算し(このタイムチャートのmac0...mac7, mac8...mac15, mac120...mac127)、計128個の結果が得られます。 |

図10‐27 積和演算器dotproは16個ある (conv_layer5.vhd)
次のページへ
目次へ戻る
|