CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

基板設計完了

MC14500ボードの設計も最後の仕上げをしていました。

CPLDへの書き込みはテスト基板でやってしまえばよいのでオンボードJTAGコネクタは削除しました。その空き地にアドレスバスとインストラクションバスのインジケータを置いています。バラックセットでテストしているとき、CPLD基板上のLEDがたまたまアドレスバスにつながっていて低速クロックで動作中のチカチカが大昔のコンピュータみたいで面白かったので付けてみました。

 

f:id:O3I:20210516094142j:plain

 

パタンの引き回しはもう充分煮詰まってますのでこれで手配してみます

 

f:id:O3I:20210516094338j:plain

f:id:O3I:20210516094352j:plain

 

パタン見直し

NSC800ボードは部品数が多いのでパタン引き回しはオートルータ一発で完了させてしまいましたがパタンの細部を見ると気になるところもあり、外出自粛で時間もあるのでコツコツと手直ししていました。前にも書いていましたがいつもだいたいこんなところを見ています

 

(1)ラインのX-Y位置を100mil/Nグリッドへスナップ

オートルータの分解能は1um単位のためセッション結果をボード図にインポートするとラインの平行垂直位置や屈曲点がほとんどグリッドに乗っていません。分解能を25milとかに下げると今度は引き回しの解決に時間がかかったり挙句失敗することがあるので、まずは最高分解能で実行。そのまま読み込み、ボード図上で近傍のグリッド点へスナップさせ、ラインが水平・垂直・45度になるようにしています。一応、my設計標準では25milルール、配線が混んでクリアランスが取れないときは5milグリッドまで細かくして微調整します

   
(2)パスコンの位置変更、回転

回路設計の際に基板上に配置するパスコンは以下のようにICの数+α並列接続の回路を書いておき、ボード図上でIC近くに適当にばらまいて配置しています

f:id:O3I:20210515124007j:plain

電源ラインも含めてオートルータをかけると、そのパスコンにつなぎに行くため延々とラインを引っ張られたり、極性が無いのに指定されたパッドにつなごうとするために蛇行したパタンが生成したりするので位置をずらしたり回転させ電源ラインが短くなるようにします

(3)こんがらがった引き回しを解きほぐす

回路規模が大きいとオートルータの最適化がなかなか終わらないのでいつも中断させてしまいますが、そのためなのかあるいはアルゴリズム的に最適解に辿り着けないのか、何でこんな引き回しをするのか不可解な部分が結構見つかります。目で見て明らかな部分はチョイチョイと直してしまいます。引き回しの単純化のためなら手動でビアを追加するのも厭いません(左がオートルータ解。右が手直し後の例)

 

f:id:O3I:20210515115631j:plain

 

(4)ピン間2本は避けたい

メモリのバス接続などでICピン間100milにラインを2本引かれる場合があります。オートルータの結果そのままならいいのですが(1)の「クオンタイズ作業」で平行を保ったままグリッド点にスナップさせようとするとたちまちクリアランス不足警告が出てしまいます。fusionPCBの設計ルール:ライン幅最小6mil、クリアランス最小6milとした場合、ICのランド間に引ける2本のラインの位置はかなり限定されます

 

f:id:O3I:20210515122906j:plain

上の例ではランド半径34milなのでクリアランスを考慮すると

ランド34+隙間7+ライン6+隙間6+ライン6+隙間7+ランド34=100mil

でいっぱいいっぱい。つまりオングリッドで書くにはグリッドを2milまで細かくしないとダメということで、このサイズでの微調整は結構大変です。まだピン間に通してないところに迂回できれば1本通しにしておきます。

 

f:id:O3I:20210515173404j:plain

あとで気づいたのですがカスタムユーザグリッドを4milに設定すると2本通しの位置決めがやりやすそうです。

 

(5)プログラマブルな入出力は配線がしやすいようにアサイ

規模の小さい回路ではロジックを決めないまま、配線がシンプルになるように結線してしまっておき、あとからロジックをプログラムするときにそのピン機能に合わせるという手が使えます。ただし規模が大きくなるとマクロセルの接続制約やGALのOR項不足でデバイスに入らないという悲惨な結果もあり得ます


(6)等価なゲート入力ピンの入れ替え、パッケージ内の複数ユニットの入れ替え

これは回路図へバックアノテーションが必要だしオートルータでは如何ともしがたいところですが、人力でやる限りでも劇的に引き回しが改善することがあります。これが自動化できれば嬉しいのですが

メモリオプション

ROM/RAM周りはいろいろなデバイス、構成が選択できるようにしてみました。

左端の600mil幅28ピンソケットはROM用でUVEPROM64kbit~256kbitまたはEEPROMHN58V65HN58V256が挿入できます。ROMソケットの下にあるTSSOPはHM628128専用、中央の300mil幅28ピンソケットは64kbitまたは256kbitのスキニータイプSRAM。右端のSOP32ピンフットプリントは下詰めで64kbit~1MbitSRAMが実装できます。

ピン機能は基板左上隅にある3個のジャンパポストで設定しますがドキュメント化しておかないとこんがらがりそう。

動作電圧を5V専用とした場合、ROM:2764、RAM:6264が一般的に入手しやすそうでRAMはDIP/SOP/TSSOPのパッケージのものが使用できます。一方動作電圧を3V専用とすると、ROM:HN58V65、RAM:TC55V1001という選択になります。

f:id:O3I:20210503122833j:plain

 

では電源電圧3V、5V兼用は可能でしょうか。SRAMは3Vまたは5V専用品なのがほとんどなので組み立て時に実装オプションとして決めなければならないと思ってたのですが、たまたま2.7V~5.5Vと広い電圧範囲で動作するデバイスを見つけました。

 

f:id:O3I:20210503121121j:plain

ROM:HN58V65、RAM:LC3564CMとすればCPU周りだけは3V,5V兼用になりそうです。

パタン修正

NSC800ボードの方もパタン設計を進めていて最終的な仕上げをしていました。表面実装ICのフットプリントは毎回何かやらかすので 念を入れて再確認します。

 

f:id:O3I:20210502130752j:plain

SOPの14ピンから20ピン は幅が足りず失敗したことがあるの広めのフットプリントを選択したのですが今度はちょっと幅広すぎでした。

東芝の74HCシリーズのSOPフラットパッケージは広めで約300milありますがそれでも足が届きません。

f:id:O3I:20210502130856j:plain

 

KICADの標準ライブラリに含まれるフットプリントではしっくりくるものがないので自前で作って交換しました。

f:id:O3I:20210502130807j:plain

 

 

部品配置

100×100mmの基板に部品配置してみました

スルーホール部品が多いので乗っかりきるかと心配しましたが、

f:id:O3I:20210501130758j:plain

 

結構みっしりですが何とか部品配置できたので、一気にオートルータで引き回しもやってしまいました。

f:id:O3I:20210501130812j:plain

 

部品配置の3Dイメージを見るとやはり目立つのは84ピンPLCCでこれがメインの石かと勘違いしそうですがご本尊はその右脇に控える16ピンDIPのICです

f:id:O3I:20210501130825j:plain

 

裏に返すとさらに目立たずもっとも高集積のLSIPIC18F4550が貼り付いてます

f:id:O3I:20210501133541j:plain

 

周辺回路

I/Oまわりは現状と全く同じ16ビット入力と16ビット出力を配置しました。

f:id:O3I:20210429221535j:plain

 

システムコントローラPIC18F4550周りもほぼ同じです。ただRS232C用のDsub9ピンは場所をとるしさすがに今どき感があるのでUSB-シリアル変換基板を載せることにします。PIC18F4550はUSBI/Fも内蔵しているのでPIC内部で処理できるはずですがこれは将来対応としてUSB-Bコネクタを実装できるパタンだけ用意しておきました。

f:id:O3I:20210429221550j:plain

 

ICUまわり

基板を起こすときに元の回路設計でミスがあると台無しなので、今バラックで動作している回路をそのまま落とし込もうとしていますが、影響がない範囲で改善をしています。I/O、データメモリのチップセレクトはデコーダと数個のゲートで構成していましたが(しかもそこで正論理/負論理をしくった)ここはGALに置き換え。実装面積も小さくなるし、アドレスデコードをきめ細かくすることでイメージを減らしデータメモリを有効活用できます。

 

f:id:O3I:20210427201638j:plain

いままでは実効アドレス12bit(4096ワード)を最上位ビットのみざっくりデコードしてI/O2048ワード、メモリ2048ワードでしたがGAL化によりI/Oを下位256ワードに押し込みデータメモリを3840ワードもの広大(!)な領域が使えるようになります。

下の方に3個並んだアナログSWは「定数レジスタ」です。ICUはプログラムコードに即値を置けないのでデータバスから拾ってきますが上からリザルト出力、「1」レベル、「0」レベルの固定値が読み取れます。リザルト出力を読む、というのは全く意味がなくZ80で云えば「LD A,A」と同じなのですがNOPの代わりくらいにはなります。