\( \require{cancel} \)
earth
湘南理工学舎
[戻る]
2024/11/25

 豆知識

 マイコン回路と構成(1)


(technical term of CPU and Microcomputer, history)
 --目 次--
  • ♦マイコン・ブロック図
  • ♦ブロック図の説明
  • ♦CPUの制御・管理

  • ♦アドレスマップ(Map)
  • ♦チップセレクトとアドレスマップ
  • ♦マシンサイクル

  • ♦CPU内部構成ブロック
  • ♦【閑話】
  • •国産ワン・チップマイコン

  • マイコン・ブロック図


     前回はマイコンの基本動作の概略について学びました。
    今回はこの動作をどのようにしてハードウェアで実現しているか学びましょう。
    指数と対数
    fig1 マイコン・ブロック図
    【復習】これから2進数,16進数が登場します, 復習は以下を参照して下さい。
    16進数【参照先】
    ・xxxx h :16進数,  xxxxx b :2進数, hbがなければ10進数です。
    例:
    \(\ul{1111b}=1\d 2^3+1\d 2^2+1\d 2^1+1\d 2^0\)\(\quad =15=Fh\)
    \(\ul{1Fh}=1\d 16^1+15\d 16^0=31\)
    \(\ul{1Fh}=0001 1111b=31\)
    \(\ul{FFFh}=15\d 16^2+15\d 16^1+15\d 16^0\)\(\quad =4095\)
    \(\ul{FFFh}=1111 1111 1111b\)\(=4095\)

    ブロック図の説明


    •端子/信号の記号の上バー(例:\(\s{\baro{RD},\baro{C1}}\))は負論理表記, この信号が "0 (L)" のときアクティブです。
    上バーが無い信号は正論理です…正論理では "1 (H)" のときアクティブですね。
    (デジタル回路では負論理表記の回路図が多い。)
    •CPU からの アドレスバス, データバスは全デバイスに接続されています。
    •CPU の制御信号(例: \(\sc{\baro{MREQ}}\) , \(\sc{\baro{IORQ}}\)など)は必要に応じてデバイスに接続されている。
    •CPUの制御端子のうちCPU方向の矢印線は 周辺デバイスなどからCPU が受ける信号です。
    •マイコンボード(ブロック図)の構成:
  • ♦電源とリセット部
  • ♦クロック部
  • ♦アドレスデコーダ部
  • ♦ROM
  • ♦RAM
  • ♦EEPROM
  • ♦I/Oデバイス
  • ♦通信デバイス
  • ♦A/D コンバータ
  • •電源ON の瞬間は回路は不安定なので, 電源ON後 しばらくして リセットを解除して, CPUの動作を開始させます。
    電源部の "Reset SW" を押すとCPUの \(\s{\baro{RESET}}\)端子が "L" レベルとなり, CPUはリセット状態に なり,"Reset SW"を放すとCPU は初期状態から立ち上がります。
    •クロックは水晶発信器とバッファ回路から構成され, CPU 以外の通信デバイスでも使われます。
    •CPU の各端子の信号は "データバスのみ入出力の双方向" , それ以外は出力と入力のどちらかです。
    注:その他は以下に個別に説明していきます。

    CPUの制御・管理


    CPU(プロセッサ)が一元的に制御・管理してるのはメモリ,その他のデバイス(※) 全般です。
    注(※): デバイスとはコンピュータを構成する電子機器やパーツ類、周辺機器などの総称
    どの様にしてCPU がメモリと周辺デバイスを一元に制御・管理しているのかを見ていきましょう。
    一般に コントローラが各機器を制御するとき, 各機器とは個別の制御線で 1対1 に接続されています。
    CPU は 全デバイスと共通データ線 と アドレス線 で接続されています。
    「CPUーデバイス間の信号」 の方向を考察すると:
    ⅰ)アドレス信号はCPU\(\ \st{\to}\ \)各デバイスの:単方向
    各デバイスは "CPU からアドレス信号" を受ける "入力モード" なので支障はありません。

    ⅱ)データ信号はCPUと\(\ \st{\leftrightarrow}\ \)各デバイスの:双方向
    データ線が双方向だから, 信号の衝突・短絡回避する方策1が必要です。

    方策1:
    トライステート(3ステート)出力
    複数のデバイスが同じ出力線で接続される場合には, 信号の衝突を防ぐため, 出力部には トライステート(3ステート)バッファが使われます。ディジタル信号の "1" と "0" に加え "ハイ・インピーダンス【Z】" の3状態にするロジック回路です。
    【Z】状態の出力部は, バスから切り離したのと同じ状態です。
    デバイスは CPU からの要求がないときは【Z】状態にして,バスから切り離しています。
    "(Z)" 状態とは"抵抗大" の意味, "信号線から切り離す" イメージです。

    方策2:
    CPU の制御信号 が各デバイスを制御
    \(\s{\baro{MREQ}}\) とは CPU のピン名称です。記号の上線は負論理を示す。
    この信号は "0" ("L") のとき有効(アクティブ)です。
    \(\s{\baro{MREQ}}\): メモリへの "読み・書き" 用の信号 ,アドレスバスがメモリへのアドレス信号であることを示す。
    \(\s{\baro{IORQ}}\): I/O への"読み・書き" 用の信号, アドレスバスがI/O へのアドレス信号であることを示す。
    \(\s{\baro{RD}}\): メモリ・I/Oデバイスに データの読み込みを要求する信号。
    \(\s{\baro{WR}}\): メモリ・I/O デバイスに データを書き込む信号。(データバスの有効を示す。)

    方策3:
    デバイスを1つだけアクセスする信号⇒チップセレクト信号
    CPU が特定のデバイスだけをリクエストしてアクセスできようにする。
    メモリデータを読むとき:
    ①CPU がアクセスしたいデバイスのチップセレクト端子\(\s{\baro{CE}}\)(※)をアクティブにする。 ( ※:チップセレクト信号の詳細は後述)
    ②そのデバイスは次の指令を待つ。
    ③デバイスのデータを読むときは\(\s{\baro{RD}}\)端子をアクティブにする。
    ④そのデバイスはデータを確立して【Z】を解除しデータバスに出力する。
    ⑤CPU がそのデータを読むと\(\s{\baro{RD}}\)信号をOFFして一連のサイクルは終了する。
    このサイクルを "メモリから読み出し" のマシンサイクルと言います。
    そして以下がそのタイムチャートです。
    下図は "メモリから読み出し" のマシンサイクルのタイムチャートです。

    指数と対数
    fig2 タイムチャート
    メモリにデータを書くとき:
    ①,②は上記と同じ。
    ③ CPUは 書くためにデータをデータバスに出力する。
    ④ CPUは データバスのデータが有効になったとき, \(\s{\baro{WT}}\)を出力する。
    ④ メモリはそのデータを読み・保存する。
    : これらの信号は次のような命令により CPU は自動で動作します。

    記号説明( Z80の命令 ):
    マイコンではアッセンブリ言語(ニーモニック)(またはC言語)でソフトを作ります。
    これをアッセンブラーにかけると機械語の2進数の命令コードに変換されます(数字群)。
    例えばLD A,(HL):メモリからデータをロードしてレジスタに格納する命令です。
    LD:アッセンブリ言語命令語(ニーモニック), ・A:CPUのレジスタ, ・(HL):2つのレジスタが示す16itのアドレスデータ
    メモリのデータを読むとき: LD A(HL) この命令コードは"7Eh"
    CPUの A に(HL)が示すアドレスのメモリデータを読む
    メモリにデータを書くとき: LD (HL),A この命令コードは"77h"
    CPUの A のデータを(HL)が示すアドレスのメモリに書き込む
    ・これらの命令データは ROM のデータです⇒"…7Eh,77h…"
    (ROMのデータの実態は2進数の数字群)

    アドレスマップ(Map)


    予備知識:
    アドレスバスは16本の信号線から成り, 16ビット(A15…A0) の2進数に割り振っています。
     \(|\sc{\ul{A15=2^{15}},\ul{A15=2^{14}}\cdots \ul{A8=2^{0}}}\) \(\quad |\quad \sc{\ul{A7=2^{7}},\cdots \ul{A1=2^{1}},\ul{A0=2^{0}}}\)|

    データバスは8本の信号線から成り,8ビット(A7…A0)の2進数に割り振っています。
     \(|\sc{\ul{D7=2^{7}},\ul{D6=2^{6}}\cdots \ul{D1=2^{1}},\ul{D0=2^{0}}}|\)

    "0" とは " L レベル=0V(ボルト)" のこと。
    "1" とは " H レベル=5V(ボルト)" のこと。

    アドレス空間は大別して次の2種類
    ♦メモリアドレス: 16ビット=0000h~0FFFFh=64KB(※)
  • EPROM:0000h~3FFFh=16KB
  • SRAM:4000h~7FFFh=16KB
  • EEPROM:8000h~BFFFh=16KB
  • ♦I/Oアドレス: 8ビット=00h~0FFh=256 バイト
  • I/O:80h~83h=4バイト
  • 通信:84h~87h=4バイト
  • A/D:88h~8Bh=4バイト
  • 注:(※) なぜ16KB(キロバイト)になるのか
    3FFFh=0011 1111 1111 1111b→14ビット
    \(2^{14}=16384\)\(\quad\) \(\frac{16384}{1024}=\ul{16}\)(KB)
    (ビットパターン)データ容量【参照先】

    指数と対数
    fig3 アドレス Map

    チップセレクトとアドレス


     デコーダにより複数デバイスのうち1つだけセレクトされる, ここではメモリ用(デコーダM)とI/O用(デコーダI/O)の2つあります。
    アドレスMapでは RAM の領域 は4000h~7FFFhです,CPU がこのアドレスデータを出力すると複数のデバイスからRAM のチップセレクト信号C0 のみ ONになり RAM のみが有効になる。
    指数と対数
    fig4 アドレスデコーダ
    興味のある方へ!デコーダIC:"74HC138" の真理値表【参照先】

    メモリアドレス

    メモり領域は"A14,A15"の2bit(下図の文字) により3つに区分けしている。
    |A15,14,13,-----------,2,1,A0|⇐アドレスバス(信号線) 
    |0000|0000|0000|0000|=0000h
    ⇅  ① ROM  16KB    ⇅
    |0011|1111|1111|1111|=3FFFh

    |0100|0000|0000|0000|=4000h
    ⇅  ② RAM 16KB    ⇅
    |0111|1111|1111|1111|=7FFFh

    |1000|0000|0000|0000|=8000h
    ⇅  ③ EEPROM 16KB   ⇅
    |1011|1111|1111|1111|=BFFFh

    例:CPU から RAMの"417Fh"番地の指定方法:
    アドレス信号線A15に0V", |A15,14,13,-----------,2,1,A0|⇐アドレスバス(信号線)< |0100|0001|0111|1111|=417Fh

    I/Oアドレス

     I/O 領域は"A7…A2"
    の6bit の値により3つに区分けしている。
    残りの"A1,A0"の2 bitで"3h~0h"を表します。
    |A8,---3,2,1,A0|
    |1000|0000|=80h
    I/O 4Byte ⇅
    |1000|0011|=83h
    |1000|0100|=84h
    通信 4Byte ⇅
    |1000|0111|=87h
    |1000|1000|=85h
    A/D 4Byte ⇅
    |1000|1011|=87h

    例:CPU から I/Oの"84h"番地の指定方法:
    アドレスバス下位8ビットに次の信号を乗せることです。
    |1000|0100|=84h

    マシンサイクル(machine cycle)


    CPUが1つの命令を実行する一連の流れをマシンサイクルといいます。
    次のようなマシンサイクルがあります:
  • ♦メモリから読み出し
  • ♦メモリに書き出し
  • ♦I/Oから入力
  • ♦I/Oに出力
  • ♦その他として・割り込み要求・バス要求

  • またマシンサイクルをM1,M2,M3と識別しています。
  • ♦M1サイクル:メモリ 命令コード読みだし
  • ♦M2サイクル:メモリ 読みだし
  • ♦M3サイクル:メモリ 書きだし

  • 各マシンサイクルを超簡単に説明します
    •メモリの読み出し・書き出しは既に説明済み。 "ここを"参照して下さい。 (マシンサイクルのタイムチャート)
    •I/O の入力・出力のときは \(\sc{\baro{IORQ}}\)を "L" して, 次のように\(\sc{\baro{RD}}\), \(\sc{\baro{WR}}\)のいずれかを有効にする:
    \(\begin{cases} 入力のとき: \sc{\baro{RD}を 'L'} \s{(を有効)} \\ 出力のとき: \sc{\baro{WR}を 'L'} \s{(を有効)} \end{cases}\)

    •割り込みには最優先\(\sc{\baro{NMI}}\)と一般の\(\sc{\baro{INT}}\)があり, 異常時とか緊急時に使います。(\(\sc{\baro{NMI}}\)はリセットの次に優先度が高い)
    ・\(\sc{\baro{NMI}}\)(ノンマスカラブル割り込み)はソフトでマスクできません。全てを中断して割り込み処理をする。
    ・\(\sc{\baro{INT}}\) (割り込み)周辺デバイスなどの要求をうける。
    割り込み処理の使用例:
    ・電圧を監視し, 電源断になる前に \(\sc{\baro{NMI}}\)を動作させて, 重要データを退避させてプログラムを終了させることなどのフェイルセーフをさせる。
    ・プログラムが正常動作の時は、定期的にウォッチドッグタイマをクリアする, クリアできなければプログラム が暴走しているとして割り込み処理/リセットさせる, またはシステムを停止(※)させる。
    ※停止して暴走の原因を調べられるような工夫をプログラムをしておく。

    CPU 内部構成ブロック図


     ここまでCPU を含めたマイコン全体の動きを見てきました。
    次にマイコンの中心となる CPU(プロセッサ)の中の構成を見ていきましょう。
    指数と対数
    fig5 CPU 内部の構成図
    1)命令デコーダを受けて制御出力信号を出します, また周辺デバイスからの制御入力信号を受けてCPUは応答します。
    2)CPU は必要に応じてアドレスバス, またはデータバス に 信号を出力, またデータバスは入力/出力 を切り替えます。
    3)レジスタは高速に読み書きできる CPU内部の作業用メモリです。
    レジスタA:レジスタのうち " A " (アキュムレータ) は 演算の入出力データを記憶する特殊なレジスタです。(演算回路がつながっている)。
     レジスタAの使用例
    ADD A,(HL) : (HL)が示すメモリのデータと A の値を加算し, 結果をAに保存する。
    ・HLは各々8bit,2つに繋げると16bitのレジスタになる。
    ・例えば: HL=4FFFh, 2FFFh番地のRAMデータ=51h とし, A=21h とすると:
    \(\quad \sc{\ul{A}+(HL)=21h+51h=72h \Rightarrow \ul{A}}\)
    フラグF:計算結果の各種フラグを示す。例えば演算結果が負になった時, 6bit目のゼロフラグが1になる。
    割り込み処理が終了すると、スタックに退避させていた情報は元に戻され、中断していたプログラムの続きが実行されます。
    スタックポインタSP:割り込み要求が発生した時、直前まで実行していたプログラムのPCなどの情報を一時的に退避する場所に使わる。
    IX,IY インデックス・レジスタ:このレジスタの内容に、ディスプレイメントの値を加えた値で、メモリの番地を指定できる(相対アドレス)
    レジスタペア BC、DE、HL:ペア(16bit)で使うとアドレス指定に使う。 個別に使うと8bitのレジスタとして使える。
    Iレジスタ:割り込みモード2の割り込みベクター(※)が入るレジスタ。 (※:割り込み処理サブルーチンの先頭番地)
    Z80の割り込みはモード0, モード1,モード2があります。
    モード0:Intel8080(8bit CPU)互換モード
    モード1:Z80独自
    モード2:Z80独自, 後の16bit CPU Intel 8086, motorola 68000にも使われた
    Rレジスタ:DRAMのリフレッシュ情報。
    Z80資料【参照先】
    …以上


    coffe

    [コーヒーブレイク/閑話]…お疲れさまでした

    国産ワン・チップマイコン

    ・TMPZ84C015AF :8ビット_マイコン (東芝)Z80互換/製造中止
    ・H8/3062F-ZTAT:16ビット_マイコン:(日立→ルネサス)/製造中止
    H8/3062Fを例にすると
    16bitのCPUに ROM,RAM,I/O,通信デバイスを内蔵した1チップマイコン。
    fig1の内容を殆ど搭載していますね。
    ・RL78:16ビットマイコン:(ルネサス)/現行
    RL78導入ガイド【参照先】 (RL78の書籍も出版されています)