コラム21 VHDLファイルの自動生成(重みROM、画像ROM、バイアスROM)

 重みROM (ROM_W1.vhd)の下にはリスト2‐06のように50個ものROM (ROM_W1_00〜49)があり、それぞれ784個の固有のデータを持っています。それらをEXCEL表からVHDLファイルにコピペするのは大変なので、EXCEL+VBAで自動生成させます。



■EXCELファイルからVBAを実行する方法

 このEXCELファイルをダウンロードし、
適当なディレクトリにコピーしてから開きましょう。これはディープラーニングの推論をPythonから移植したものであり、2枚目のシートでは行列W1(1層目の重みの行列)のデータが張り付けてあります(図2‐35)。


  図2‐35 EXCELの2枚目のシート、行列W1。要素数は784×50ある


●重み行列のデータが膨大で手作業ではやってられない

 各列に784個のデータがあり、それらを格納するROMをVHDLで記述します。例えば1列目はリスト2‐09のようなVHDLファイルになります。

 データ幅9ビット、アドレス幅10ビットのROMのひな型VHDLを作り、ROMデータをEXCELからコピペ(2進数化してから)すれば良いのですが、いかんせん50列もあるため、
その作業を50回も続けると疲れてミスを犯しそうです。

  リスト2‐09 このようなROMファイルを50個作る!手作業では大変・・・

EXCELの開発ツールを有効にする

 そこで
VBA (Visual Basic for Application)
という機能を使います。まずは図2‐36のようにEXCELの「ファイル」→「オプション」→「ユーザー設定」から「開発」をチェックしましょう。


  図2‐36 EXCELでVBAを使うための設定

 すると図2‐37のように「開発」タブが現れるのでクリックし、左のVisual Basicをクリックします。


  図2‐37 開発タブからVisual Basic

●VBAマクロを開いて走らせる

 左枠のVBA ProjectからModule1をダブルクリックすると図2‐38のように
Sub makeTextW1から始まるVBAマクロが現れます。

  図2‐38 Module1をダブルクリック

 あらかじめこのアーカイブを解凍し、図2‐39のようにvbaoutputフォルダをEXCELファイルと同じディレクトリにコピーします。
 その後マクロ実行ボタン(三角マーク)をクリックすると図2‐40のようなダイアログが現れます。

  図2‐39 vbaoutputフォルダをEXCELと同じディレクトリに置く



  図2‐40 VBAマクロを実行するとTEXTファイルが生成される

 vbaoutputフォルダの中にdata00.txt〜data49.txtというテキストファイルができています。それぞれ固有の値がEXCELから転写されています(図2‐41はdata00.txt)。

  図2‐41 自動生成されたdata00.txt


次のページへ


目次へ戻る