ここでは、特許に関わるFPGA採用の進捗を取り上げます。
PSoC4 prototyping kitの代替手段を試しました。 PSoC4の代わりにATF22V10CというGALを2個使って、追加変調しています。 ATF22V10Cでは使えるFlipFlopの数が少ないので、PSoC4と比較すると厳密にはヒゲパルスが増えていますが、聴感上は同じに聴こえます。
GALを2020年にいまさら使うため、 まごころせいじつ堂 を参考にしました。
GALのロジックを組むWinCUPLは、Windows98時代のUIです。 Windows10でもちゃんと動作するのですが、GALのリソースが不足しても警告を出さなかったり、エラーメッセージがエラー内容と食い違っていたりするところに時代を感じます。
GALを搭載するプリント基板を作ってみました。
評価中ですが、11.2MHzfsのΔ∑ではノイズがでます。 GALのスピードが追いつかないようです。 5.6MHzfsでもノイズっぽいので、GALをこの目的で使用するのは、信号処理のタイミング的に無理があるのかもしれません。
ノイズの主原因がわかりました。 XMOSにもAmaneroと同じアプリでDoPを送っていたのですが、AmaneroはBigEndianでXMOSはLittleEndianです。 XMOSにLittleEndianのDoPを送るようにしたら、ノイズが減りました。 詳細評価は、これからします。
5.6MHzfsのΔ∑は問題なく再生しています。 11.2MHzになると、ノイズが乗ります。 GALの動作速度が11.2MHzに追いつかないようですね。
SiPeed Tang NanoというFPGAデバイスを見つけて試しているところです。 Linuxで開発からコンフィグレーションまでできることになっています。 FPGAのコンフィグレーションを書き込もうとすると、SRAMには書き込めますがFlash ROMに書き込めません。 しばっち電機のブログによると、比較的新しいプログラマソフトの問題のようです。 GOWIN社に問い合わせているところです。
sipeed社のサポートにもメールしておきました。
これこそが、チャイナクオリティですね。
sipeed社のサポートに出したメールがエラーで返ってきました。
<support@sipeed.com>: host mxbiz1.qq.com[203.205.232.191] said: 550 Ip frequency limited. http://service.exmail.qq.com/cgi-bin/help?subtype=1&&id=20022&&no=1000725 (in reply to end of DATA command)
まったく、チャイナクオリティですね。
Tang Nanoを使ったヘッドフォンアンプできました。
Tang NanoのSRAMにコンフィグレーションを書き込むと、正常動作します。 Flash ROMにコンフィグレーションが書き込めれば、完璧なんですけどね。
gowinのサイトからプログラマの旧バージョンがダウンロードできました。 gowinのサイトはわかりにくいです。 www.gowinsemi.com.cnを表示して英語表示を選択すると、www.gowinsemi.comに遷移して開発ツールはダウンロード出来なくなります。 www.gowinsemi.com.cnの表記は中国語のみなので、chromiumブラウザで翻訳しながらでないと目的地にたどり着けません。
Linuxで、V1.9.5Betaを動かそうとしたら、カーネルがバージョン5.4以降だとstimeシステムコールの問題で動作しません。 最新バージョンのプログラマで、書き込みクロックをいろいろ変えて試していたら、SRAMへのコンフィグレーション書き込みまでできなくなってしまいました。
githubにopenFPGAloaderというレポジトリがあります。 安定バージョン0.4.0を入手してTang Nanoに書き込んでみましたが、最新のGoWinプログラマと同じ挙動でした。
WindowsにV1.9.5Betaをインストールしても、Tang Nanoがdevice not foundになってしまいます。 クロックをいろいろ試していたせいでFPGAが変なモードになってしまったのか、Windowsからも書き込み不可能なのか、現時点で判別つきません。
Tang Nano側の端子はUSB typeCです。 開発ホストとTang Nanoをつなぐケーブルは、100円ショップで買えるUSB 2.0で使えました。
seeedstudio.comで売っているTang Nanoのコメントコーナーに、「最新プログラマでFlash ROMに書き込めない」と英語で書いてみましたが、1日も経たずに消されました。 自分に都合の悪い情報はなかったことにするなんて、日本の政治家みたいなチャイナクオリティですね。
Tang NanoのFlash ROMに書き込み成功しました。
何度リブートしてもTang Nano デバイスを認識しなかったWindows10ですが、1晩寝たらCOMポートとして認識するようになりました。
書き込み成功するまでにいろいろ試したので、何が決定的な原因だったか切り分けできていません。
成功条件は、以下です。
数時間放置したら、またSRAMへのコンフィグレーション転送まで受け付けなくなりました。 Flash ROMに一旦書き込んだコンフィグレーションも無効です。 不安定なFPGAですね。
Tang Nanoバージョンのヘッドフォンアンプに問題を発見しました。 Bump Of Chickenの『なないろ』を再生すると、ヴォーカルにビブラートがかかているかのように強弱変化します。 強弱変化は、ドラムのタイミングに同期して低音が出るとヴォーカルが弱くなります。 手元のヘッドフォンアンプはTang Nanoの他にPSoC4や Tang Primer、74HCシリーズなどを使ったバリエーションがありますが、この問題はTang Nanoバージョンだけに発生します。
念のため、消費電流を測ってみました。
平均消費電流は0.01Aの違いですが、電源回路の2200μFの電解コンデンサーでは、Tang Nanoが出力スイッチするときに消費する電流で電圧降下が起きているのかもしれません。
ビブラート問題が解決しました。 FPGA内部でイベント処理に使う信号を、Tang Nanoのクロック端子に入れればよかったのでした。 我が家にはFPGAの入門本が4冊あるけど、どれにもクロック端子の説明が書いてないぞ。
備忘録です。
Tang Nano の入力にXMOSの出力がつながっている時、Tang Nanoよりも先にXMOSの電源が立ち上がると誤動作します。 Tang Nanoの9ピン(基板の9ピンJTAG接続にも使う FPGAの20ピン)を入力ピンとして使用しているからかもしれません。
どうも、Tang NanoやTang PrimerのFPGAコンフィグレーションツールには、論理合成のバグがあるみたいですね。 Verilog HDLで書いたとおりに動作しません。 GNU cverのシミュレーション結果は期待通りに動作するので、コンフィグレーションツールのバグだと思います。
Tang Nanoの出力をLAP-Cのロジアナでチェックしていたのですが、Tang Nanoに問題があるのではなくてロジアナが故障したようです。 ロジアナ上では音楽になりそうもない信号が出ていますが、ヘッドフォンを繋ぐとちゃんと聴こえます。
ロジアナは正常でした。 一見音楽に見えない信号でも、音楽としてちゃんと聴こえていました。 コンフィグレーションツールのバグを回避して、期待の信号を作ることに成功しました。 HDLの if else条件分岐に頼らず、入力信号とそのラッチを組み合わせて、論理演算で出力信号を作るようにしたら、期待通りに動作しました。 中国製コンフィグレーションツールのチャイナクオリティなのか、HDLツールはみんなこの程度なのかは、HDLの経験が少ないので評価できません。
AliExpressにTang Nanoを注文していたのですが、届いたのは蛍光色のステッカーでした。 AliExpressサイト上でDispute手続きに入りました。 ショップの名前は、"WAVGAT authorization Store"です。 チャイナクオリティですね。
AliExpressへの注文が3回連続して届きませんでした。 中国も悪い人ばかりでは無いと思いますが、こうも続くと信用できなくなります。 それでいて、「中国人を馬鹿にするとただじゃおかないぞ」とか言うから嫌われるんですよね。
AliExpressのDispute手続きは、中途半端です。 WAVGAT authorization Storeは、2回連続して「返金しないぞ」と言ってきました。 このまま返金されないと、AliExpressがVISAカードのブラックリストに載ることになるんですけどね。
Seeedに注文していたTang Nanoが届きました。 Tang Nanoを注文するのはSeeedがよさそうです。 Windows10で開発ツールのV1.9.5Betaを使用して、フラッシュROMに書き込みできています。 ようやく作業が進みそうです。
AliExpressはRefund手続きに入りました。
昨日の深夜からTang Nanoの開発ツールの認証に失敗します。 開発ツールが起動しないので、開発できません。 相変わらずチャイナクオリティですね。
Tang Nanoの開発ツールは、翌日には使えるようにもどっていました。 今、USB type C端子から給電したときと、5V端子から給電した時の挙動の違いで困っています。 24MHzのクロック(FPGAの35ピン入力)でウォッチドッグタイマを作ったのですが、5V端子から給電するとうまく動作しません。 公開されている回路図を見る限り、給電方法による違いは見つかりません。
SeeedのTang Nanoは、在庫0個で止まっています。 AliExpressに新たにSipeed直営ショップがオープンしたようです。 今AliExpressに注文している基板が届いたら、Sipeed直営ショップを試してみます。
Digikey でTang Nanoを扱うようになりました。 12月14日に発注して、UPSで今日届きました。 中国から発送するより早く届きます。
FPGA の tang primer でI2S信号をPDMに変調することに成功しました。
これで一般的なI2S信号をPDM出力できるようになりました。 もう、AK4137はいりません。 Amanero出力ならPCMでもDSDでもPDM出力できます。 Amanero以外にS/PDIF信号とか、7.1chデコーダーとか、Raspberry Piの出力もPDM出力できます。 一気に応用範囲が広がりました。
あれほど安定して動作していたFPGAですが、一晩寝て起きたら動作しません。 AK4137もそうだったけど、最近の半導体って不安定ですね。
何度かコンフィグレーションをやり直したら、またFPGAが安定動作するようになりました。 Tang Primerではなくて、Tang NanoでもPCMをPDM変調できるようになりました。 回路自体は2021年7月13日の写真と一緒です。
FPGAによるPCMのPDM変調が安定しているので、1ヶ月ほど評価試験中です。 評価試験が終わったら、インプレッションを書きます。
おまたせしました。 インプレッションです。
まずFPGAによる⊿∑変調のスペックを書きます。 入力のI2S PCMを64倍のサンプリング周波数を持つ⊿∑に、1次変調器で変調しています。 入力がCDDAだったら、⊿∑は2.8224MHzになります。 入力が352.8kHzfsだったら、⊿∑は22MHzになります。 サンプリング周波数を64倍する時に、ローパスフィルターは使っていません。 階段状に64個同じデータを並べています。
今まではAmaneroに⊿∑を送らないとPDM再生できなかったので、ソフトウェアで⊿∑変調までしていました。 入力がCDDAの場合、まず8倍周波数352.8Khzにして同じデータを8個並べます。 次に32bit浮動小数点演算で8191タップのFIRで20kHz以上の音声データを急峻にカットしています。 次に352.8kHzを32倍周波数の11MHzの⊿∑に1次変調器で変調しています。
⊿∑をPDMに変調するのはFPGAに任せます。 入力がPCMでも⊿∑でも、PDM変調はFPGAがやります。 PDM変調の動作はPSoC4とまったく同じです。
PCM入力でも、⊿∑入力でも、出音は非常に近いです。 違いがわからないくらいです。 AK4137で⊿∑変調していたときは、出音に丸みがついたような印象がありましたが、今回はそんなに違いません。 あえて言うならば、ソフトウェア変調の方が滑らかで、FPGAで⊿∑変調すると硬いような気がします。
第3者にも聴き比べをお願いしました。 「PCM入力のほうが、音像の定位や音場感が良い」との感想をいただきました。 Webmasterがよく聞くR&Rでは、その違いがよくわかりません。 オーケストラのワンポイント録音音源ならば、違うような気もします。
PDM方式は⊿∑を追加変調しているので、⊿∑の欠点が出ます。 エレキ工房No.5に書いたように、少レベル信号は⊿∑変調すると可聴帯域にノイズが乗ります。 初期のCDは低レベルで取り上げたユーミンのMISSLIM4曲めを再生すると、ノイズが聞こえます。 ノイズの出方はPCM入力のときとソフトウェア変調のときで違いますが、楽曲を邪魔するノイズが聴こえることに変わりはありません。 ⊿∑変調器を高次にするとノイズが減るかもしれませんが、未確認です。 AK4191が入手できたら、FPGAの代わりに⊿∑変調させてみたいです。
試作機のうち、AK4137でPCM→DSD変調する個体でユーミンのMISSLIM4曲めを再生してみました。 ノイズは聴こえません。 昔SHARPが作った7次変調器のような工夫をこらした⊿∑変調器ならば、ノイズは解決できそうです。
FPGAを使った最新試作機のブロック図を掲載します。 ブロック図の中の青い箱は買ってきた部品をそのまま使っているところで、オレンジの箱はwebmasterが作った部分です。
部品がある間は、オレンジ部分の部品を有償で提供できます。 ご希望の方は、webmaster@nakata-jp.orgまでご連絡ください。
ふと思いついて、自宅の試作機全部で順番にユーミンのMISSLIM4曲めを再生してみました。 AK4137を搭載しているかどうかとは関係なく、ノイズの大きい個体と小さい個体があります。 もう少し、原因究明した方が良さそうです。
FPGAでノイズが乗る原因の一つは、わかりました。 ネットに広まっているTang Nano, Tang Primerのピン配列の情報の中に間違っているものが混ざっています。 それ以外にも問題を発見したので、追跡中です。
https://dl.sipeed.com/shareURL/TANG/Premier/IDEで配布しているTang Primer向けIDEツールのライセンスファイルがおととい期限切れになりました。 support@sipeed.comにメールしたらエラーで返ってきました。 現在、Tang Primerでの開発ができません。
昨日の記述を書いた後で、新しいライセンスファイルが公開されました。 Tang PrimerでもTang Nanoと同様の出力になりました。
Amanero Combo384ではなくてPCM2706のI2S出力を tang nano でPDMに変調しました。
Amanero Combo384の出力をPDM変換すれば、品質的にも機能的にも充分です。 わざわざPCM2706とつないでみせたのは、「I2S入力なら多様なデバイスに対応していること」と「安く作れる」ことを示すためです。 性能的には、TCXOクロックからI2S信号を作るAmaneroよりもPLLでI2S信号を作るPCM2706の方が不利です。 CDDAの再生でどのくらい音質に差が出るか、調べてみます。
Amanero Combo384の出力をIntelのFPGAであるMAX10で変調できました。 Verilog HDLはTang Nanoと同じです。
Raspberry PiのI2S出力をTang Primerで変調しました。 ⊿ΣoverI2Sにも対応しています。 スピーカー向けの出力信号も出ていますが、今回はヘッドフォンだけ実装しました。
FPGA の tang nano 9k でI2S信号をPDMに変調することに成功しました。
Tang Nano 9k を使うための小手調べで、ヘッドフォンアンプを試作しました。
2022年12月16日 記事を分割
2024年11月6日 追記