FPGA 版 FM 音源 (52) -- YMF297 (OPN3/OPL3) 測定 (17) -- EG クロック・プリスケーラ (4)

前回の psc4 コンポーネントによるプリスケーラ部に加え、バレルシフタ部も実装して EG クロック・イネーブル出力を得る回路全体を PSoC5LP の UDB 上に作成しました。
オシロで出力波形の確認および周波数カウンタでの出力周波数の確認をしてあります。
回路図を下に示します。 (図をクリックすると拡大します)

opl3_eg_psc_clk_en_cysch_small.png

左端にある 16-to-1 マルチプレクサがレートで指定される基本の周波数のクロックを選択する回路で、中央のマルチプレクサがその 1/2 の周波数を選択する回路、右端のマルチプレクサが 1/4 の周波数を選択する回路です。
本来は、それぞれ 12-to-1 マルチプレクサでよいのですが、PSoCコンポーネントでは 4 / 8 / 16 入力しか選べません。 未使用の入力が選択されると出力は「0」になるような回路が生成されます。
左端のマルチプレクサでは、「ローレート」ではないレート、つまりレート = 15 / 14 / 13 / 0 が選ばれた場合に「1」が出力されるように空き入力に定数の「1」を接続しています。
レート = 0 は EG 出力が「変化しない」ことを表しますが、EG クロックを停止させてしまうと EG ステートマシンも動作を停止することになり不都合なので、EG クロックは fs のレートの連続クロックを供給するようにし、EG アキュムレータの増分をゼロにすることで「変化しない」状態を作り出します。
右端の 1/4 周波数のクロックを「REFCLK」ピンに引き出し、オシロで波形を観測する際のトリガ信号として利用しています。 「EG_CLK_EN」出力は「歯抜け」したパルス列となっているので、その信号そのものから波形が安定して静止するようなトリガをかけることは困難です。
UDB リソースの使用量は次のようになっています。

マクロセル: 61 (31.77 %)
ユニーク・プロダクト・ターム: 85 (22.14 %)
PLD: 36 (75 %)
UDB: 18 (75 %)

プリスケーラ部では UDB を 6 個消費していたので、バレルシフタ部では追加で UDB 12 個を消費している計算になります。