6.44 muss zun¨achst die Berechnung einer Instruktion ab-geschlossen sein, bevor mit Hilfe des PC eine neue Instruktion geladen wird.Arbeitet die Mikroarchitektur wie die ISA sequentiell,
Trang 1bestimmt Alternativ kann ein Operand auch direkt als Konstante in der Instruktiongespeichert sein.
In der ALU wird anschließend die durch der Instruktion codierte Operation rechnet Das berechnete Ergebnis der ALU kann entweder als Adresse zum Ladenoder Speichern von Daten aus bzw in den Hauptspeicher dienen oder im Register-satz gespeichert werden Alternativ zu ALU-Operationen kann ¨uber einen Addierer(ADD) eine neue Sprungadresse f¨ur den PC, also die Adresse der n¨achsten Instruk-tion, berechnet werden
be-Die Instruktionssatzarchitektur des Prozessors ist durch die Operationen derALU (typischerweise Addition, Subtraktion und logische Vergleiche), den Lade-und Speicherbefehlen und den implementierten Sprungbefehlen gegeben Auf derMikroarchitektur in Abb 6.44 muss zun¨achst die Berechnung einer Instruktion ab-geschlossen sein, bevor mit Hilfe des PC eine neue Instruktion geladen wird.Arbeitet die Mikroarchitektur wie die ISA sequentiell, so kann die Verifikationals Automaten¨aquivalenz formuliert werden Die Implementierungen von Prozes-soren sind allerdings immer komplexer geworden Die Mikroarchitektur eines mo-dernen Prozessors besteht heutzutage aus mehreren parallelen Pipelines mit Multi-zyklen-Funktionseinheiten, Sprungvorhersage, spekulativer Ausf¨uhrung und sogar
dynamischer Ablaufplanung von Instruktionen (engl out-of-order execution, OOO).
Diese Optimierungen an der Mikroarchitektur zielen darauf ab, den durchsatz des Prozessors zu erh¨ohen
Instruktions-Mit der zunehmenden Komplexit¨at von Prozessoren werden zuverl¨assige fikationsans¨atze ben¨otigt, die es erlauben, die ¨Aquivalenz von ISA und optimierterMikroarchitektur zu beweisen Im Folgenden werden einige wichtige Ans¨atze zur
Veri-¨
Aquivalenzpr¨ufung von Prozessoren n¨aher diskutiert Zun¨achst werden
Verifikati-onsans¨atze f¨ur Prozessoren mit Fließbandverarbeitung (engl pipelining) diskutiert.
Anschließend werden Erweiterungen f¨ur Prozessoren mit Funktionseinheiten, deren
Berechnungen mehrere Takte dauern, sog Multizyklen-Funktionseinheiten, chitekturen mit Ausnahmebehandlung und Mikroarchitekturen mit Sprungvorhersa-
Mikroar-ge betrachtet Daneben wird in modernen Prozessoren auch st¨andig die Parallelit¨at der Mikroarchitekturen erh¨oht Erweiterungen zur Verifikation von sog superska- laren Mikroarchitekturen, also Architekturen, welche die gleichzeitige Bearbeitung mehrerer Instruktionen erlauben, und Mikroarchitekturen, die eine dynamische Ab- laufplanung von Instruktionen erlauben, werden zum Schluss behandelt.
6.3.1 ¨ Aquivalenzpr ¨ufung f ¨ur Prozessoren mit Fließbandverarbeitung
Das Verhaltensmodell der Spezifikation eines Prozessors entspricht einem nalen Modell des Prozessors, wie er von einem Programmierer gesehen wird, d h
funktio-die einzelnen Instruktionen sind in der sog Instruktionssatzarchitektur
zusammen-gefasst Es handelt sich hierbei um eine Beschreibung, der die Ausf¨uhrung von struktionen einzeln und nacheinander zugrunde liegt
In-Die Prozessorimplementierung muss allerdings nicht zwangsl¨aufig alle tionen sequenziell ausf¨uhren Es ist denkbar und g¨angige Praxis, dass die Ausf¨uhrung
Trang 2Instruk-von Instruktionen verschr¨ankt erfolgt Dies wird mit Hilfe einer sog arbeitung realisiert.
Fließbandver-Beispiel 6.3.2 Betrachtet wird der Prozessor aus Fließbandver-Beispiel 6.3.1 in Abb 6.44
Ei-ne Mikroarchitektur, die eiEi-ne f¨unfstufige PipeliEi-ne implementiert ist in Abb 6.45 zusehen Die einzelnen Pipeline-Stufen sind durch Pipeline-Register (graue Bl¨ocke)voneinander getrennt In der ersten Stufe erfolgt das Laden einer neuen Instruktion
(engl instruction fetch, IF) In der zweiten Stufe wird die Instruktion decodiert (engl instruction decode, ID) Die eigentliche Berechnung erfolgt in Stufe drei (engl exe- cute, EX) Stufe vier ist den Speicherzugriffen (engl memory, MEM) vorbehalten Hier werden die entsprechenden Lade- und Speicherbefehle (engl load/store) durch- gef¨uhrt In der f¨unften Stufe wird schließlich das Zur¨uckschreiben (engl write back, WB) des Ergebnisses in den Registersatz ausgef¨uhrt Der ¨Ubersichtlichkeit halberwurde wiederum der Kontrollpfad des Prozessors nicht dargestellt
read data 1
data 2 read
ALU ADD
read data Instruction
Memory
ADD
Memory Data read
register 2 write register
read register 1
address address
write data
Abb 6.45 Mikroarchitektur mit f¨unfstufiger Pipeline des Prozessors aus Abb 6.44 [355]
Die Aufgabe einer formalen ¨Aquivalenzpr¨ufung zwischen tektur und Prozessorimplementierung ist, zu zeigen, dass beide die selben Ergebnisseberechnen Dies unterscheidet sich von der ¨Aquivalenzpr¨ufung f¨ur endliche Automa-ten, da die Mikroarchitektur mit Fließbandverarbeitung mehr Zust¨ande besitzt als diesequentielle Instruktionssatzarchitektur Deshalb ist es notwendig, beide Architektu-ren lediglich bez¨uglich des f¨ur den Programmierer sichtbaren Zustands zu verglei-
Instruktionssatzarchi-chen Dies wird in der Literatur auch als ¨ Ubereinstimmungsproblem bezeichnet.
Trang 3Aquivalenzpr ¨ufung mit Gleichheit und uninterpretierten Funktionen
Viele Entwurfsfehler bei Prozessoren mit Fließbandverarbeitung entstehen in derSteuerungseinheit des Prozessors Aus diesem Grund werden im Folgenden aus-schließlich Verfahren betrachtet, die diese Art von Entwurfsfehlern aufdecken k¨on-nen Dies bedeutet, dass davon ausgegangen wird, dass die kombinatorische Logik,die den Datenpfad des Prozessors realisiert (also die eigentlichen Berechnungendurchf¨uhrt), fehlerfrei ist Zur Abstraktion des Datenpfads f¨uhren Burch und Dilldie Theorie der
”Gleichheit und uninterpretierte Funktionen“ (engl Equality and
Uninterpreted Functions, EUF) ein [75].
Korrektheitskriterium
Der Verifikationsprozess geht von einer Verhaltensbeschreibung in der tion (Instruktionssatzarchitektur) und einer Strukturbeschreibung der Implementie-rung (Mikroarchitektur) aus Die Instruktionssatzarchitektur beschreibt, wie sich derf¨ur den Programmierer sichtbare Zustand des Prozessors durch die Ausf¨uhrung einerInstruktion ¨andert Dies kann durch eine sequentielle Mikroarchitektur mit Zustands-
Spezifika-raum Suund Eingabealphabet I modelliert werden Die Implementierung basiert auf dem selben Eingabealphabet I und f¨ur den Programmierer sichtbaren Zustandsraum
Su Dar¨uber hinaus besitzt eine Mikroarchitektur mit Fließbandverarbeitung auch
Pipeline-Register, deren Zustandsraum durch Spmodelliert wird
Sowohl die sequentielle Mikroarchitektur als auch die Mikroarchitektur mit
Fließbandverarbeitung lassen sich in ¨ Ubergangsfunktionen fspecbzw fimpl zen Beide ¨Ubergangsfunktionen erhalten als erstes Argument den aktuellen Zustandund als zweites Argument die momentane Eingabe (Instruktion) Die R¨uckgabewertder Funktionen ist der Folgezustand, d h
fimpl:(Su× Sp) × I → (Su× Sp).
Um die ¨ Aquivalenz von Mikroarchitektur und ISA zu beweisen, muss gezeigt
werden, dass, ausgehend von einem beliebigen Paar ¨aquivalenter Zust¨ande aus derSpezifikation und Implementierung, die Ausf¨uhrung einer beliebigen Instruktion zudem selben Ergebnis f¨uhrt Anschließend m¨ussen sich Spezifikation und Implemen-tierung zus¨atzlich in ¨aquivalenten Zust¨anden befinden Dies kann durch ein kommu-tatives Diagramm dargestellt werden (siehe Abb 6.46) Dabei wird die Abstraktionvon dem momentanen Zustand der Mikroarchitektur (Prozessorzustand) auf den f¨urden Programmierer sichtbaren Zustand durch die Funktion abs :(Su× Sp) → Sube-rechnet Die Anfangszust¨ande von ISA und Mikroarchitektur sind per definitionem
¨aquivalent
Um zu ¨uberpr¨ufen, ob sich Spezifikation und Implementierung in ¨aquivalenten
Zust¨anden befinden, bietet es sich an, ein Flushing der Pipeline durchzuf¨uhren
Na-hezu alle Prozessoren besitzen spezielle Instruktionen, die eine Weiterverarbeitungvon Instruktionen in der Pipeline erlauben, ohne dass neue Instruktionen initiiert
Trang 4Abb 6.46 Kommutatives Diagramm zur Visualisierung der ¨Aquivalenzpr¨ufung von soren [451]
Prozes-werden Eine solche spezielle Instruktion istall wird als engl stalling net, d h fimpl(q,istall) berechnet den Folgezustand des Prozessors bei einmaliger
bezeich-Ausf¨uhrung von istallim Zustand q Durch eine hinreichende Wiederholung dieser
Instruktion k¨onnen alle Instruktionen in der Pipeline abgearbeitet werden Dies wird
als engl Flushing der Pipeline bezeichnet Diese Idee f¨uhrt zu dem kommutativen
fimpl(qn −1 ,istall ) proj(q n)
fimpl(q,i stall ) fimpl(q1,istall )
fimpl(q ,istall ) fimpl(q
1,istall )
Abb 6.47 Kommutatives Diagramm mit Flushing der Pipeline [75]
In diesem kommutativen Diagramm wird davon ausgegangen, dass sich der
Pro-zessor in einem beliebigen Zustand q befindet Um den f¨ur den Programmierer baren Zustand zu extrahieren, wird zun¨achst ein Flushing der Pipeline durchgef¨uhrt.
sicht-Sind keine Instruktionen mehr zur Verarbeitung in der Pipeline, kann von dem
Pro-zessorzustand q ndurch Projektion (Ausblenden des Zustands der Pipeline-Register)
auf den f¨ur den Programmierer sichtbaren Zustand s geschlossen werden, d h es existiert eine Projektionsfunktion proj : (Su×Sp) → Su Ausgehend von s kann durch Ausf¨uhrung der Instruktion i der Folgezustand s in der Spezifikation bestimmt wer-den
Der selbe Zustand s muss als f¨ur den Programmierer sichtbaren Zustand erreicht
werden, wenn sich der Prozessor im Zustand q befindet, die Instruktion i ausgef¨uhrt,
und eine Flushing der Pipeline durchgef¨uhrt wird Nach Ausf¨uhrung von i und dem
Flushing der Pipeline befindet sich der Prozessor im Zustand q n Durch Projektion
wird der Zustand s in der ISA erreicht Vergleicht man dies mit Abb 6.46, so ergibt
Trang 5Dabei ist i eine beliebige Instruktion aus dem Instruktionssatz des Prozessors Korrektheitsbeweis
Um zu zeigen, dass die Implementierung eines Prozessors ¨aquivalent zu dessen
Spe-zifikation ist, muss gezeigt werden, dass fimpl(q,i) und fspec(s,i) ¨aquivalent f¨ur ein
beliebiges Paar ¨aquivalenter Zust¨ande(q,s) und eine beliebige Instruktion i sind
(siehe Gleichung (6.11)) Beide Funktionen k¨onnen jeweils als Vektor symbolischerAusdr¨ucke repr¨asentiert werden Jedes Element eines Vektors entspricht dabei ei-ner f¨ur den Programmierer sichtbaren Zustandsvariablen Die Ausdr¨ucke k¨onnennacheinander z B durch symbolische Simulation der Spezifikation bzw der Imple-mentierung gewonnen werden Dabei muss die Implementierung mehrfach stimuliertwerden, um das Flushing der Pipeline zu simulieren
Seien(q1, ,q n ) und (s1, ,s n) Vektoren von Ausdr¨ucken Um die ¨Aquivalenz
der Funktionen fimplund fspeczu zeigen, muss die Gleichheit der Ausdr¨ucke q kund
s k f¨ur alle k gezeigt werden, d h ∀1 ≤ k ≤ n : q k = s kgelten
Zur Abstraktion vom Datenpfad des Prozessors werden die Ausdr¨ucke q k und
s k mit Hilfe der Theorie
”Gleichheit und Uninterpretierte Funktionen“(engl
Equa-lity with Uninterpreted Functions, EUF) gebildet In EUF werden Funktionen nicht ausgewertet, sondern lediglich durch Funktionssymbole repr¨asentiert Die einzige
Annahme, die ¨uber Funktionen in EUF getroffen wird, lautet:
(x1= y1) ∧ (x2= y2) ⇒ f (x1,x2) = f (y1,y2)
Dies bedeutet, dass Funktionen, die durch das selbe Funktionssymbol f
repr¨asen-tiert werden, und die mit ¨aquivalenten Argumenten aufgerufen werden, das gleicheErgebnis liefern
Beispiel 6.3.3 Betrachtet wird der Prozessor aus Beispiel 6.3.2 in Abb 6.45 Die
Einheit zum Inkrement des PC, der Addierer zur Berechnung von Sprungzielen und
die ALU k¨onnen jeweils durch die Funktionssymbole finc, faddbzw faluabstrahiert
werden Ebenfalls kann der Instruktionsspeicher durch ein Funktionssymbol fimpr¨asentiert werden, da dieser niemals modifiziert wird Dies ist in Abb 6.48 zu sehen
re-EUF kann durch die folgende Syntax repr¨asentiert werden:
Trang 6read data 1
data 2
data Memory Data read
register 2 write register
read register 1
address Register File
data
Abb 6.48 Mikroarchitektur des Prozessors aus Abb 6.45 mit Funktionssymbolen
term :: = ITE( f ormula,term,term)
| f unction symbol(term, ,term)
f ormula :: = F | T | ¬ f ormula
| ( f ormula ∧ f ormula) | ( f ormula ∨ f ormula)
| (term = term) | predicate symbol(term, ,term)
In EUF tragen Formeln ( f ormula) entweder den Wert F (falsch) oder T (wahr)
Ter-me (term) k¨onnen beliebige Werte tragen und werden aus uninterpretierten tionssymbolen und der Anwendung des ITE-Operators (engl if-then-else) gebildet.
Funk-Der ITE-Operator w¨ahlt dabei zwischen zwei Termen aus, basierend auf dem Werteiner Steuerungsvariablen, d h ITE(F,x1,x2) ergibt x2, w¨ahrend ITE(T,x1,x2) das
Ergebnis x1liefert
Formeln werden gebildet, indem zwei Terme auf Gleichheit ¨uberpr¨uft, ein interpretiertes Pr¨adikatensymbol (predicate symbol) auf eine Liste von Termen an-
un-gewendet, oder Formeln mit Hilfe aussagenlogischer Operatoren (∧,∨) verkn¨upft
werden Eine Formel, die zwei Terme auf Gleichheit ¨uberpr¨uft, wird als Gleichung bezeichnet Der Begriff Ausdruck bezeichnet im Folgenden sowohl Terme als auch
Formeln
Zu jedem Funktionssymbol f gibt es eine sog Ordnung ord ( f ), welche die
An-zahl der Argumente angibt Funktionssymbole mit Ordnung null werden als
Varia-blen betrachtet In diesem Fall wird anstatt von v () auch die kurze Schreibweise v
verwendet Ebenfalls besitzen Pr¨adikatensymbole p eine Ordnung ord (p)
Pr¨adika-tensymbole der Ordnung null werden als aussagenlogische Variablen bezeichnet In
diesem Fall wird a anstelle von a() geschrieben
Trang 7Der Wahrheitsgehalt einer Formel wird relativ zu einer nichtleeren mengeD und einer Interpretation I der Funktions- und Pr¨adikatensymbole definiert.
Definitions-Eine InterpretationI weist jedem Funktionssymbol der Ordnung k eine Funktion von
{F,T} zu Im Sonderfall der Ordnung null wird dem Funktionssymbol
(Pr¨adikaten-symbol) eine Variable aus der Definitionsmenge (der Menge{F,T}) zugewiesen.
Gegeben sei eine InterpretationI sowie ein Ausdruck E Die Bewertung von E
unter der InterpretationI, geschrieben als I[E], kann rekursiv entsprechend
Tabel-le 6.5 erfolgen
Tabelle 6.5 Bewertung von EUF Formeln und Termen [67]
Ausdruck E BewertungI[E]
FallsI[F] = T gilt, so sagt man, dass die Formel F unter der Interpretation I
g¨ultig ist Eine Formel ist g¨ultig in der Dom¨aneD, falls sie f¨ur alle Interpretationen
¨uberD g¨ultig ist Schließlich heißt die Formel F allgemeing¨ultig, falls sie ¨uber
al-le DefinitionsbereicheD g¨ultig ist Es ist bekannt, dass eine gegebene Formel ¨uber
dem DefinitionsbereichD g¨ultig ist, genau dann, wenn sie ¨uber alle anderen
Defini-tionsbereichen mit der selben Kardinalit¨at g¨ultig ist Weiterhin gilt, dass wenn einegegebene Formel f¨ur eine angemessen große Definitionsmenge g¨ultig ist, so ist sieallgemeing¨ultig [2]
Reduktion von EUF auf Aussagenlogik
Eine M¨oglichkeit EUF-Formeln auf ihre G¨ultigkeit zu ¨uberpr¨ufen besteht darin,die EUF-Formeln auf aussagenlogische Formeln zu reduzieren Hierzu m¨ussen dieFunktions- und Pr¨adikatensymbole eliminiert werden Grundlegende Arbeiten zurElimination von Funktionssymbolen mit Ordnung eins und h¨oher sind in [2] zu fin-den Dabei wird jeder Term, der eine Anwendung eines Funktionssymbol beinhaltet,durch eine neue Definitionsbereichsvariable ersetzt und zus¨atzlich Beschr¨ankungen
zu der Formel hinzugef¨ugt, um funktionale Konsistenz zu erreichen
Ein alternativer Ansatz ist in [67] beschrieben, bei dem jede Anwendung einesFunktionssymbols durch einen ITE-Operator ersetzt wird Die Idee dabei ist, dass
¨uber alle Funktions- und Pr¨adikatensymbole mit Ordnung eins oder h¨oher iteriertwird, und dabei jedes Auftreten des Symbols durch eine ITE-Operation eliminiertwird Ohne den Algorithmus aus [67] zu wiederholen, wird das Prinzip anhand einesBeispiels demonstriert
Trang 8Beispiel 6.3.4 Gegeben ist die EUF-Formel:
Schematisch l¨asst sich Gleichung (6.12) wie in Abb 6.49 dargestellt ren Definitionsbereichsvariablen werden dabei als Eing¨ange dargestellt Werte desDefinitionsbereichs werden als durchgezogene Linien dargestellt AussagenlogischeVariablen werden als gestrichelte Linien gezeichnet Der Ausgang repr¨asentiert diegesamte EUF-Formel
∨
= h
Abb 6.49 Schematische Repr¨asentation von Gleichung (6.12) [67]
Um die Funktionssymbole in Gleichung (6.12) durch ITE-Operationen zu zen, m¨ussen die Funktionssymbole nacheinander betrachtet werden Zun¨achst wirddas Funktionssymbol g betrachtet Insgesamt wird dieses in drei Termen in Glei-chung (6.12) verwendet: g(x), g(y) und g(g(x)) Diese drei Terme werden durch die
erset-Bezeichner T1, T2 und T3 identifiziert Weiterhin werden drei neue
Definitionsbe-reichsvariablen v g1 , v g2 und v g3 eingef¨uhrt Der Term T1ergibt sich dann wie folgt:
Dies bedeutet, dass die Anwendung des Funktionssymbols g auf das Argument x mit einer neuen Variablen v g1repr¨asentiert wird Die Anwendung des Funktionssymbols
g auf das Argument y kann auf ¨ahnliche Art durch die Variable v g2 repr¨asentiert
werden Allerdings kann man an dieser Stelle bereits den Sonderfall x = y mit g(x) =
g(y) ber¨ucksichtigen Dies ergibt die folgende Definition des Terms T2:
Schließlich wird der Term T3, der den Ausdruck g(g(x)) repr¨asentiert,
betrach-tet An dieser Stelle muss die Variable v g1, die den Ausdruck g(x) repr¨asentiert,
wie-derverwendet werden Im Allgemeinen m¨ussen verschachtelte Anwendungen vonFunktionssymbolen stets von Innen nach Außen aufgel¨ost werden Wie im Fall von
Trang 9T2in Gleichung (6.14), muss bei T3eine Fallunterscheidung vorgenommen werden.Diese ist aber geschachtelt:
T3:= ITE(v g1 = x,v g1 ,ITE(v g1 = y,v g2 ,v g3)) (6.15)Mit anderen Worten: Ist der Funktionswert von g(x) = x, so muss der Funktionswert
von g(g(x)) ebenfalls x sein Falls dies nicht zutrifft, der Funktionswert von g(x)
aber gleich y ist, so muss das Ergebnis von g (g(x)) = g(y) sein Dies wurde bereits
in Gleichung (6.14) definiert Mit der Nebenbedingung, dass g(x) = x ist, ergibt dies
v g2 In allen anderen F¨allen k¨onnen keine weiteren Annahmen ¨uber den
Funktions-wert f¨ur den Term T3getroffen werden, d h der Funktionswert wird durch eine neue
Variable v g3repr¨asentiert
Schematisch l¨asst sich die Elimination des Funktionssymbols g durch Operationen in dem DAG aus Abb 6.49 einzeichnen Verwendet man zur Re-pr¨asentation des ITE-Operators Multiplexer, so kommt man zu der Darstellung in
ITE-Abb 6.50a) Man beachte, dass ¨uber die Variablen v g1 , v g2 und v g3keinerlei men getroffen wurden, weshalb die Reduktion allgemeing¨ultig ist
Annah-Die Elimination des Funktionssymbols h erfolgt analog mit Hilfe der
Definiti-onsbereichsvariablen v h1 und v h2 Dabei wird die erste Anwendung des
Funktions-symbols durch die Variable v h1ersetzt und die zweite Anwendung durch eine Operation, welche die Argumente der beiden Funktionsaufrufe vergleicht Falls dieseidentisch sind, m¨ussen auch die Funktionswerte identisch sein Andernfalls muss der
ITE-neue (unbekannte) Funktionswert durch eine ITE-neue Variable v h2repr¨asentiert werden.Das Ergebnis ist in Abb 6.50b) zu sehen
Nach der Elimination von Funktions- und Pr¨adikatensymbolen m¨ussen die finitionsbereichsvariablen noch geeignet codiert werden, um zu einer aussagenlogi-schen Formel zu gelangen Dies wird hier nicht weiter betrachtet
De-Effiziente Speichermodellierung
Bei der Prozessorverifikation m¨ussen typischerweise Speicherzugriffe ber¨ucksichtigtwerden Der Adressraum wird dabei als unendlich angenommen Kann die ¨Aqui-valenz unter dieser Annahme gezeigt werden, so gilt diese auch unter der Annah-
me eines endlichen Speichers (Registersatz und Hauptspeicher) Mit der oben schriebenen Theorie zur
be-”Gleichheit und uninterpretierte Funktionen“ lassen sichunter bestimmten Konventionen Speicherzugriffe modellieren Dies erfolgt durch ei-
ne Verschachtelung von ITE-Operatoren zur Repr¨asentation von Lesezugriffen aufden Speicher In dieser Verschachtelung ist die Historie aller Schreibzugriffe erfasst,
d h nach k Schreiboperationen an die Adressen a1, ,a k mit den Daten d1, ,d k kann der Effekt einer Leseoperation auf Adresse a wie folgt modelliert werden:
ITE(a = a k ,d k ,ITE(a = a k −1,d k −1, ,ITE(a = a1,d1, finit(a)) ))
Dabei beschreibt finit(a) eine uninterpretierte Funktion, die den Anfangswert an der
Adresse a repr¨asentiert.
Trang 10T F T F
T F
T F
T F
Abb 6.50 Elimination des a) Funktionssymbols g und b) des Funktionssymbols h [67]
Oftmals ist es jedoch effektiver zwei spezielle Funktionen freadund fwritezu
ver-wenden Die Funktion fwrite(mem,addr,val) besitzt drei Argumente: den
momenta-nen Speicherinhalt mem, die Schreibadresse addr und das Datum val Sie gibt den aktualisierten Speicherinhalt zur¨uck Die Funktion fread(mem,addr) besitzt zwei Ar-
gumente: den Speicherinhalt mem und die Leseadresse addr Die Funktion gibt den
an der Adresse addr gespeicherten Wert zur¨uck, wobei die folgende Konvention
ein-gehalten wird:
fread( fwrite(mem,addr1,val),addr2) =
fread(mem,addr2) sonst
Einen anderen Ansatz verfolgen Bryant und Velev durch die Einf¨uhrung eineseffizienten Speichermodells [68] (siehe auch Abschnitt 6.4.2) F¨ur die symbolische
Trang 11Simulation des Speichermodells werden drei Dom¨anen von Ausdr¨ucken den:
unterschie-• Bedingungsausdr¨ucke: Ausdr¨ucke aus dieser Dom¨ane evaluieren zu F oder T.
Sie werden verwendet, um Bedingungen zu repr¨asentieren
• Adressausdr¨ucke: Ausdr¨ucke aus dieser Dom¨ane repr¨asentieren Adressen
Adres-sen k¨onnen als Bitvektoren codiert werden, wobei im Folgenden davon
ausge-gangen wird, dass diese aus n Bit bestehen.
• Datenausdr¨ucke: Ausdr¨ucke aus dieser Dom¨ane repr¨asentieren Daten Daten
k¨onnen ebenfalls als Bitvektoren codiert werden Im Folgenden haben die
Bit-vektoren die Breite w.
In jeder Dom¨ane werden symbolische Variablen eingef¨uhrt, die verwendet den, um Ausdr¨ucke in diesen Dom¨anen zu bilden Weiterhin wird im Folgenden der
wer-Begriff Kontext f¨ur eine Belegung dieser symbolischen Variablen mit Werten
ver-wendet
Beispiel 6.3.5 Gegeben sind zwei Adressen a1und a2aus der Dom¨ane der
Adress-ausdr¨ucke Beide Adressen k¨onnen durch Bitvektoren der L¨ange n repr¨asentiert den, d h a1:= (a11, ,a 1n ) und a2:= (a21, ,a 2n) Der Vergleich der beiden
wer-Adressen kann wie folgt durchgef¨uhrt werden:
sen, welche die selbe Anzahl an Adress- (n) und Datenbits (w) verwenden Dies ist
in Abb 6.51 zu sehen Das Modell ist ¨aquivalent zu dem Speichermodell aus schnitt 6.4.2, erweitert auf mehrere Lese- und Schreibports
Ab-Bei der symbolischen Simulation wird davon ausgegangen, dass die Lese- undSchreibzugriffe auf der steigenden Flanke des enable-Signals stattfinden Solltenmehrere Ports gleichzeitig auf den Speicher zugreifen, werden die Zugriffe in derReihenfolge der Priorit¨aten der Ports durchgef¨uhrt
Die Repr¨asentation des Speichers erfolgt w¨ahrend der Simulation durch eine
ge-ordnete Liste, wobei der Anfang der Liste head die niedrigste, das Ende tail die
h¨ochste Priorit¨at besitzt Die Eintr¨age der Liste haben die Form(c,a,d), wobei c ein
Bedingungsausdruck, a ein Adressausdruck und d ein Datenausdruck ist Der sche Ausdruck c wird f¨ur konditionale Speicherzugriffe verwendet, wobei die Lese-
Trang 12n
addr enable data
Write Port 0
w
n
addr enable
Adress-Bei einer steigenden Flanke des enable-Signals an einem Speicherport wird
zun¨achst die Bedingung c evaluiert Nur wenn diese nicht den konstanten
Boole-schen WertF darstellt, wird der entsprechende Speicherzugriff durchgef¨uhrt Ist die
Bedingung ungleichF, wird der Adressausdruck a und der Datenausdruck d
gele-sen Ein Schreibzugriff resultiert dabei im Einf¨ugen eines neuen Eintrags(c,a,d) in
die Liste Ein Lesezugriff gibt den zugeh¨origen gespeicherten Datenausdruck rd im Falle, dass c = F ist, zur¨uck Andernfalls wird der eingelesene Datenwert d nicht
ver¨andert, d h d : = ITE(c,rd,d) Dieser Ausdruck wird auf den Datenleitungen
des entsprechenden Leseports ausgegeben und kann in der weiteren symbolischenSimulation verwendet werden
Die Priorit¨aten in der Liste k¨onnen intuitiv so interpretiert werden, dass derpriore Eintrage weiter in der Vergangenheit liegen, w¨ahrend h¨oherpriore Ein-tr¨age k¨urzlich vorgenommene ¨Anderungen des Speichers darstellen Neue Eintr¨agek¨onnen aber dennoch am Anfang (PUSH FRONT) oder am Ende (PUSH BACK)der Liste eingef¨ugt werden Schreibzugriffe k¨onnen dann in Form der folgendenWRITE-Funktion erfolgen:
cher¨anderung an der Adresse a in der Vergangenheit gab Wenn dieser alte Wert unter keinen anderen Bedingungen als c gelesen werden kann (ec ⇒ c), kann die
Speicherstelle mit dem neuen Wert ¨uberschrieben werden Dies bedeutet, der alteEintrag kann gel¨oscht werden
Trang 13Die Schreiboperation READ erh¨alt als Argumente die Liste, die den Speicher
repr¨asentiert, einen Bedingungsausdruck c, einen Adressausdruck a und einen tenausdruck d READ gibt einen Datenausdruck zur¨uck.
im-READ WITH DEFAULT(list, c, a, d) {
rd := d;
f ound :=F;
FOREACH(ec,ea,ed) ∈ list
match := (ec ∧ (a = ea));
Die Funktion READ WITH DEFAULT durchl¨auft die Liste list, die einen
Spei-cher repr¨asentiert, vom Anfang bis zum Ende So ¨uberschreiben aktuellere Werte die
¨alteren Die Variable f ound zeigt dabei an, ob ein Eintrag gefunden wurde Ist dies
nicht der Fall, so wird der generierte Initialwert am Anfang (niederprior) der Listeeingetragen
Vergleich der Speicherzugriffe
F¨ur die ¨Aquivalenzpr¨ufung des Prozessors mit der ISA, ist es notwendig zu chen, ob beide Modelle zu dem selben Speicherinhalt nach Ausf¨uhrung der symbo-lischen Simulation gelangen, wenn sie mit dem selben Speicherinhalt gestartet wur-den Die Inhalte zweier Speichermodelle, wie sie oben beschrieben sind, lassen sichmit der Funktion COMPARE vergleichen Bei dem Vergleich der beiden Speicher-modelle wird dabei ausgenutzt, dass nur ein kleiner Teil des Speichers tats¨achlichver¨andert wurde COMPARE gibtT zur¨uck, f¨ur den Fall, dass die beiden Speicher
verglei-den selben Inhalt besitzen, andernfallsF
Trang 14d1 := READ WITH DEFAULT(mem1, ec, ea, g);
d2 := READ WITH DEFAULT(mem2, ec, ea, g);
same := same ∧ (d1 = d2);
tested : = tested ∪ {ea};
FOREACH(ec,ea,ed) ∈ mem2
IF (ea /∈ tested)
g := GENERATE DEXPR();
d1 := READ WITH DEFAULT(mem1, ec, ea, g);
d2 := READ WITH DEFAULT(mem2, ec, ea, g);
sicher-wenden Hierf¨ur kann beispielsweise ein sog Schattenspeicher eingesetzt werden.
Dieser speichert alle Initialwerte f¨ur beide Simulationen Jede Simulation fragt dannzun¨achst den Schattenspeicher ab, ob bereits ein Initialwert erzeugt wurde Falls ja,wird dieser verwendet, andernfalls wird ein neuer Initialwert berechnet und im Schat-tenspeicher gespeichert Dies kann z B durch die Funktion SHADOW READ, wel-
che die Funktion READ ersetzt, erfolgen Dabei ist shadow der Schattenspeicher und mem das von jeweiligen Simulation verwendete Speichermodell.
SHADOW READ(mem, shadow, c, a, d) {
g := GENERATE DEXPR();
READ WITH DEFAULT(shadow, c, a, g);
RETURN READ WITH DEFAULT(mem, c, a, g);
}
¨
Aquivalenzpr¨ufung
Auf Basis der Schattenspeicher kann die ¨Aquivalenzpr¨ufung nach Gleichung (6.11)
in neun Schritten erfolgen:
1 Lade das Modell der Mikroarchitektur und erzeuge f¨ur jeden Speicher ein chermodell und ein Modell des Schattenspeichers
Spei-2 Simuliere symbolisch einen Schritt der Ausf¨uhrung einer Instruktion
3 F¨uhre ein Flushing der Pipeline durch
Trang 154 Tausche jedes Speichermodell mit dem zugeh¨origen Schattenspeichermodell
5 F¨uhre ein Flushing der Pipeline durch
6 Tausche die Mikroarchitektur des Prozessors mit der sequentiellen ISA, wobeif¨ur alle Speichermodelle f¨ur Programmierer sichtbare Speicher erhalten bleiben
7 Simuliere symbolisch die Ausf¨uhrung der selben Instruktion auf der ISA wie inSchritt 2
8 Vergleiche das Speichermodell mem i mit dem Modell des Schattenspeichers
shadow i f¨ur jeden der 1≤ i ≤ u f¨ur den Programmierer sichtbaren Speicher,
d h
equal i:= COMPARE(mem i ,shadow i)
9 Forme einen Booleschen Ausdruck f¨ur die ¨Aquivalenzbedingung:
wobei legal instruction ein Boolescher Ausdruck f¨ur die verwendete
symboli-sche Instruktion ist
Repr¨asentation von Funktionseinheiten durch Speichermodelle
Das oben vorgestellte Speichermodell eignet sich ebenfalls, um Funktionseinheitendes Prozessors zu modellieren Dies erfolgt mit Hilfe von Modellen f¨ur Nur-Lese-Speichern, welche einen einzelnen Leseport besitzen und permanent aktiviert (enable
=T) sind Der Adressausdruck f¨ur das Speichermodell wird aus den Operanden und
den Steuerungssignalen gebildet Der Datenausdruck stellt das Ergebnis der nung dar
Berech-Beispiel 6.3.6 Abbildung 6.52a) zeigt als Berech-Beispiel einer Funktionseinheit eine ALU.
Die Abstraktion als Speichermodell ist in Abb 6.52b) zu sehen Der Adressausdruckwird dabei aus den Operanden (Op1 und Op2) und den Steuerungssignalen (Ctrl)gebildet
Res
Res
Abb 6.52 a) ALU und b) Abstraktion als Speichermodell