Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 20 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
20
Dung lượng
233,46 KB
Nội dung
6.4 Funktionale Eigenschaftspr ¨ ufung 333 ≥ 1 & ≥ 1 & ≥ 1 & 1 & token in override in grant out grant in token out req in ack out override out b) a) F override out grant intoken in grant outoverride intoken out req in ack out override out grant intoken in grant outoverride intoken out req in ack out override out grant intoken in grant outoverride intoken out req in ack outCell 0 Cell n − 1 Cell 1 req 0 req 1 req n−1 ack n−1 ack 0 ack 1 W T Abb. 6.71. Ein skalierbarer Arbitrierer [206] G (ack i ⇒ req i ) 3. Lebendigkeit: Jede Anforderung wird innerhalb von 2n Zeitschritten durch Si- gnal ack i best ¨ atigt: G (req i ⇒ F [0,2n−1] ack i ) F ¨ ur die letzte Eigenschaft wurde das zu ber ¨ ucksichtigende Zeitintervall ([0, 2n − 1]) an den Operator F annotiert. Diese Erweiterung beschr ¨ ankt die G ¨ ultigkeit des Opera- tors auf das gegebene Zeitintervall. Weiterhin l ¨ asst sich die Lebendigkeitseigenschaft in der Form G (req i ⇒ F [0,2n−1] ack i ) nicht beweisen. Hierzu ist es notwendig, eine Annahme ¨ uber die Umgebung zu treffen [206]: Ein Signal req i muss solange auf T gehalten werden, bis die zugeh ¨ orige Best ¨ atigung durch Signal ack i erfolgte. Somit 334 6 Hardware-Verifikation ergibt sich als Lebendigkeitseigenschaft: G G [0,2n−1] (req i ⇒ (¬ack i ⇒ X req i )) ⇒ (req i ⇒ F [0,2n−1] ack i ) Der Operator G gilt entsprechend dem erweiterten Operator F hier nur f ¨ ur das gege- bene Zeitintervall. Große und Drechsler berichten in [206] die Anzahl erreichbarer Zust ¨ ande des skalierbaren Arbitrierers. Diese sind in Tabelle 6.6 dargestellt. Tabelle 6.6. Anzahl erreichbarer Zust ¨ ande des skalierbarer Arbitrierers [206] Zellen Zust ¨ ande Zellen Zust ¨ ande Zellen Zust ¨ ande Zellen Zust ¨ ande 2 8 6 384 10 10.240 50 5, 63 · 10 16 3 24 7 896 11 22.528 100 1, 27 · 10 32 4 64 8 2.048 12 49.152 150 2, 14 · 10 47 5 160 9 4.608 20 2, 10 · 10 7 200 3, 21 · 10 62 Schaltungen auf der Logikebene erlauben eine direkte ¨ Ubersetzung in endliche Automaten, die sich symbolisch repr ¨ asentieren lassen. Somit l ¨ asst sich die in Ab- schnitt 5.3.2 beschriebene SAT-basierte Modellpr ¨ ufung auch direkt auf Schaltungen auf der Logikebene anwenden. Im Folgenden werden daher lediglich einige Beson- derheiten bei der formalen Modellpr ¨ ufung von Hardware betrachtet. SAT-basierte Modellpr ¨ ufung bei mehreren Taktdom ¨ anen Typische eingebettete Computersysteme, sogar wenn auf einem einzelnen Chip integriert, verf ¨ ugen ¨ uber mehrere sog. Taktdom ¨ anen. Der Grund liegt hierf ¨ ur in der gleichzeitigen Optimierung des Durchsatzes und der Leistungsaufnahme eines Chips. Durch die Verwendung vieler unterschiedlicher Taktsignale k ¨ onnen einzelne Bereiche auf dem Chip besonders schnell arbeiten oder besonders verlustleistungs- effizient. Dies kann auch bedeuten, dass das Taktsignal f ¨ ur manche Bereiche tem- por ¨ ar sogar ganz abgeschaltet wird (engl. clock gating), um die Schaltaktivit ¨ at zu minimieren. Die Verwendung mehrerer Taktdom ¨ anen resultiert allerdings in einen gesteigerten Aufwand in der Verifikation. Formale Modellpr ¨ ufungsverfahren sind f ¨ ur synchrone Systeme mit einem ein- zigen Taktsignal entwickelt worden. Um die Modellpr ¨ ufungsverfahren dennoch f ¨ ur Systeme mit mehren Taktdom ¨ anen verwenden zu k ¨ onnen, m ¨ ussen die Systembe- schreibungen in ein ¨ aquivalentes System mit einer einzelnen Taktdom ¨ ane transfor- miert werden. Handelt es sich bei dem System um ein synchrones System mit meh- reren Taktdom ¨ anen mit verschiedenen, aber bekannten Frequenzen und bekannten Phasen, kann ein globales Taktsignal mit der Frequenz des kleinsten gemeinsamen Vielfachen aller Frequenzen verwendet werden. 6.4 Funktionale Eigenschaftspr ¨ ufung 335 Beispiel 6.4.6. In einer Schaltung werden zwei Taktsignale clk 1 und clk 2 mit Fre- quenzen 2MHz bzw. 3MH z ohne Phasenverschiebung eingesetzt. Dann wird ein globales Taktsignal clk global mit Frequenz 6MH z verwendet und mit dieser Taktrate das iterative Schaltungsmodell konstruiert. Allerdings ist das zweite, sechste, achte, zw ¨ olfte etc. Abrollen (negative Taktflanken mit betrachtet) unn ¨ otig, da weder Takt- signal clk 1 noch Taktsignal clk 2 zu diesen Zeitschritten schalten. Ein analoges Problem entsteht bei der ¨ Ubersetzung der funktionalen Eigenschaf- ten. Das folgende Beispiel stammt aus [174]: Beispiel 6.4.7. Die Property Specification Language (PSL) erlaubt die Verwendung mehrerer Taktsignale in der Spezifikation von Zusicherungen. Eine getaktete LTL- Formel in PSL, die von zwei Taktsignalen clk 1 und clk 2 abh ¨ angt, ist wie folgt gege- ben: eventually! p && (next q@(posedge clk 1 ))@(posedge clk 2 ); wobei p und q atomare Aussagen darstellen. Bei der Umwandlung in eine ungetak- tete LTL-Formel k ¨ onnen LTL-Formeln, die von mehreren Taktsignalen abh ¨ angen, stark anwachsen. Beispielsweise sieht obige Formel als ungetaktete LTL-Formel wie folgt aus: eventually! p && (!clk 2 until!(clk 2 && next (!clk 2 until! (clk 2 && (!clk 1 until! (clk 1 && q)))))); Im Folgenden werden synchrone Systeme mit mehreren Taktdom ¨ anen betrachtet. Ein Ansatz f ¨ ur Systeme mit asynchronen Taktdom ¨ anen ist i n [105] beschrieben. Beispiel 6.4.8. Betrachtet wird das synchrone System mit mehreren Taktdom ¨ anen aus Abb. 6.72a). FF 1 ist die Menge der Flip-Flops, die positiv taktflankengesteuert sind. FF 2 ist die Menge der Flip-Flops, die negativ taktflankengesteuert sind. Man beachte, dass die Flip-Flops in FF 1 an das Taktsignal clk 1 und die Flip-Flops in FF 2 am Taktsignal clk 2 angeschlossen sind. FF 3 ist ein pegelgesteuertes Flip-Flop. Die Bl ¨ ocke f 1 , , f 4 bezeichnen kombinatorische Logik. Signale i und o sind die prim ¨ aren Ein- bzw. Ausg ¨ ange. Das ¨ aquivalente synchrone System mit einem globalen Taktsignal clk global ist in Abb. 6.72b) dargestellt. Dieses System ist derart entworfen, dass alle ¨ Anderungen eines Eingangssignals, von internen Signalen oder Speicherelementen nur zusam- men mit ¨ Anderungen des Taktsignals clk global erfolgen. Um dies zu erreichen, wird vor jedes Flip-Flop ein Multiplexer geschaltet, der von einer Generatorschaltung g i f ¨ ur i = 1,2,3 angesteuert wird. Der Ausgang der Generatorschaltung g 1 nimmt den Wert T an, wenn eine positive Taktflanke von clk 1 detektiert wird. Der Ausgang der Generatorschaltung g 2 nimmt entsprechend den Wert T an, wenn eine negative Takt- flanke von clk 2 detektiert wird. Schließlich nimmt der Ausgang von g 3 den Wert T an, wenn die Funktion f 4 den Wert T besitzt. Die Flip-Flops werden ¨ uber das globale Taktsignal clk global gesteuert und sind sowohl positiv als auch negativ taktflankenge- steuert. 336 6 Hardware-Verifikation i clk 1 o clk 2 a) b) clk global i clk 1 o clk 2 F T FF TT f 1 f 2 FF 2 FF 1 f 3 FF 3 g 3 g 2 g 1 f 4 f 1 FF 3 f 4 f 2 FF 2 FF 1 f 3 Abb. 6.72. a) System mit mehreren Taktdom ¨ anen und b) ¨ aquivalentes System mit einem Takt- signal [174] Die Schaltung aus Abb. 6.72b) kann nun ¨ uber die Zeitschritte abgerollt werden. Hierzu muss allerdings zun ¨ achst das Signal clk global bestimmt werden. Im einfachs- ten Fall berechnet man das kleinste gemeinsame Vielfache der Frequenzen der Takt- signale clk 1 und clk 2 .Diesf ¨ uhrt allerdings, wie oben erl ¨ autert, zu unn ¨ otigen ¨ Uber- pr ¨ ufungen von Formeln, da keine Schaltaktivit ¨ at vorliegt. In einem alternativen Ansatz wird zun ¨ achst der sog. globale Taktzustand be- stimmt. Bei dem globalen Taktzustand handelt es sich hierbei um ein 3-Tupel S[i]=( τ [i],c 1 [i],c 2 [i]). Dabei bezeichnet i die Position des Ereignisses in der Rei- henfolge aller Taktzust ¨ ande. τ [i] ist der Zeitpunkt, zu dem das Ereignis eingetreten ist. Die verbleibenden Eintr ¨ age sind die Werte der urspr ¨ unglichen Taktsignale zu dem Zeitpunkt τ [i]. Die globalen Taktzust ¨ ande werden entsprechend ihrer Reihenfolge in einer Ereignisqueue gespeichert. Mit dieser Ereignisqueue kann abgeleitet werden, zu welchen Zeitschritten ein Abrollen der Schaltung sinnvoll ist. Beispiel 6.4.9. Betrachtet wird wiederum das synchrone System mit mehreren Takt- dom ¨ anen aus Beispiel 6.4.8. Die globalen Taktzust ¨ ande sind durch die folgenden Eintr ¨ age in der Ereignisqueue gegeben [174]: 6.4 Funktionale Eigenschaftspr ¨ ufung 337 S[0]=(0ns,T,T) S[1]=(4ns,T,F) S[2]=(5ns,F,F) S[3]=(10ns,T,F) S[4]=(12ns,T,T) S[5]=(15ns,F,T) S[6]=(20ns,T,F) S[7]=(25ns,F,F) S[8]=(28ns,F,T) S[ 9]=(30ns,T,T) Nur zu den Zeitpunkten τ [i] ∈{0ns,4ns,5ns,10ns,12ns,15ns,20ns,25ns,28ns,30ns} ist ein Aufstellen des iterativen Schaltungsmodells und eine ¨ Ubersetzung in die kor- respondierende aussagenlogische Formel sinnvoll. Die Zeitpunkte sind in Abb. 6.73 dargestellt. Dabei werden die urspr ¨ unglichen Taktsignale clk 1 und clk 2 derart be- schr ¨ ankt, dass deren Werte mit dem globalen Taktzustand ¨ ubereinstimmen. Dabei ist in Abb. 6.73 auch zu erkennen, dass die pegelgesteuerten Latches keiner gesonderten Behandlung bed ¨ urfen, da sich deren Steuersignal f 4 synchron zu dem vorgeschalte- ten Flip-Flop ¨ andert. f 4 clk 2 clk 1 0ns 5ns 10ns 15ns 20ns 25ns 30ns τ Abb. 6.73. ¨ Anderungen im globalen Taktzustand [174] Obwohl die Anzahl der betrachteten Ereignisse gegen ¨ uber dem Ansatz der Be- stimmung des kleinsten gemeinsamen Vielfachen der Taktfrequenzen reduziert wur- de, k ¨ onnen einige der Ereignisse in der Ereignisqueue irrelevant sein. Ber ¨ ucksichtigt man, dass manche Register nur ¨ uber positive oder negative Taktflanken gesteuert werden, k ¨ onnen weitere Zeitschritte bei der Modellpr ¨ ufung ausgeschlossen werden. 338 6 Hardware-Verifikation Ber ¨ ucksichtigung von Speicherbl ¨ ocken Eingebettete Computersysteme verf ¨ ugen oft ¨ uber einen eingebetteten Speicher. Die- ser eingebettete Speicher f ¨ ugt dem Modellpr ¨ ufungsproblem zus ¨ atzliche Komplexit ¨ at hinzu, da jedes Speicherbit exponentiell zur Zustandsraumvergr ¨ oßerung beitr ¨ agt. So- mit wird durch eine explizite Modellierung eingebetteter Speicherbl ¨ ocke der Zu- standsraum oft zu groß, um das Modell zu analysieren. Aus diesem Grund ist eine geeignete Abstraktion von Speicherbl ¨ ocken notwendig. Allerdings ist es f ¨ ur die for- male Modellpr ¨ ufung hinreichend, die Semantik eines Speichers zu betrachten, ohne jedes Speicherbit explizit zu modellieren [75] (siehe auch Abschnitt 6.3.1). Betrachtet werden im Folgenden Speicher mit einem einzelnen Lese-/Schreib- port, wie in Abb. 6.74 dargestellt. Die Speicherschnittstelle besteht aus einem Adress- bus addr, einem Datenbus f ¨ ur Schreibzugriffe data w, einem Datenbus f ¨ ur Leseope- rationen data r, sowie den beiden Steuersignalen write e und read e zur Signalisie- rung von Schreib- (write e = T) bzw. Lesezugriffen (dat a e = T). Ein Lesezugriff ben ¨ otigt einen Taktzyklus, d. h. sobald die Adresse addr und das Signal read e = T anliegen, legt das Speichermodul die angeforderten Daten auf den Datenbus data r f ¨ ur Leseoperationen. Ein Schreibzugriff hingegen ben ¨ otigt zwei Taktzyklen: Im ers- ten Takt werden die Schreibadresse addr und die zu schreibenden Daten data w sowie das Signal write e = T angelegt. Im zweiten Takt sind die Daten an die adres- sierte Stelle im Speicher geschrieben, d. h. die Daten sind erst im zweiten Takt aus dem Speicher verf ¨ ugbar. read e data w data r write e Schaltung Speicher addr Abb. 6.74. Schaltung mit eingebettetem Speicher [174] Die Semantik eines Speichers besagt, dass gelesene Daten dem zuletzt an die selbe Adresse geschriebenen Wert entsprechen. Es sei nun angenommen, dass die Schaltung k +1 Mal abgerollt wird. Dies ist in Abb. 6.75 dargestellt. Man sieht, dass das Lesen einer Speicherstelle in einem beliebigen Zeitschritt stets nur von dem zu- letzt davor liegenden Schreibzugriff auf die selbe Adresse abh ¨ angt. Deshalb kann f ¨ ur die SAT-basierte Modellpr ¨ ufung das explizite Speichermodell durch ein implizites Speichermodell ersetzt werden. Dabei bleibt die Speicherschnittstelle erhalten und das implizite Speichermodell erf ¨ ullt die Speichersemantik. Mathematisch l ¨ asst sich dies mittels der bin ¨ aren Variable c i, j ∈ B beschreiben, die wie folgt definiert ist: 6.4 Funktionale Eigenschaftspr ¨ ufung 339 s[0] i[0] o[0] Zeitschritt ZeitschrittZeitschritt i[1] o[1] s[1] i[k] o[k] s[k] Schaltung Speicher Schaltung Speicher Schaltung Speicher write e[0] read e[0] data r[0] data w[0] addr[0] write e[1] read e[1] data r[1] data w[1] addr[1] write e[k] read e[k] data r[k] data w[k] addr[k] Abb. 6.75. Iteratives Schaltungsmodell mit Speicher [174] c i, j := T falls addr[i]=addr[ j] F sonst Mit c i, j sieht das Speichermodell wie folgt aus: data r[k]= ⎧ ⎨ ⎩ data w[i] falls ∃0 ≤ i < k : c i,k ∧ write e[i] ∧read e[k]∧ (∀i < j < k : ¬(c j,k ∧ write e[ j])) d init (addr[i]) sonst (6.20) Mit anderen Worten: Die Daten, die im Zeitschritt k gelesen werden, entsprechen denjenigen Daten, die im Zeitschritt i geschrieben wurden, wenn: 1. die beiden Adressen addr[i] und addr[k] identisch sind, 2. in Zeitschritt i ein Schreib- und in Zeitschritt k ein Lesezugriff erfolgte und 3. in den Zeitschritten zwischen i und k keine weiteren Daten an die selbe Adresse geschrieben wurden. Wurden allerdings noch keine Daten an die Adresse geschrieben, liefert der Lesezu- griff den initialisierten Wert an der Speicherposition zur ¨ uck. Dabei ist d init (addr[i]) der Initialwert der Speicherstelle an Adresse addr[i]. Bei der ¨ Ubersetzung des iterativen Schaltungsmodells in die aussagenlogische Formel kann die Speichersemantik aus Gleichung (6.20) mittels des ITE-Operators (engl. if-then-else, siehe Anhang B.2) beschrieben werden. Hierbei sei die Variable m i, j als m i, j := c i, j ∧ write e[i] definiert: data r [k]=ITE(m k−1,k ,data w[k − 1], ITE(m k−2,k ,data w[k − 2], , ITE(m 0,k ,data w[0],d init (addr[i])) )) (6.21) Obige Gleichung (6.21) entspricht einer Reihenschaltung von Multiplexern, wie in Abb. 6.76 dargestellt. 340 6 Hardware-Verifikation F T F T m 0,k d init (addr[i]) data w[0] F T m k−2,k data w[k − 2] data r[k] data w[k − 1] m k−1,k Abb. 6.76. Multiplexer-Reihenschaltung zur Darstellung der Speichersemantik [174] Bevor ein SAT-Solver das passende Schreib-/Lesepaar data r[k]=data w[i] identifiziert hat, muss dieser viele Entscheidungen ¨ uber Variablenbelegungen tref- fen, um zu zeigen, dass m i,k = T und m i+1,k = m i+2,k = ··· = m k−1,k = F gilt. Die Pr ¨ ufung auf Erf ¨ ullbarkeit kann deutlich beschleunigt werden, wenn explizite Be- schr ¨ ankungen Schreib-/Lesepaare zwischen dem eigentlichen Schreiben und Lesen invalidieren. Hierf ¨ ur wird das exklusiv g ¨ ultige Lesesignal e i,k sowie die internen Si- gnale im i,k definiert: im k,k = read e[k] ∀0 ≤ i < k : im i,k = ¬m i,k ∧ im i+1,k e −1,k = d init (addr[k]) ∀0 ≤ i < k : e i,k = m i,k ∧ im i+1,k Man beachte, dass e i,k = T impliziert, dass e j,k = F f ¨ ur i, j < k und i = j. Damit kann Gleichung (6.20) wie folgt umgeschrieben werden: data r[k]=(e k−1,k ∧ data w[k]) ∨···∨(e 0,k ∧ data w[0])∨ (e −1,k ∧ d init (addr[k])) (6.22) Initialisierung von Speicher mit unterschiedlichen Werten Meistens werden Speicherbl ¨ ocke durchg ¨ angig mit dem selben Wert initialisiert. Al- lerdings kann es passieren, dass die Modellpr ¨ ufung nicht aus dem Anfangszustand des Systems startet. In diesem Fall m ¨ ussen die Speicherzellen mit unterschiedli- chen Werten belegt werden. Dies kann einfach durchgef ¨ uhrt werden, indem ei- ne notwendige Anzahl an Schreiboperationen in der Vergangenheit als Klauseln zur aussagenlogischen Formel hinzugef ¨ ugt werden: Angenommen p Speicherstel- len addr 0 , ,addr p−1 besitzen unterschiedliche Anfangswerte. Die Initialisierung der Speicherstellen kann durch p Schreiboperationen in der Vergangenheit, begin- nend zum Zeitschritt t = −p modelliert werden. Dann wird zu allen Zeitschritten t = −p+ i mit 1 ≤ i ≤ p − 1 der Anfangswert an Adresse addr i geschrieben. Beispiel 6.4.10. Es sollen zwei Speicher (p = 2) initialisiert werden. Adresse addr 1 wird mit dem Wert 3, Adresse addr 2 mit dem Wert 4 initialisiert. Der restliche Spei- cher ist mit F initialisiert. 6.4 Funktionale Eigenschaftspr ¨ ufung 341 • Zum Zeitschritt t = −2 besitzen beide Speicherstellen den Wert F. Zum Initiali- sieren der Adresse addr 1 m ¨ ussen die Signale addr[−2]=addr 1 , data w[−2]=3 und write e[−2]=T gesetzt werden. • Zum Zeitschritt t = −1 besitzt die Speicherstelle mit Adresse addr 1 den Wert 3 und alle anderen Speicherzellen besitzen den Wert F. Zur Initialisierung der Adresse addr 2 m ¨ ussen die Signale addr[−1]=addr 2 , data w[−1]=4 und write e[−1]=T gesetzt werden. • Zum Zeitschritt t = 0 besitzen alle Speicherzelle ihren gew ¨ unschten Anfangs- wert. Effiziente Behandlung von Wortbreiten Heutzutage werden viele Schaltungsbeschreibungen oft nicht mehr auf der Logike- bene erstellt, sondern als Registertransferbeschreibungen auf der Architekturebene. Hardware-Beschreibungssprachen auf dieser Ebene bieten spezielle Datenstruktu- ren, etwa Bitvektoren. Die Verwendung dieser Datentypen erh ¨ oht die Lesbarkeit der Schaltungsbeschreibungen. Auf der anderen Seite arbeiten Verfahren zur symbolischen Modellpr ¨ ufung von Hardware mit einzelnen Bits als Datentypen. Eine M ¨ oglichkeit in der Behandlung von Bitvektoren in der symbolischen Modellpr ¨ ufung besteht darin, die Informati- on ¨ uber Bitvektoren zu vernachl ¨ assigen und lediglich mit einzelnen Bits weiter zu pr ¨ ufen, d. h. die Operatoren, die auf Bitvektoren angewendet werden, werden durch Boolesche Formeln ersetzt. Dies wird auch als engl. bit flattening bezeichnet. Als Beispiel sei hier die Addition zweier Bitvektoren genannt. F ¨ ur die Verifikation mit einem Standard-SAT- Solver kann die Addition beispielsweise durch einen Ripple- Carry-Addierer ersetzt werden. Bei einem solchen Schritt wird allerdings die Anzahl an Variablen in der SAT- Formel massiv erh ¨ oht, was in vielen F ¨ allen dazu f ¨ uhrt, dass das Modellpr ¨ ufungspro- blem nicht mehr gel ¨ ost werden kann. Ein besseres Vorgehen ist somit die Information ¨ uber Bitvektoren zu erhalten und die Entscheidungsstrategie anzupassen. In diesem Abschnitt wird deshalb ein Ansatz betrachtet, der Formeln mit Bitvektor-Arithmetik durch Abstraktion entscheidet [60]. Zun ¨ achst wird die Syntax der Bitvektor-Arithmetik beschrieben. Definition 6.4.1 (Syntax der Bitvektor-Arithmetik). Die Syntax der Bitvektor- Arithmetik kann wie folgt definiert werden: formula ::= formula∨ formula| formula∧ formula|¬formula| atom atom ::= term rel term | id B rel ::==|=|≤|≥|<|> term ::= term op term | id |∼ term | const | term[i : j] | formula? term : term op ::=+|−|∗|÷|% |<<|>>| @ | & |||ˆ Formeln formula bezeichnen Ausdr ¨ ucke mit Booleschem R ¨ uckgabewert. Terme term bezeichnen Bitvektoren und besitzen einen Datentyp. Der Datentyp gibt Aus- 342 6 Hardware-Verifikation kunft ¨ uber die Bitbreite und die verwendete Codierung (z. B. Vorzeichen-Betrag- Darstellung, 2er Komplement). Mittels Relationen rel werden Bitvektoren in Boo- lesche Ausdr ¨ ucke umgewandelt. Außerdem k ¨ onnen Boolesche Ausdr ¨ ucke von Be- zeichnern f ¨ ur bin ¨ are Variablen id B gebildet werden. Terme lassen sich ebenfalls aus Bezeichnern f ¨ ur Bitvektor-Variablen oder -Konstanten bilden. Der Ausdruck term[i : j] ist ein Bereichsoperator und extrahiert die Bits i bis j aus einem Bitvektor. Das Ergebnis ist wiederum ein Bitvektor. Der Ausdruck formula? term : term ist ein if-then-else-Konstrukt, bei dem, abh ¨ angig vom Wahrheitswert der Formel formula, ein Term term ausgew ¨ ahlt wird. Evaluiert der Ausdruck formulazu T wird der Term vor dem Doppelpunkt ausgew ¨ ahlt. Terme k ¨ onnen schließlich ¨ uber arithmetische, lo- gische Operatoren verkn ¨ upft werden, wobei ÷ die Ganzzahl- und % die Modulo- Division bezeichnet. Die Operatoren &, | und ˆ stellen das bitweise logische Und, Oder bzw. Exklusiv-Oder dar. Die Operatoren << und >> bezeichnen das Links- und Rechtsverschieben eines Bitvektors. Schließlich bezeichnet @ die Konkatenati- on von Bitvektoren. Die Semantik der Bitvektor-Arithmetik l ¨ asst sich intuitiv definieren (siehe hierzu [59]) und sei hier nicht weiter angegeben. Allerdings muss man beachten, dass die arithmetischen Operatoren nur auf endlichen Wortbreiten definiert sind und die Se- mantik der Relationen von der Codierung (Vorzeichen-Betrag-Darstellung, 1er oder 2er Komplement) der Bitvektoren abh ¨ angt. Beispiel 6.4.11. Gegeben ist die folgende Formel: (x − y > 0) ⇔ (x > y) Die Formel ist korrekt, wenn x und y ganze Zahlen in Z sind. Allerdings ist die Formel nicht mehr richtig, sobald Bitvektoren f ¨ ur x und y verwendet werden und die Subtraktion zu ¨ Uber- oder Unterl ¨ aufen f ¨ uhren kann. Im Folgenden wird nun beschrieben, wie eine Bitvektor-Formel φ mit einem Standard-SAT-Solver mittels Abstraktion auf Erf ¨ ullbarkeit ¨ uberpr ¨ uft werden kann. Die grundlegende Idee ist, dass iterativ Unter- und ¨ Uberapproximationen von φ gel ¨ ost werden. Das Vorgehen ist in Abb. 6.77 schematisch dargestellt. Eingabe f ¨ ur diese Entscheidungsstrategie ist die Formel φ in Bitvektor-Arithmetik mit den Varia- blen x 1 ,x 2 , ,x n . Jede Variable x i ist ein Bitvektor mit Bitbreite w i . Die Entscheidungsprozedur basierend auf Abstraktion erfolgt im Wesentlichen in vier Schritten: 1. Initialisierung: F ¨ ur jede Variable x i wird eine zu betrachtende Codierungsgr ¨ oße s i gew ¨ ahlt, wobei 0 ≤ s i ≤ w i sein muss. 2. Generierung der Unterapproximation: Eine Unterapproximation φ der Formel φ wird bestimmt, indem jede Variable x i auf einen Wertebereich der Kardinalit ¨ at 2 s i beschr ¨ ankt wird. Dies kann auf verschiedene Arten erfolgen. Eine M ¨ oglich- keit besteht darin, eine Variable x i lediglich auf den s i niederwertigsten Bits mittels bin ¨ arer Variablen zu codieren und die h ¨ oherwertigen Bits mit F zu in- itialisieren. Eine andere M ¨ oglichkeit besteht darin, eine Vorzeichenexpansion durchzuf ¨ uhren, d. h. dass wiederum die s i niederwertigsten Bits mittels bin ¨ arer