6.44 muss zun¨achst die Berechnung einer Instruktion ab-geschlossen sein, bevor mit Hilfe des PC eine neue Instruktion geladen wird.. Die Instruktionssatzarchitektur beschreibt, wie sich
Trang 1bestimmt Alternativ kann ein Operand auch direkt als Konstante in der Instruktion gespeichert sein
In der ALU wird anschließend die durch der Instruktion codierte Operation be-rechnet Das berechnete Ergebnis der ALU kann entweder als Adresse zum Laden oder 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
Die Instruktionssatzarchitektur des Prozessors ist durch die Operationen der ALU (typischerweise Addition, Subtraktion und logische Vergleiche), den Lade-und Speicherbefehlen Lade-und den implementierten Sprungbefehlen gegeben Auf der Mikroarchitektur 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 Verifikation als 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 Instruktions-durchsatz des Prozessors zu erh¨ohen
Mit der zunehmenden Komplexit¨at von Prozessoren werden zuverl¨assige Veri-fikationsans¨atze ben¨otigt, die es erlauben, die ¨Aquivalenz von ISA und optimierter Mikroarchitektur zu beweisen Im Folgenden werden einige wichtige Ans¨atze zur
¨
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, Mikroar-chitekturen mit Ausnahmebehandlung und MikroarMikroar-chitekturen mit
Sprungvorhersa-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 funktio-nalen Modell des Prozessors, wie er von einem Programmierer gesehen wird, d h
die einzelnen Instruktionen sind in der sog Instruktionssatzarchitektur
zusammen-gefasst Es handelt sich hierbei um eine Beschreibung, der die Ausf¨uhrung von In-struktionen einzeln und nacheinander zugrunde liegt
Die Prozessorimplementierung muss allerdings nicht zwangsl¨aufig alle Instruk-tionen sequenziell ausf¨uhren Es ist denkbar und g¨angige Praxis, dass die Ausf¨uhrung
Trang 2von Instruktionen verschr¨ankt erfolgt Dies wird mit Hilfe einer sog Fließbandver-arbeitung realisiert.
Beispiel 6.3.2 Betrachtet wird der Prozessor aus Beispiel 6.3.1 in Abb 6.44
Ei-ne Mikroarchitektur, die eiEi-ne f¨unfstufige PipeliEi-ne implementiert ist in Abb 6.45 zu sehen 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 halber wurde 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
4
Register File
write data
write data
Abb 6.45 Mikroarchitektur mit f¨unfstufiger Pipeline des Prozessors aus Abb 6.44 [355]
Die Aufgabe einer formalen ¨Aquivalenzpr¨ufung zwischen Instruktionssatzarchi-tektur und Prozessorimplementierung ist, zu zeigen, dass beide die selben Ergebnisse berechnen Dies unterscheidet sich von der ¨Aquivalenzpr¨ufung f¨ur endliche Automa-ten, da die Mikroarchitektur mit Fließbandverarbeitung mehr Zust¨ande besitzt als die sequentielle Instruktionssatzarchitektur Deshalb ist es notwendig, beide Architektu-ren lediglich bez¨uglich des f¨ur den Programmierer sichtbaArchitektu-ren Zustands zu
verglei-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 der Steuerungseinheit 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 Berechnungen durchf¨uhrt), fehlerfrei ist Zur Abstraktion des Datenpfads f¨uhren Burch und Dill die Theorie der
”Gleichheit und uninterpretierte Funktionen“ (engl Equality and
Uninterpreted Functions, EUF) ein [75].
Korrektheitskriterium
Der Verifikationsprozess geht von einer Verhaltensbeschreibung in der Spezifika-tion (InstrukSpezifika-tionssatzarchitektur) und einer Strukturbeschreibung der Implementie-rung (Mikroarchitektur) aus Die Instruktionssatzarchitektur beschreibt, wie sich der f¨ur den Programmierer sichtbare Zustand des Prozessors durch die Ausf¨uhrung einer Instruktion ¨andert Dies kann durch eine sequentielle Mikroarchitektur mit
Zustands-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 ¨uberset-zen Beide ¨Ubergangsfunktionen erhalten als erstes Argument den aktuellen Zustand und als zweites Argument die momentane Eingabe (Instruktion) Die R¨uckgabewert der Funktionen ist der Folgezustand, d h
fspec: Su× I → Su,
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 der Spezifikation und Implementierung, die Ausf¨uhrung einer beliebigen Instruktion zu dem 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 Abstraktion von dem momentanen Zustand der Mikroarchitektur (Prozessorzustand) auf den f¨ur den Programmierer sichtbaren Zustand durch die Funktion abs :(Su× Sp) → Su be-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 Weiterverarbeitung von Instruktionen in der Pipeline erlauben, ohne dass neue Instruktionen initiiert
Trang 4fimpl(q,i)
q
s
Abstraktion Abstraktion
Abb 6.46 Kommutatives Diagramm zur Visualisierung der ¨Aquivalenzpr¨ufung von Prozes-soren [451]
werden Eine solche spezielle Instruktion istall wird als engl stalling bezeich-net, d h fimpl(q,istall) berechnet den Folgezustand des Prozessors bei einmaliger
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
Diagramm in Abb 6.47
s
s
fimpl(q,i)
q
q
fspec(s,i)
fimpl(q
n −1,istall ) proj(q
n)
fimpl(q n −1,istall ) proj(q n)
fimpl(q,istall ) 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 sicht-baren Zustand zu extrahieren, wird zun¨achst ein Flushing der Pipeline durchgef¨uhrt.
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 5abs(su,sp) := proj( fimpl+ ((su,sp), i stall, ,istall))
wobei l die Anzahl der Pipeline-Stufen und fimpl+ die erweiterte ¨Ubergangsfunktion f¨ur die Implementierung nach Gleichung (4.3) auf Seite 142 ist Hiermit kann das Korrektheitskriterium nach Abb 6.46 wie folgt definiert werden:
∀su,sp,i : abs( fimpl(su,sp,i)) ≡ f? spec(abs(su,sp),i) (6.11)
Dabei 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 symbolischer Ausdr¨ucke repr¨asentiert werden Jedes Element eines Vektors entspricht dabei ei-ner f¨ur den Programmierer sichtbaren Zustandsvariablen Die Ausdr¨ucke k¨onnen nacheinander z B durch symbolische Simulation der Spezifikation bzw der Imple-mentierung gewonnen werden Dabei muss die ImpleImple-mentierung mehrfach stimuliert werden, 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 gleiche Ergebnis 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 fim re-pr¨asentiert werden, da dieser niemals modifiziert wird Dies ist in Abb 6.48 zu sehen
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
finc
fadd
falu
fim
write data write
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 Funk-tionssymbolen und der Anwendung des ITE-Operators (engl if-then-else) gebildet.
Der ITE-Operator w¨ahlt dabei zwischen zwei Termen aus, basierend auf dem Wert einer 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 un-interpretiertes Pr¨adikatensymbol (predicate symbol) auf eine Liste von Termen
an-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 Definitions-mengeD und einer Interpretation I der Funktions- und Pr¨adikatensymbole definiert.
Eine InterpretationI weist jedem Funktionssymbol der Ordnung k eine Funktion von
D knachD und jedem Pr¨adikatensymbol der Ordnung k eine Funktion von D knach
{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]
F1∧ F2 I[F1] ∧ I[F2]
T1= T2 I[T1] = I[T2]
ITE(F,T1,T2) ITE(I[F],I[T1],I[T2])
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 eine gegebene Formel f¨ur eine angemessen große Definitionsmenge g¨ultig ist, so ist sie allgemeing¨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 die Funktions- und Pr¨adikatensymbole eliminiert werden Grundlegende Arbeiten zur Elimination 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 eines Funktionssymbols durch einen ITE-Operator ersetzt wird Die Idee dabei ist, dass
¨uber alle Funktions- und Pr¨adikatensymbole mit Ordnung eins oder h¨oher iteriert wird, und dabei jedes Auftreten des Symbols durch eine ITE-Operation eliminiert wird Ohne den Algorithmus aus [67] zu wiederholen, wird das Prinzip anhand eines Beispiels demonstriert
Trang 8Beispiel 6.3.4 Gegeben ist die EUF-Formel:
¬(x = y) ∨ (h(g(x),g(g(x))) = h(g(y),g(g(x)))) (6.12) Schematisch l¨asst sich Gleichung (6.12) wie in Abb 6.49 dargestellt repr¨asentie-ren Definitionsbereichsvariablen werden dabei als Eing¨ange dargestellt Werte des Definitionsbereichs werden als durchgezogene Linien dargestellt Aussagenlogische Variablen werden als gestrichelte Linien gezeichnet Der Ausgang repr¨asentiert die gesamte EUF-Formel
∨
= h
h
¬
=
g
g g
Abb 6.49 Schematische Repr¨asentation von Gleichung (6.12) [67]
Um die Funktionssymbole in Gleichung (6.12) durch ITE-Operationen zu erset-zen, m¨ussen die Funktionssymbole nacheinander betrachtet werden Zun¨achst wird das 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
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 von Funktionssymbolen 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:
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 ITE-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
Abb 6.50a) Man beachte, dass ¨uber die Variablen v g1 , v g2 und v g3keinerlei Annah-men getroffen wurden, weshalb die Reduktion allgemeing¨ultig ist
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 ITE-Operation, welche die Argumente der beiden Funktionsaufrufe vergleicht Falls diese identisch sind, m¨ussen auch die Funktionswerte identisch sein Andernfalls muss der
neue (unbekannte) Funktionswert durch eine 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 De-finitionsbereichsvariablen noch geeignet codiert werden, um zu einer aussagenlogi-schen Formel zu gelangen Dies wird hier nicht weiter betrachtet
Effiziente Speichermodellierung
Bei der Prozessorverifikation m¨ussen typischerweise Speicherzugriffe ber¨ucksichtigt werden 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 be-schriebenen Theorie zur
”Gleichheit und uninterpretierte Funktionen“ lassen sich unter bestimmten Konventionen Speicherzugriffe modellieren Dies erfolgt durch
ei-ne Verschachtelung von ITE-Operatoren zur Repr¨asentation von Lesezugriffen auf den 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 10b)
v g1
=
=
=
=
=
=
T F
T F T F
T F
T F
T F
¬
¬
=
=
h
h
∧
T F
=
=
∨
∨
v g3
v g2 y
x
x y v g1 v g2
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 eines effizienten Speichermodells [68] (siehe auch Abschnitt 6.4.2) F¨ur die symbolische