知人に1%金被抵抗10kと20kを1袋ずつもらいました。オーディオDACを作ろうとして止めたそうです。
一方、トラ技付録のMAX II基板が買ったはいいものの放ったらかしだったので、これらを使い、デジタルオーディオ信号(S/PDIF)を入力してヘッドフォンで聴ける簡易モニタを作ることにしました。
通常、デジタルオーディオ信号をデコードするときはクロックの再生が必要なためPLLを持った専用のIC(DAIR)を使います。
クロックの再生をしなくて済めば、(規格の詳細は割愛しますが)受信信号の3種類ある反転タイミングの区別さえ付けばいいのでCPLDでもデコードできます。
オーディオの世界では非常識なことなのでしょうが、実験としては面白そうです。

仕様

トラ技基板でデジタルオーディオ信号をデコードし、さらにデジタルボリュームを通して24ビットステレオで出力します。
そして、トラ技基板の外部のラダーDAC、74HCU04によるアンプを通してヘッドフォンに出力します。
X'talオシレータは反転タイミングを区別するのに充分高い周波数が必要です。今回は24MHzを使いました。
fsは44.1kHzと48kHzに対応します。

製作

MAX II基板をトラ技に書いてあるように製作します。外部の回路は回路図のようにしました。



この基板のMAX IIは240LEしかないので、DAIRとデジタルボリュームを融合し、汎用性よりサイズ優先で書き上げました。その結果、173LEとなりました。
MAX IIにはユーザが使えるフラッシュがあるので、ボリュームカーブ用のテーブルに使いました。これで通常のボリュームのAカーブっぽい動作になります。

download(damon.tar.gz)

このソースは、非営利目的に限り自由に使用できます。
ただし、回路図を含め、いっさいの保証はありません。

調整

ラダーDACにつきもののMSBの調整をします。
damon.vのTESTを定義してコンパイルし、MAX IIに書き込みます。
ヘッドフォンから「ピー」という音がするので、無音になるようにポテンショメータを調整します。
終わったらTESTの定義を外して再度コンパイルし、書き込みます。

試聴

オーディオクロックの再生をしない場合、DAC出力の変化するタイミングが最大でシステムクロックの周期分のジッタを含んでしまいます。
fs=48kHzの場合、システムクロックが24MHzなので最大±0.1%になります。
聴いた感じは至ってまともです。でも、たまに嘘っぽい音がすることがあるような気がします。これがジッタによるものか、MSBより下のビットの誤差によるものかはよく分かりません。
凝る人はここから音質向上に向けていろいろ実験するんでしょうが、私はこれをHDD/DVDレコーダのヘッドフォン出力として使うのでこれで充分です。