FPGA 版 FM 音源 (76) -- TX7 (OPS) 測定 (3)

4 年前の記事のタイミング・チャートを再掲します。
オリジナルの回路では、9.4265 MHz の水晶振動子による源発振を 2 分周して 4.71325 MHz の 2 相ノン・オーバーラップ・クロック φ1、φ2 を作り出し、YM2128 (OPS) および YM2129 (EGS) に供給しています。

続きを読む

FPGA 版 FM 音源 (75) -- TX7 (OPS) 測定 (2)

これは 2014 年 5 月 13 日の記事 (→こちら) の続きです。 (TX7 のオーディオ出力を S/PDIF でキャプチャできるようにする改造の話)
結論から言うと、PSoC5LP Prototyping Kit (CY8CKIT-059) を使って、16 音フルにキャプチャすることができました。
TX7 本体には音色データ・エディットの機能はないので、「イニシャル・ボイス」である無変調の正弦波キャリア出力の波形をキャプチャしたものを波形編集ソフトで表示したものを下に示します。

続きを読む

ESP32 の命令実行サイクル数 (3)

Xtensa LX プロセッサの MAC16 拡張 (16 ビット整数乗算オプション含む) では、「ハードウェア」的には 16 ビット × 16 ビット = 32 ビットの乗算器と 40 ビット・アキュムレータ、および 4 つの 32 ビット・レジスタ (MAC16 レジスタ) が追加されます。 そして、関連する命令が 72 個追加されます。
アキュムレータおよび MAC16 レジスタ (アセンブラ・ニモニックでは m0, m1, m2, m3 と表記される) は「スペシャル・レジスタ」として定義され、汎用レジスタを介してアクセスできます。
積和演算命令には、次のようなバリエーションがあります。

続きを読む

ESP32 の命令実行サイクル数 (2)

「esp-idf」環境で作成されるアプリケーションでは、通常の C プログラムでの main() 関数に相当するものは app_main() 関数となっています。
FreeRTOS ベースで構成されており、システム側での各種の「お膳立て」が終了した後に app_main() 関数が呼ばれます。
「普通」にユーザ・アプリケーションを app_main() 関数に記述すると、それはデュアルコアの CPU1 側 (「アプリケーション CPU」の意で「APP CPU」と呼ばれる) を 100 % 占有するタスクとして実行されます。
もちろん、FreeRTOS 等の API を利用すれば、APP CPU 側に複数のタスクを走らせたり、CPU0 側 (「プロトコル CPU」の意で「PRO CPU」と呼ばれる) にタスクを走らせることもできます。

続きを読む

ESP32 の命令実行サイクル数 (1)

gcc のインライン・アセンブラを使って Xtensa LX6 の「MAC16 拡張命令」を記述し、実行サイクル数の削減を試みていますが、次の 2 つの理由で成功していません。

  • インライン・アセンブラを利用すると、「ハードウェア・ループ命令」が使われなくなり、通常通りのループカウンタ・デクリメント + 条件ジャンプの組み合わせでループが構成され、5 サイクルのオーバーヘッドが生じる
  • MAC16 拡張命令の実行ではパイプライン・ストールが生じ、1 命令 1 サイクルとはならない
続きを読む