FPGA 版 FM 音源 (49) -- YMF297 (OPN3/OPL3) 測定 (14) -- EG ミュート状態

リニア出力のアナログ EG では、ディケイ/リリース回路に 1 次 RC 回路の放電特性のエクスポネンシャル・カーブを利用していれば、時間の経過とともに出力電圧はサステインあるいはグラウンド・レベルへ限りなく接近していきます。 
リリース状態で「放置」していても、グラウンド・レベルに貼りついたままであり、不都合を起こす心配はありません。
一方、対数ドメインで動作するディジタル EG では、ディケイ/リリースのエクスポネンシャル・カーブでの減衰は、EG アキュムレータに定数を足しこんでいって、減衰量を増やすことによって実現されています。
リリース状態を「放置」しておくと、どんどん増加する EG アキュムレータの値がいつかは最大減衰量を超えてオーバーフローし、ラップ・アラウンドして減衰量が小さな状態に突入してしまいます。
したがって、EG アキュムレータの値の更新を最大減衰量 (あるいは、その付近) で停止させる、「OFF」あるいは「ミュート」と呼ぶべき状態を設ける必要があります。
下に実チップのキャプチャではなく、アタック/ディケイのみのソフトウェア EG シミュレーション・プログラムを使って作成した、最大減衰量付近のふるまいの図を示します。

上の図は、DR = 13 〜 15、Rof = 0 〜 3、レート・マルチプライアの位相 = 0 〜 7 の範囲に渡ってシミュレーションした結果の EG アキュムレータの値を重ねてプロットしたものです。 EG アキュムレータの値が 511 を (含んで) 超える時点のサンプル・インデクスを「0」としてあります。
DR = 13, Rof = 0 より「遅い」レートでは EG アキュムレータの増分は高々「1」なので、9 ビット EG アキュムレータで表現可能な最大減衰量である

  511 = 0x1F = 95.8125 dB

を必ず通過することになります。
DR = 13, Rof = 1 より「速い」レートでは EG アキュムレータの増分は「1」以外に「2」と「4」も登場するので、EG アキュムレータの値は「511」を飛び越して、「512」や「514」(に相当する値) になる可能性もあります。
上の図では、ソフトウェア・シミュレーションなので 511 以上の値を保持していますが、実際の 9 ビット EG アキュムレータではオーバーフローしてラップ・アラウンドを生じ、

  (0x1F & 512) = 0 = 0 dB
  (0x1F & 514) = 2 = 0.375 dB

という小さな減衰量の状態となってしまいます。
上の図から、EG アキュムレータの値が 511 以上となる時点の 1 サンプル前の最小値を読み取ると、

  508 = 0x1FC = 9'b111111100 = 95.25 dB

となります。
つまり、EG アキュムレータの値が 508 以上となったことを検出して EG アキュムレータの値の更新をストップすれば、値がラップ・アラウンドする心配はなくなります。
この「検出」は「大小比較」ではなく、EG アキュムレータの上位 7 ビットのみの「一致」を調べるだけで実現できます。
Verilog 風に表現すれば、

(7'b1111111 == eg_acc[8:2])

となります。