外部メモリアクセス 大豆生田利章 2014/4/22 各種メモリ 1 1.1 SRAM の動作 SRAM の端子例を図 1 に挙げる。ここで示したものは、128K バイトの 1M ビット(128K ワード× 8 ビット)のメモリであり、アドレス長 17 ビット、 データ長 8 ビットになる。SRAM には制御信号として、CS 1 、OE 2 および WE 3 がある。CS がローレベルの時に読み書きが可能になる。OE がローレ ベルのときはデータが読み出され、WE がローレベルのときにデータが書き 込まれる。さらに、図では省略されているが電源端子 VCC およびアース端子 VSS がある。 図 1: SRAM の端子 SRAM の動作タイミングは図 2 のようになる。読み出し時のデータでハッ チングを掛けてある部分は出力データが安定していないことを示している。 各信号を変化させるタイミングとその長さには規定があるが、特に重要なも のを図中に示してある。図 2 (a) 中の tACC はアドレスを与えてから正しい データが出るまでに必要な時間でありアクセス時間と呼ばれる。また、tRC は 1 回の読み出し動作に必要な最小時間であり読み出しサイクル時間と呼ば れる。図 2 (b) 中の tCSW はチップ選択信号 CS をローレベルにしてから書 1 chip select enable 3 write enable 2 output 1 c 大豆生田利章 2014 ° 2 き込み完了までに必要な時間であり書き込み時間と呼ばれる。また、tWC は 1 回の書き込み動作に必要な最小時間であり、書き込みサイクル時間と呼ば れる。 図 2: SRAM の動作タイミング 1.2 DRAM の動作 ここでは DRAM の基本的な動作を説明する。なお、現在使われている DRAM ではここで説明するものよりも複雑な動作をする。 DRAM の端子例を図 3 に挙げる。ここで示したものは、4M × 1 ビット DRAM(アドレス長 22 ビット、データ長 1 ビット)と呼ばれるものである。 アドレス端子は A0 から A10 の 11 ビット分しかないが、DRAM ではアド レスは上位アドレス(行アドレス)と下位アドレス(列アドレス)に分割し て指定するので、アドレス長は 22 ビットとなる。データの入出力はは入力端 子 DIN と出力端子 DOUT で 1 ビットごと行なう。DRAM には制御信号と c 大豆生田利章 2014 ° 3 して、WE 4 、RAS 5 および CAS 6 がある。WE がローレベルの時に読み書 きが可能になる。RAS がローレベルのときはアドレス端子で上位アドレスが 指定され、CAS がローレベルのときはアドレス端子で下位アドレスが指定さ れる。 図 3: DRAM の端子 DRAM の動作タイミングを図 4 に示す。 読み出し動作は以下の手順で行われる。 1. アドレス端子に行アドレスを与えて、RAS をローレベルにする。 2. 規定時間を経過したら、RAS をハイレベルにしてから、アドレス端子 に列アドレスを与え、CAS をローレベルにする。 3. データ端子 DOUT に読み出しデータが出てくる。 4. CAS をハイレベルにする。 RAS をローレベルにしてから正しいデータが DOUT に出るまでの時間が、 アクセス時間 tRACC である 7 。RAS をローレベルにしてから、再びローレ ベルにするまでの時間が読み出しサイクル時間tRC である。 書き込み動作は以下の手順で行われる。 1. アドレス端子に行アドレスを与えて、RAS をローレベルにする。 2. 規定時間を経過したら、RAS をハイレベルにしてから、アドレス端子 に列アドレスを与え、WE をローレベルにし、データ端子 DIN に書き 込みデータを与える。 3. CAS をローレベルにすることで、データが書き込まれるので、WE を ハイレベルにする。 4. CAS をハイレベルにする。 4 write enable address strobe 6 column address strobe 7 正確には RAS アクセス時間という。 5 row c 大豆生田利章 2014 ° 図 4: DRAM の動作タイミング 4 c 大豆生田利章 2014 ° 5 RAS をローレベルにしてから、WE をローレベルにし、WE を再びハイレベ ルにするまでの時間が、書き込み時間 tRW C である。RAS をローレベルに してから、再びローレベルにするまでの時間が書き込みサイクル時間tW C で ある。 DRAM では時間とともに記憶内容が消滅するので、定期的にリフレッシュ を行なうことで、データの再書き込みをする必要がある。リフレッシュでは、 記憶内容の読み出しは必要ないので、行アドレスを与えて、 RAS をローレベ ルにすればよい。例えば、図 3 においてメモリ全体で 16 ms ごとにリフレッ シュが必要なときは、 16, ms = 7.8 µs 211 (1) ごとに、リフレッシュ対象の行アドレスを変えていけばよい。 1.3 メモリ結合 ここでは、複数のメモリを用いて大容量のメモリを構成する方法を述べる。 例として、図 5 に 32KB の SRAM4 個を用いて、128KB の SRAM として扱 う方法を示す。 図 5: メモリ結合の例 図 5 中のデコーダの真理値表を表 1 に示す. デコーダの出力は各メモリの CS に接続されているので、アドレスの上位 2 ビットにより、使用するメモリが 選択される。つまり、H’00000 から H’07FFF 番地はメモリ 1、H’08000 から H’0FFFF 番地はメモリ 2、H’10000 から H’17FFF 番地はメモリ 3、H’18000 から H’1FFFF 番地はメモリ 4 にアクセスすることになる。 c 大豆生田利章 2014 ° 6 表 1: デコーダの真理値表 A B Y0 Y1 Y2 Y3 1.4 L L L H H H L H H L H H H L H H L H H H H H H L その他のメモリ FPM-DRAM 8 1 つの行アドレスに対して、複数の列アドレスに対する データを順次読み出す DRAM。 EDO-DRAM 9 FPM-DRAM のアクセスサイクル時間を短縮したもの。 RDRAM 10 DRAM の一種。並列接続された DRAM の読み書きのタイミ ングをずらすことで高速化を図る。 SDRAM 11 DRAM の一種。読み書きをクロックに同期させ、1 クロック で 1 つのデータの読み書きを行なう。。 DDR SDRAM 12 クロックの立ち上がりと立下りに同期させた SDRAM。 デュアルポートメモリ 2 組の入出力ポートを持つことで、複数のポートに同 時にアクセスできるようにしたメモリ。DPRAM 2 13 。 DMA マイコンと周辺機器のデータ転送の簡単な実現方法は、図 6 のように、メ モリと CPU 内のレジスタ間のデータ転送と、レジスタと I/O ポート間のデー タ転送をプログラムにより繰り返し行うものである。この方式は PIO 14 方 式あるいはプログラム入出力方式と呼ばれる。ただし、この方法ではデータ 転送中は CPU を使用し続けることになる。転送データ量が多かったり、I/O ポートに接続された周辺機器の速度が遅い場合には、データ転送に時間がか かり、その間 CPU が使用できなくなるという欠点がある。この問題を解決 するものが、DMA と呼ばれる方法である。 8 Fast Page Mode DRAM Data Out DRAM 10 Rambus DRAM 11 Synchronous DRAM 12 Double Data Rate SDRAM 13 Dual Port RAM 14 Programmed I/O 9 Extended c 大豆生田利章 2014 ° 7 図 6: CPU を経由した周辺機器とのデータ転送 DMA 15 は図 7 のように DMA コントローラ(DMAC 16 )とよばれる制 御回路を用いて、メモリと I/O ポート間のデータ転送を直接実現するもので ある 17 。DMA を用いると、CPU は直接データ転送を行なわないので、CPU の負荷を軽減させながらデータ転送を行なうことができる。ただし、DMA コ ントローラの動作中はバスの使用および CPU のメモリへのアクセスが制限 される。 図 7: DMA による周辺機器とのデータ転送 DMA には、1 回の転送要求で 1 バイト転送するシングル転送モード(バイ 15 Direct Memory Access Memory Access Controller 17 本講義で使用する H8/3062BF には DMA の機能は付いていない。 16 Dicect c 大豆生田利章 2014 ° 8 ト転送モード、サイクルスチールモード)と数バイト単位で転送するブロッ ク転送モードがある。シングル転送モードでは 1 バイト転送するたびにバス の使用権を DMA コントローラから CPU に戻す。ブロック転送モードはシ ングル転送モードより効率が高いが、周辺機器の動作速度が遅いときはシン グル転送モードが向いている。また、DMA の転送データ中のバス使用権に よる分類として、バス使用を中断せずに指定されたバイト数の転送を連続し て行なうバースト転送モードとバス使用権を CPU に返すことによる転送の 中断が可能なデマンド転送モードがある。バースト転送モードではデータ転 送中は CPU によるバスの使用ができない。デマンド転送モードではバス使 用権が CPU から DMAC に移ると、中断した時点から転送が再開される。 H8 マイコンの外部メモリアクセス 3 H8 マイコンでは外部メモリおよび周辺デバイスにアクセスすることができ る拡張モードがある。ここでは H8 マイコンが外部のメモリにアクセスする 方法を述べる。 3.1 アドレス空間 拡張モードで用いられるアドレス空間のうち、内蔵 ROM、内蔵 RAM お よび内部 I/O レジスタを除くアドレス空間が外部空間となる。H8 マイコン では外部アドレス空間を 8 つのエリアに分割し、各エリアごとにバス使用を 管理している。チップセレクト信号 CSn をローレベルにすることにより、選 択するエリアが決まる。 表 2: H8/3062BF のエリア分割(モード 5) エリア名 先頭アドレス 末尾アドレス チップセレクト信号 エリア 0 H’000000 H’1FFFFF CS0 エリア 1 H’200000 H’3FFFFF CS1 エリア 2 H’400000 H’5FFFFF CS2 エリア 3 H’600000 H’7FFFFF CS3 エリア 4 H’800000 H’9FFFFF CS4 エリア 5 H’A00000 H’BFFFFF CS5 エリア 6 H’C00000 H’DFFFFF CS6 エリア 7 H’E00000 H’FFFFFF CS7 c 大豆生田利章 2014 ° 3.2 9 マイコンの動作 H8 マイコンには表 3 に示すバス制御線があり、外部とのデータ入出力時 に使用される。 記号 表 3: バス制御信号 名称 入出力 A23 ∼ A0 アドレスバス 出力 D15 ∼ D0 データバス 入出力 CS7 ∼ CS0 チップセレクト 出力 AS アドレスストローブ 出力 RD リード 出力 HWR ハイライト 出力 LWR ローライト 出力 WAIT ウェイト 入力 BREQ バスリクエスト 入力 BACK バス権要求アクノリッジ 出力 H8/3062BF では表 4 のようにバス制御信号が各ポートに割り当てられて いる。データ幅として 8 ビットを用いるか、16 ビットを用いるかはバス幅コ ントロールレジスタ (ABWCR) で設定できる。8 ビット幅を選択した時は、 D15 ∼ D8 が使用される。また、CS7 から CS4 のチップセレクト信号を使用 するかどうかは、チップセレクトコントロールレジスタ (CSCR) で設定する。 表 4: H8/3062BF におけるバス制御信号とポートの対応 信号名 ポート番号 信号名 ポート番号 A7 ∼ A0 A15 ∼ A8 P17 ∼ P10 P27 ∼ P20 AS RD P63 P64 A19 ∼ A16 A23 ∼ A20 P53 ∼ P50 PA4 ∼ PA7 HWR LWR P65 P66 D7 ∼ D0 D15 ∼ D8 CS3 ∼ CS0 P47 ∼ P40 P37 ∼ P30 P81 ∼ P84 WAIT BREQ BACK P60 P61 P62 CS7 ∼ CS4 PB0 ∼ PB3 チップセレクト信号発生回路はマイコン内に内蔵されているが、図 8 のよ うにアドレスバス信号とアドレスストローブ信号から作ることもできる。こ c 大豆生田利章 2014 ° 10 れはチップセレクト信号用の端子を兼用している他の目的に使用するときに 利用できる。 図 8: チップセレクト信号生成回路の例 H8 マイコンにおける外部メモリからのデータ読み出しは図 9 のタイミン グにしたがって行なわれる。表 2 の n 番目のエリアを選択するときは CSn を ローレベルにする。AS をローレベルにするとアドレスが有効になり、RD を ローレベルにすることでデータがデータバスに読み出されるデータの読み出 しが終了したら、CSn 、AS および RD をハイレベルにする。 図 9: リードタイミング H8 マイコンにおける外部メモリへのデータ書き込みは図 10 のタイミング にしたがって行なわれる。読み出し時と同様に、表 2 の n 番目のエリアを 選択するときは CSn をローレベルにする。AS をローレベルにするとアドレ スが有効になり、データバスに書き込みデータを与える。WR をローレベル にすることでデータが書き込まれるここで、WR は HWR または LWR で あり、それぞれデータの上位側(D15 ∼ D8 )または下位側(D7 ∼ D0 )が有 効であることを示している。データ幅が 8 ビットのときは HWR のみ有効で ある。 外部のメモリの動作が遅いときは、バスサイクルを引き延ばして、CPU の c 大豆生田利章 2014 ° 11 図 10: ライトタイミング 動作とメモリの動作の同期をとるウェイト制御を行なう。H8 マイコンのウェ イト制御の実現方法には、ウェイトステートの挿入によるもの(プログラム ウェイト)と、表 3 に示した WAIT 端子を利用するもの(端子ウェイト)が ある。プログラムウェイトはウェイト機能とも呼ばれ、端子ウェイトはレディ 機能とも呼ばれる。図 9 に示したリードタイミングにおいて 3 サイクル分 のウェイトステート TW を挿入した例を図 11 に示す。挿入するウェイトス テート数はウェイトコントロールレジスタ WCRH および WCRL により指 定する。 図 11: ウェイトステート挿入例 バスコントロールレジスタ BCR の WAITE ビットが 1 の時は WAIT 端 子が有効になる。プログラムウェイトによりウェイトステートを挿入したと きは、まずプログラムウェイトが挿入された後、端子ウェイトが挿入される。 端子ウェイトの挿入は、T2 または TW の最後のステートのクロック立下り時 に WAIT 端子がローレベルの時は、WAIT 端子がハイレベルになるまでウェ c 大豆生田利章 2014 ° 12 イトステート TW を挿入し続けることで行なわれる。図 12 ではプログラム ウェイトにおいて 1 ウェイトステートを挿入した後に端子ウェイトが挿入さ れた例を示す。 図 12: 端子ウェイト挿入例(1 ウェイトステート) バス権制御 4 MPU や DMA コントローラのようにバスの制御を行なう装置をバスマス タと呼び、バスマスタの制御を受ける装置をバススレーブと呼ぶ。複数のバ スマスタのバス使用権を制御する装置をバスアービタと呼ぶ。バスアービタ はバスマスタからのバスリクエスト信号に対してバス権要求アクノリッジ信 号を返す。複数のバスマスタからリクエストがあるときは、バスアービタは 優先順位の高いものにアクノリッジ信号を与える。H8/3062BF 内蔵のバス アービタは CPU よりも外部バスに対して優先権を与える。 図 13 のようにバスを用いてマイコン外部に周辺機器が接続されていると きは、表 3 のバス制御信号のうち、BREQ と BACK を用いることでバスを 解放し、外部のバスマスタを使用することができるようになる。 外部からバスを解放するときは,図 14 のように BREQ をローレベルにす る。クロック立ち上がり時に BREQ がローレベルであるときには、所定のタ イミングで外部にバスが解放され、BACK がローレベルになり、アドレスバ ス,データバス,バス制御信号(AS,RD,HWR,LWR)がハイインピー ダンス状態(外部から切断された状態)になる.BREQ がローレベルの間は 外部にバスが解放され続ける。BREQ をハイレベルにし、2 クロック経過す ると 18 、バスの解放が終了し,BACK がハイレベルとなる. バス解放時に外部の機器と接続するための規格には、パラレル転送を行な う ISA や PCI、シリアル転送を行なう PCI Express や ATA などがある。 18 正確にはクロックの立ち上がりで 2 回連続 BREQ がハイレベルである場合。 c 大豆生田利章 2014 ° 13 図 13: 外部バス ] 図 14: バス権制御 c 大豆生田利章 2014 ° 5 14 マイコンボード (MTR-300) の外部メモリアク セス MTR-300 の外部メモリは図 15 のように結線されている。ボード搭載の SRAM は H’1F8000 番地から H’1FFFFF 番地までの 32KB を用いる。また オプションとして増設した SRAM は、H’200000 番地から H’21FFF 番地の 128KB、または H’200000 番地から H’27FFFF 番地までの 512KB を用いる。 図 15: MTR-300 の外部メモリ結線図 MTR-300 において外部メモリへアクセスするプログラムの例をリスト 1 に示す。外部メモリ使用時にはマイコンの動作をモード 5 にしなければなら ない。このプログラムでは H’1F8000 番地から 16 個のデータを書き込んだ後 で、無限ループでデータを読み出し、アドレスの下位 8 ビットともに出力し ている。なお、バス幅コントロールレジスタ (ABWCR) は初期値の状態で 8 ビット幅に設定されている。また、P84 は DDR で出力に設定すると自動的 に CS0 を出力するようになる。 プログラムリスト 1: 外部メモリへのアクセス 1 ; 外 部 S R A M へ の ア ク セ ス ( モ ー ド5) 2 ; ボ ー ド 上 の SRAM は H ’1 F8000 か ら H ’1 FFFFF ( エ リ ア 0 ) . CPU 300 HA P1DDR . EQU H ’ FEE000 3 4 5 6 P2DDR P3DDR . EQU H ’ FEE001 . EQU H ’ FEE002 c 大豆生田利章 2014 ° P4DDR P5DDR . EQU H ’ FEE003 . EQU H ’ FEE004 P6DDR P8DDR PBDDR . EQU H ’ FEE005 . EQU H ’ FEE007 . EQU H ’ FEE00A P1DR P2DR . EQU H ’ FFFFD0 ; A0 - A7 . EQU H ’ FFFFD1 ; A8 - A15 P3DR P4DR P5DR . EQU H ’ FFFFD2 ; D8 - D15 . EQU H ’ FFFFD3 ; VPD <-> I / O board VP1 . EQU H ’ FFFFD4 ; A16 - A18 ( P50 - P52 ) 18 P6DR P8DR . EQU H ’ FFFFD5 ; RD ( P64 ) , HWR ( P65 ) . EQU H ’ FFFFD7 ; CS0 ( P84 ) 19 PBDR . EQU H ’ FFFFDA ; VPE <-> I / O board VP2 . SECTION PROG , CODE , LOCATE =H ’000000 . DATA . L RESET 7 8 9 10 11 12 13 14 15 16 17 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 . SECTION P , CODE , LOCATE =H ’000100 RESET : MOV . L #H ’ FFF00 , ER7 ; S P 設 定 MOV . B #H ’ FF , R0L MOV . B R0L , @P1DDR ; ポ ー ト 1 出 力 ( A0 - A7 ) MOV . B R0L , @P2DDR ; ポ ー ト 2 出 力 ( A8 - A15 ) MOV . B R0L , @P5DDR ; ポ ー ト 5 出 力 ( A16 - A18 ) MOV . B R0L , @P3DDR ; ポ ー ト 3 出 力 ( D8 - D15 ) MOV . B R0L , @P4DDR ; ポ ー ト 4 出 力 MOV . B R0L , @PBDDR ; ポ ー ト B 出 力 MOV . B #B ’00110000 , R0L MOV . B R0L , @P6DDR ; P64 , P 6 5 出 力 ( RD , HWR ) MOV . B #B ’00010000 , R0L MOV . B R0L , @P8DDR ; P 8 4 出 力 ( CS0 ) MOV . B #H ’01 , R0L ; 初 期 デ ー タ MOV . L #H ’1 F8000 , ER1 ; 先 頭 ア ド レ ス MOV . B #H ’0 F , R0H ; デ ー タ 数 WLOOP : MOV . B R0L , @ER1 ; 書 き 込 み ROTL . B R0L ; 左 ロ ー テ ー ト INC . L #1 , ER1 ; 次 の ア ド レ ス DEC . B R0H ; 残 り デ ー タ 数 BNE WLOOP ; 残 り デ ー タ 有 り MOV . B #H ’00 , R0L MOV . B R0L , @P3DDR ; ポ ー ト 3 を 入 力 に 変 更 ( D8 - D15 ) RLOOP : MOV . L #H ’1 F8000 , ER1 ; 先 頭 ア ド レ ス 設 定 15 c 大豆生田利章 2014 ° 46 47 MOV . B #H ’0 F , R0H ; デ ー タ 数 RLOOP1 : MOV . B @ER1 , R0L ; 読 み 出 し MOV . B R1L , @P4DR ; ア ド レ ス 下 位 8 ビ ッ ト を ポ ー ト 4 か ら 出 力 MOV . B R0L , @PBDR ; デ ー タ を ポ ー ト B に 出 力 JSR @TIM ;100 ミ リ 秒 待 機 48 49 50 INC . L #1 , ER1 ; 次 の ア ド レ ス へ DEC . B R0H ; 残 り デ ー タ 数 51 52 53 54 55 56 57 16 BNE RLOOP1 ; 残 り デ ー タ 有 り JMP @RLOOP ;100 ミ リ 秒 サ ブ ル ー チ ン TIM : TIM1 : MOV . L #D ’312500 , ER6 DEC . L #1 , ER6 NOP BNE TIM1 RTS 58 59 60 . END 61 A バス制御換関係のレジスタ 表 5 にバス制御関係のレジスタを載せる。なお、表 5 中のアドレスは H8/3062BF のものである。 表 5: バス制御関係レジスタ(抜粋) 名称 略称 バス幅コントロールレジスタ アドレス ABWCR H’EE020 ウェイトコントロールレジスタ H WCRH H’EE022 ウェイトコントロールレジスタ L WCRL H’EE023 チップセレクトコントロールレジスタ CSCR H’EE01F バスコントロールレジスタ BCR H’EE024
© Copyright 2024 Paperzz