Z80GALの構想 [Z80]
PICとZ80を使った3チップ構成のCP/Mボード(Pic24CPM)を開発しましたが、周辺チップをPICで代行せず、GALとソフトでの対応でチップ数の少ないZ80ボードを構想中です。
ネット上ではRAMまでもマイコン側で受け持とうとする試みもある中で逆行するようですが、Z80でも20MHzで動かせばソフトで周辺チップの機能を代行できるのではないかという発想です。
まずはシリアル通信ですが、Z80が処理中でもキー入力を受け付けられるようにしたいのでタイマー割込みを使って受信する予定です。
そのためにはボーレートの3倍でタイマー割込みする必要があり、GAL(22V10D)を使った分周回路を検討してみました。
CUPLコンパイラはWinCuplを使う予定ですが、Windows10環境では結構不安定で関連する実行ファイルを全て「互換性のトラブルシューティング」で互換性設定することで少し安定するようになりました。
試行錯誤で作ったCuplソースが下記です。
PLDによるカウンターの実現に関してはネットで探すといくつか例が見つかりますが、そのままでは使えなかったので「下位ビットが全て'1'の場合、反転する」というようにして論理式を作成することで割合すっきりしたものができました。
カウントの出だしの部分をシミュレータで確認した結果が下図です。
ライターはTL866II pulsを使い、実際にGAL22V10Dに書き込んで動作確認した結果が下図です。
上記のソースにも書いてあるように20MHzのクロックを入力して、38400bps(カウンタのレジスタ数を8個としたことから決めた速度)の3倍の8.68[usec]が目標周期なのでほぼ目標通りの値になっています。
しか~し、
等の理由から、タイマー割込みをGALで生成するのは諦めましたw
ここは素直に8ピンのPIC(水晶発振用ICも兼ねる)を使う予定です^^
★2020/10/22 追記 {
上記のG22V10でレジスタが8個までしか使えないと書きましたが、エラーの原因が判りました。
下図の赤マーク部分に記載があるようにresetは全レジスタで共通になっているので個別に別々の論理式を書くと上記のエラーが発生します。
同様にsp(SYNCHRONOUS PRESET)も全レジスタで同じ論理式にしないとエラーになります。
}
[TOP] [ 前へ ] 連載記事 [ 次へ ]
ネット上ではRAMまでもマイコン側で受け持とうとする試みもある中で逆行するようですが、Z80でも20MHzで動かせばソフトで周辺チップの機能を代行できるのではないかという発想です。
まずはシリアル通信ですが、Z80が処理中でもキー入力を受け付けられるようにしたいのでタイマー割込みを使って受信する予定です。
そのためにはボーレートの3倍でタイマー割込みする必要があり、GAL(22V10D)を使った分周回路を検討してみました。
CUPLコンパイラはWinCuplを使う予定ですが、Windows10環境では結構不安定で関連する実行ファイルを全て「互換性のトラブルシューティング」で互換性設定することで少し安定するようになりました。
試行錯誤で作ったCuplソースが下記です。
PLDによるカウンターの実現に関してはネットで探すといくつか例が見つかりますが、そのままでは使えなかったので「下位ビットが全て'1'の場合、反転する」というようにして論理式を作成することで割合すっきりしたものができました。
GALを使った分周器のCuplソース |
|
カウントの出だしの部分をシミュレータで確認した結果が下図です。
シミュレータでのカウント動作の確認結果 |
|
ライターはTL866II pulsを使い、実際にGAL22V10Dに書き込んで動作確認した結果が下図です。
上記のソースにも書いてあるように20MHzのクロックを入力して、38400bps(カウンタのレジスタ数を8個としたことから決めた速度)の3倍の8.68[usec]が目標周期なのでほぼ目標通りの値になっています。
分周した波形(Q7) |
|
しか~し、
- CUPLのNODEが使えない
NODE宣言でPINに出さないレジスタを宣言するとエラーになるのでGAL22V10ではNODE機能が使えないようですorz
そのため、カウンターで使用しているレジスタを全てPINに出力する必要があり、出力PINが非常に無駄になります。
9個目のレジスタを使うとエラーが発生
GAL22V10には10個のレジスタがあるのに9個以上使用すると下記のエラーが発生し、コンパイルできませんでした。
等の理由から、タイマー割込みをGALで生成するのは諦めましたw
ここは素直に8ピンのPIC(水晶発振用ICも兼ねる)を使う予定です^^
★2020/10/22 追記 {
上記のG22V10でレジスタが8個までしか使えないと書きましたが、エラーの原因が判りました。
下図の赤マーク部分に記載があるようにresetは全レジスタで共通になっているので個別に別々の論理式を書くと上記のエラーが発生します。
同様にsp(SYNCHRONOUS PRESET)も全レジスタで同じ論理式にしないとエラーになります。
GAL22V10ダイアグラム(抜粋) |
|
[TOP] [ 前へ ] 連載記事 [ 次へ ]