Professor sagte, mein eingebettetes Systemdesign sei falsch, was habe ich falsch gemacht?

Das Problem:

Ihr eingebettetes System verfügt über einen 8-Bit-Mikroprozessor, der über einen 16-Bit-Adressbus verfügt. Zusätzlich haben Sie einen 32-KByte-FLASH-Chip und einen 8-KByte-RAM-Chip. Sie möchten den FLASH-Chip ganz am Anfang des Adressraums und das RAM am Ende des Adressraums platzieren. Alle Speicherchips haben eine einzelne /CS-Auswahlleitung, die von einem schnellen 32 x 8 OTP-ROM-Chip gesteuert wird.

Was werden Sie in den Inhalt des OTP-ROM programmieren und wie verbinden Sie es mit dem Mikroprozessor und den Speicherchips?

Ich habe nur 1,5 Pence von 6 Punkten erhalten, indem ich eine Lösung verwendet habe, die dem Bild ähnelt, das ich angehängt habe. Der Prof hat mir folgendes gesagt:

"Sie haben einen Punkt für die korrekte Verbindung der Ausgänge der OTP-ROM-Schaltung und ½ Punkte für die Verbindung der Adressleitungen a15 und a14 mit der OTP-ROM-Schaltung erhalten. Ansonsten war die Verbindung falsch und der Inhalt des Speichers wurde nicht angegeben/gelöst alle."

Bitte helfen Sie mir bei diesem Problem. Alle Ratschläge sind willkommen.

Wo soll ich anfangen? Und was soll ich in das opt-rom programmieren? Eine 32x8-Matrix voller Einsen und Nullen?

Blockdiagramm des opt-rom (siehe unten.):

http://oi42.tinypic.com/2m8605v.jpg

mein (falscher) Lösungsversuch:

http://oi44.tinypic.com/13zxwdc.jpg

Ich bin vielleicht verwirrt, aber wie können Sie 32 Möglichkeiten aus nur 2 Eingängen decodieren?
Ich denke, wenn Sie nur 2 Eingänge verwenden, haben Sie nur 4 mögliche Speicherorte, auf die Sie im ROM zugreifen können. Sie sollten Ihre Chip-Select-Befehle an diesen Speicherorten ablegen.
Der Prof erwartet möglicherweise entweder, dass Ihre ROM-Eingänge Speicheranforderungssignale von der CPU enthalten, oder dass Sie die Adressen ausreichend dekodieren, um sicherzustellen, dass RAM nur innerhalb einer einzigen 8K-Region ausgewählt wird (wenn Ihr RAM bei 0xE000-0xFFFF sichtbar ist, ist es wäre auch bei 0xC000-0xDFFF sichtbar). Ich bin mir nicht sicher, warum Ihr Diagramm einen 16-KB-RAM-Chip verwendet.
1. Sie sollten angegeben haben, welche Adressleitungen des OTP verbunden waren. Für 32-KB- und 8-KB-Geräte benötigen Sie A4, A3 und A2 des OTP für eine 8-KB-Adressraum-Granularität. 2. Die OTP /CE-Leitung sollte immer '0' sein (um sicherzustellen, dass die Flash- und RAM /CS-Leitungen ordnungsgemäß angesteuert werden).
Bitte löschen Sie nicht den Inhalt der Frage. Der vollständige Text der Frage ist für das richtige Verständnis der Antworten und für zukünftige Besucher, die eine ähnliche Frage haben, erforderlich.

Antworten (2)

Ich setze meinen Lehrer-/Professorhut auf.

  • Ihr Text erwähnt einen 8-KB-RAM, Ihr Diagramm zeigt 16 KB.

  • Ihr ROM hat 32 Speicherplätze, daher benötigt es mehr als die 2 Adressleitungen, die Sie damit verbinden. Auch wenn Sie beabsichtigen, einige Leitungen mit einem festen Wert zu verbinden, sollten Sie das tun.

  • Die Frage fragt explizit nach dem PROM-Inhalt, den Sie nicht angeben. Ja, es ist eine 32x8-Tabelle mit Einsen und Nullen, aber der Punkt ist, welchen Wert Sie an jeder Stelle eingeben! Sie müssen nicht alle 32x8-Speicherorte angeben.

Ich schlage vor, Sie zeichnen sich eine Erinnerungskarte. Das kleinste Element, das Sie zuordnen müssen, ist 8 KB groß. Wie viele Blöcke müssen also 64 KB abdecken? Wie viele Adresszeilen sind an der Auswahl eines Blocks beteiligt? Wenn weniger als die vom ROM geforderte Anzahl, was werden Sie mit den anderen machen? Notieren Sie für jeden Block den Wert dieser Adressleitungen und den Wert der beiden ausgewählten Ausgangsbits. Jetzt ist es fast trivial, den Inhalt des PROMs auszuschreiben. Es wird viele "egal"-Bits enthalten.

Nebenbemerkung: Heutzutage stellen nur Archäologen solche Systeme aus separaten Chips her, und sogar Mikrocontroller* stellen von 8 Bit auf 32 Bit um. Aber das Design von so etwas ist immer noch ein guter Test für Ihr allgemeines Wissen über digitale Logik.

Vielen Dank für Ihre Antwort. Sie haben erwähnt, dass ich 64 KB abdecken muss, warum? Mein Speicher besteht aus 32 Kb FLASH und 8 Kb RAM, richtig? Das bedeutet, dass die Speicherkarte 32 + 8 = 40 KB groß wäre, und dann bräuchte ich 5 Blöcke, um sie abzudecken.
Wenn ich also 5 Blöcke habe, die jeweils aus 8 Bit bestehen, und ich 16 Bit-Adressleitungen zur Verfügung habe, dann bräuchte ich 3 Adressleitungen (5 * 8 = 40/16 = 2,5). Hab ich recht?
Nein. Und was meinst du mit einer Bruchzahl von Zeilen? Eine Memory Map zeigt den Speicher , wie er von der CPU aus gesehen wird . Wie viel Speicher kann Ihre CPU adressieren?
Wie viel Speicher kann Ihre CPU adressieren? Es adressiert also 8 Bit Daten über 16-Bit-Adressleitungen, und ich muss 8 Blöcke abdecken (64/8 = 8). Bedeutet das, dass ich die Adressleitungen a15 bis a12 mit dem ROM verbinden und den Rest erden muss?
Ihr erster Kommentar oben ist größtenteils Kauderwelsch, der zweite macht Sinn. Aber wie viele Adresszeilen brauchen Sie, um 1 aus 8 Blöcken auszuwählen? Und als nächstes zeichne diese Erinnerungskarte!
Wie viele Adresszeilen benötigen Sie, um 1 aus 8 Blöcken auszuwählen? Das weiß ich nicht, aber in diesem Fall kann ich 3 Adresszeilen verwenden, um die gesamten 8 Blöcke (2 ^ 3 = 8) zu adressieren, richtig?
Eine Memory Map zeigt den Speicher, wie er von der CPU aus gesehen wird . letzte Frage: Ich bin immer noch verwirrt, wie du die 64kb bekommen hast. Meinen Sie damit, dass die Memory Map, die von der CPU aus gesehen wird, aus dem ROM (32kb) und dem am Anfang des Speicherbereichs befindlichen Chip (unser 32kb Flash) besteht?
a) Du weißt auf jeden Fall, wie viele Zeilen du brauchst, um 1 von 8 auszuwählen: 3 Zeilen, sagst du selbst! b) Ihre CPU hat 16 Adresszeilen, also einen Adressbereich von 2^16 Stellen. Es liegt an Ihnen, RAM und FLASH diesem Adressbereich zuzuordnen.
Wenn die einzigen Speichergeräte RAM und Flash sind, muss man nur A15 untersuchen, um zwischen ihnen auszuwählen. Heutzutage ist es üblich, Adressen vollständig zu decodieren, um zu vermeiden, dass Geräte in „unbenutzten“ Adressräumen ausgewählt werden, aber in der Vergangenheit war es üblich, Adressen viel lockerer zu decodieren.

Gute Antwort von @Woutervanooijen. Lassen Sie mich etwas darauf eingehen, was Sie falsch gemacht haben.

Da das kleinste Speichergerät 8 KB groß ist, müssen Sie in der Lage sein, /CS auf 8 KB-Grenzen geltend zu machen. Dies bedeutet, dass ein 64-KB-Speicherplatz in 8 Blöcke aufgeteilt wird. Die ersten 4 sind der Flash und die letzten sind der RAM. Das OTP-ROM benötigt die Mikroprozessoren A13, A14 und A15 als Eingänge auf den OTP-Adressleitungen A0, A1, A2 und den Rest auf Masse. Deine Dx-Ausgänge sind in Ordnung.

Der Inhalt des OTP-ROM ist sehr einfach. Die ersten 4 Stellen sind 11111110 und die 8. Stelle ist 11111101. Den Rest können Sie bei 11111111 belassen. (Beachten Sie, dass in Ihrem Fall alle XXXXXX01 und XXXXXX10 und XXXXXXX11 sein können. Es werden nur die niederwertigsten 2 Datenbits verwendet).

Es sind andere Kombinationen für das ROM möglich. Beispielsweise könnten Sie die hohen 3 Adresszeilen verwenden und die Dateneinträge in 8 Gruppen von 4 duplizieren.

Probleme wie diese werden geschrieben, um gelöst zu werden, und in größeren Klassen werden sie so geschrieben, dass sie leicht bewertet werden können, indem nach bestimmten Schlüsselergebnissen gesucht wird. Die Antworten sind in diesem Fall oft mit Hinweisen wie der RAM-Größe in das Problem eingebaut. Sie sollten sich fragen: "Wie viel OTP brauche ich? Brauche ich alle 32 Einträge? Was ist der kleinste Block, den ich adressieren muss?" usw. Ein Bewerter sucht nach offensichtlichen Fehlern, wie z. B. die Verwendung von 0000001 anstelle von 11111110, um /CS zu bestätigen.

Der 16K-Gerätefehler würde meine Aufmerksamkeit erregen, wenn ich benoten würde. Ich würde nach anderen Papieren mit dem gleichen Fehler suchen, weil es so aussieht, als wäre es ungeprüft kopiert worden. Viele Lehrer verwenden leicht unterschiedliche A- und B-Aufgaben oder Tests, um so etwas zu lernen.

DESHALB habe ich diese Art von Tests immer so schlecht gemacht! Ich hätte A15 direkt mit dem CS-Pin des Flashs verbunden, dann das ROM als Inverter konfiguriert, mit A15 auf der Eingangsseite und dem RAM CS auf dem Ausgang..... ROM in der unteren Hälfte des Adressraums, 4 Alias-Bilder des RAM oben, es entspricht den Spezifikationen und wäre einfacher für den PCB-Layout-Typ!