SSブログ
English Version

Z80GalCompactの制作 [Z80]

 今月はALLPCBさん主催の "Useless" Design Competition に応募(入賞しました)したこともあり、プリント基板を只で作れるクーポンが4つもあったので何を作ろうかと悩みました。
 色々考えた結果、未決定だった最後の1件は「Z80GALの構想(その13)プリント基板完成」の記事で書いたGALを使ったZ80シングルボードのコンパクト版を作ることにしました。
 今までは使用チップ数の最小化を開発ポリシーの一つとしていましたが、今回はコンパクト性に重点を置いて制作してみました。

 主な変更点は
  1. 使用チップの表面実装部品化
     下記のチップを表面実装タイプのものに変更しました
    • SRAM : UM61512 から M68AF127BL(SO32) に変更
    • GAL : PLCCタイプのものに変更(問題無かったら今後も使用していきたい)
    • PIC12F683 : 秋月さんから以前購入した手持ちのSMDタイプのものに変更

  2. USBケーブル直結で動作
     USBシリアル変換用IC(PL2303SA)を追加したので直接USBケーブルを繋げ、更にUSBからの給電方式に変更したのでUSBケーブルを差し込むだけで動作します

  3. パターン設計時の投入パワーをアップ
     パターン設計時に部品密度を上げて基板サイズの小型化を試みています。小型化のためには最初の部品配置がかなり重要ですね(プログラミング時のデータ構造と類似)
     また、ここ数件のケース作成で基板の固定は淵を抑える方式にしているので、従来四隅につけていた取付用穴を無くしました
     結果としてZ80GALの基板サイズは 100mm x 70mm でしたが、今回は機能追加した上で基板サイズが 64mm x 46mm になりました

 無料クーポンの期限が迫っているので今回はブレッドボードでの評価は行わずに基板製造を依頼しました。まだ動作確認はできていませんが回路は下図のようになります。

Z80GalCompactの回路図


 パターンの設計結果が下図でトラック密度が結構密です。でもまだ余裕があります。

Z80GalCompactのパターン(グランドベタ化前)


 グランドベタ化後のトップ面とボトム面のパターンが下図になります。
 トップ面にはピン付きDIP部品の Z80、EEPROM 及び コネクタ類(SDとUSB等)を配置しました。

Z80GalCompactのパターン(トップ面)


 下図はボトム面のパターンです。表面実装部品は主にボトム面に配置しています。

Z80GalCompactのパターン(ボトム面)


 3D表示の画面も貼っておきます。部品の高さ設定等、見易くなるようにある程度設定しています。
 表示状態が変ですが、右上の2ピンが直立しているものがMicroUSBコネクタです。左隣の Z80 と干渉しているように見えますが Z80 の実物のパッケージは幅がもう少し狭いので大丈夫だと思います。

Z80GalCompactの3D表示(トップ面)


 下図がボトム面です。右側のメモリチップは結線する上で逆向きの方がトラック長が短くなるので上下逆向きに実装しています。実装時のミス防止のために型名のシルクも上下逆にしています。
 また、前回と前々回の基板設計時にボトム面のシルクがパターンで隠されてしまう現象が発生していましたが、今回は正常に表示されました。何の条件で状態が変化するのかはまだ未確認です。使用しているCADソフトは DesignSparkPCB V8.1 です。

Z80GalCompactの3D表示(ボトム面)


[TOP] [ 前へ ] 連載記事 [ 次へ ]

nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー

ポケコン(G850)用拡張基板の制作 [ポケコン]

 ポケコン(PC-G850V)のシステムバス端子用のコネクタをずいぶん前に購入していましたが、バス端子にはクロックが出ていなかったので GAL が使いづらいと思い放置していました。
 最近、GAL内のFFを設定するのはI/Oライト命令なのでIORQ/の立上りをFFラッチ用のクロックとして使えるんじゃないかと気が付き、GALを使ったメモリ増設ボードを作ることにしました。ついでにGALを使ったZ80マイコンボード(Z80GAL)を作った時のようにSDカードのインターフェースも付けました。
 GALを論理ロジックとして使うCombinatorial Modeではクロックは不必要ですがFFを使うRegistered Modeではクロックが必要で、SDカードを繋ぐためにはFFが必要なのです。

 システムバス内の信号の挙動を確認することが今回の目的の一つなので各信号をピンソケットに出すようにしています。

 特に確かめたい内容は
  1. C000H-FFFFHのメモリバンク切替え動作
     I/Oアドレス 19Hの下位ニブルで設定できるC000H-FFFFHのメモリバンクで BK3-BK0が0000Bの場合の挙動(メモリリード時にデータバスがフローティング状態になるのか?)

  2. 上記のメモリバンクを外部メモリにアサイン可能か?
     下記の参考資料 i)ではバンク番号0は「N/A」と記載されているが、バンク番号0に設定してシステムバスに接続したメモリをアクセスできるか?(C000H-FFFFHを外部メモリにアサインできるのか?)

  3. 0000H-7FFFHの外部メモリ化
     システムバスのCERAM2を使ったシステムバス上のメモリへの置き換え動作の確認
     CERAM2は負論理なのか?(取扱説明書では負論理を表すバーが付いていないが下記の参考資料 i)の回路図や ii)のシステムバス記述部ではバー付きになっている)

  4. 今回のGAL回路の動作
     今回の回路のようににIORQ/をクロックとして使用することでRegistered Modeで動作し、SDカードをアクセスできるか?

参考資料)
  1. 「ポケコン PC-G850の解析とソフト集」の特にI/O編
  2. 「PC-G850V開発メモ」の特にメモリ増設記事


 尚、本基板の名称はEborsy(Expansion board connected to System Bus)と命名しました。
 下図が今回作成した拡張基板の回路図で、前述のようにGALを使い、ピンソケットで各種の信号を出すことによって後でいろいろと実験し易いようにしています。

G850用拡張基板(Eborsy)の回路図
★2021/11/27 GALへのWR信号にディレー追加 以降の図もアップデート済み


 下図がグランドベタ化前のパターン図でポケコンとのコネクタのピンが結構密集しているのでトラックのルートが引き辛かったです。

G850用拡張基板(Eborsy)のパターン図(グランドベタ化前)


 グランドベタ化後のトップ面が下図になります。

G850用拡張基板(Eborsy)のトップ面(グランドベタ化後)


 ボトム面が下図で、メモリとGALはボトム面に実装するようにしています。こうするとポケコンに接続した際に外側がチップ面になるので信号の確認がし易いと思います。

G850用拡張基板(Eborsy)のボトム面(グランドベタ化後)


 3D表示した画面のキャプチャも貼っておきます。下図で大きな直方体がポケコンのシステムバスに接続されるコネクタです。

G850用拡張基板(Eborsy)の3D表示(トップ面)


 ボトム面が下の図で相変わらずシルクがパターンに隠されていますw

G850用拡張基板(Eborsy)の3D表示(ボトム面)


[TOP] [ 前へ ] 連載記事 [ 次へ ]
nice!(0)  コメント(1) 
共通テーマ:趣味・カルチャー

Pic24MC68Kマイコン(その1)構想 [68K]

 以前、「3チップ構成Pic24CPM68Kマイコン」の記事に自作のMC68008ボードを使ってCP/M-68Kを動かす内容を書きましたが、今回は8ビットバスのMC680008ではなく、MC68000を使ってCP/M-68Kを動かしたいと思います(実際にはCMOS版で16MHz動作の MC68HC000P16 を使用予定)。
 今回の目標として全体をMC68Kのチップに近いサイズにまとめたいと考えています。使用予定のメモリは+5Vで動作可能で容量が 512K x 16bit でアクセスタイムが 55ns のTSOPパッケージの AS6C8016 で、前述のMC68008の時の2倍の容量になります。

 MC68HC000P16は今でも海外の通販サイト等で数百円で購入できます(もっと高い値付けのものも沢山ある)。しかし、安価なものは偽物というリスクが常にあります。
 購入済みのMC68HC000P16を無水アルコールを含ませたティッシュで拭いてみたところ、ティッシュが黒くなり、なんと MC68000P8 の文字が浮かんできましたw
 下の写真は上の方のチップがアルコールで拭いたもので、比較のために拭く前のチップの状態と同じものを下側に並べました。

購入したMC68HC000P16の偽物


 別のショップから購入した2個のMC68HC000があるのですが、これらは刻印の文字サイズと刻印内容は上記の偽物の写真と全く同じで、無水アルコールで擦るとティッシュが黒くなりましたがいくら擦っても刻印は変化しませんでした。偽の刻印を書く前の表面の削りが上記のものより深い(と言うか上記のものは削っていない?)のではないかと思われ、ティッシュの色と同様に限りなく黒に近いグレーな状態です。
 更に別のショップから購入したMC68000P16(下の写真)は無水アルコールで拭いてもティッシュは全く黒くならず、刻印も変化しませんでした。本物だと信じたいですが、HCではないので消費電力が大きいです。

購入したMC68000P16(多分本物?)


 気を取り直して今回の構想の話に戻って、MC68K と PIC とのインターフェースについては MC68008 の時と同様で「3チップ構成68Kマイコンの構想」の記事に書いたようにMC68KのRESET命令を使用します。
 以降の記述では自分用のメモの意味も含めデータシートからの引用が多く含まれますがご容赦ください。

 最初に信号レベルについてですが、下図が68Kのレベルになります。クロックについてもV20の時のような特別に厳しい条件は無いようです。

MC68Kの信号レベル


 下表がMC68Kの電気特性で、これならPICで制御可能なレベルです(PIC側の入力には5Vトレラントであることが必要)。

MC68Kの電気特性


 次にメモリアクセス関連ですが、下図がMC68Kのメモリアクセスタイミングダイアグラムです。データバスが16bitなので上位バイト/下位バイトそれぞれにセレクト信号(UDS#,LDS#)があります。これは後述するメモリ(AS6C8016)と同様です。

MC68Kのメモリアクセスダイアグラム


 下図がメモリチップ側のリードサイクルです。特別な仕掛け無しにMC68Kと接続できそうですね。

メモリ(AS6C8016)チップ側のリードサイクル


 下図がメモリチップ側のライトサイクルです。上記のMC68Kのライトサイクルを見るとLDS#信号がアクティブな期間が最も短いので、それに対応するLB#,UB#でコントロールされたライトサイクルを記載しています。こちらもMC68Kと簡単に接続できそうです。

メモリ(AS6C8016)チップ側のライトサイクル1


 下図はPICからのメモリライト時に使用予定のWE#でコントロールする場合のライトサイクルです。

メモリ(AS6C8016)チップ側のライトサイクル2


★追記 2021/12/09 {
 メモリの真理値表を追記します。ライト時に OE# はdon't care になります。

メモリ(AS6C8016)チップ側の真理値表
}

 MC68Kとメモリのアクセスサイクルを前置きとして書きましたが、ここからPIC側の対応に関して記述します。
 PIC側のメモリアクセスはパラレルマスタポート(PMP)機能を使用します。PMPはある程度汎用的に作られていますが、16bitのデータを扱う場合はバイト毎に分割して扱う必要があります。
 今回使用するモードは「16 ビットデータ、非多重化アドレス」です。下図にリード/ライトサイクルを示します。

PIC PMPメモリリードサイクル


PIC PMPメモリライトサイクル


 PIC側のデータバスは8bitで時分割で2バイト分を扱うのでメモリ側とのデータバス接続を切替える必要がありますが、一度に16bitを読み書きすることは無いこと、及びメモリ側はセレクトされていないバイトバスはハイインピーダンスになることからPIC側データバスとメモリ側ハイバイトバスとの間に74HC245を1個だけ設け、ロー側のバイトバスは常に接続した状態にすることで使用チップ数を節約します。

 実際にPICとメモリの接続実験結果を書きたいところですが、注文したメモリ(AS6C8016)がまだ届いていないので今回はこの辺にしたいと思います。
 しかし、今回はブレッドボードで評価後、回路図を整理しパターン設計をするといういつもの手順とは異なり、先行して回路設計とパターン設計を進めています^^

Pic24MC68Kのパターン(設計中)



[TOP] [ 前へ ] 連載記事 [ 次へ ]

nice!(0)  コメント(0) 

SuperSimpleController(その25)ALLPCBのUSELESSコンテストに入賞 [OriginalCPU]

 中華系の格安プリント基板製造業者の一つであるALLPCBさんで "Useless" Design Competition を開催していたので応募してみました。ALLPCBさんでは初登録者への無料クーポン(送料も含めて基板製造が無料)の提供などのサービスがあり、一度基板製造を依頼してみてはいかがでしょうか?

 コンテストの結果ですが、拙作のオリジナル8bit CPUが「めっちゃ面白い賞」に選ばれました(^^)/

ALLPCB "Useless" Design Competition Result


 英語ですが応募内容も貼っておきます。


Original architecture 8-bit CPU board consisting of 13 DIP ICs

### Project background ###
I like to use DIP ICs to run old CPUs such as Z80. One of my design policies is to use as few chips as possible. It's completely useless, but this time I made the CPU itself using DIP ICs.

### Design policy ###
* An 8-bit CPU with a 16-bit address bus.
* Use only DIP type logic ICs and memory ICs (GAL can be used).
* Minimize the number of ICs used.
* Implement the CPU functions and the memory required for the CPU to operate on one board.

### CPU configuration ###
In order to reduce the number of ICs used, the machine language implementation method was a microprogram method using ROM. In addition, the ALU (Arithmetic and Logic Unit) function has been realized by using a large-capacity ROM(32Mbit) as a look-up table in order to realize addition, subtraction, logical operation and bit shift arithmetic processing. Two general-purpose registers (R0, R1) are implemented, and the output of these two registers is also used as the input of the ALU. Implemented a conditional jump instruction that refers to the zero flag and carry flag output from the ALU. In addition, the carry flag is also used as the input of the ALU, and the carry correspondence processing of arithmetic operations and bit shift instructions is also implemented.
Furthermore, it has an I/O space independent of the 64K bytes memory space, and by adding a connector for I/O, it is easy to connect an external interface.

### Outcome ###
* The CPU function was realized using only 13 DIP ICs and mounted on one board (11 ICs can be seen in the photo, but 2 ICs are mounted on the back of the board).
* I made an assembler for this CPU using the macro function of the macro assembler (M80, L80) for CP/M.
* By connecting a small board for serial communication to the external interface connector, I have developed a monitor program that can operate the memory and download the executable file.
* I created a 16-bit addition, subtraction, multiplication and division operation in machine language, and created a calculator program that can execute formulas in reverse Polish notation.

### Difficulties and solutions ###
* When creating microcode to implement machine language, it is difficult to create binary data directly, so I created an environment to convert microcode instructions into bit data using the macro function of the macro assembler.
* Furthermore, when implementing complex machine language such as call instructions, even microcode instructions are inefficient, so I created microcode by writing using microcode mnemonics with a higher degree of abstraction. However, I manually converted the microcode mnemonics to microcode instructions.
* To facilitate microcode debugging, I used the PIC24FJ64 to enable external clocking. By controlling the reset and clock with PIC24FJ64, it is possible to stop processing and step operation at the specified location of the microcode.



*Reference video
https://www.youtube.com/watch?v=LzoIbzHgR4k

*Reference fig

Fig. 1


Fig. 2


Fig. 3


Fig. 4


Fig. 5



[TOP] [ 前へ ] 連載記事 [ 次へ ]

nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー

リバーシブルなDIP変換基板(その2) [PIC]

 前回の記事で書いたDIP変換基板は11/5にALLPCBさんに製造依頼し、11/12に届きました。5枚依頼していつものように6枚入っていました。

ALLPCBさんから届いたDIP変換基板


 メモリ(IS62WV51216)を半田付けしたものが下の写真になります。ブレッドボードでの使用が前提なので細ピンヘッダを付けています。
 ピンヘッダのピンを入れるのが少しきつかったのでもう少し穴径を大きくした方がいいかもしれません。現在のホール直径の設計値は0.76mmです。
★変更:念のためピンヘッダのピンの横幅を確認したところ0.7mm、以前秋月さんから購入した細ピンヘッダは0.4mmで今回使用したものは細ピンヘッダではありませんでしたorz

TSOPのDIP化(44ピン)


 半田ごてで半田付けしたのであまりきれいじゃないですね^^;
 反対側の半田付けはこんな感じです。(下の写真・・なんか浮いているように見えません?)

TSOPのDIP化での後半のピンの半田付け状況(ピンヘッダ取付前)


 ついでなのでPIC24FJ64GA-004(TQFP)も付けてみました。半田付けが更に汚くなりましたw

TQFPのDIP化(44ピン)


 以前44ピンQFPのDIP変換基板を探したことがありますが、秋月さんでも取り扱っておらずAitendoさんでやっと見つけることができました。
 下の写真は今回作成したものと市販のものを並べた写真です。今回作成したものは市販のものより幅が2ピン分小さいのでブレッドボードに刺した場合、上下2列分を配線で使うことができます(製品化したら売れそうですねw)。

TQFPのDIP化変換基板比較



[TOP] [ 前へ ] 連載記事 [ 次へ ]

nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー