コラム41 ROM/RAMに確実に割り当てられるVHDLコーディング

 VHDLの記述がトリッキーだったりすると、Vivadoなどの論理合成ツールでうまく合成されないことがあります。特にROMやRAMの記述を間違えると、回路規模が爆発的に増え、FPGAに入りきらなくなるので注意が必要です。


●悪い記述例(ROM)

 リスト4-04は前章までのROMの記述です。1層目の重み行列は784行あるのでROMDATA(
0〜783)まで初期化しています。
 しかしこの記述でVivadoで論理合成すると
ROMには割り当てられません。LUTに割り当てられ、DF/Fとマルチプレクサのお化けのような回路になってしまいました。

 また、CS_Nが1のときにDATAを全ビット0にする記述がありますが、この部分はなくても動作します。

  リスト4-04 悪い記述例。1層目の重みROMの部分

●良い記述例(ROM)

 そこでリスト4-05のようにROMDATA(
0〜1023)まで初期化します。こう記述するとVivadoの論理合成でROM(初期値付きRAM)に割り当てられます

 またDATAを読み出す部分の余分な記述を取り除きます。

  リスト4-05 良い記述例。1層目の重みROMの部分


●悪い記述例(RAM)

 リスト4-06は前章までのRAMの記述です。このRAMはCS_Nが常に0で使っており、それを鑑みるともっとシンプルに書けそうです。

  リスト4-06 悪い記述例。2層目の結果が入るRAMの部分

●良い記述例(RAM)

 そこでリスト4-07のようにWR_Nのみで書き込みを制御します。また、読み出しの部分はWR_Nがなくても動作するので、このようにシンプルに書き直します。

  リスト4-07 良い記述例。2層目の結果が入るRAMの部分

●ROM/RAMの記述はできるだけシンプルに書くのがコツ

 書き込み制御や読み出し制御を複雑なコンビネーションにしてしまうと、Vivadoの論理合成でROM/RAMに割り当てられないことがあります。
 人間が見ても「これはRAM(ROM)だ!」と一目で分かるようなVHDLコーディングを心がけましょう。


目次へ戻る