2-02 回路図とタイム・チャート

■まずは1層目から

 このEXCEL表にはW1, W2, W3と重み行列が3つありますが、最初のW1は画像データX(最初のシートのx_in行)と乗算されます。


●画像の配列をROMに割り当てる

 Xは要素数784の配列なので、図2‐02のようにメモリ(
ROM)に割り当てます。配列のインデックス(0〜783)がアドレスに相当するので、アドレス幅は10ビットになります。またデータの範囲は0〜255なのでデータ幅は8ビットになります。



  図2‐02 配列、行列をメモリ(ROM)に割り当てる


●複数のROMで重みの行列を構成する

 W1は要素数784×50の行列であり、図2‐02のように
50個のROMに割り当てます。縦の列がそれぞれアドレス幅10ビットのROMになります。それを50個まとめ上げて1個のROMにするので、全体のアドレス幅は10+6=16ビットになります。
 またデータの
範囲は-256〜255なのでデータ幅は
9ビットになります。2の補数で表現するので最上位は符号ビットです。


画像ROMのアドレスをカウンタで生成

 配列のインデックスはROMの
アドレスに相当し、図2‐03(a)のように「784進カウンタ」で生成します。
 同図(b)はそのタイムチャートで、X_RD_ADDRはCLK(100MHz,)を0〜783までカウントアップし、その後0に戻って同じように繰り返します。

 X_RD_DATAはROMから読み出されるデータで、同図(b)のようにCLKの1サイクル(10ns)遅延してX0〜X783が出力されます(クロック同期型ROM)。

  図2‐03 画像ROMのアドレスとデータの読み出し

重み行列ROMのアドレス生成

 図2‐04に行列W1のROMのアドレス生成法を示します。図2‐03(a)で生成した784進カウンタ(CO784)を
下位10ビットとします。
 さらに
50進カウンタを設けます。それは784進カウンタが最大値(783)になった時だけカウントアップし、それ(CO50)が上位6ビットになります。

 同図(b)にそのタイムチャートを示します。MatRomAddrの下位10ビットが0〜783までカウントアップされる間、上位6ビットは0を保ちます。
 その後上位6ビットは1となり、下位10ビットは再び0〜783までカウントアップします。
 重みW1ROM(ファイル名ROM_W1.vhd)の中には要素数784個のROMが50個あり、MatRomAddrの上位6ビットはそのROMの選択に使用されます。

  図2‐04 重みROMのアドレスとデータの読み出し


次のページへ


目次へ戻る