[8086]前回の記事までの評価で16MHzのクロック信号の3.3Vから5Vへの変換回路が決まったので回路をアップデートしました。結論を先に書くと、今回のクロック部分の改造したプリント基板でV20が16MHzでもCP/M-86が問題なく動作することを確認できました。今回改善した回路図が下図になります。グランドベタ化前のトップ面とボトム面のパターンを重ねたものが下図です。Pic24V20パターン(グランドベタ化前)グランドベタ化後のトップ面のパターンが下図です。Pic24V20Tトップ面パターン下図はボトム面のパターンです。Pic24V20Tボトム面パターン今回は初めてELECROWさんに基板製造を依頼してみました。SEEEDさんではDesignSparkPCBの出力をそのままアーカイブして提出すればよかったのですが、ELECROWさんでは他の多くのプリント基板製造業者さんと同様にCADから出力された設計データファイルを規則に従ってリネームする必要がある点が少し面倒でした。出来上がった基板自体は特に問題ない状態でした。長所としては発注する基板をかごに入れる前に輸送方法を選択できるので枚数と輸送費との関係が判り易いことです。製造費用は5枚でも10枚でも同じですが輸送費は重さと大きさで決まるので5枚の方が安くなります。ELECROWさんは予備として作成した基板も問題無ければ送ってくれます。今回は5枚発注して6枚届きました。先程確認したらポイントが555ポイント貯まっていました。5枚の製造費が$4.9で輸送費は一番安いものを選択して$8.44でした。11/24に発注して12/9に届きました。出来上がった基板のTOP面が下の写真です。Pic24V20基板(トップ面)ボトム面が下図です。Pic24V20基板(ボトム面)前回のバージョンと見た目はあまり変わりませんが部品実装後の写真も貼っておきます。未実装部分はリアルタイムクロック用のクリスタル周りの部品とバックアップ用の電池ホルダです。2020/12/15「レトロマイコン86ボードの構想(その20)ケース作成2」の記事で書いたケースに入れた状態の写真を追記しました。[8086]PICからV20(クロックのhighレベルは規格上0.8xVdd=4V以上)へ供給するクロックの電圧レベル変換回路の検討中で、前回記事の「レトロマイコン86ボードの構想(その23)16MHz動作実験3」の末尾で書いたように手配していたFETが届いたので評価結果のダイジェストを書いてみます。始めにFETを使ったレベル変換に関しては下記のレベル変換ボードの説明にあるように双方をそれぞれの電源電圧で吊り、更にゲートを低い方の電圧で釣ることで双方向のレベル変換に対応できます(電圧の低い側をソースに接続)。レベル変換」に同様な回路が示されています(前者は方向固定の例で入力側のプルアップが省略されている)。FETの2N7002が届いたので(実はかなり前に届いていた^^;)下図の回路で評価してみました。下図が10KHzと100KHzの矩形波入力時の波形で黄色(ch1)が入力で水色(ch2)がレベル変換後の信号です。左側の10KHzの方は問題ないように見えますが、右側の100KHzでは立上り時にFETのオフに遅延が発生して3.3V側に接続されている状態が発生しています。(100KHz)下図の500KHzではプラス側の末尾の1/3で5Vへ向かって推移していますが始めの2/3は3.3Vのままの状態です。上の100KHzの波形と合わせてみるとFETがONからOFFに推移し始めるのに1us弱の時間が掛かっているようです。(500KHz)V20のクロックとして使用する8MHzと16MHzではプラス側の全領域が3.3Vになってしまっていてレベル変換回路の効果がなくなっています。(16MHz)これらの現象は前回の記事で書いたトランジスタによるレベル変換回路で生じた現象と酷似しています。3.3Vの変換方も同様の傾向が見られます。黄色(ch1)が入力側で水色(ch2)が3.3Vへの変換後の信号です。(500KHz)因みに下図のような単純なプルアップ回路では500MHz時点で完全にスイッチングが追い付かない状態になりました。いう感じです(実際16MHzでV20が動いているし)。トランジスタを2個使ってプッシュプルドライブ回路にでもしてみる?(でも部品が増えるのはちょっと)一点気になることは・・・今回使用した海外から調達した2N7002のマーキングが「7002」になっていることです。秋月さんのHPを見ると2N7002は2件ヒットし、2つとも”K72"と書いてあり下記のマーキング仕様に準拠してますね。5V変換時の5V側のプルアップ抵抗を10Kから1Kに変更して確認してみました。前回記事のトランジスタ回路ではプルアップ抵抗を色々変えて試していました(この時は解決策が1つも見つかっていなかったので)が今回は少し潔すぎたかもしれません^^;下図が500KHzと1MHzでの確認結果で、500KHzでは10Kプルアップ時と同様に立上り直後にFETのON状態が残留し出力が3.3Vで、プルアップ抵抗を小さくしたことで立下りがかなり鈍っています。1MHz側の立上りは最初から5Vに遷移する右上がりの状態になっていますが、これは入力がlowの時にFETが完全にONしきっていなかったためと思います。(1MHz)下図は8MHzと16MHzの場合で、High側はかろうじて4Vに達していますが、Low側がプルアップ抵抗に引っ張られて1V以上になっています。以下なので今回の場合は0.75V以下にする必要があります。16MHzのケースでは振動現象が現れ、その2、その3の図に示したように出力が一定周期で2V程度の幅で上下しました。(16MHz)その3結果としてプルアップ抵抗を小さくすると立上り時の問題はほぼそのまま(5Vへの遷移開始タイミングは早くなった)でlowの時の電圧が上がってしまうということが判りました。FETは一般的にオン抵抗が小さいという印象でデータシートにもVgs=5V、Id=0.05AではTypicalで3.2Ωと記載されています。データシートにあるオン領域特性グラフ(下図)からVgs=3.0Vの場合の線形領域を延長してFETの抵抗値を求めてみると20(=4/0.2)Ω程度になりますが、これはあくまでも静的特性であって、今回の様な過渡的な状態では当てはまらないということだと思います。[8086]前回の記事でPICから選別したV20へ供給しているクロックをトランジスタでレベル変換してV20が16MHzで動いたことを書きました。信号の確認はロジアナを使っており、波形を確認できていませんでした。注文していた最大帯域250MHzのUSBオシロ(HANTEK6254BC)がやっと届いたので、今回は波形確認結果等を自分へのメモも兼ねて記載しておきます。記録として画面キャプチャを多く貼り付けていて記事内容としてはあまり面白くないと思いますので最初にお断りしておきます。前回の記事で書いたようにPICからのクロックを下図の回路でレベル変換してV20に供給するように改造しました。レベル変換回路Pic24V20ボード上のPIC出力のクロックとV20に入力されるクロックの波形を確認した結果が下図になります。ch1(黄色)がPICからのクロック出力でch2(水色)がレベル変換後のV20へ供給されるクロック波形です(以降のシンクロ画面も全て同様)。レベル変換したのに最大電圧が4V程度になってしまっていますorz再度ブレッドボードで100KHzの信号を使って確かめてみるとトランジスタがoffするのに1.7us程度の時間がかかっている(この間、出力は3.3V)ことが判りました。レベル変換入出力波形(8MHz)そこで常套手段としてベース抵抗にパラでスピードアップコンデンサを付けてみました。[pF]となるので手持ちの部品の中からマージンを加味して220pFで実験しました。100KHzと800KHzの場合の波形が下図で100KHzでは想定通り立ち上がっているように見えますが、800KHzの方を見ると立上り時間が100ns弱掛かっています。スピードアップコン追加後(800KHz)コレクタのプルアップ抵抗を1Kから330に変更した結果が下図です。8MHzの矩形波は私のシグナルジェネレーターの限界(矩形波の上限は6MHz)を超えているのでかなり鈍った波形になってしまっていますが変換後のクロックはかろうじて5Vまで達しています。プルアップ抵抗1K⇒330(8MHz)元々の改善目標であった16MHzでの波形が下図で左は試しにプルアップ抵抗を660にした場合で、右側は330の場合です。660の場合はV20へ供給するクロック(水色)の電圧がが3V程度までしか上がっていません。強引に釣り上げている感はありますが330では16MHzでも5V付近まで上がっています。プルアップ抵抗330(16MHz)ブレッドボード上で試行錯誤するのも何なので文明の利器(シミュレータ)を使って確認してみましょう。右側はスピードアップコンデンサを入れた場合立上りが俊敏になっています。スピードアップコン有り(50Hz)クロック1MHzで確認して見ると左下図のように出力が立ち上がらないのでプルアップ抵抗を330にしたものが右下図です。1K⇒330Ω(1MHz)プルアップ330Ω側は出力が立ち上がりかけているので時間軸を長くして確認してみましたが出力が立ち上らない(左下)のでスピードアップコンデンサを10uFにしたものが右下です。SpeedUp:10uF(1MHz)試しにプルアップ670(左下)と1K(右下)の場合も立上りに時間がかかりますが5Vまで立ち上がっていました。SpeedUp:10uF(1MHz)立上り後の波形をズームしたものが下図で右側(プルアップ1K)の方は立上りが少し鈍っているのが判ります。ズーム(1MHz)最終目的のクロック16MHzでプルアップ330の場合のシミュレートが下図です。右側のズーム波形からはプルアップが強すぎる感もありますが前述のブレッドボードでの実験からは330の方が望ましいという結果が得られています。今まで何度かシミュレータを使ったことがありますが、今回のように実験結果とかなり異なる結果が出たのは初めてです。扱う周波数が高いことが主な原因かと思いますが、ネットからダウンロードしたトランジスタ(SS8050)のパラメータがランク別になっておらず少し怪しげでもあります。今回は新調した最大1GサンプルのUSBオシロを使ってみましたが数十MHzオーダーの波形が目で見えるのは素晴らしい!シグナルジェネレーターの方は少し性能不足でしたが矩形波ならPICで出せよ(>自分)って感じですねw最後に実機(Pic24V20)に実装した結果についてですが、スピードアップコンデンサ220pFを付加した場合の波形が下図です。右側の16MHzの方はほとんどサイン波形になってしまっていますが、それよりも最大2V弱までしか上がっていません。PullUp:330(16MHz)今回のPICからのクロック供給に関して、ゲートICを追加すればすごく簡単なのですが、ゲートICの内部回路ではアクティブ素子が複数使われていて、これを1個のトランジスタで代用しようとすることがそもそも無理があるのかもしれません(でもこういう無理に挑戦するのも面白い)また、FETを海外に手配中なので届いたら実験してみたいと思います。[8086]前回の「レトロマイコン86ボードの構想(その21)16MHz動作実験」の記事でV20(8088互換)とPICを使用した自作CP/M-86ボード(Pic24V20)が16MHzクロックで動作しないことに対する調査として16MHz時の状況を確認しメモリアクセス時のタイミングは問題なさそうに見える16MHzではCPUが停止してしまう謎の状態が出現する外部から5Vのクロックを供給すると14MHzまで正常動作する現状の回路ではクロックのHighレベルは3.3Vで4.0V以上という規格を満たしていない外部クロック14MHzではHighレベルが3.9V以上で正常動作したというようなことを書きました。※本記事で記載しているV20の規格はuPD70108H(V20HL)の5V動作時のものです。ロジアナでの確認なので各信号の立上り/立下り時間が規格を満たしているか否かの確認はできていません(100MHz以上対応のシンクロが欲しい・・)。不思議な現象ですが本記事の最後の方で推測した原因について記載します。これらの結果から16MHzで動作しない原因としてはクロックが最も可能性が高いと思われます。上記の前回記事にも書きましたがジャンパーピンで選択可能なPICから出力している8MHzと16MHzの信号はオープンドレイン対応が難しいのでトランジスタを追加してオープンコレクタをプルアップする形(結果としては通常のトランジスタの回路ですが)にして確認してみました。オープンコレクタプルアップ実験回路ブレッドボード上で回路を組み、シグナルジェネレータから3.3Vの矩形波を入力してみると下図のようになりdutyが50%になりませんでした。今回は16MHz対応のV20を限界の16MHzで動作させたいため、dutyが50%からズレると規格を満たすことができなくなってしまいます。次に回路の簡略化も考慮し、下図のようにダイオードでの対応を検討してみました。0.7V程度プラス側にレベルシフトするのでV20の規格(High:4.0V以上,Low:0.15xVdd=0.75V以下)をギリギリ満たしそうです。ダイオードでのレベルシフト実験回路16MHzの矩形波を入力した際の出力が下図で、やはりdutyが50%に保たれない結果になりました。プルアップ抵抗の調整でdutyをある程度は調整可能でしょうが、アナログ的な調整要素はあまり入れたくありません。最後に下図のようなトランジスタによるレベル変換回路で評価してみました。測定結果が下図でDutyが保たれていて良好な結果でした。念のため25MHzまで確認して見ました(時間の分解能は10ns)。これならV20のクロック信号の規格に沿うものにできそうです。レベル変換回路評価結果(8MHz)レベル変換回路評価結果(16MHz)レベル変換回路評価結果(25MHz)Pic24V20ボードに実装した状態でのクロック信号が下図です。ロジアナのサンプリング周期が100MHzで時間分解能が10nsなので40nsの部分がありますが問題無しです。ボードに実装後のクロック信号(16MHz)ボードを修正後に、メモリアクセス関連の信号を確認した結果が下図で、こちらも特に問題が無いように見えます。ASTBはV20から出力されているアドレスラッチストローブでALEはアドレスラッチIC(74HC573)へ入れているラッチ信号です。ロジアナのサンプリングは50MHzで時間分解能は20nsです。改修後のPic24V20のメモリアクセス関連信号(16MHz動作時)今回の改造後のボードの様子が下の写真です。表面でクロックのパターンをカットし(写真では'4'の文字に隠れて見えない)、裏面でトランジスタと抵抗2本を追加改造しホットボンドで固定しています(基板中央部)。外部クロックでも14MHzまでしか動作しなかった件に関してはメモリアクセスタイミング及びクロックは問題ない状態なのに動作しないので原因が不明なままでした。そこでV20自体の個体差もあると考えてV20(uPD70108HCZ-16)をebayで5個注文(5個で千円以下の安いやつ)していて、ようやく届いたので評価してみました。結果、1個が8MHzでも全然動作せず(評価途中に壊した可能性もありますが)、3個は8MHzでは動作し、16MHzでは動作しませんでした。~し、1個が16MHzで問題なく動作しました(^^)/※前回の記事で書いたALEのプルダウン抵抗を510から1Kに戻しても問題なく動作しました。下の写真は今回届いたV20です。表面にある二つの丸い痕の深さが以前購入したV20よりも僅かに浅い(表面を削ったため?)などからリマーク品の可能性があります。{追加購入したuPD70108HCZ-16が5個届いたので16MHzでの動作確認を行いました。基板上のソケットが壊れないようにゼロプレッシャーソケットを平ピンソケットに押込み(平ピンソケットのピンが広がってしまう)、これを基板上のソケットに刺して確認しました(左下写真)。追記twitterにポストした16MHz動作の動画付きコメントを貼っておきます。[8086]V20(i8088互換)とPICを使った自作CP/M-86ボード(Pic24V20)は8MHzでは安定して動いているのですが、16MHzではすぐに暴走してしまう状態です。使用しているV20はuPD80108HVZ-16で16MHzまで対応しているものです。最初に記録の意味も込めて8MHz動作時のV20からPICへのサービス要求処理の開始と終了部分のタイミングをロジアナで確認した結果が下図です。ロジアナのサンプリングは40MHzなので時間の分解能は25nsで、MREQとMACKはV20の信号名称で言うとHLDRQとHLDAKです(バスリクエストとその応答信号)V20とPICとのI/Fに関しては「レトロマイコン86ボードの構想(その4)V20とPICのI/F確認」、回路図は「レトロマイコン86ボードの構想(その10)回路図整理とパターン設計」を参照してください。PICサービス開始部分(8MHz)PICサービス終了部分(8MHz)次に、V20のクロックを16MHzにした場合のメモリアクセスタイミングをロジアナで確認した結果が下図になります。ASTBはV20から出力されているアドレスラッチストローブでALEはアドレスラッチIC(74HC573)へ入れているラッチ信号です。ALEの立下りが鈍る(Highの期間が70ns程度)のでプルダウン抵抗を一時的に1Kから510しています。ロジアナのサンプリング周波数は50MHなので時間の分解能は20nsです。V20が16MHz動作時のメモリアクセスタイミング時間スケールの+0.7us部分のA0を見るとアドレスラッチ後データ読み出しが60nsで特に問題無いタイミングに見えます(メモリはアクセスタイム70usのものを使用)V20の動作を追っていくとコール先が変なアドレスだったりしてまともに動いていないようです(V20はプリフェッチするので追いづらい)また、下図のように途中で一定時間停止したり、突然停止したままになったりする意味不明の状態が発生します。Vdd(=4.0V)です。ジャンパーピンで選択できるようにしています。8MHz側は出力をオープンドレインにして5Vにプルアップすれば対応できます。クロック出力かの切替えになっており、クロック出力に設定した場合はRA3側の出力回路自体が切り離されるようで、RA3をオープンドレイン設定にしてもクロック自体はオープンドレインにはなりませんでした。試しに「シグナルジェネレータ/カウンタ「MHS-5200A」の購入」の記事で書いたシグナルジェネレータを使ってクロック供給実験を行ってみました。CP/Mが起動し、MBASICでASCIIARTが問題なく動作することを確認しました。クロックのHighレベルを5Vから0.1V間隔で下げてみたところ、3.9V以上(クロックは14MHz)で問題なく動作することが確認できました。現状でも8MHzであれば安定して動作していますが、今回の確認で16MHz動作対応するのは簡単ではなさそうである・・・ということがある程度具体的に判りました^^;因みに14MHz動作時のASCIIARTの実行時間は1分33秒(8MHzでは2分5秒だったので予想どおりクロック反比例の結果)でした。コメントありがとうございます。