- Japanese Only -
- Now constructing ReNewal Page. This page is preliminary.
DAITを自作する! Xilinx開発キット(foundation-BASE)で組み立てるディジタルLSI設計
プログラムソース・JEDECファイルは こちら→ ・ D A I T の し く み DAITは、CD,MDなどの光/同軸入出力でなじみの「ディジタル・オーディオ・インターフェース」のトランスミッター、つまり出力をするためのディバイスです。符号化されたディジタル・オーディオデータ(IIsとか)を、このインターフェースのフォーマットに合わせ、変調して出力します。この出力をトスリンク/コアキシァル等を介して、外部のディジタルオーディオ機器と接続します。DAIR、プロセッサ等と組み合わせることで、例えばディジタル・データのまま加工した音楽データを外部機器でディジタル録音する、といった処理が可能です。 このDAITは「ディジタル回路」で、(特にマスター・クロック(128fs/384fs etc)を外部から供給するとすれば、)その入力から出力までのデータの生成、転送、変調を全て「ディジタルデータ」のやり取りで行います。 この「ディジタル回路」を、今回はXilinxのCPLD XC9572ディバイスで作ってみることにします。ちょっと前に「xilinxもかじってみよう」と共立電子の通販で手に入れた XilinxのCPLD/FPGA開発キット(foundation-BASE ¥15,800)を用いて組立て・開発します。 ちょっと格好つけて、「自分でLSIを開発する」とも言えるのでしょうか? DAITはこのページ「ディジタル・オーディオ・プロダクツ」でもしばしば登場する、いわば「ディジタル・オーディオ」のキー・ディバイスの1つで、これを使ってディジタル録音・外部D/Aコンバータなどに出力・接続するのですが、ホビーユースではなかなか入手が難しく、ならば手持ちのCPLDに実装してしまおう!という、実はなんとも短絡的な企画でもあります。かつてALTERA FLEXでやっていたことを、今度はxilinxのCPLDで試みます。ISPの魅力、というより内蔵ROMへの書き込みによる小スペース・小配線、文字どおりワンチップLSIとして気軽に使えるのがねらいです。 X i l i n x k i t で 作 る ! な ん と か 詰 め 込 み ・ ・ ターゲット・ディバイスはXC9572と決めこみます。共立のカタログ等をみていてそうしたのですが、1個¥600という単価・コストパフォーマンスが適当ではないのか?という判断です。これ以上高価でもなんですし・・(CS8042が¥2000強ですし、TC9231も・・) 実装してみての感想ですが、初めに作ったALTERA EPF8282に比べると、XC9572の規模は1/3〜2/1といった感じで。単純にラッチ数では282:72なので、当初は「xc9572×2個」構成を覚悟していたのですが、なんとか1個で収まるような目処がたちました。喜ばしくも、xc9572が意外に大きいのか、それともALTERAでの乗せ方が悪いのか・・まぁFPGAとPLDの構成の違いをあまり考えない私がいけないのですが・・。 とにもかくにも、xc9572, 1個で組んでみることにします。 ・ 仕 様 / ベ ー ス の 設 定 -今回試作したバージョンの仕様です。 ・入力: 16bitMSB first/ 後詰(LSB justify) ・出力: DAIフォーマット → ・ステータス/設定 16bit 44.1k 2ch エンファシスoff ・固定 ・バリディティビット ・ユーザーデータ(ビット)は外部入力対応 ・マスタークロック入力 : 128fs (256fs・384fs等を分周) DAIフォーマットには、各種ステータスの設定・サンプリング周波数等のソース情報、またソース付随のユーザーデータなどのコードがオーディオ・データに付加されています。この中で、バリディティビットはこのデータの有効/無効を設定するもので、「有効」で固定、ユーザーデータはオーディオデータには直接関係無いので不使用(一般的には外部マイコンなどで制御:これには対応)とすると、重要な設定は「ステータス・データ」です。 ステータス・データには、分解能、サンプリング周波数、CD/DATなど送出した機器のカテゴリ、クロック精度、エンファシス、世代・コピー管理ビットなどのデータを乗せるので、これを不意にすることは出来ません。が、それぞれの細かな設定に対応するとなると、回路規模が大きくなり、実はxc9572には納まらなくなります。そこで・・ 思い切って省略! つまりステータスビット(全32bit)を'0'にしてしまいます。都合のよいことに、デフォルトが'0'に設定されているようで、無茶苦茶古いCD等、フォーマットの黎明期の頃のソース以外は問題になりません(多分・・)。ただ問題なのが、 44.1k 2ch 一般フォーマット固定 という部分で、2chはステレオであたりまえ、一般フォーマットというのは「著作権を持たないデータ等」のカテゴリで、とりあえずディジタル録音可能なのでこれもOKなのですが、「44.1k固定」というのは、48k、32kのソースは非対応、ということになってしまいます。このサンプリング周期の設定についてはなんとか対応したくて、xc9572の余っている少しの隙間に回路を詰め込んで、なんとか納まりそうなのですが、後程対応ということで。とりあえずはこれでいくことにします。 マスタークロックは128fsで、回路はこのクロックに同期して動作します。これはDAIR等の384fsを3分周 あるいは256fsを2分周して入力します。今回は384fsに合わせて、3分周回路(74161)を組み込んでいます。 ・ ブ ロ ッ ク 図 簡単に説明しましょう。入力されたシリアル・オーディオデータをパラレルに直して取り込み、それをDAIフォーマットにならって出力します。DAIは、光ファイバーケーブルの様な1本の信号線に、データ・同期クロック(BCK)・左右チャンネル(L/R)が乗っている特殊な信号で、もとの同期クロックを抽出できるような(というより直流成分を抑えるような)特殊な変調を、(バイフェーズ・マーク変調:下図)L/Rチャンネル、また各種ステータスを乗せるためヘッダ(preamble)を付けています。 このヘッダ部をフレームにしたがって生成し、それに続いて各データをゲートで変調して送出していきます。ステータスビットは先の通り'0'で固定していますが、パリティビットだけは違うとエラーになるので、データの'1'の数をカウントして、奇数のとき'1'を送るようにします。 入力シフトレジスタ以外、これらすべてのシーケンスは、L/R入力の立ち下がり検出(L→Rのタイミング)とそれによって始動するマスターカウンタ(7ビット:128)に従って動作しています。 ・ ハ ー ド ウ ェ ア デ ザ イ ン / A B E L 記 述 デザイン・ファイル(.ABL .SCH) (xdait.zip:13k) 上がプログラム一式で、これを読み込んでコンパイル・インプリメントして、ディバイスに書き込んで下さい。 回路はABELで記述し、(というかAHDLからのほぼ直訳でなんとも不格好なソース)開発キット附属のXABELコンパイラで論理合成し、シミュレートを重ねた結果、そのマクロを回路図エディタで用いています。トップレベル・デザインが回路図なのは、サンプルプログラムに習ってただ何となく。よくわからなかったからです(汗) ピン・アサインも当然コンパイラ任せ(リソース利用率からも当然)、インプリメント・オプションではdensityオプティマイズでプログラマブルGNDの設定を加えます。ここで試してみておや?と思うのは、このデザインではスピードを最適化した方が密度の時よりもマクロセルが少なくて済んだこと。英語ヘルプの斜め読みなので詳しくなくて。まぁこれが利用率いっぱいだと確かにスピード最適では納まらず、密度重視で98%なんてことになったのですが。 ・ 実 験 ・ 使 用 例 インプリメント出来たらいよいよ書き込みで、実際のハードウェア上で動作させてみます。実験に用いた回路はこんな感じです。データシートのままの、DAIR−DAITのスルー回路、入出力は光モジュールを用いています。DAIRは秋月で、これも600円の'TC9245'です。このTC9245はbckが32fsで、上の仕様の入力と若干異なりますが、(上は64fs、実はPD0052様に書いたもの。)、16bitMSB first/ 後詰に変わりないのでOKです。 ブロック図での'Input audio data shifter'の通り、後の16bitが有効になるので。だから先詰めはNGです。この場合は後詰めになるようにL/Rの位相をずらすなどする必要があります。 さてさて、ここで1つ問題が。(この回路図(TC9245)では良かったのですが、PD0052の時では、) 実はどうも素直に一発で動作しなくって、事前のシミュレートでは問題無しと出ていたのですが。ちょこちょこ変更して正常動作したのがこのデザイン(.abl)です。 当初よりの変更点は1つ、最初の入力シフターの取り込むタイミングをbck立ち上がりではなく立ち下がりにしたことです。仕様での、入力のタイミングチャートを見ても明らかなように、普通立ち上がりでデータ固定するのが当然だと思うのですが、なぜかそれではビット落ちしてしまいます。このデザインでシミュレートをかけると理論的には当然今度は1ビット余分に取り込んでしまうことになって気持ち悪いのですが、PD0052(bck:64fs)とTC9245(32fs)との違い?等と甘く考え、その後幾度のハードウェア検証から、そして今もこれで問題無く動作しているので、これで良しとします。 この辺がまさにアマチュアの「甘さ」なわけで、いづれ突き詰めてやる!と思うのですが。時間ができたら・・。 -------------- 08/18/99 追記です。。 この他のDAIT/シリアル入力をして、「音が割れる」ときは(これが症状:15bit(パリティビット)落ち))、bckにインバータを入れて下さい。 もう1つ、実はTC9245はL/R出力がPD0052の逆、つまり'Lch'の時'L'で、仕様の図と反対ということが判明しまして・・。今UPしているソース・ファイルではこちらに・・つまりTC9245用に合わせてあります。これも必要に応じて、トップ・デザインの回路図にインバータを入れて下さい。。 --------------- ただ、プログラマブルなハードウェアですから、こういうバグへの対応は当然ながら自分でいくらでもできます。このタイミングで動作しないのであれば、またbck立ち上がりでラッチするように変更してみてみる等、いろいろ試してみて下さい。
上のリソース利用率は、384fs→128fsの分周回路を組み込んでいない時の レポートです。このとき実は'optimized [speed]'ですが。。 この12%、セル6個のスペースに、もう少し詰め込めそうです。この部分に、仕様のネックであった、32k/44.1k/48kHzのステータス選択が入るのでは?と考えています。まだまだHDLでのチューンも甘さを残してますし・・(汗) ちなみに先の3分周回路をいれて91%でした。 応用例には、いろいろあると思います。これから少しずつ、紹介していこう、と思っていますが、とりあえずはこれまでのdapで製作した、LSIとの置き換えでしょうか。とりわけDAITの入手の心配が無くなることは、大きいのではないかと・・。実際DAIT部分だけでXC9572を100%使い切るわけではなく、またデータ入力のシフタなど、回路に合わせて途中を省ける部分もあるので(ようはパラレル入力)、これまでのディジタル・エフェクトのxc9572への置き換えでも、もう少しメリットが出てくる気がします。なによりDAIRとDAITセットで1200円(いまは1300円でした)なので、気軽にディジタル・オーディオの実験が出来ること、これが一番面白そうなことなのかもしれません。 ・08/18/99 C o n t i n u e d o n t h e n e x t ・ ・ 参考文献・関連サイト xc9572 Data sheet(xilinx:Aldec) /xilinx Japan (site) 定本 ASICのシステム設計:小林 芳直,CQ出版 /CQ出版 (site) ABELによるASICの設計技法:小林 芳直/三上 廉司,CQ出版 CXD23033 Data sheet(SONY) TC9245 Data sheet(TOSHIBA) PD0052 Data sheet(PIONEER VIDEO) トランジスタ技術 92年8月・98年5月号 /ALTERA Japan (site) /The Electronic Cyber Space"共立エレショップ" |
|