MOP-Adressavkodning

Download Report

Transcript MOP-Adressavkodning

Slide 1

Maskinorienterad Programmering

EDA 480 – Maskinorienterad Programmering
2009/2010
Adressavkodning, ”Uppbyggnad.pdf”
”Skrivarporten”, Arbetsbok MC12, avsnitt 2
Ur innehållet:

Repetition FLEX adressavkodning
Fullständig/Ofullständig avkodning
Minnesavbildad/Direkt avkodning
Vi ansluter en skrivare

Adressavkodning - Skrivarport

1


Slide 2

Maskinorienterad Programmering

Adressavkodning FLEX

Adressavkodning - Skrivarport

2


Slide 3

Maskinorienterad Programmering

Adressavkodning FLEX

Adressavkodning - Skrivarport

3


Slide 4

Maskinorienterad Programmering

EXEMPEL: Adressavkodning
Varje minnesblock
(kapsel) tilldelas sin
unika del av
adressrummet

CPU

avkodnings-logik

Adressavkodning - Skrivarport

4


Slide 5

Maskinorienterad Programmering

CPU
Databuss, 8
signaler,
betecknas D0D7

D0
D1
D2
D3
D4
D5
D6
D7

Registren, med
8-bitars
ordbredd och
CE-ingång

A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
A15
R/W

Adressbuss,
16 signaler,
betecknas A0A15
Styrsignal
(Read/Write) del
av styrbussen.
Genereras av
centralenheten

”Flyktigt” läs/skriv-minne, RWM
Minnet har 8bitars ordbredd,
precis som
centralenheten
Read/Write är en insignal till
minneskapseln

D0
D1
D2
D3
D4
D5
D6
D7
R/W

CE (Chip Enable) är en
insignal till kapseln, denna
måste aktiveras för åtkomst
i detta minne

Adressavkodning - Skrivarport

CE

A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11

Minnet
innehåller
4 kBytes
(212)bytes
och har
därmed 12
adressledningar

Registren, med
8-bitars
ordbredd och
CE-ingång

D0
D1
D2
D3
D4
D5
D6
D7
CE

ut-port

D0
D1
D2
D3
D4
D5
D6
D7
CE

in-port

”Permanent” läs-minne, ROM

8-bitars ordbredd,

CE (Chip Enable)

D0
D1
D2
D3
D4
D5
D6
D7

CE

A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11

4 kBytes
(212)bytes

5


Slide 6

Maskinorienterad Programmering

Specifikation





RWM-minnet ska aktiveras om centralenheten genererar någon av
adresserna 0-0FFF.
ROM-minnet ska aktiveras om centralenheten genererar någon av
adresserna C000-CFFF.
Inporten ska aktiveras om centralenheten genererar adress A000.
Utporten ska aktiveras om centralenheten genererar adress 8000.

Kapsel
Minneskapsel RWM 4 kByte
Minneskapsel ROM 4 kByte
Register, 8 bitar som inport
Register, 8 bitar som utport

Adressavkodning - Skrivarport

Startadress
0000
C000
A000
8000

Slutadress
0FFF
CFFF
A000
8000

6


Slide 7

Maskinorienterad Programmering

Realisering med NAND-logik
Kapsel
RWM
ROM
inport
utport

A15
0
1
1
1

A14
0
1
0
0

A13
0
0
1
0

A12
0
0
0
0

A11
X
X
0
0

Adressbuss
A10 A9 A8
X
X
X
X
X
X
0
0
0
0
0
0

A7
X
X
0
0

Fullständig avkodning

A6
X
X
0
0

A5
X
X
0
0

A4
X
X
0
0

A3
X
X
0
0

A2
X
X
0
0

A1
X
X
0
0

A0
X
X
0
0

0000-0FFF

RWM:
ROM:

0xxx
Cxxx

utport: 8000
inport: A000

1000-1FFF

A15
A14
A13
A12

2000-2FFF

&

3000-3FFF

CERWM

4000-4FFF
5000-5FFF
6000-6FFF

7000-7FFF

A15
A14
A13
A12

8000-8FFF
9000-9FFF

&

CEROM

A000-AFFF
B000-BFFF
C000-CFFF
D000-DFFF
E000-EFFF
F000-FFFF

Adressavkodning - Skrivarport

7


Slide 8

Maskinorienterad Programmering

Ofullständig avkodning
Kapsel
RWM
ROM
inport
utport

RWM:

A15
0
1
1
1

0xxx

utport: 8xxx
inport: Axxx
ROM:

Cxxx

A14
0
1
0
0

A13
0
0
1
0

A12
0
0
0
0

A15
A14
A13
A12
A15
A14
A13
A12
A15
A14
A13
A12
A15
A14
A13
A12

Adressavkodning - Skrivarport

A11
X
X
X
X

&

Adressbuss
A10 A9 A8
X
X
X
X
X
X
X
X
X
X
X
X

A7
X
X
X
X

A6
X
X
X
X

A5
X
X
X
X

A4
X
X
X
X

A3
X
X
X
X

A2
X
X
X
X

A1
X
X
X
X

A0
X
X
X
X

CERWM
0000-0FFF
1000-1FFF
2000-2FFF
3000-3FFF

&

CEUT

4000-4FFF
5000-5FFF
6000-6FFF

7000-7FFF
8000-8FFF
9000-9FFF

&

CEIN

A000-AFFF
B000-BFFF
C000-CFFF
D000-DFFF
E000-EFFF
F000-FFFF

&

CEROM

8


Slide 9

Maskinorienterad Programmering

Adressavkodning - Skrivarport

9


Slide 10

Maskinorienterad Programmering

Minnesavbildad/Direkt avkodning




Vi har sett exempel på ”Minnesavbildad avkodning”
där speciell avkodningslogik används då
periferikretsar används.
Vid ”Direkt avkodning” används speciella
instruktioner för att ange åtkomst i periferikrets.
EXEMPEL: Intel 8086
IO-instruktioner:
IN
<16-bit konst>
OUT
<16-bit konst>

Adressavkodning - Skrivarport

10


Slide 11

Maskinorienterad Programmering

IN
OUT

Adressavkodning - Skrivarport

<16-bit konst>
<16-bit konst>

11


Slide 12

Maskinorienterad Programmering

Arbetsbok, kap. 2

Skrivarport






Konstruktion av en Printer-Port
Synkroniseringsproblem
Villkorlig / ovillkorlig överföring
”Busy Wait” och ”Polling”
Handskakningssignaler

Adressavkodning - Skrivarport

12


Slide 13

Maskinorienterad Programmering

MC12 adressrum

Beskrivande figur
över hur
minnesmoduler
och IO-portar är
placerade
i minnet

FFFF

4000
3FFF

1000
0FFF

0400
03FF

ROM,
Innehåller det
inbyggda
debuggerprogrammet
DBG12.

RWM,
används för program
och data.

I detta adressintervall
placeras gränssnitt mot
externa enheter
HCS12 interna
register

0000
Adressavkodning - Skrivarport

13


Slide 14

Maskinorienterad Programmering

Adressavkodning för skrivar-porten
Adressavkodning

FFFF

CS

CPU12

skrivare

minne

4000
3FFF

Med portdefinition
PRINTER
EQU

$0800

och instruktionerna
LDAA
#$30
STAA
PRINTER
överförs hexadecimala värdet 30 till
skrivaren

1000
0FFF
skrivarportens
dataregister
Det lilla fönstret visar
innehållet i dataregistret tolkat
som ASCII.

0800-0803
0400
03FF

”pappersyta”, här visas utskriften

0000

Adressavkodning - Skrivarport

14


Slide 15

Maskinorienterad Programmering

Förutsättningar
Vår skrivare är från början en "dum" skrivare:






Den kan endast arbeta med ett tecken i taget.
(hämtar ett tecken - skriv ut - hämta nästa)
Det finns inledningsvis inga handskaknings-signaler
Max utskriftshastighet: 4 tecken per sekund.

Adressavkodning - Skrivarport

15


Slide 16

Maskinorienterad Programmering

Första programexemplet
* Printer V1_0
ORG
$1000
LDX
#Text
Pekare till textsträng -> X
Loop
LDAA
1,X+
Tecken -> A, peka på nästa
STAA
PRINTER
Skriv ut till port
BRA
Loop
Fortsätt med nästa tecken
; så här kan du använda assemblerdirektiv för att
; skapa textsträngen på adresss 3000:
ORG
$3000
Text
FCS
”Hej Du Kalle!”

Adressavkodning - Skrivarport

Text ($3000)

H
e
j
D
u
K
a
l
l
e
!

16


Slide 17

Maskinorienterad Programmering

Inför specialtecken för
strängslut
P rin te rV 1 _ 1

Text ($3000)

H
e
j

In it

D
u
L ä s n ä sta te cke n

K
a
l
l
e
!
EOT

J

T e cke n =
EOT?
N

* Printer V1_1
PRINTER EQU
EOT
EQU
ORG
LDX
Loop:
LDAA
CMPA
BEQ
STAA
BRA
Stop:
NOP
BRA
ORG
Text:
FCS
FCB

$0800
4
$1000
#Text
1,X+
#EOT
Stop
PRINTER
Loop
Stop
$3000
"Hej Du Kalle!"
EOT

Ö ve rfö r D a ta
till S kriva re n

S to p

Adressavkodning - Skrivarport

17


Slide 18

Maskinorienterad Programmering

Synkronisera arbetstakterna …
Skrivare

Instruktioner/
sekund
Tecken/
sekund

4

Simulator
STEP

Simulator
RUN

Simulator
RUN
FAST

Hårdvara

?

10

1000

1 000 000

?

2

200

200 000

Lösningen blir villkorlig överföring vilket kräver ett
asynkront gränssnitt…

Adressavkodning - Skrivarport

18


Slide 19

Maskinorienterad Programmering

Villkorlig överföring

Mottagaren
Redo?
J

N

Mottagaren
Redo?
J

Sänd Data
till mottagaren

Sänd Data
till mottagaren

Busy Wait

Polling

Adressavkodning - Skrivarport

N

Statustest,
kräver
asynkront
gränssnitt…

19


Slide 20

Maskinorienterad Programmering

Gränssnitt, version 2
PrinterV2_0

READY
Init

datorsystem
Skrivarbuss

Skrivare

READY-signalen definieras enligt:
• READY = 1 (Hög nivå) indikerar att
skrivaren är klar att ta emot ett nytt
tecken.
• READY = 0 (Låg nivå) indikerar att
skrivaren är upptagen med att skriva
ut ett tecken.

Läs nästa tecken

J

Tecken=
EOT?
N

Läs Status

B it 7

2

1

0

READY=1?
N
J

READY

S tatusregister

Överför Data
till Skrivaren

PrinterV2_0

Adressavkodning - Skrivarport

20


Slide 21

Maskinorienterad Programmering

”Programmerarens bild”
PrinterV2_0

Init

READY = 1 (Hög nivå): skrivaren är REDO
READY = 0 (Låg nivå): skrivaren är UPPTAGEN

Läs nästa tecken

J

Tecken=
EOT?
N

B it 7

2

1

0
Läs Status

READY

S tatusregister

READY=1?
N
J
Överför Data
till Skrivaren

PrinterV2_0

Adressavkodning - Skrivarport

* Printer V2_0
PRINTER EQU
PSTATUS EQU
EOT
EQU
ORG
LDX
Loop:
LDAA
CMPA
BEQ
LoopForReady:
LDAB
ANDB
BEQ
STAA
BRA
Exit:
NOP
BRA

Text:

ORG
FCS
FCB

$0800
$0801
4
$1000
#Text
1,X+
#EOT
Exit
PSTATUS
#4
LoopForReady
PRINTER
Loop

Exit
$3000
"Hej Du Kalle!"
EOT

21


Slide 22

Maskinorienterad Programmering

Resultat
Klarar nu situationen att centralenheten arbetar
snabbare än skrivaren.
Fortfarande problem då centralenheten är
långsammare än skrivaren.
Fortfarande problem med att få skrivaren att
stoppa då sista tecknet skrivits ut.
Vi behöver ytterligare handskakningssignal ”Tecken finns”…

Adressavkodning - Skrivarport

22


Slide 23

Maskinorienterad Programmering

Gränssnitt, version 3

PrinterV3

Init

READY

Datorsystem

DAV
Skrivare
Skrivarbuss

DAV = 1 (Hög nivå) indikerar
för skrivaren att giltigt tecken
finns att hämta på skrivarbussen.

Läs nästa tecken

J

Tecken=
EOT?
N

DAV = 0 (Låg nivå) indikerar
för skrivaren att skrivarbussen
har ett ogiltigt värde.

Läs Status
N
READY=1?
J
Överför Data
till Skrivaren

B it 7

1

0

DAV=1

DAV
Läs Status

S tyrregister
READY=0?

N

J
DAV=0

Adressavkodning - Skrivarport

23


Slide 24

Maskinorienterad Programmering
* Printer V3
Händelser i
Datorsystemet

Inväntar READY=1

PrinterV3

Händelser i skrivaren
Init

Skrivaren är upptagen
med att skriva ut ett
tecken. READY=0.

Läs nästa tecken

Skrivaren är redo för
nästa tecken och sätter
READY=1

J

Inväntar DAV=1

Loop:

ORG
LDX
LDAA
CMPA
BEQ

$1000
#Text
1,X+
#EOT
Stop

N
READY=1?

Ready:

J

Ser att DAV=1. Läser
nytt
tecken
från
skrivarbussen.
Signalerar upptagen,
READY=0.

DAV=1

Läs Status

READY=0?

När
READY=0
nollställs DAV som
indikation på att det
inte finns giltigt
tecken

skrivarbussen

$0800
$0801
$0802
4

Läs Status

Överför Data
till Skrivaren

Inväntar READY=0

EQU
EQU
EQU
EQU

Tecken=
EOT?
N

När
READY=1
skrivs nästa tecken
till
skrivarens
dataregister. Sätter
DAV=1

PRINTER
PSTATUS
PCONTROL
EOT

J

Skrivaren är upptagen
med att skriva ut ett
tecken. READY=0.

Adressavkodning - Skrivarport

DAV=0

N

BRCLR
STAA
BSET
NotReady:
BRSET
BCLR
BRA
Stop:
NOP
BRA

Text:

ORG
FCS
FCB

PSTATUS,#4,Ready
PRINTER
PCONTROL,#2
PSTATUS,#4, NotReady
PCONTROL,#2
Loop
Stop
$3000
"Hej Du Kalle!"
EOT
24


Slide 25

Maskinorienterad Programmering

Resultat
Klarar nu situationen att centralenheten arbetar
snabbare än skrivaren.
Klarar nu situationen då centralenheten är
långsammare än skrivaren.

Klarar nu situationen med att få skrivaren att
stoppa då sista tecknet skrivits ut
Lösningen är dock hopplöst ineffektiv med tanke på hur vi
utnyttjar systemet…
Verkligt "arbete"

DAV
Processorn väntar på DAV skall gå hög

μs
Adressavkodning - Skrivarport

250 ms

μs
25


Slide 26

Maskinorienterad Programmering

Introduktion till ”Undantagshantering”
Interrupt ReQuest (IRQ), begäran om avbrott…
READY
DAV

Datorsystem

Skrivare

IRQ

Skrivarbuss

Datorsystem

READY

DAV
Skrivare
Skrivar buss

Huvudprogram
Avbrottssignal

IRQ
Avbrottsrutin som
skriver ut
ett tecken

Processorn utför annat viktigt arbete
ms

Adressavkodning - Skrivarport

Avbrottsrutinen utförs och ett
tecken skickas till skrivaren IRQ

100 ms

ms

26


Slide 27

Maskinorienterad Programmering

Avbrott
1) Huvudprogram exekveras när ett avbrott aktiveras

H u vu d p ro g ra m

2) Hopp till avbrottsrutin

1

A vb ro tts rutin
3

A vb ro tt

4) Avbrottsrutin avslutas med en speciell instruktion,

2

5

3) Avbrottsrutin startar

B e tjä n a
a vb ro tte t

return from interrupt (RTI)
5) Återhopp till huvudprogram
6) Huvudprogrammet fortsätter.

6
4
RTI

Minne
FFF2
FFF3

Adressavkodning - Skrivarport

Avbrottsrutinens
adress

”avbrottsvektor”

27


Slide 28

Maskinorienterad Programmering

EXEMPEL, Skrivarporten
”TextP”
”Text”

AH
AL
H
e
j

Minne
FFF2
FFF3

Printer_IRQ(H)
Printer_IRQ(L)

”avbrottsvektor”

D
u
K
a
l
l
e
!
EOT

Adressavkodning - Skrivarport

* Avbrottsrutin
Printer_IRQ:
LDX
TextP ;Läs pekare till nästa
LDAA 1,x+
;Skriv nästa tecken
STAA Printer
STX
TextP ;Spara nya pekare
RTI

28