Posts Issued on May 28, 2020

FM-7 ROM吸出し器の改版 (10)

posted by sakurai on May 28, 2020 #265

実験&PICプログラムの修正

組み立てたボードを図265.1に示します。

図%%.1
図265.1 FM-7 ROM抜出し器改版
実験したところ、リフレッシュがかかりっぱなし("L")となってしまいました。これはPICから出力する*REFCKが常にONになっていたためでした。本来はZ80W==Lの時のみ出力するようなトライステート制御を行う必要があります。PICにはトライステート出力は無いので、Z80W==Hの時に入力、Z80W==Lの時に出力とします。割込みハンドラを、この方向制御で挟むことにより次のように修正します。
void TMR2_DefaultInterruptHandler(void){
    if (Z80W_GetValue() == 0) {
        XREFCK_SetDigitalOutput();
        XREFCK_SetHigh();
        RFREQ_SetHigh();
        while (RFGNT_GetValue() == 0);
        XREFCK_SetLow();  XREFCK_SetHigh();
        XREFCK_SetLow();  XREFCK_SetHigh();
        XREFCK_SetLow();  XREFCK_SetHigh();
        XREFCK_SetLow();  XREFCK_SetHigh();
        RFREQ_SetLow();
        XREFCK_SetDigitalInput();
    }
}

実験

62.5 usecに4発のリフレッシュを実験しました。リフレッシュ期間は3.8 usecであったので、Arduinoに割込みをかけた場合はほとんど100%がリフレッシュであったのに比べて、PICによるリフレッシュ時間の割合は6%に激減しました。

さらに125 usecに8発を試してみます。図265.2、3にその場合のリフレッシュの波形を示します。PICを用いることで125 usec(8発)ではリフレッシュの割合を4.6%まで下げる事ができました。

図%%.2
図265.2 複数回のリフレッシュ(上:*REFCK、下:RFREQ)
図265.2より、青色線で示されるRFREQの周期は125 usであることが読み取れます。このRFREQのH幅が約5.8 usecであることから、オーバヘッドは4.6%となります。

図%%.3
図265.3 1回のリフレッシュ(上:*REFCK、下:RFREQ)
図265.3上より黄色線で示される*REFCKが8発観測されます。負のパルス幅は約240 nsであり、タイミング規格を満足しています。ArduinoとのDRAMアクセス競合が起きている場合に、通常約5.8 usecであるRFREQが時々伸びていることが分かります。

結論

実験結果としては、熱はかけていないものの、180 secまでノーエラーで経過しており、リフレッシュ回路は問題ないものと判断します。

表265.1にリフレッシュ回数とオーバヘッドを示します。

表265.1 PICによるリフレッシュ回数とオーバヘッド
周期[usec] リフレッシュ回数 リフレッシュ時間[usec] オーバヘッド[%]
15.625 1 2.3 14.72
31.25 2 2.8 8.96
62.5 4 3.8 6.08
125 8 5.8 4.64
250 16 9.8 3.92
500 32 17.8 3.56
1,000 64 33.8 3.38
2,000 128 65.8 3.29

基本的にはリフレッシュ回数を増やせばサイクルが伸びるため、リフレッシュのオーバヘッド割合は一定ですが、一方、アービトレーションのオーバヘッド割合は減少するため、トータルでは減少します。このように8回辺りが妥当だと思われます。

左矢前のブログ 次のブログ右矢