6‐05 1層目のRAMアクセス(HDL、続き)

●タイムチャートを見てHDL化

 図6‐40はRAM_X0のリードアドレスを生成する部分です。このタイムチャートのように KernelHは012 012 012 012 012 012...と遷移し、KernelVは000 111 222 000 111 222...と遷移するのでcount9との関係性によりHDLでは同図のように生成されます。


 またRAM_X0_RD_ADDRの下位5ビットはKernelH+CnnPixCount、上位5ビットはKernelV+CnnLineCountで生成されます。HDL化すると同図のようになります。

図6-40 このタイムチャートをHDL化(gts_timing.vhd)

●RAM_X0の読出しデータが1層目に行く

 1層目の入力が入るRAMはLineOut_Ctrl.vhdにあります(CNN推論回路の外側)。アドレスRAM_X0_RD_ADDRは共通、読み出しデータはRAM_X0_RD_DATA_0〜1です。ピンポンモードでRAM_X0_RD_SELにより切り替えられ、
RAM_X0_RD_DATAになります(図6‐41)。

 同図のようにRAM_X0_RD_DATAは、ts_r_8bit/ts_g_8bit/ts_b_8bitの3つの信号に分けられます(*1)

(*1)RGB565フォーマットなので、下位ビットを0で埋めて8ビットにする


図6-41 バッファが2つ。書いていない方から読みだす(LineOut_Ctrl.vhd)

●入力4チャネルがミックスされて積和演算器に

 ts_r_8bit/ts_g_8bit/ts_b_8bitは1層目(conv_layer1.vhd)に入力されます(名前がpix_r/pix_g/pix_bに変わる)。そして図6‐42のようにin1ChSelにより選択されて
pix_rgbとなります(*2)。

(*2)in1ChSelが"11"のときはデータを0でマスクする(このタイムチャートの上の方、dummy 0 data)。1層目の入力はRGBの3チャネル+ダミー1チャネル=4チャネルになる

 pix_rgbは同図のようにdotpro_00〜15に入力されます。dotproは積和演算器で、出力が16chなので16個で並列演算します。


図6‐42 出力16chなので積和演算器16個(conv_layer1.vhd)

●積和後の処理

 積和演算器の出力mac_00〜15はバイアスと加算され、ビット削減、ReLUを施されて2層目に出力されます(ここ参照)。


次のページへ


目次へ戻る