FPGA 版 FM 音源 (71) -- FPGA 版 EG (15)

Altera の内蔵メモリ・ブロック「M4K」では、名称に「4K」が含まれることから分かるように、ひとつのブロックで 4 K = 4096 ビットの容量を持ち、

  • 1 ビット × 4096 ワード
  • 2 ビット × 2048 ワード
  • 4 ビット × 1024 ワード
  • 8 ビット × 512 ワード
  • 16 ビット × 256 ワード
  • 32 ビット × 128 ワード

の構成がサポートされています。
また、下に示すように、「1 ビット・パリティ付き 8 ビット・メモリ」などとして使える 9 ビットの倍数の幅での構成も可能です。

  • 9 ビット × 512 ワード
  • 18 ビット × 256 ワード
  • 36 ビット × 128 ワード

このとき、メモリの総容量は 9 × 512 = 4608 ビットとなります。
ただし、デュアル・ポート・モードで一方のポートでは 8 ビット幅モードでアクセスし、他方のポートでは 9 ビット幅モードでアクセスするような動作はサポートされていません。
メガウィザード・プラグイン・マネジャーを利用してメモリを生成する場合、希望する構成が M4K メモリ・ブロックひとつの容量では足りなくなると自動的に複数の M4K メモリ・ブロックが使われます。
2 つのポートから独立にメモリをアクセスできる「デュアル・ポート・モード」として、

  • シンプル・デュアル・ポート・モード
  • トゥルー・デュアル・ポート・モード

と呼ばれる、2 つのモードが用意されています。
「シンプル」は、片方のポートは書き込み専用、もう片方は読み出し専用のポートになります。
「トゥルー」は、両方のポートで読み書き可能です。
M4K ブロックに備えられている読み出し出力バッファは 32 個 (9 ビット幅モードでは 36 個) なので、「シンプル」では読み出し側がすべてを専有できて、32 ビット (36 ビット) 幅までの構成が可能です。
「トゥルー」では、2 つのポートが出力バッファを分け合う形になるので、どちらのポートでも最大出力ビット幅は 16 ビット (18 ビット) に制限されます。 したがって、出力を 32 ビット・パラレルで欲しい場合には M4K ブロックを 2 つ使うか、細かいコントロールをして 16 ビット・パラレルで 2 回読み出すかになります。
OPL3 (YMF262) までは、ホスト CPU インターフェース・レジスタは書き込みオンリーで読み出し不可でしたが、後継の OPL3-L (YMF289) 以降では、レジスタは読み書きともに可能になっています。
レジスタ・アレイをホスト側から読み書き可能にするには「トゥルー・デュアル・ポート・モード」を利用する必要がありますが、今回は簡単のため「シンプル・デュアル・ポート・モード」を使って、YMF262 のように書き込みオンリーとします。
メガウィザード・プラグイン・マネジャーでデュアル・ポート・メモリを構成している場面のスクリーン・チャプチャを下に示します。 (図をクリックすると拡大します)

ram2port_megawiz.png

パラメタ設定のための画面は複数ありますが、そのうちのひとつを示しています。
示していないパラメタについても、図の左側に表示されているブロック図を手がかりにして設定できます。