SMP Übung 2 1. Aufgabe a) Kilo: K = 2 10 = 1.024 Mega: M = 2 20 = 1.048.576 Giga: G = 2 30 = 1.073.741.824 Tera: T = 2 40 = 1.099.511.627.776 b) Der Prozessor hat 30 Adressleitungen A[31..2], mit denen er 2 30 (1G) Worte adressieren kann. Eine Speicherzelle umfasst hier 32 Bit bzw. 4 Byte bzw. 1 Wort, da es sich um einen 32-Bit-Prozessor handelt. Demzufolge kann der Prozessor 2 30 Speicherzellen adressieren. (Durch die ByteEnable-Signale BE#[3..0] kann der Prozessor auch innerhalb eines Wortes das gewünschte Byte oder Halbwort einzeln ansprechen.) c) Der -Baustein hat 16 Adressleitungen, hat also einen Adreßraum von 2 16. Es handelt sich um Byteadressen, weil der Baustein 8 Datenleitungen (8 Bit) besitzt. Deshalb hat er eine Kapazität von 2 16 Byte = 64 KByte d) Der RAM-Baustein hat 19 Adressleitungen und 8 Datenleitungen. Man erhält 2 19 Byte = 512 KByte e) 8 MByte / 512 KByte = 16 RAM-Bausteine f) 512 KByte / 64KByte = 8 -Bausteine 1
Definition von Begriffen bei der Speicheradressierung Seitennummer Wortnummer (Adr. im Speicher) ADRHigh ADRLow ADRByte Byteadresse (32 Bit) 1010 1111 1000 xxxx xxxx xxxx xxxx xx xx Seite (Seitenadressbereich) x = 0 oder 1 1010 1111 1000 0000 0000 0000 0000 00 00 Basisadresse 1010 1111 1000 xxxx xxxx xxxx xxxx xx ** Adressmaske für Speicherbaustein mit 20 Bit Adresse x = 0 oder 1 * = nicht angeschlossen 2
SMP Übung 2 2. Aufgabe Vorüberlegungen: 1. Der Prozessor adressiert mit einer Wortbreite von 32 Bit. Jeder der Bausteine hat 8 Datenleitungen. Demzufolge muß man 4 Bausteine aneinanderreihen. 2. Für die RAM-Bausteine gilt: Bei einer Bausteinkapazität von 512 KByte ist die kleinstmögliche Speicherkapazität für 32 Bit Wortbreite 4*512 KByte = 2 MByte. Man braucht 2 solcher Speicherbänke, um 4 MByte zu realisieren. 3. Für die -Bausteine gilt: 4*64 KByte = 256 KByte. Eine Speicherbank reicht aus. Folgende Bausteine und Anschlüsse werden also benötigt: 8x RAM Daten (8 Bit) Adresse (19 Bit) 4x Daten (8 Bit) Adresse (16 Bit) (Bei RAM und außerdem: BUSCLK, READY# und CSTART#) V SS V CC Adresse (30 Bit) OE# R/W# OE# Bausteinansteuerung 1x CPU Daten (32 Bit) BE#[3..0] 1x Adressdekodierer CSTART# BUSCLK READY# VA# R/W# A[31..2] VA# BE#[3..0] (Hinweis : Man schreibt für CSauch ) 3
RAM-Ansteuerung, Prinzip VA# ByteEnable#[3.. 0] Adressdekoder für RAMs ADR High!CSi# = Seitennummer und VA und BEi, OEi# = 0 CS3# CS2# CS1# CS0# CPU Low BUSCLK R/W# M3 M2 M1 M0 READY# DATA Adresse ADRHigh ADRLow ADRByte Seitennummer Adr. im Speicher interne Adresse 4
VA# A Adressdecoder Chip-Select- Signale BUSCLK CSTART READY# Speicher- Steuerung A[20:2] Für alle RAM- und -Bausteine: OE# = 0 19 RAM1 3 CSRAM1 3 RAM1 2 CSRAM1 2 RAM1 1 CSRAM1 1 RAM1 0 CSRAM1 0 d3 d2 d1 d0 RAM2 3 CSRAM2 3 RAM2 2 CSRAM2 2 RAM2 1 CSRAM2 1 RAM2 0 CSRAM2 0 A[17:2] d3 d2 d1 d0 D d3 d2 d1 d0 16 3 2 1 0 CS 3 CS 2 CS 1 CS 0 d3 d2 d1 d0 5
SMP Übung 2 Lesezyklus: ADR VA CS DataFromMem READY CSi = Seitennummer und VA und BEi READY#: generiert der Speicher (im Buszyklus Z3 und Z0) CPU übernimmt BUSCLK Z0 Z1 Z2 Z3 DR[31:2], BE#[3:0] wechselt Adresse stabil CSTART# VA# DATA[31:0] (vom Speicher) Valid Address R/W# (nur RAM) READY# read Chip Select 6
SMP Übung 2 : Schreibzyklus: ADR VA CS DataToMem READY CSi = Seitennummer und VA und BEi READY#: generiert der Speicher (im Buszyklus Z3 und Z0) BUSCLK Z0 Z1 Z2 Z3 ADR[31:2], BE#[3:0] wechselt Adresse stabil CSTART# VA# Valid Address DATA[31:0] (von CPU) R/W# READY# write write Memory Chip Select 7
SMP Übung 2 - Lösungsvorschlag Der Adressdekodierer wandelt die Signale der CPU in die Bausteinansteuerung um. Dazu überlegt man sich logische Ansteuergleichungen, die den Diagrammen entsprechen. Um Verwechslungen des booleschen NICHT- Operators mit Active-Low Signalen zu vermeiden, benutzen wir für boolesche Gleichungen folgende Syntax: * ist die boolesche UND-Verknüpfung,! ist die boolesche NICHT-Funktion, + ist die boolesche ODER-Funktion Beispiel: =!A bedeutet hier, dass das Signal auf logisch 0 steht, wenn A = 1. Da Chip Select ein Active-Low Signal ist, ist dann der zugehörige Baustein angewählt. Für das ergibt sich folgendes: Sobald eine richtige Adresse und Valid Address vorliegt, soll Chip Select gesetzt werden. Eine richtige Adresse liegt dann vor, wenn die höherwertigen Adressbits gleich der gewählten -Seitenadresse sind. Zusätzlich werden die Byte-Enable-Signale berücksichtigt.! [3 : 0] (Seite *!VA# ) *!BE# [3 : 0] Seite ist der Adressbereich, in der die Speicherbank liegt. (gewählt wird A[31..18] = 00 0000 0000 0000) Seite!A31*!A30*!A29*!A28*!A27*!A26*!A25*!A24*!A23*!A22*!A21*!A20*!A19*!A18 Die Signale OEi# werden fest auf 0 (aktiv low) verdrahtet. OE# [3..0] 0000 8
SMP Übung 2 - Lösungsvorschlag Es fehlen jetzt noch die Gleichungen für die Adress- und Datenleitungen: Romadr[15...0] d[7..0] Rom 0 d[7..0] Rom 2 D[7..0] A[17..2] D[23..16] Wortnummer, identisch für alle -Bausteine d[7..0] Rom 1 d[7..0] Rom 3 D[15..8] D[31..24] Jedes ist einen Datenbyte zugeordnet Beim RAM kommt man mit den gleichen Überlegungen auf folgende Gleichungen: Ramadr[18...0] d[7..0] Ram 0 d[7..0] Ram 2 A[20..2] D[7..0] D[23..16] d[7..0] Ram 1 d[7..0] Ram 3 D[15..8] D[31..24] Für die erste Speicherbank wird die Basisadresse 0x0020 0000 gewählt 0000 0000 0010 0000 0000 0000 0000 0000 RAM1Seite!A31*!A30*!A29*!A28*!A27*!A26*!A25*!A24*!A23*!A22*A21! CSRAM#[3..0] (RAM1Seite *!VA# ) *!BE#[3..0] Für die zweite Speicherbank wird die Basisadresse 0x0040 0000 gewählt: 0000 0000 0100 0000 0000 0000 0000 0000 RAM2Seite!A31*!A30*!A29*!A28*!A27*!A26*!A25*!A24*!A23*A22*!A21! CSRAM#[3..0] (RAM2Seite *!VA# ) *!BE# [3..0] Die Output-Enable-Signale werden auf aktiv low verdrahtet. OERAM1# [3..0] OERAM2# [3..0] 0000 9
SMP Übung 2 - Lösungsvorschlag A[31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00] 0xFFFF FFFF 64 K (Worte) 512 K (Worte) Speicherbelegung 0x005F FFFF 0x0040 0000 0x003F FFFF 0x0020 0000 RAM 2 RAM 1 RAM2Seite =!A31 *!A30 *!A29 *!A28 *!A27 *!A26 *!A25 *!A24 *!A23 * A22 *!A21 512 K (Worte) 0x0003 FFFF 0x0000 0000 32 Bit 64 K (Worte) 10
SMP Übung 2 - Lösungsvorschlag Zum besseren Verständnis des Prinzips der Ansteuerung von Speicherbausteinen kann das Beispielsystem MemoryControl.sim mit dem Simulator geöffnet werden. Hier werden die Adress- und Datenleitungen nicht mit einer CPU verbunden, sondern mit manuell bedienbaren Schaltern. Dadurch kann man direkt die Schreib- und Lesezyklen anstoßen, ohne ein Assemblerprogramm für eine CPU schreiben zu müssen. Achtung: Im Simulator stehen nur asynchrone Speichermodule zur Verfügung. Daher entfallen hier Signale wie BUSCLK, CSTART# oder READY#. Out[15-11] ADR15_ADR0 16 Schalter Out[10] Out[9-7] A[15-7] Logic Decode_ A[15-11] Logic Decode_RAM Demux ToggleRAM Out[6-0] A[6-0] A[9-0] A[9-0] 2 Schalter OE_RW OE# (alle) WE# (nur RAMs) 0 (128B) RAM0 (1KB) RAM1 (1KB) 8 LEDs D_IN D[7-0] D_IN[7-0] D_OUT D_IN D_OUT[7-0] 8 Schalter D_OUT 11