OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

電気回路の設計

  • すぐに回答を!
  • 質問No.143979
  • 閲覧数374
  • ありがとう数9
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 50% (7/14)

Z80CPU(ザイログ社製)を使って64KバイトのUV-EPROM(TMS27C020)とSRAM(TC55257DFL)、あとは適当なI/O(M66500FP)を使うだけのマイコンを設計しています。メモリーマップの電気的な決め方とソフト的な決め方を教えて下さい。
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル11

ベストアンサー率 66% (222/333)

どの程度の知識をお持ちかわかりませんが、とりあえずお話してみましょう。
メモリも手元に資料がないので容量もわかりませんが、型番から推定して、ROMは2Mビット(256Kバイト。アドレス線が18本)、RAMは256Kビット(64Kバイト。アドレス線が16本)かと推定します。
Z80は、メモリ空間が64Kバイト(アドレス線が16本)しかありません。
慣例では、メモリ空間は、0000~7FFF(32Kバイト)をROMに、8000~FFFFをRAMに割り当てます。
この場合、ROMのアドレス線の上位3本とRAMの上位1本は0固定(グラウンド)とし、残りのA0~A14はz80の同じ番号のアドレス線につなぎます。CPUのA15は、そのままROMのCS(バー;負論理)につなぐとともに、NOTを介してRAMのCS(バー;負論理)につなぎます。これで、A15が0(アドレスが7FFF以下)のときはROMが、1のときはRAMがデータバスにデータを出しますね。
I/O用のチップもわからないのですが、Z80はアドレスバス下位8ビットがポートアドレス(256ポート)となりますので、例えば4ポートを持つI/Oチップの場合、A0.A1をI/OチップのA0.A1につなぎ、残りの6本とI/OREQ(バー;負論理)をNOTして、7入力NANDにつないでその出力をCS(バー;負論理)につなぐと、00H~03HのアドレスのI/Oになります。おっと、当然R/W'もつないでね。
なお、慣例として、次のようなアドレス割り当てをする方が多いようです。
0000H(ROM)~;単に0100Hにジャンプとだけ書く。
0100H(ROM)~;プログラム本体。
(これらの不自然な配置は、z80の「割込機能」を使うと、勝手に0038H付近にジャンプしてしまうので、この周辺を空けておくため。)
6000H(ROM)~;BIOSなどのサブルーチン類
FF00H~FFFFH;I/0のイメージ(写し)。特に出力は、CPUが自分で命令しておきながら、今どうなっているのかわからなくなっちゃうので、I/Oに出力したら、同じデータをこのアドレスに書き込んでおく。
また、意外と面倒なのがI/Oチップの初期化です。CPUは、電源を入れれば(リセットで)勝手に0000Hから命令を実行し始めますが、最近の高機能のI/Oチップは、あらかじめ指定されたアドレスに決まった命令を書き込まないと、出力としても入力としても使えないことが多いのです。このため、0100H(プログラムの開始直後)付近(又はサブルーチン領域)では、かなり長いプログラムをI/Oチップの初期化コマンドのために作るはめになっています。
お礼コメント
sametan

お礼率 50% (7/14)

有難う御座います。初めての設計なので、多いに助かりました。
投稿日時 - 2001-10-03 18:26:29
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.1
レベル10

ベストアンサー率 9% (16/172)

割り込みベクタがある下位アドレス側にROMを持ってくるのがよいと思う。 しかし、Z80のメモリー空間は64KBだから、メモリーをフルに使用しようとすれば、アドレスバスとCSに細工してバンク切換か? I/Oはメモリーと別空間にあるので特に気にしなくても良い。
割り込みベクタがある下位アドレス側にROMを持ってくるのがよいと思う。
しかし、Z80のメモリー空間は64KBだから、メモリーをフルに使用しようとすれば、アドレスバスとCSに細工してバンク切換か?
I/Oはメモリーと別空間にあるので特に気にしなくても良い。


  • 回答No.3
レベル5

ベストアンサー率 10% (1/10)

電気的要件: ・複数のメモリICが重複するアドレスをつくらないこと。 ・デコードIC(または直接接続)で簡単にチップを選択できること。 ・デコードを簡単な回路ですませるにしても、I/O空間との重複も避けること。 ・メモリマップドI/Oを採用する場合は、そのアドレス領域にメモリを配置しないこと。 特に、I/Oポートについては、上位8ビットにCPUのAレジスタあるいはBレジスタの内容が出力さ ...続きを読む
電気的要件:

・複数のメモリICが重複するアドレスをつくらないこと。
・デコードIC(または直接接続)で簡単にチップを選択できること。
・デコードを簡単な回路ですませるにしても、I/O空間との重複も避けること。
・メモリマップドI/Oを採用する場合は、そのアドレス領域にメモリを配置しないこと。

特に、I/Oポートについては、上位8ビットにCPUのAレジスタあるいはBレジスタの内容が出力されることにも留意。

ソフト的要件:

・CPUはリセット後に0000Hから実行するので、この部分をROMにすること。
・0000H~0038HはRST命令、0066HはNMI割込みが使用します。
・リセット後のスタックポインタの値は0000Hです。このため、最初にstack-inされる内容は、FFFEHに格納されます(変更すれば別ですが)。
・バンク切替えによりメモリ空間を拡張する場合、特にROMを切り替える場合は切替えを行うコードの配置に注意すること。

くらいだと思います。
このため、一般的には↓の方の回答のような配置になりますね。

RAMについて明記してないようですが、
最終アドレス(FFFFH)がRAMになるように配置するのが普通のようです。
32Kバイトなら8000H~FFFFH、16KバイトならC000H~FFFFHとか。
これは、一般にスタック領域を~FFFFHに置くことによります。
お礼コメント
sametan

お礼率 50% (7/14)

有難う御座いました。よく分りました。
投稿日時 - 2001-10-04 09:34:25
  • 回答No.4
レベル11

ベストアンサー率 66% (222/333)

joshua01です。 albertparkさんのいわれるとおり、RAMのFFFF付近は、特に指定しない場合のスタッカに使ってました。自分の作ったもののマップをみたら、I/OイメージはF000H~F0FFHを使ってました。 各種変数はF100H以降に使ってました。
joshua01です。
albertparkさんのいわれるとおり、RAMのFFFF付近は、特に指定しない場合のスタッカに使ってました。自分の作ったもののマップをみたら、I/OイメージはF000H~F0FFHを使ってました。
各種変数はF100H以降に使ってました。
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ