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のアドレスとデータの読み出し
次のページへ
目次へ戻る
|