シンセ・アンプラグド RSSフィード

2017-03-04

FPGA 版 FM 音源 (74) -- FPGA 版 EG (18)

OPL3 のスロット・パラメタ・レジスタ・アレイは、アレイひとつ当たり 256 バイトのアドレス空間を占めています。 アレイ 0 とアレイ 1 とのふたつのアレイがあるので、合計では 512 バイトとなります。

これをホスト・プロセッサアドレス空間にそのまま割り付けてしまうと、ホストの貴重なリソースを大量に消費することになります。

そのため、OPL3 ではアレイひとつに対して一組のアドレス・レジスタ/データ・レジスタの 2 バイトのみをホストのアドレス空間に割り付け、「間接アドレシング」によりホストから OPL3 のレジスタ・アレイにアクセスする方式を取っています。

アドレス/データの区別のための「A0」信号と、アレイ 0/1 の区別のための「A1」信号との計 2 本のアドレス線で計 4 バイトのレジスタを区別します。

データの入出力は 8 ビット・パラレルで行なわれるので、これをそのまま踏襲すると信号線の数が多くなります。

現在のマイコンには多くの場合 SPI (Serial Peripheral Interface) モジュールが組み込まれているので、FPGA 版ではホストとのインターフェースには SPI を使って信号線の数を減らすことにしました。

続きを読む

2017-02-22

FPGA 版 FM 音源 (73) -- FPGA 版 EG (17)

デュアル・ポート RAM を使ったレジスタ・アレイ・インターフェース部の Verilog ソースを下に示します。

続きを読む

2017-02-20

FPGA 版 FM 音源 (72) -- FPGA 版 EG (16)

前々回の記事で述べたように、スロット・アドレスの割り付けには 8 バイト中に 2 バイトの「穴」(未使用領域) があり、これをどう扱うかで次の 3 つの方法が考えられます。

続きを読む

2017-02-18

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 ビット幅モードでアクセスするような動作はサポートされていません。

続きを読む

2017-02-15

FPGA 版 FM 音源 (70) -- FPGA 版 EG (14)

今回はスロット・パラメタ・レジスタ・アレイのホスト・インターフェース部についてです。

各スロットの発音パラメタは、継続的に該当タイム・スロットで「タイムリー」に供給される必要があります。

その一方で、ホスト側からのアクセスについてはなるべく制約が少なく、任意のタイミングでできることが望まれます。

「ランダム・ロジック」で実現すれば、最も自由度が高くなりますが、大量にロジック・エレメントを消費してしまうので、Cyclone デバイスが内蔵している M4K RAM メモリ・ブロックを「デュアル・ポート・モード」で使用することにしました。

RAM 自体のスピードは速いので、細かい制御をすれば「シングル・ポート・モード」でも実現はできますが、制御が簡単になるデュアル・ポート・モードの方を選択しました。

続きを読む

2017-02-10

FPGA 版 FM 音源 (69) -- FPGA 版 EG (13)

EG の本体回路だけでなく、周辺回路も含んで (無印) Cyclone にインプリメントした「op3_EG_cyc()」の Verilog ソースを下に示します。 

モジュール名、ファイル名に含まれる「cyc」は「Cyclone」を意味しています。

続きを読む

2017-02-09