X68K DMAC(HD63450)がバスマスタの時の格安ロジアナによるバス観測
目次
X68K DMAC(HD63450)のバス権取得の様子
格安ロジアナを使って68KコアへDMAC(HD63450)がバス権を取得する様子を見てみました。
24MHzスペックのロジアナなので10MHzクロックのバス(Clockは20MHzレートになる)を観測するには足りない性能ですが、思っていたよりも分かるように取得できています。
信号の説明は、後から記載する事にします。
ADPCMの再生中にロジアナを動作させて本信号を取得しています*1。本プログラムはInside X68000に掲載されているADPCMを再生するサンプルプログラムを拝借させていただきました。
波形の丸付き数字の順序で説明します。
波形説明
- ①ASXが"L"区間の間はDMACがバス権を取得する直前のMPUからのバスアクセス
- ②DMAからのバス権取得要求。本信号はどのタイミングで来ても良いようです。
- ③MPUが②のバス権要求を受け付けたときにBGXを"L"にします(BRXが来た時に既にバスアクセスを開始していれば、このバスアクセスが終わった時にアサートされます)。本タイミングでMPUはアドレスバスやデータバスをHi-Zにしてバスを解放します。
- ④DMAC側がバスを使っている最中にDMAC側がBGACKXを"0"へアサートします。(本信号が"L"区間はDMACがバスマスターになっています)
- ⑤DTACKXが"L"区間はおそらくDRAMからADPCMデータをリードしています。
- ⑥このDTACKXの"L"区間はADPCMへ⑤でリードしたADPCMデータをライトしているはずです。
- ⑦バス権がMPU側に戻ってきた最初のバスアクセスです
CLKのduty比が50%に見えないのはロジアナのサンプリングレートが24MHzと低いためです。それでもCLKの立ち上がりエッジタイミングで駆動される信号、立下りエッジで駆動される信号がきちんと区別できてます。1500円くらいのロジアナですが役に立ってくれてます。
DMACがバスマスタ時の区間の説明
本プログラムはADPCMの再生プログラムなのでDMACはDRAMからADPCMデータをリード、そしてリードしたデータをADPCMへライトするという動きになるはずで、⑤⑥のDTACKX="L"区間が、それぞれの動作だと思われます。
波形では、この時のASXは"H"のままになっています。MPUとDMACのASXは直結されているはずなので、ASX="L"になっているはずです(DMAC側がASXを駆動)が、そうはなっていない理由は、おそらくXellent30s上にある68K-MPUのASXをプローブしているからだと思われます(下写真)。
Xellent30s基板と、X68000基板とを繋ぐソケット側でプローブすればASX="L"になってるんじゃないかと思われます。後日見てみたいと思います。
→後日、ソケット側で取得した波形ではDMACマスター区間でもASX="L"がきちんと出ておりました。
#Xellent30で一旦バッファICを噛ましてX68000マザーと接続していると勝手な想像しています。
DMACのアクセス間隔
波形をズームアップしたのが下の絵です。
ADPCMは7.8KHzで再生させていて、1sampleが4bit。ADPCMのデータ幅は8bitで2sample分がパッキングされていて、DMACで1byte(=8bit)づつ転送しているので、再生周期の1/2でDMACが動作しているのが分かります。
信号の説明
上から順にCLK(in),ASX(out),BRX(in),BGX(out),BGACKX(in),A23(out),A16(out),DTACKX(in)です。()内は68000から見た入出力方向を記載しています。
簡単に信号を説明すると、
CLK : MPUのクロック
ASX : Address Strobe(負)
BRX : Bus Request(負) -- MPUへのバス権要求
BGX : Bus Grant(負) -- 現在のバスアクセス終了後にバス権を明け渡す
BGACKX : Bus Grant Acknowledge(負) -- 他のデバイスがBUSを使っている事を示す
A23: アドレスバスbit23
A16: アドレスバスbit16
DTACKX : Data Transfer Acknowledge(負)
A23をモニタした理由は
(A16については意味はなく、チャネルが余ったので適当に選択)
・ADPCMの領域は0xe92000-の8KBなのでA23=1となり、
・DRAM領域はA23=0になる
のでアドレスバスの情報からADPCMへのアクセスとDRAMへのアクセスが切り分けられるのではないかと思ってモニタ対象としました。
#実際にはメモリ搭載量が10MBなので0x000000-0x9FFFFFの値域を取るのでA23=1となりうるのですが、このプログラムの実行時は、多くのメモリを利用しているわけではないのでA23=0になるだろうと思っています。
でもロジックアナライザが示す波形ではDMACがバスマスターの時のDRAMアクセスであろうタイミングであってもA23=1になってしまっています。outside x68000で回路図を追うと、アドレスバスはMPUの一番近いところでバッファICを噛まして他チップへ配られておりました。そのため、DMACがマスターになっている時は、MPU側、ソケット側いづれで信号を観測しても、DMA側の信号は観測できないようです。
以上になります。
久しぶりの更新でした。
文章をうまく書くのは難しいです。
*1:トリガ検出による取得がうまく出来ず、しかたなくプログラム実行→サンプル開始ボタン押下を素早くやりました