2018-01-01から1年間の記事一覧

FPGA 版 FM 音源 (79) -- TX7 (OPS) 測定 (6)

今回はソフトウェアについて触れます。 まず、DMA チャネルの初期化部分のソースを下に示します。 16 ビット・パラレル・データ転送を 8 ビット DMA ふたつ (DMA_H, DMA_L) で実現しており、両者の内容はほとんど同じなので、代表として DMA_L の方だけを示…

FPGA 版 FM 音源 (78) -- TX7 (OPS) 測定 (5)

PSoC5LP Prototyping Kit と TX7 との接続図を下に示します。 (図をクリックすると拡大します)

FPGA 版 FM 音源 (77) -- TX7 (OPS) 測定 (4)

TX7 DAC データ・キャプチャのための内蔵ペリフェラルおよび「外部ハードウェア相当部分」の回路図を下に示します。 (図をクリックすると拡大します)

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 レジスタ) が追加されます。 そ…

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

「esp-idf」環境で作成されるアプリケーションでは、通常の C プログラムでの main() 関数に相当するものは app_main() 関数となっています。 FreeRTOS ベースで構成されており、システム側での各種の「お膳立て」が終了した後に app_main() 関数が呼ばれま…

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

gcc のインライン・アセンブラを使って Xtensa LX6 の「MAC16 拡張命令」を記述し、実行サイクル数の削減を試みていますが、次の 2 つの理由で成功していません。 インライン・アセンブラを利用すると、「ハードウェア・ループ命令」が使われなくなり、通常…

新版FM音源プログラム (29)

Cortex-M シリーズを離れて、Espressif Systems 製の ESP-WROOM-32 モジュール (Cadence/Tensilica の Xtensa LX6 デュアル・コア内蔵) に対してプログラムを作成し、所要サイクル数を測定してみました。 具体的には、ハードウェアとしては「ESP32-DevKitC E…

新版FM音源プログラム (28)

gcc の「インライン・アセンブラ」で書いた ARMv7E-M (Cortex-M4) 版の acc_calc_slot() 関数のリストを下に示します。 「中身」は armcc 版と同等です。

新版FM音源プログラム (27)

gcc の「インライン・アセンブラ」で書いた ARMv7-M (Cortex-M3) 版の acc_calc_slot() 関数のリストを下に示します。 「中身」は armcc 版と同等です。

新版FM音源プログラム (26)

gcc の「インライン・アセンブラ」で書いた ARMv6-M (Cortex-M0) 版の acc_calc_slot() 関数のリストを下に示します。 「中身」は armcc 版と同等です。

新版FM音源プログラム (25)

armcc のエンベデッド・アセンブリ関数で書いた「アキュムレータ機能」付きのスロット計算関数「acc_calc_slot()」の Cortex-M0 版のリストを下に示します。

新版FM音源プログラム (24)

armcc のエンベデッド・アセンブリ関数で書いた「アキュムレータ機能」付きのスロット計算関数「acc_calc_slot()」の Cortex-M3 版のリストを下に示します。

新版FM音源プログラム (23)

armcc のエンベデッド・アセンブリ関数で書いた「アキュムレータ機能」付きのスロット計算関数「acc_calc_slot()」のリストを下に示します。 (2018 年 3 月 23 日追記: #if により各種アーキテクチャに対応させているのをやめて、Cortex-M4 専用のソースとし…

新版FM音源プログラム (22)

オリジナルの OPL3 (YMF262) および FM 音源 + ウェーブテーブル 音源である OPL4 (YMF278B) では、FM 合成された音の出力先を CHA/CHB/CHC/CHD の 4 系統の出力チャネルの中から任意の組み合わせで選べるようになっています。 ただし、DAC (YMF262 の場合は…

新版FM音源プログラム (21)

STM32F4 シリーズには、「Adaptive real-time accelerator」(ART Accelerator) と称するフラッシュ・メモリ読み出しのためのキャッシュ機構が備えられています。 フラッシュの読み出し幅は 128 ビット (16 バイト) で、フラッシュ上の命令 (I-Code) に対して…

新版FM音源プログラム (20)

Cortex-M4 用の結果では、フラッシュのキャッシュ機構の構成が同じ STM32F446 と STM32F407 とがほぼ同じ結果で、別のキャッシュ機構を持つ STM32F303 がやや異なる結果となりました。 PSoC5LP にはフラッシュのキャッシュのヒット/ミスの回数を計測するレジ…

新版FM音源プログラム (19)

今回からは実行サイクル数の検討に入ります。 まずは、ARMv6-M アーキテクチャの Cortex-M0 である NXP LPC1114、Cypress PSoC4 から始めます。 アセンブリ言語で書いたスロット (オペレータ) 計算プログラムをコンパイルして得られたオブジェクトを逆アセン…

新版FM音源プログラム (18)

アセンブリ言語によるスロット (オペレータ) 計算プログラムでは、ARMv6-M (Cortex-M0) の 16 ビット Thumb 命令を主に使うこととし、ARMv7-M (Cortex-M3/M4) に対しては一部を 32 ビット Thumb2 命令で記述することにより効率化しています。 以下に、その「…

新版FM音源プログラム (17)

armcc の「エンベデッド・アセンブラ」では、関数まるごとアセンブリ言語で記述し、関数冒頭のレジスタ・セーブや、関数最後のレジスタ・リストアやリターン命令まですべてを記述する必要がありました。 gcc の「インライン・アセンブラ」では、C 言語での記…

新版FM音源プログラム (16)

オペレータ処理をアセンブリ言語で書く場合、C プログラム・ソースの構造体アクセスの o_p->ph_acc のような表現は、アセンブリ言語ソースとしては最終的には ldr r2, [r0, #4] のように「定数オフセット」にまで変換される必要があります。 C プログラム・…

新版FM音源プログラム (15)

今回は各種のチップ/コンパイラの組み合わせのオブジェクトに対する逆アセンブル・リストを掲載します。 もとの C ソース・ファイルでの記述を少し変えると、コンパイル後のオブジェクトはかなり大きく変化するので、あまり細部に渡る追及はしないでおきます…

新版FM音源プログラム (14)

プログラムを動作させるマイコン・ボードとしては、オペレータ出力波形をオシロで手軽にチェックするために、手持ちの中で DAC を内蔵するチップを搭載している次のボードを選びました。 Nucleo-F446RE (STM32F446RET6, Cortex-M4) STMF4-Discovery (STM32F4…

新版FM音源プログラム (13)

これまでのFM音源プログラムでは、オペレータ (スロット) ひとつ分を実現する関数を定義し、それをオペレータの個数だけ呼び出していました。 より効率化するために、ひとつの関数内ですべてのオペレータの計算を行なうように変更することを考えています。…

ムライボックス (23)

PIC16F18313 用のムライボックス・プログラムのパッケージを公開しました。(→こちら) 上記リンクをクリックすると Yahoo! ボックスが開きます。

ムライボックス (22)

PIC16F18325 用のムライボックス・プログラムのパッケージを公開しました。(→こちら) 上記リンクをクリックすると Yahoo! ボックスが開きます。

ムライボックス (21) --- ハードウェア (1)

PSoC4 の内蔵 UDB (Universal Digital Block) を使った "OR" ゲート回路に EXOR を追加して、ハード的に MIDI ポート出力信号の極性を反転できるようにしました。 回路図を下に示します。

ムライボックス (20) --- ソフトウェア (11)

今回は STM32F4xx シリーズのチップを搭載した Nucleo-64 ボードでの話題です。 ハードウェアとしては Arduino 用の「ムライシールド(仮)」(→こちらとこちら) を使用し、ソフトウェアとしては CubeF4 HAL ライブラリを使用しています。 デフォルトでは、Ardu…