前章で使用したVHDLをそのままQuartusで論理合成してみたところ、回路規模がロジック容量の1344%(13倍以上!)になってしまい、うまくいきませんでした。その原因は「RAMのリセット」にあるようです。


●このような記述ではRAMに割り当てられない!

 前章におけるRAMモジュールの記述をリスト11-01に示しします。RST_N信号がLのときにRAMの内容がすべて0にクリア(
初期化)されています。
 論理シミュレーションではこれで問題ないのですが、論理合成するとこのモジュールはRAMではなく、DF/Fや論理素子に割り当てられてしまいます。それが原因で回路規模的に爆発してしまったのです。

  リスト11-01 RST_N信号でRAMDATAを初期化している・・・この部分を削除する


●RAMを初期化するための回路を追加

 そこでRST_Nの部分を削除します。このままではRAMの初期化(*2)が出来ないので、新たに初期化回路を作成します(図11-03)。


(*2)画像にパディングを施してRAMに書き込むので、その部分(画像のふち)を0で埋める必要がある。初期化はリセット後に1度だけ行えば良い。



  図11-03 新たにRAM初期化回路を追加


●RAMの初期化のようすを論理シミュレーションで確認

 このアーカイブは回路削減後のModelSim(使い方はここ)プロジェクトです。畳み込み1〜6層目、Affine1〜2層目までパイプラインで繋いだものです。

 シミュレーションを12usほど走らせた結果を図11-04に示します。RAMの初期化には約10usかかります。初期化はRST_NがHになった後、一回だけ行われます。


  図11-04 RST_Nの後に一回だけRAMデータがクリアされる


●1344%だった使用量が119%になった!

 図11-05は変更後の論理合成結果です。リスト11-01の部分がRAMに割り当てられ、Logic utilization(ロジック使用量)が変更前よりぐっと小さくなりました。しかしまだ
119%と容量オーバーしているので
回路規模削減のさらなる工夫が必要です。


  図11-05 FPGA内部RAMを使うと容量的に効率が良くなる


最初のページへ


目次へ戻る