제
Sponsored Links
This presentation is the property of its rightful owner.
1 / 89

제 4 장 PowerPoint PPT Presentation


  • 85 Views
  • Uploaded on
  • Presentation posted in: General

제 4 장. Interface between CPU and Memory (SRAM). 4.1 첫 번째 방법 (1). 8bit CPU ( A15 - A0, D7 - D0 ) 에서 64Kbyte Memory 가 필요한 경우. 0xFFFF. Address Space of CPU 64KByte. CPU. A15-A0. D7-D0. 0x0000. (a). 64K byte SRAM (SA15 - SA0, SD7 - SD0) 을 이용. 64KB RAM. SA15-SA0. 0xFFFF.

Download Presentation

제 4 장

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


제 4 장

Interface between

CPU and Memory (SRAM)


4.1 첫 번째 방법

(1). 8bit CPU ( A15 - A0, D7 - D0 )에서 64Kbyte Memory가 필요한 경우

0xFFFF

Address

Space

of CPU

64KByte

CPU

A15-A0

D7-D0

0x0000


(a). 64K byte SRAM (SA15 - SA0, SD7 - SD0) 을 이용

64KB

RAM

SA15-SA0

0xFFFF

Address

Space

of CPU

64KByte

CPU

CS#

SD7-SD0

A15-A0

Address

Space

of SRAM

64KByte

D7-D0

0x0000

CPU의 address space : 가질 수 있는 주소공간

Memory의 address space : 가지고 있는 주소공간


-> SRAM 1개 필요

-> CPU의 A15-A0, D7-D0 와

SRAM의 SA15-SA0, SD7-SD0 연결 방법

: 무수히 많다

그중 권장하는 방법

(A15 <-> SA15), ......, (A0 <-> SA0)

(D7 <-> SD7), ....., (D0 <-> SD0)

: 이 경우 CPU address space와

SRAM address space와의 관계는 ?


Memory Map

0xFFFF

CPU

A15-A0

64KB

RAM

SA15-SA0

CS# : 0

SD7-SD0

D7-D0

0x0000


(b). 32K byte SRAM (SA14 - SA0, SD7 - SD0) 을 이용

32KB

RAM

0xFFFF

Address

Space

of CPU

64KByte

CPU

SA14-SA0

CS#

A15-A0

SD7-SD0

D7-D0

32KB

RAM

SA14-SA0

CS#

SD7-SD0

0x0000


Memory Map

0xFFFF

32KB

RAM

CPU

SA14-SA0

A15

CS#

A15

32KB

A14-A0

SD7-SD0

D7-D0

32KB

RAM

32KB

SA14-SA0

CS#

A15

SD7-SD0

0x0000


-> SRAM 2개 필요

: SRAM 사상

CPU address space

영역 1 : 0-32K : SRAM 1개

영역 2 : 32K-64K : SRAM 1개

-> 두 영역의 구분 : A15를 이용하여 구분

A15를 이용한 SRAM의 구분 : 1X2 디코더 이용

-> 1X2 디코더 입력 : A15

출력 : SRAM의 CS#


-> CPU의 A14-A0, D7-D0 와

SRAM의 SA14-SA0, SD7-SD0 연결 방법

: 무수히 많다

그중 권장하는 방법

(A14 <-> SA14), ......, (A0 <-> SA0)

(D7 <-> SD7), ....., (D0 <-> SD0)

: 이 경우 CPU address space와 SRAM address space와의 관계는 ?


Memory Map

0xFFFF

32KB

RAM

CPU

SA14-SA0

A15

CS#

A15

32KB

A14-A0

SD7-SD0

D7-D0

32KB

RAM

32KB

SA14-SA0

CS#

A15

SD7-SD0

0x0000


(c). 16K byte SRAM (SA13 - SA0, SD7 - SD0) 을 이용

SA13-SA0

16KB

RAM

CS#

O3*

Memory Map

SD7-SD0

0xFFFF

CPU

A15

16KB

A14

SA13-SA0

16KB

RAM

CS#

O2*

A13-A0

16KB

SD7-SD0

D7-D0

SA13-SA0

16KB

RAM

16KB

CS#

O1*

SD7-SD0

16KB

0x0000

SA13-SA0

16KB

RAM

CS#

O0*

SD7-SD0


2*4

Decoder

2*4

Decoder

O3#

O3#

I1 : A15

I1

O2#

O2#

I0 : A14

I0

O1#

O1#

E# : 0

E#

O0#

O0#


-> SRAM 4개 필요

: SRAM 사상

CPU address space

영역 1 : 0-16K : SRAM 1개

영역 2 : 16K-32K : SRAM 1개

영역 3 : 32K-48K : SRAM 1개

영역 4 : 48K-64K : SRAM 1개

-> 4 영역의 구분 : A15, A14를 이용하여 구분

A15, A14를 이용한 SRAM의 구분 : 2X4 디코더 이용

-> 2X4 디코더 입력 : A15, A14

출력 : SRAM의 CS#


-> CPU의 A13-A0, D7-D0 와

SRAM의 SA13-SA0, SD7-SD0 연결 방법

: 무수히 많다

그중 권장하는 방법

(A13 <-> SA13), ......, (A0 <-> SA0)

(D7 <-> SD7), ....., (D0 <-> SD0)

: 이 경우 CPU address space와

SRAM address space와의 관계는 ?


SA13-SA0

16KB

RAM

CS#

O3#

Memory Map

SD7-SD0

0xFFFF

CPU

A15

16KB

A14

SA13-SA0

16KB

RAM

CS#

O2#

A13-A0

16KB

SD7-SD0

D7-D0

SA13-SA0

16KB

RAM

16KB

CS#

O1#

SD7-SD0

16KB

0x0000

SA13-SA0

16KB

RAM

CS#

O0#

SD7-SD0


(d). 8K byte SRAM (SA12 - SA0, SD7 - SD0) 을 이용

SA12-SA0

SA12-SA0

8KB

RAM3

8KB

RAM7

CS3#

CS7#

Memory Map

SD7-SD0

SD7-SD0

0xFFFF

8KB RAM7

CPU

A15

A14

8KB RAM6

SA12-SA0

SA12-SA0

8KB

RAM2

8KB

RAM6

A13

CS2#

CS6#

A12-A0

8KB RAM5

SD7-SD0

SD7-SD0

8KB RAM4

8KB RAM3

D7-D0

SA12-SA0

SA12-SA0

8KB

RAM1

8KB

RAM5

CS1#

8KB RAM2

CS5#

SD7-SD0

SD7-SD0

8KB RAM1

8KB RAM0

0x0000

SA12-SA0

SA12-SA0

8KB

RAM0

8KB

RAM4

CS0#

CS4#

SD7-SD0

SD7-SD0


-> SRAM 8개 필요

: SRAM 사상

CPU address space

영역 1 : 0-8K : SRAM 1개

.

.

영역 8 : 56K-64K : SRAM 1개

-> 8 영역의 구분 : A15, A14, A13을 이용하여 구분

A15, A14, A13을 이용한 SRAM의 구분

: 3X8 디코더 이용


-> 3X8 디코더 입력 : A15, A14, A13

출력 : SRAM의 CS#

-> CPU의 A12-A0, D7-D0 와

SRAM의 SA12-SA0, SD7-SD0 연결 방법

: 무수히 많다

그중 권장하는 방법

(A12 <-> SA12), ......, (A0 <-> SA0)

(D7 <-> SD7), ....., (D0 <-> SD0)


3*8

Decoder

O7#

CS7#

I2 : A15

O6#

CS6#

I1 : A14

I0 : A13

O5#

CS5#

O4#

CS4#

O3#

CS3#

O2#

CS2#

O1#

CS1#

E# : 0

O0#

CS0#


(2). 8bit CPU ( A15 - A0, D7 - D0 )에서 32Kbyte Memory가 필요한 경우

0xFFFF

CPU

A15-A0

D7-D0

32KB

0x0000


(a). 16K byte SRAM (SA13 - SA0, SD7 - SD0) 을 이용,하위 영역 사상

Memory Map

0xFFFF

CPU

A15

16KB

A14

A13-A0

16KB

SA13-SA0

16KB

RAM

CS1#

SD7-SD0

D7-D0

16KB

SA13-SA0

16KB

RAM

16KB

CS0#

SD7-SD0

0x0000


-> SRAM 2개 필요 : SRAM 사상

CPU address space

영역 1 : 0-16K : SRAM 1개

영역 2 : 16K-32K : SRAM 1개

영역 3 : 32K-48K :

영역 4 : 48K-64K :

-> 4 영역의 구분 : A15, A14를 이용하여 구분

A15, A14를 이용한 SRAM의 구분 : 2X4 디코더 이용

2*4

Decoder

O3#

I1 : A15

O2#

I0 : A14

CS1#

O1#

E# : 0

CS0#

O0#


-> 2X4 디코더 입력 : A15, A14

출력 : 두 개의 SRAM의 CS#

-> CPU의 A13-A0, D7-D0 와

SRAM의 SA13-SA0, SD7-SD0 연결 방법

: 무수히 많다

그중 권장하는 방법

(A13 <-> SA13), ......, (A0 <-> SA0)

(D7 <-> SD7), ....., (D0 <-> SD0)


(b). 8K byte SRAM (SA12 - SA0, SD7 - SD0) 을 이용,하위영역 사상

SA12-SA0

8KB

RAM3

CS3#

Memory Map

SD7-SD0

0xFFFF

8KB

CPU

A15

A14

8KB

SA12-SA0

8KB

RAM2

A13

CS2#

A12-A0

8KB

SD7-SD0

8KB

8KB RAM3

D7-D0

SA12-SA0

8KB

RAM1

CS1#

8KB RAM2

SD7-SD0

8KB RAM1

8KB RAM0

SA12-SA0

8KB

RAM0

0x0000

CS0#

SD7-SD0


-> SRAM 4개 필요 : SRAM 사상

CPU address space

영역 1 : 0-8K : SRAM 1개

.

.

영역 8 : 56K-64K :

-> 8 영역의 구분 : A15, A14, A13을 이용하여 구분

A15, A14, A13을 이용한 SRAM의 구분 :

3X8 디코더 이용


3*8

Decoder

O7#

I2 : A15

O6#

I1 : A14

I0 : A13

O5#

O4#

O3#

CS3#

O2#

CS2#

O1#

CS1#

E# : 0

O0#

CS0#


-> 3X8 디코더 입력 : A15, A14, A13

출력 : 4 개의 SRAM의 CS#

-> CPU의 A12-A0, D7-D0 와

SRAM의 SA12-SA0, SD7-SD0 연결 방법

: 무수히 많다

그중 권장하는 방법

(A12 <-> SA12), ......, (A0 <-> SA0)

(D7 <-> SD7), ....., (D0 <-> SD0)


SA12-SA0

8KB

RAM3

CS3#

Memory Map

SD7-SD0

0xFFFF

CPU

A15

A14

SA12-SA0

8KB

RAM2

A13

32KB

CS2#

A12-A0

SD7-SD0

8KB RAM3

D7-D0

SA12-SA0

8KB

RAM1

CS1#

8KB RAM2

SD7-SD0

8KB RAM1

8KB RAM0

SA12-SA0

8KB

RAM0

0x0000

CS0#

SD7-SD0


2*4

Decoder

CS3#

O3#

I1 : A14

CS2#

O2#

I0 : A13

CS1#

O1#

E# : A15

CS0#

O0#


(3). 8bit CPU ( A15 - A0, D7 - D0 )에서 32Kbyte Memory가 필요한 경우

0xFFFF

CPU

A15-A0

32KB

D7-D0

0x0000


(a). 16K byte SRAM (SA13 - SA0, SD7 - SD0) 을 이용,상위 영역 사상

Memory Map

SA13-SA0

16KB

RAM

0xFFFF

CPU

16KB

A15

CS1#

O3*

A14

SD7-SD0

A13-A0

16KB

SA13-SA0

16KB

RAM

CS2#

O2*

SD7-SD0

D7-D0

16KB

2*4

Decoder

O3#

I1 : A15

16KB

O2#

I0 : A14

0x0000

O1#

E# : 0

O0#


(b). 8K byte SRAM (SA12 - SA0, SD7 - SD0) 을 이용,상위영역 사상

SA12-SA0

8KB

RAM3

CS3#

O7*

Memory Map

SD7-SD0

0xFFFF

8KB RAM3

CPU

A15

A14

SA12-SA0

8KB RAM2

8KB

RAM2

A13

CS2#

O6*

A12-A0

8KB RAM1

SD7-SD0

8KB RAM0

8KB

D7-D0

SA12-SA0

8KB

RAM1

CS1#

8KB

O5*

SD7-SD0

8KB

8KB

SA12-SA0

8KB

RAM0

0x0000

CS0#

O4*

SD7-SD0


3*8

Decoder

O7#

I2 : A15

O6#

I1 : A14

I0 : A13

O5#

O4#

O3#

O2#

O1#

E# : 0

O0#


2*4

Decoder

CS3#

O3#

I1 : A14

CS2#

O2#

I0 : A13

CS1#

O1#

E#

A15

CS0#

O0#


4.2 두 번째 방법

CPU의 data bus 폭이 2N bit 일 때

필요한 memory가 2K = 2(M+N) bit 이다

-> 이때, 2(m+n) bit SRAM 메모리 소자를

이용하여 설계하라 ?


(1). M, N, m ,n의 이해

CPU의 data bus 폭이 2N bit

ex) 8bit CPU : N = 3

16bit CPU : N = 4

32bit CPU : N = 5

64bit CPU : N = 6


CPU의 data bus 폭이 2N bit 일 때

필요한 memory가 2K = 2(M+N) bit 이다

CPU가 원하는 메모리 용량

= 2K bit

2M

2N

ex1) 8bit CPU 에서 32Kbyte의 Memory필요

32K X 8bit => 2(15+3) bit : K = 18, N=3, M = 15

ex2) 16bit CPU 에서 64Kbyte의 Memory필요

64K X 8bit => 2 (16+3) bit : K = 19, N=4, M = 15

ex3) 32bit CPU 에서 64Mbyte의 Memory필요

64M X 8bit => 2(26+3) bit : K = 29, N=5, M=24


메모리 용량

2(m+n)bit

2k = 2(m+n) bit SRAM 메모리 소자

2n : 메모리 소자의 데이터 버스 폭

2m

ex) 주어진 메모리 소자의

데이터 버스 폭은 8bit라 가정

64KByte SRAM

2(16+3)bit : k=19, n=3, m=16

8KByte SRAM

2(13+3)bit : k=16, n=3, m=13

1MByte SRAM

2(20+3)bit : k=23, n=3, m=20

2n


What is the m ?

2(m+n) bit SRAM

64KB = 2(16+3) bit SRAM

64KB SRAM

A15-A0

D7-D0

16 lines

m lines

23 lines

2n lines


64KB = 2(16+3) bit SRAM

64KB SRAM

A15-A0

D7-D0

16 lines

16X216

Decoder

16 lines

216

23 lines

23

23 lines


2(m+n) bit SRAM

m lines

mX2m

Decoder

m lines

2m

2n lines

2n

2n lines


(2). 설계 순서

(a). 메모리 소자들의 배치 및

CPU의 데이터 버스와 메모리의 데이터 버스를 연결

- CPU의 데이터 버스 폭을 만족하기 위한

단위 메모리 소자의 수 = 단위모듈

- 원하는 메모리 용량을 구성하기 위한

단위 모듈의 수

- 메모리 소자들의 배치 및 데이터 버스 연결

(b). CPU의 어드레스 버스와 메모리의 어드레스 버스를 연결


(a). 메모리 소자들의 배치 및CPU의 데이터 버스와

메모리의 데이터 버스를 연결

CPU가 원하는 메모리 용량 = 벽

2M

단위 메모리

용량 = 벽돌

단위모듈

2m

2n

2N

단위모듈 -> CPU의 데이터 폭을 만족하기 위한 단위 메모리들의 집합


단위 모듈을 구성하기 위한 메모리 소자의 수 :

2N/2n = 2(N-n)

CPU가 원하는 메모리 용량

단위 메모리

용량

단위모듈

2n

2N


원하는 메모리 용량을 구성하기 위한

단위 모듈의 수 : 2M/2m = 2(M-m)

CPU가 원하는 메모리 용량

2M

단위모듈

2m


ex1) 8bit CPU 에서 32Kbyte의 Memory필요

32K X 8bit => 2(15+3) bit

K=18, N=3, M=15

8KByte SRAM을 이용할 경우 -> 2(13+3) bit

k=16, n=3, m=13

단위 모듈 내 필요한 SRAM의 수 : 2(N-n) = 2(3-3) = 1

필요한 모듈의 수 : 2(M-m) = 2(15-13) = 4


SA12-SA0

8KB

RAM3

CS3#

CPU가 원하는 메모리 용량

= 32KByte = 2(15+3)bit

SD7-SD0

SA12-SA0

8KB

RAM2

CS2#

215

SD7-SD0

SA12-SA0

8KB

RAM1

CS1#

SD7-SD0

단위 메모리 용량

= 8KByte = 2(13+3)bit

단위모듈

SA12-SA0

8KB

RAM0

CS0#

SD7-SD0

23


ex2) 16bit CPU 에서 64Kbyte의 Memory필요

64Kbyte => 2 (16+3) bit

K=19, N=4, M=15

8KByte SRAM을 이용할 경우 -> 2(13+3)bit

k=16, n=3, m=13

단위, 모듈 내 필요한 SRAM의 수 : 2(4-3) = 2

필요한 모듈의 수 : 2(15-13) = 4


SA12-SA0

SA12-SA0

8KB

RAM6

8KB

RAM7

CPU가 원하는 메모리 용량

= 64KByte = 2(16+3)bit

SD7-SD0

SD7-SD0

SA12-SA0

SA12-SA0

8KB

RAM4

8KB

RAM5

215

SD7-SD0

SD7-SD0

SA12-SA0

SA12-SA0

8KB

RAM2

8KB

RAM3

SD7-SD0

SD7-SD0

단위 메모리 용량

= 8KByte = 2(13+3)bit

단위모듈

SA12-SA0

SA12-SA0

8KB

RAM0

8KB

RAM1

SD7-SD0

SD7-SD0

24


SA12-SA0

SA12-SA0

8KB

RAM6

8KB

RAM7

SD7-SD0

SD7-SD0

CPU

SA12-SA0

SA12-SA0

8KB

RAM4

8KB

RAM5

SD7-SD0

SD7-SD0

D15-D8

SA12-SA0

SA12-SA0

8KB

RAM2

8KB

RAM3

D7-D0

SD7-SD0

SD7-SD0

SA12-SA0

SA12-SA0

8KB

RAM0

8KB

RAM1

SD7-SD0

SD7-SD0


ex3) 32bit CPU 에서 64Mbyte의 Memory필요

64MByte => 2(26+3) bit

K=29, N=5, M=24

1MByte SRAM을 이용할 경우 -> 2(20+3) bit

k=23, n=3, m=20

단위, 모듈 내 필요한 SRAM의 수 : 2(5-3) = 4

필요한 모듈의 수 : 2(24-20) = 16


CPU가 원하는 메모리 용량

= 64MByte = 2(26+3)bit

224

단위모듈

단위 메모리 용량

= 1MByte = 2(20+3)bit

25


SA19-SA0

SA19-SA0

SA19-SA0

1MB

RAM

60

SA19-SA0

1MB

RAM

61

1MB

RAM

62

1MB

RAM

63

CS15*

SD7-SD0

SD7-SD0

SD7-SD0

SD7-SD0

SA19-SA0

SA19-SA0

1MB

RAM

0

SA19-SA0

1MB

RAM

1

SA19-SA0

1MB

RAM

2

1MB

RAM

3

SD7-SD0

SD7-SD0

SD7-SD0

SD7-SD0


CPU

SA19-SA0

SA19-SA0

SA19-SA0

1MB

RAM

60

SA19-SA0

1MB

RAM

61

1MB

RAM

62

1MB

RAM

63

SD7-SD0

SD7-SD0

SD7-SD0

SD7-SD0

D31-D24

D23-D16

D15-D8

D7-D0

SA19-SA0

SA19-SA0

1MB

RAM

0

SA19-SA0

1MB

RAM

1

SA19-SA0

1MB

RAM

2

1MB

RAM

3

SD7-SD0

SD7-SD0

SD7-SD0

SD7-SD0


(b). CPU의 어드레스 버스와

메모리의 어드레스 버스를 연결

A0부터 시작하여

처음 N-3 line : 모듈 내 section or bank를 선택하기 위하여 사용

다음 m line : 모듈 내 소자의 address line으로 이용

다음 M-m line : 특정 모듈의 선택을 위하여 이용

나머지 line : 설계된 메모리 모듈을

CPU의 address map에 유일하게 사상하기 위하여 이용


처음 N-3 line : 모듈 (2N bit 정보단위) 내

section (8 bit정보 단위) 을 선택하기 위하여

CPU 내부에서 이미 사용

ex)

8bit CPU : N = 3

16bit CPU : N = 4

A0 -> BE1#, BE0#

32bit CPU : N = 5

A1, A0 -> BE3#, BE2#, BE1#, BE0#

64bit CPU : N = 6

A2, A1, A0 -> BE7#, BE6#, …, BE0#


ex1) CPU (- A15, - D7) 에서 32Kbyte의 Memory필요

(하위 영역 사상)

32KByte => 2(15+3) bit : K=18, N=3, M=15

8KByte SRAM을 이용할 경우 -> 2(13+3) bit : k=16, n=3, m=13

단위 모듈 내 필요한 SRAM의 수 : 2(3-3) = 1

필요한 모듈의 수 : 2(15-13) = 4

m lines ->

A12-A0 : 모듈 내 메모리 소자의 address line으로 사용

M-m lines ->

A14-A13 : 4개의 모듈 중 하나를 선택하기 위하여 사용

A15 : 설계된 메모리 모듈을

CPU의 address map에 유일하게 사상하기 위하여 이용


2*4

Decoder

CS3#

O3#

SA12-SA0

8KB

RAM3

I1 : A14

CS3#

CS2#

O2#

I0 : A13

SD7-SD0

CS1#

O1#

E# : A15

CS0#

O0#

SA12-SA0

8KB

RAM2

CS2#

CPU

A15

SD7-SD0

A14

A13

A12-A0

SA12-SA0

8KB

RAM1

CS1#

SD7-SD0

D7-D0

SA12-SA0

8KB

RAM0

CS0#

SD7-SD0


0xFFFF = 0b 1111 1111 1111 1111

0xE000 = 0b 1110 0000 0000 0000

0xDFFF = 0b 1101 1111 1111 1111

0xC000 = 0b 1100 0000 0000 0000

0xBFFF = 0b 1011 1111 1111 1111

0xA000 = 0b 1010 0000 0000 0000

0x9FFF = 0b 1001 1111 1111 1111

0x8000 = 0b 1000 0000 0000 0000

0x7FFF = 0b 0111 1111 1111 1111

RAM 3

0x6000 = 0b 0110 0000 0000 0000

0x5FFF = 0b 0101 1111 1111 1111

RAM 2

0x4000 = 0b 0100 0000 0000 0000

0x3FFF = 0b 0011 1111 1111 1111

RAM 1

0x2000 = 0b 0010 0000 0000 0000

0x1FFF = 0b 0001 1111 1111 1111

RAM 0

0x0000 = 0b 0000 0000 0000 0000


ex) 설계된 회로도에서 CPU의 입장에서

0x4321번지의 위치에 해당되는 메모리 소자를 표시하고

그 메모리 소자의 입장에서는 몇 번지에 해당되는가 ?

sol)

0x4321 = 0100 0011 0010 0001

A15 : 0, A14 : 1, A13 : 0

RAM2가 선택

RAM2로 입력되는 주소는

0 0011 0010 0001 = 0x0321번지


2*4

Decoder

CS3#

O3#

I1 : A14 (1)

CS2#

O2#

I0 : A13 (0)

SA12-SA0

8KB

RAM3

CS1#

O1#

CS3#

E# : A15 (0)

SD7-SD0

CS0#

O0#

SA12-SA0

8KB

RAM2

CS2#

CPU

A15 (0)

SD7-SD0

A14 (1)

A13 (0)

A12-A0 (0 0011 0010 0001)

SA12-SA0

8KB

RAM1

CS1#

SD7-SD0

D7-D0

SA12-SA0

8KB

RAM0

CS0#

SD7-SD0


만일, A15를 사용하지 않으면 ?

SA12-SA0

8KB

RAM3

2*4

Decoder

CS3#

O3#

CS3#

I1 : A14

SD7-SD0

CS2#

O2#

I0 : A13

CS1#

O1#

E# : 0

SA12-SA0

CS0#

O0#

8KB

RAM2

CS2#

CPU

A15

SD7-SD0

A14

A13

A12-A0

SA12-SA0

8KB

RAM1

CS1#

SD7-SD0

D7-D0

SA12-SA0

8KB

RAM0

CS0#

SD7-SD0


0xFFFF = 0b 1111 1111 1111 1111

RAM 3

중복 사상

0xE000 = 0b 1110 0000 0000 0000

0xDFFF = 0b 1101 1111 1111 1111

RAM 2

0xC000 = 0b 1100 0000 0000 0000

0xBFFF = 0b 1011 1111 1111 1111

RAM 1

0xA000 = 0b 1010 0000 0000 0000

0x9FFF = 0b 1001 1111 1111 1111

RAM 0

0x8000 = 0b 1000 0000 0000 0000

0x7FFF = 0b 0111 1111 1111 1111

RAM 3

0x6000 = 0b 0110 0000 0000 0000

0x5FFF = 0b 0101 1111 1111 1111

RAM 2

0x4000 = 0b 0100 0000 0000 0000

0x3FFF = 0b 0011 1111 1111 1111

RAM 1

0x2000 = 0b 0010 0000 0000 0000

0x1FFF = 0b 0001 1111 1111 1111

RAM 0

0x0000 = 0b 0000 0000 0000 0000


0x0000 번지 = 0b 0000 0000 0000 0000

2*4

Decoder

CS3#

O3#

I1 : A14 (0)

CS2#

O2#

I0 : A13 (0)

SA12-SA0

8KB

RAM3

CS1#

O1#

CS3#

E# : 0

SD7-SD0

CS0#

O0#

SA12-SA0

8KB

RAM2

CS2#

CPU

A15 (0)

SD7-SD0

A14 (0)

A13 (0)

A12-A0 (0 0000 0000 0000)

SA12-SA0

8KB

RAM1

CS1#

SD7-SD0

D7-D0

SA12-SA0

8KB

RAM0

CS0#

SD7-SD0


0x8000 번지 = 0b 1000 0000 0000 0000

2*4

Decoder

CS3#

O3#

I1 : A14 (0)

CS2#

O2#

I0 : A13 (0)

SA12-SA0

8KB

RAM3

CS1#

O1#

CS3#

E# : 0

SD7-SD0

CS0#

O0#

SA12-SA0

8KB

RAM2

CS2#

CPU

A15 (1)

SD7-SD0

A14 (0)

A13 (0)

A12-A0 (0 0000 0000 0000)

SA12-SA0

8KB

RAM1

CS1#

SD7-SD0

D7-D0

SA12-SA0

8KB

RAM0

CS0#

SD7-SD0


만일, A15를 사용하지 않으면 ?

중복 사상

Memory Map

0xFFFF

8KB RAM3

8KB RAM2

ex)CPU의 0x0000 번지와 0x8000 번지는

동시에 RAM0의 0번지에 사상된다.

8KB RAM1

8KB RAM0

0x8000

CPU의 0x0000 번지와 0x8000 번지는

A15를 제외하고 동일하다.

0x0000 = 0b 0000 0000 0000 0000

0x8000 = 0b 1000 0000 0000 0000

8KB RAM3

8KB RAM2

8KB RAM1

8KB RAM0

0x0000


중복 사상

8KB

RAM3

Memory Map

0xFFFF

8KB RAM3

8KB RAM2

8KB

RAM2

8KB RAM1

8KB RAM0

0x8000

8KB RAM3

8KB

RAM1

8KB RAM2

8KB RAM1

8KB RAM0

8KB

RAM0

0x0000


2*4

Decoder

CS3#

A14 : I1

O3#

A13 : I0

CS2#

O2#

CS3#

SA12-SA0

8KB

RAM3

AS#

CS1#

O1#

OE#

E#

30

SD7-SD0

M/IO#

CS0#

O0#

WE#

A15

SA12-SA0

CS2#

8KB

RAM2

CPU

OE#

A15

SD7-SD0

A14

WE#

A13

A12-A0

CS1#

SA12-SA0

8KB

RAM1

OE#

D7-D0

SD7-SD0

WE#

CS0#

SA12-SA0

8KB

RAM0

AS#

M/IO#

OE#

SD7-SD0

WE#

RD# <-> OE#

WR# <-> WE#


ex2) CPU (- A19, - D15) 에서 64Kbyte의 Memory필요

(하위 영역 사상)

64Kbyte => 2 (16+3) bit : K=19, N=4, M=15

8KByte SRAM을 이용할 경우

-> 2(13+3)bit : k=16, n=3, m=13

단위 모듈 내 필요한 SRAM의 수 : 2(4-3) = 2

필요한 모듈의 수 : 2(15-13) = 4

A0 : 모듈 내 section의 선택을 위하여 사용

A13-A1 : 모듈 내 메모리 소자의 address line으로 사용

A15-A14 : 4개의 모듈 중 하나를 선택하기 위하여 사용

A19-A16 : 설계된 메모리 모듈을

CPU의 address map에 유일하게 사상하기 위하여 이용


CPU

A19-A16

A15

A14

2*4

Decoder

A13-A1

O3#

I1 : A15

O2#

I0 : A14

A19

O1#

BE1#

E#

A18

BE0#

O0#

A17

A16

D15-D8

D7-D0


SA12-SA0

SA12-SA0

8KB

RAM6

8KB

RAM7

O3#

CS#

O3#

CS#

SD7-SD0

SD7-SD0

SA12-SA0

SA12-SA0

8KB

RAM4

8KB

RAM5

CS#

O2#

CS#

O2#

SD7-SD0

SD7-SD0

SA12-SA0

SA12-SA0

8KB

RAM2

8KB

RAM3

O1#

CS#

CS#

O1#

SD7-SD0

SD7-SD0

SA12-SA0

SA12-SA0

8KB

RAM0

8KB

RAM1

O0#

CS#

O0#

CS#

SD7-SD0

SD7-SD0

BE0#

BE1#


A3 A2 A1

16bit

CPU

A3 = 0

A2 = 0

A1 = 0

BE1# = 0

BE0# = 0

0 1 1

0x06

0x07

data bus

0 1 0

0x04

0x05

8bit

0 0 1

0x02

0x03

0 0 0

0x00

0x01

8bit

BE0#

BE1#


0b 00001111 1111 1111 111X

RAM 7

RAM 6

0b 00001100 0000 0000 000X

RAM 5

RAM 4

0b 00001011 1111 1111 111X

0b 00001000 0000 0000 000X

RAM 3

RAM 2

0b 00000111 1111 1111 111X

0b 00000100 0000 0000 000X

RAM 1

RAM 0

0b 00000011 1111 1111 111X

0b 00000000 0000 0000 000X


ex) 설계된 회로도에서 CPU의 입장에서

0x02345번지의 위치에 해당되는 메모리 소자를 표시하고

그 메모리 소자의 입장에서는 몇 번지에 해당되는가 ?

sol)

0x02345 = 00000010 0011 0100 0101

A15 : 0, A14 : 0,

A0 : 1 -> BE1# = 0, BE0# = 1

RAM1이 선택

RAM1 로 입력되는 주소는

10 0011 0100 010 = 1 0001 1010 0010 = 0x11A2번지


CPU

A19-A16

A15 (0)

2*4

Decoder

A14 (0)

O3#

I1 : A15

A13-A1

O2#

I0 : A14

A19

O1#

E#

A18

BE1# (0)

O0#

A17

BE0# (1)

A16

D15-D8

D7-D0


SA12-SA0

SA12-SA0

8KB

RAM6

8KB

RAM7

O3#

CS#

O3#

CS#

SD7-SD0

SD7-SD0

SA12-SA0

SA12-SA0

8KB

RAM4

8KB

RAM5

CS#

O2#

CS#

O2#

SD7-SD0

SD7-SD0

SA12-SA0

SA12-SA0

8KB

RAM2

8KB

RAM3

O1#

CS#

CS#

O1#

SD7-SD0

SD7-SD0

SA12-SA0

SA12-SA0

8KB

RAM0

8KB

RAM1

O0#

CS#

O0#

CS#

SD7-SD0

SD7-SD0

BE0#

BE1#


ex3) CPU (- A31, - D31) 에서 64Mbyte의 Memory필요

(하위 영역 사상)

64Mbyte => 2(26+3) bit : K=29, N=5, M=24

1MByte SRAM을 이용할 경우 -> 2(20+3) bit : k=23, n=3, m=20

단위 모듈 내 필요한 SRAM의 수 : 2(5-3) = 4

필요한 모듈의 수 : 2(24-20) = 16

A1, A0 : 모듈 내 section의 선택을 위하여 사용

A21-A2 : 모듈 내 메모리 소자의 address line으로 사용

A25-A22 : 16개의 모듈 중 하나를 선택하기 위하여 사용

A31-A26 : 설계된 메모리 모듈을

CPU의 address map에 유일하게 사상하기 위하여 이용


A31-A26

CPU

CS#

SA19-SA0

CS#

SA19-SA0

1MB

RAM

63

1MB

RAM

60

O15#

O15#

A25

SD7-SD0

SD7-SD0

A24

A23

A22

A21-A2

BE3#

BE2#

BE1#

BE0#

D31-D24

D23-D16

SA19-SA0

SA19-SA0

CS#

1MB

RAM

3

1MB

RAM

0

CS#

O0#

O0#

D15-D8

SD7-SD0

SD7-SD0

D7-D0

BE3#

BE0#


4*16

Decoder

CS15#

O15#

CS14#

O14#

CS13#

O13#

CS12#

O12#

I3 : A25

I2 : A24

O11#

CS11#

I1 : A23

O10#

CS10#

I0 : A22

O9#

CS9#

O8#

CS8#

CS7#

O7#

E*

CS6#

O6#

A31-A26

O5#

CS5#

O4#

CS4#

O3#

CS3#

O2#

CS2#

O1#

CS1#

O0#

CS0#


4.3 조건이 일반적이지 않은 경우 공식에 의한 인터페이스 설계

(1). 필요한 메모리들의 Byte의 2의 배수가 되지 않는 경우

-> 크기가 크고 가장 가까운 2의 배수를 필요 메모리로 가정하고 설계

ex) CPU (- A19, - D7) 에서 768Kbyte의 Memory필요

(하위 영역 사상)

Memory Map

0xFFFFF

256KB

256KB

256KB

0x00000


ex) CPU (- A19, - D7) 에서 768Kbyte의 Memory필요

(하위 영역 사상)

512Kbyte = 219byte < 768Kbyte < 1Mbyte = 220byte

1Mbyte => 2(20+3) bit : K=23, N=3, M=20

256KByte SRAM을 이용할 경우 -> 2(18+3) bit : n=3, m=18

단위 모듈 내 필요한 SRAM의 수 : 2(3-3) = 1

필요한 모듈의 수 : 2(20-18) = 4

A17-A0 : 모듈 내 메모리 소자의 address line으로 사용

A19-A18 : 4개의 모듈 중 하나를 선택하기 위하여 사용

A19 : 0 A18 : 0 -> RAM0

A19 : 0 A18 : 1 -> RAM1

A19 : 1 A18 : 0 -> RAM2

A19 : 1 A18 : 1 -> (사용하지 않음)


SA18-SA0

256KB

RAM

CPU

A19

CS#

RAM2#

A18

SD7-SD0

A17-A0

SA18-SA0

256KB

RAM

CS#

RAM1#

SD7-SD0

D7-D0

SA18-SA0

256KB

RAM

CS#

RAM0#

SD7-SD0

2*4

Decoder

O3#

I1 : A19

O2# : RAM2#

I0 : A18

O1# : RAM1#

E# : 0

O0# : RAM0#


0xFFFFF

(2). 단위 메모리들의 크기가 틀린 경우

-> 동일 메모리 군들로 각각 설계 뒤

결합

-> ex1) 768Kbyte의 Memory필요

(하위 영역 사상)

-> ex2) 128Kbyte의 Memory필요

(상위 영역 사상)

ROM1 (64KB)

0xF0000

ROM0 (64KB)

0xE0000

0xC0000

RAM2 (256KB)

0x80000

RAM1 (256KB)

0x40000

RAM0 (256KB)

0x00000


ex1) CPU (- A19, - D7) 에서 768Kbyte의 Memory필요

(하위 영역 사상)

512Kbyte = 219byte < 768Kbyte < 1Mbyte = 220byte

1Mbyte => 2(20+3) bit : K=23, N=3, M=20

256KByte SRAM을 이용할 경우 -> 2(18+3) bit : n=3, m=18

단위 모듈 내 필요한 SRAM의 수 : 2(3-3) = 1

필요한 모듈의 수 : 2(20-18) = 4

A17-A0 : 모듈 내 메모리 소자의 address line으로 사용

A19-A18 : 4개의 모듈 중 하나를 선택하기 위하여 사용

A19 : 0 A18 : 0 -> RAM0

A19 : 0 A18 : 1 -> RAM1

A19 : 1 A18 : 0 -> RAM2

A19 : 1 A18 : 1 -> (사용하지 않음)


ex2) CPU (- A19, - D7) 에서 128Kbyte의 Memory필요

(상위 영역 사상)

128Kbyte => 2(17+3) bit : K=20, N=3, M=17

64KByte ROM을 이용할 경우 -> 2(16+3) bit : n=3, m=16

단위 모듈 내 필요한 ROM의 수 : 2(3-3) = 1

필요한 모듈의 수 : 2(17-16) = 2

A15-A0 : 모듈 내 메모리 소자의 address line으로 사용

A16 : 2개의 모듈 중 하나를 선택하기 위하여 사용

A19-A17 : 설계된 메모리 모듈을

CPU의 address map에 유일하게 사상하기 위하여 이용

(A19:1, A18:1, A17:1)


ex2) CPU (- A19, - D7) 에서 128Kbyte의 Memory필요

(상위 영역 사상)

128Kbyte => 2(17+3) bit : K=20, N=3, M=17

64KByte ROM을 이용할 경우 -> 2(16+3) bit : n=3, m=16

단위 모듈 내 필요한 ROM의 수 : 2(3-3) = 1

필요한 모듈의 수 : 2(17-16) = 2

A15-A0 : 모듈 내 메모리 소자의 address line으로 사용

A17, A16 : 4개의 모듈 중 하나를 선택하기 위하여 사용

A17:0, A16:0 -> (사용하지 않음)

A17:0, A16:1 -> (사용하지 않음)

A17:1, A16:0 -> ROM0

A17:1, A16:1 -> ROM1

A19-A18 : 설계된 메모리 모듈을

CPU의 address map에 유일하게 사상하기 위하여 이용

(A19:1, A18:1)


(ex1 과 ex2의 결합)

A17-A0 : 모듈 내 메모리 소자 (RAM0, RAM1, RAM2)

의 address line으로 사용

A15-A0 : 모듈 내 메모리 소자 (ROM0, ROM1)

의 address line으로 사용

A17, A16 : 4개의 모듈 중 하나를 선택하기 위하여 사용

A17:0, A16:0 -> (사용하지 않음)

A17:0, A16:1 -> (사용하지 않음)

A17:1, A16:0 -> ROM0

A17:1, A16:1 -> ROM1

A19-A18 : 4개의 모듈 중 하나를 선택하기 위하여 사용

A19 : 0 A18 : 0 -> RAM0

A19 : 0 A18 : 1 -> RAM1

A19 : 1 A18 : 0 -> RAM2

A19 : 1 A18 : 1 -> ROM0와 ROM1을 위한

2X4 decoder를 선택하기 위하여 사용


2*4

Decoder

O3# : ROM1#

I1 : A17

O2# : ROM0#

I0 : A16

O1#

O3#

E#

2*4

Decoder

O0#

I1 : A19

O2# : RAM2#

I0 : A18

O1# : RAM1#

E# : 0

O0# : RAM0#


SA15-SA0

64KB

ROM

CS#

ROM1#

SD7-SD0

SA15-SA0

64KB

ROM

CS#

ROM0#

SD7-SD0

SA18-SA0

256KB

RAM

CS#

RAM2#

CPU

A19

SD7-SD0

A18

A17

A16

SA18-SA0

256KB

RAM

CS#

RAM1#

SD7-SD0

A15-A0

SA18-SA0

256KB

RAM

D7-D0

CS#

RAM0#

SD7-SD0


  • Login