外部メモリアクセス

外部メモリアクセス
大豆生田利章
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