Upload
buithuan
View
232
Download
2
Embed Size (px)
Citation preview
RST-Labor
Bericht zum Vortrag FPGA
Klaus Bicker (498207233)
Carsten Thiele (498214540)
11. September 2001
RST - FPGA und Anwendungen
Inhaltsverzeichnis
1 Einleitung 3
2 Der FPGA-Baustein 3
3 Das XS40 Board 4
4 Aufbau des Xilinx-FPGAs XC4010XL 4
4.1 Der konfigurierbare Logikblock (CLB) . . . . . . . . . . . . . . . . . . . 5
4.2 Die I/O-Blocke (IOB) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
4.3 Die Programmable Switch Matrix (PSM) . . . . . . . . . . . . . . . . . . 8
4.4 Tri-State-Buffer (TBUF) . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
5 Ubersicht: die FPGA-CPU xr-16 12
5.1 Entwicklungsumgebung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
5.2 Hardwarebedarf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
6 Struktur des xr-16 13
6.1 Die Pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
6.2 Der Datenpfad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
7 Instruktionsformate 14
7.1 Register-Typ (rrr) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
7.2 Register-Typ mit”Unterfunktionen“ (rr) . . . . . . . . . . . . . . . . . . 15
7.3 Immediate-Typ (rri) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
7.4 Immediate-Typ mit”Unterfunktionen“ (ri) . . . . . . . . . . . . . . . . . 16
7.5 Branch-Typ (br) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
7.6 12-Bit Immediate-Typ (i12) . . . . . . . . . . . . . . . . . . . . . . . . . 17
8 Der Befehlssatz 17
8.1 Nicht implementierte Befehle . . . . . . . . . . . . . . . . . . . . . . . . . 18
8.2 Der”imm“-Befehl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
8.3 Load/Store-Befehle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
8.4 Weite Sprunge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
8.5 Return-Befehle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
9 Der Assembler 20
10 Fazit 22
11 Quellen 23
Klaus Bicker, Carsten Thiele 2/24
RST - FPGA und Anwendungen
1 Einleitung
Bei der Umsetzung von komplexen digitalen Schaltungen in Hardware gibt es verschiede-
ne Ansatze. Zum einen konnen ASICS verwendet werden, welche eine schnell arbeitende
Losung bieten allerdings nicht flexibel an Systemanderungen anpassbar sind, da die
Schaltung bereits zum Zeitpunkt der Produktion des Chips festgelegt wird. Eine andere
Moglichkeit ist der Einsatz von FPGAs (Field Programmable Gate Array).
Ein FPGA besitz keine festverdrahteten Verbindungen, sondern kann nach Bedarf
frei programmiert werden. Zunachst wird ein FPGA Baustein vorgestellt. Im zweiten
Teil soll dann auf eine Anwendung, die einen Bezug zu dem Rechnerstrukturen Labor
herstellt, vorgestellt werden.
Dabei handelt es sich um die Realisierung einer CPU in einem FPGA-Baustein.
Durch die Große heutiger programmierbarer Bausteine ist es ohne weiteres moglich eine
komplette CPU zusatzlich zu der benotigten digitalen Schaltung mit in einen FPGA-
Baustein einzubringen.
2 Der FPGA-Baustein
Der FPGA der hier vorgestellt werden soll stammt von der Firma Xilinx. Der XC4010XL
ist ein Baustein der XC4000 Reihe. Die Abbildung 1 zeigt die verfugbaren Bausteine
dieser Reihe.
Abbildung 1: Xilinx Produktubersicht
Klaus Bicker, Carsten Thiele 3/24
RST - FPGA und Anwendungen
3 Das XS40 Board
Der FPGA Baustein wird auf dem Experimentierboard XS40 eingesetzt. Dieses Board
ist in der Hochschule Bremen vorhanden, und kann fur Experimente eingesetzt wer-
den. Neben dem FPGA Baustein verfugt das Board uber einen Mikrocontroller (8031),
zusatzlichen Speicher und eine Siebensegment-Anzeige. Es kann uber einen Parallelport
programmiert werden. Des weiteren ist eine PS/2 Schnittstelle und ein VGA-Port zur
Ansteuerung eines Monitors vorhanden.
Da ein FPGA-Baustein die Konfiguration mit dem Abschalten der Stromversorgung
vergisst, kann auf dem Board ein”Boot“-EEPROM eingesetzt werden.
Wahrend der Entwicklung einer Schaltung ist die Programmierung einfach uber den
Parallelport realisierbar. Abbildung 2 zeigt den Aufbau des XS40 Boards.
Abbildung 2: Aufbau des XS40 Boards
4 Aufbau des Xilinx-FPGAs XC4010XL
Der Aufbau des Xilinx-FPGAs beinhaltet drei wichtige Elemente:
• Konfigurierbare Logikblocke (Configurable Logic Blocks oder CLBs)
• Ein/Ausgabe Blocke (Input/Output Blocks oder IOBs)
• Schalterblocke (Programmable Switch Matrix oder PSM)
Klaus Bicker, Carsten Thiele 4/24
RST - FPGA und Anwendungen
Die CLBs sind matrixformig im FPGA angeordnet. Zwischen den CLBs verlauft ein
Netzwerk von Leitungen, an die die CLBs angeschlossen sind. Die Leitungen konnen in
einer Switch-Matrix variabel miteinander verbunden werden, um mehrere CLBs zu logi-
schen Einheiten zu verschalten. Am Rand der Matrix befinden sich die IOBs. Sie bilden
die Schnittstelle zwischen der externen Beschaltung und den intern benutzten Signalen.
Jeder IOB kann ebenfalls uber die programmierbaren Verbindungsleitungen in der Ma-
trix an die CLBs angeschlossen werden. Mit den programmierbaren Verbindungen steht
dem Anwender ein Hilfsmittel zur Seite, durch das die benotigten Verschaltungen zwi-
schen den CLBs bzw. zwischen den CLBs und den IOBs hergestellt werden konnen. Um
einer einfachen Umprogrammierbarkeit in einem dynamischen Designprozess Rechnung
zu tragen, konnen die PSMs unbeschrankt rekonfiguriert werden. Weiterhin existieren
programmierbare Tri-State-Puffer und einen Oszillator in dem Chip.
4.1 Der konfigurierbare Logikblock (CLB)
Der XC4010XL besitzt 400 CLBs. Diese sind in einer 20x20 Matrix angeordnet. Ein
CLB besitzt zwei Funktionsblocke, die jeweils uber vier Eingange (F1 - F4 und G1 - G4)
verfugen. Diese Funktionsblocke werden durch Look-Up-Tables (LUT) mit einer Große
von 16x1 Bit realisiert. Durch das vom Programmierer vorgegebene Design kann mittels
Logiktabellen jeder der Funktionsblocke ein Ausgangssignal (F’ und G’) generieren. Diese
Signale konnen in einem dritten Funktionsblock, eventuell unter Zuhilfenahme eines
weiteren externen Signals (H1), verknupft werden. Der dritte Funktionsblock besitzt
drei Eingange. Ein Eingang kann aus dem Signal F’ oder einem zusatzlichen externen
Signal H2 bestehen. Der zweite Eingang kann aus dem Signal G’ oder einem externen
Signal H1 bestehen. Das hier erzeugte Ausgangssignal (H’) und die Signale F’ und G’,
sowie das Signal DIN (Data-IN) werden programmierbaren Multiplexern zugefuhrt. Die
erzeugten Signale konnen uber Multiplexer entweder zwei Ausgangs-Flip-Flops mit den
Ausgangen XQ und YQ, oder den Ausgangssignalen X und Y zugewiesen werden. In
der XC4000 Reihe konnen diese LUTs (Funktionsblocke) als RAM konfiguriert werden.
Diese konnen als zwei Speicher mit 16x1 Bit, oder als ein Speicher mit 32x1 verwendet
werden. Hierbei handelt es sich um Singleport-Speicher. Es kann auch ein Dual-Port-
Speicher konfiguriert werden, der das gleichzeitige Lesen und Schreiben von getrennten
Adressen ermoglicht, und zwar als 16x1 Bit Speicher. Die Abbildung 3 zeigt die fur die
einzelnen Ausgange in Frage kommenden Signale. Die Abbildung 4 zeigt ein vereinfachtes
Blockschaltbild eines CLBs.
Die Flip-Flops im CLB sind asynchron setz- oder rucksetzbar. Ein CLB besitzt 4
Ausgange (2 Flip-Flop- und 2 kombinatorische Ausgange). Die CLB-Ein- und Ausgange
Klaus Bicker, Carsten Thiele 5/24
RST - FPGA und Anwendungen
Abbildung 3: Mogliche Konfigurationen der CLB-Ausgange
Abbildung 4: Blockschaltbild eines CLB
sind zur Verbesserung der Routingmoglichkeiten symmetrisch auf allen 4 Blockseiten
verteilt.
Das Ausgangs-Flip-Flop ist vielseitig konfigurierbar, so dass es zum Beispiel flanken-
gesteuert arbeiten, oder als Latch eingesetzt werden kann. Auch Clock-,Enable- und Set-
bzw. Reset-Signale konnen genutzt werden.
Die Funktion, die im jeweiligen Funktionsgenerator realisiert wird, wird mit der ent-
Klaus Bicker, Carsten Thiele 6/24
RST - FPGA und Anwendungen
sprechenden Auswahl der Eingangsquellen bei der Konfiguration des FPGAs festgelegt
und wahrend des Betriebs in statischen RAM-Zellen gespeichert.
4.2 Die I/O-Blocke (IOB)
Zu jedem externen Ein- und Ausgang des FPGAs existiert ein IOB (Input / Output
Block), uber den interne Signale nach außen, sowie externe Signale nach innen gelangen
konnen. Der XC4010XL verfugt uber 160 IOBs. Jeder IOB lasst sich individuell kon-
figurieren. Neben unidirektionalen Datenpfaden konnen auch bidirektionale realisiert
werden. Dadurch ist eine einfache Implementierung von Datenbussen moglich. Außer-
dem konnen Pull-Up- oder Pull-down-Widerstande, sowie Tri-State-Buffer zum Trennen
der Ein- bzw. Ausgange vom Bus implementiert werden. Ferner enthalt jeder IOB ein
Eingangs- und ein Ausgangs-Flip-Flop. Ausgangssignale konnen direkt ausgegeben oder
zwischengespeichert werden. Ebenso ist es moglich das auszugebende Signal zu invertie-
ren. Die Abbildung 5 stellt einen IOB schematisch dar.
Abbildung 5: Blockschaltbild eines IOB
Klaus Bicker, Carsten Thiele 7/24
RST - FPGA und Anwendungen
4.3 Die Programmable Switch Matrix (PSM)
Die CLBs sind auf allen Seiten von Verbindungsleitungen umgeben. So werden hoch
variable und kurze Verbindungsstrukturen ermoglicht. Das Verbindungsnetzwerk be-
steht aus unterschiedlich langen Leitungen, die dann in den Schalterblocken (PSM -
Programmable Switch Matrix) miteinander verknupft werden konnen. Dies geschieht
uber sogenannte 6-Wege-Transistoren. Sie stellen die Verbindungen zwischen den ein-
zelnen Leitungen her. Es konnen dabei an einem Knotenpunkt mehrere Verbindungen
gleichzeitig geroutet werden. Die Abbildung 6 zeigt einen Ausschnitt einer solchen Ver-
bindungsmatrix. Insgesamt stehen 45 Leitungen vertikal und 32 Leitungen horizontal
pro CLB zur Verfugung. Diese teilen sich in folgende Kategorien auf:
• Single-Length-Line: Verbindungen zwischen benachbarten PSMs; 8 vertikal, 8 ho-
rizontal
• Double-Length-Line: Verbindungen zur ubernachsten PSM; 4 vertikal, 4 horizontal
• Quad-Length-Line: Vierfach lange Verbindungen zwischen PSMs; 12 vertikal, 12
horizontal
• Longline: Verbindungen entlang einer kompletten Matrixzeile oder Matrixspalte;
10 vertikal, 6 horizontal
• Direct-Connect: direkte Verbindungen zweier angrenzender CLBs; 2 vertikal, 2
horizontal
• Global: Verbindungsnetze uber das ganze FPGA, z.B. fur Takte; 8 vertikal
• Carry-Logic: direkte Verbindungen zwischen Funktionsgeneratoren benachbarter
CLB, z.B. fur die Implementierung von Addierern; 1 vertikal
Die Single-Length-Lines bieten dabei das flexibelste und schnellste Routing zwischen
den angeschlossenen PSMs. Sie sind allerdings nur fur kurze Strecken geeignet, da die
Verzogerungszeit mit jeder durchlaufenen PSM zunimmt. Ublicherweise werden sie fur
die direkte Verbindung zweier benachbarter PSMs eingesetzt. Mit den Double-Length-
Lines konnen schon etwas großere Strecken Verbunden werden, da sie nur durch jede
zweite Switching-Matrix verlaufen. Dadurch werden zwar Verzogerungszeiten minimiert
aber auch die Flexibilitat beim Routing nimmt ab. Die Abbildung 7 zeigt die Verbindung
von PSMs uber Single- und Double-Length-Lines. Die Quad-Lenght-Lines sind vier mal
so lang wie eine Single-Length-Line. Des weiteren existieren Longlines. Sie verlaufen ver-
tikal und horizontal uber die gesamte Lange des Arrays. Sie sind fur zeitkritische Signale
Klaus Bicker, Carsten Thiele 8/24
RST - FPGA und Anwendungen
Abbildung 6: Programmable Switch Matrix (PSM)
oder großen Fan-Out gedacht. Zwei von diesen Leitungen nahe einem CLB konnen uber
Tri-State-Buffer als uni- oder bidirektionale Busse eingesetzt werden. Eine Besonderheit
stellen noch die Direct-Connect-Lines dar. Sie verbinden zwei Logikblocke direkt mitein-
ander. Werden Signale uber diese Leitungen geroutet, brauchen hierfur keine PSMs ver-
wendet werden, wodurch Routing Ressourcen eingespart werden. Direct-Connect-Lines
werden ebenfalls verwendet um die I/O-Blocke mit den Logikblocken zu verbinden. Die
Place-and-Route-Software versucht ihrerseits, wann immer es moglich ist, diese direkten
Verbindungen zu nutzen, um Routing-Ressourcen zu sparen und die Verzogerungszeiten
so gering wie moglich zu halten. In Abbildung 8 ist dargestellt, wie die IOBs mit den
CLBs verbunden sind.
Abbildung 7: Single- und Double-Length-Lines
Klaus Bicker, Carsten Thiele 9/24
RST - FPGA und Anwendungen
Abbildung 8: Direct-Connect-Lines zwischen IOBs und CLBs
4.4 Tri-State-Buffer (TBUF)
Ein Tri-State-Buffer ist ein Baustein mit drei Pins (IN, OUT, T), der als normaler Puf-
fer verwendet werden kann (T = 0), oder, im Tri-State-Enable-Modus, den Ausgang
hochohmig gegenuber der angeschlossenen Leitung schalten kann (T = 1). Dies kann
erforderlich sein, wenn mehrere Ausgange an einer Leitung angeschlossen sind. Es darf
dann nur ein Ausgang zur Zeit Signale auf die Leitung geben, da es sonst zu Kurz-
schlussen kommen kann. Zu jedem CLB des Chips gehoren zwei Tri-State-Buffer, die
dazu verwendet werden konnen, Signale auf die nachste Longline, oberhalb und unter-
halb des CLB, zu bringen. Dadurch konnen gemultiplexte oder bidirektionale Busstruk-
turen implementiert werden. Zusatzlich ist jedem IOB an der linken und rechten Seite
des Arrays ebenfalls ein Tri-State-Buffer zugeordnet. Die Tri-State-Buffer konnen in drei
verschiedenen Modi Konfiguriert werden:
• Standard Tri-State-Buffer:
Hierbei werden alle drei Pins des Tri-State-Buffers verwendet. Wie schon erwahnt
wird durch ein HIGH am T-Pin der Ausgang des Puffer hochohmig geschaltet. Bei
einem LOW am T-Pin arbeit der Baustein im Standard Puffer-Betrieb und das
Ausgangssignal wird auf die angeschlossene Leitung gegeben.
• Wired-AND with input on the I-Pin:
Hierbei wir der T-Pin mit dem I-Pin verbunden. Wenn jetzt eine”1“ an den Ein-
gang des Buffers gelegt wird, liegt diese auch an dem T-Eingang an und der Aus-
gang wird hochohmig. Uber einen Pull-Up-Widerstand kann die Leitung dann auf
”1“ gezogen werden. Bei einer
”0“ am Eingang liegt ebenfalls eine
”0“ am Ausgang
Klaus Bicker, Carsten Thiele 10/24
RST - FPGA und Anwendungen
an. Diese”0“ wird dann dazu verwendet die Leitung trotz Pull-Up-Widerstand auf
”0“ (Masse) zu ziehen.
• Wired OR-AND:
Das Wired OR-AND ist ein Wired-AND mit vorgeschaltetem ODER-Gatter, so
dass zwei Eingangspins zur Verfugung stehen. Dies ist dann sinnvoll, wenn es zwei
unterschiedliche Signale gibt, die den Tri-State-Buffer-Ausgang hochohmig schal-
ten sollen, da man die beiden Signale nicht gleichzeitig an einen Pin anschließen
kann (Kurzschlussgefahr durch zusammengeschaltete Ausgange).
Klaus Bicker, Carsten Thiele 11/24
RST - FPGA und Anwendungen
5 Ubersicht: die FPGA-CPU xr-16
Bei der hier beschriebenen CPU handelt es sich um einen 16-Bit RISC-Prozessor. Mit die-
sem Prozessor soll es moglich sein, einfache integer-basierte C Programme auszufuhren.
Es wurde bei der Realisierung besonders auf ein platzsparendes Design geachtet, damit
in einem Baustein noch genug Platz fur andere Funktionen einer Schaltung vorhanden
ist. Wenn die Schaltung einen eigenen FPGA benotigen wurde, dann konnte auch gleich
ein”richtiger“ Prozessor zusatzlich in die Schaltung eingebracht werden.
Der Prozessor hat folgende Eigenschaften:
• Pipeline-RISC Prozessor, 16 16-bit Register und 16-Bit Instruktionen
• 3 Stufige Pipeline (fetch, decode, execute)
• Durchschnittlich 1.4 Zyklen pro Instruktion
• Byteadressierbarer Speicher load/store mit Bytes oder Worten (16 Bit) in einem
64kByte Adressraum
• Integrierter DMA-Controller mit Adressgenerator fur bis zu 15 DMA Kanale
• schnelle Interruptbehandlung, es werden nur 6 Zyklen fur die Reaktion auf einen
Interrupt und die Ruckkehr von einem Interrupt benotigt
• geringer Ressourcenbedarf
5.1 Entwicklungsumgebung
Fur die CPU xr-16 existiert ein”Intelligenter“ Assembler. Dieser kann von der CPU
eigentlich nicht unterstutzte Befehle durch eine Befehlssequenz, bzw. einen Befehl, der
die entsprechende Operation ausfuhren wurde, umgesetzt werden. Weiterhin ubernimmt
der Assembler evtl. notwendige Anpassungen, die aufgrund von Datenabhangigkeiten
entstehen. Auch wenn der eingeschrankte Sprungbereich einer Branch-Instruktion uber-
schritten wird, generiert er automatisch Code, um den Sprungbereich zu erweitern.
Zusatzlich zu dem Assembler ist auch ein C-Compiler verfugbar. Dieser unterstutzt
jedoch nur Integer-Operationen, Fließkomma-Befehle konnen nicht genutzt werden. Da
der Prozessor keine Multiplikation und Division unterstutzt, emuliert der Compiler diese
Operationen.
Klaus Bicker, Carsten Thiele 12/24
RST - FPGA und Anwendungen
5.2 Hardwarebedarf
Diese CPU kann auf dem in der Hochschule vorhandenen XS40-Board betrieben werden.
Der Hardwarebedarf fur die CPU ist recht gering. Es werden 202 CLBs, 252 Flip-Flops,
152 TBUFs, 348 4-LUTs und 80 3-LUTs benotigt. In diesem Baugruppen ist, neben der
CPU, ein VGA-Controller enthalten.
6 Struktur des xr-16
6.1 Die Pipeline
Die xr-16 CPU besitzt eine dreistufige Pipeline. Die Aufgaben, die zur Ausfuhrung eines
Befehls notwendig sind, sind wie folgt auf die einzelnen Pipelinestufen verteilt:
• fetch:
– Die Instruktion aus dem Speicher in das”Instruction Register“ (IR) laden.
– Den Programcounter (PC) auf den nachsten Befehl setzen: pc = pc + 2
• decode:
– Decodieren der Instruktion
– evtl. benotigte Operanden aus dem Registerfile, oder einen Immediate-Anteil
aus dem Instruction Register laden.
• execute:
– Ausfuhren der eigentlichen Instruktion
– zuruckschreiben des Ergebnisses der Instruktion
Aus den aktivitaten in der execute-Phase wird ersichtlich, das die Operationen am
beginn eines Taktzyklus durchgefuhrt werden. Die Ergebnisse werden zu einem spateren
Zeitpunkt zuruckgeschrieben. Somit kann ein Zyklus eingespart werden, und ein write-
back in der execute Phase durchgefuhrt werden.
6.2 Der Datenpfad
In dem Datenpfad der CPU, der auf Seite 24 abgebildet ist, konnen einige Besonderheiten
der CPU festgestellt werden. Zum einen sind die Register doppelt vorhanden. Dadurch
Klaus Bicker, Carsten Thiele 13/24
RST - FPGA und Anwendungen
ist eine einfache Realisierung eines zweifachen lesenden Zugriffs auf die Register, wie
z.B. add r3,r4,r5, moglich. Durch gemeinsame Schreibsignale ist sichergestellt, daß beide
Registereinheiten identische Daten beinhalten.
Forwarding unterstutzt die CPU nur fur den”a“-Parameter. So kann nur die erste
Quelle ein Ergebnis der vorhergehenden Instruktion sein. Somit ist folgendes moglich:
add r2,r4,r5
add r6,r2,r4
aber nicht:
add r2,r4,r5
add r6,r4,r2
In dem zweiten Bespiel musste fur die zweite Quelle Forwarding moglich sein. Da dies
aber nicht moglich ist, muss in einem solchen Fall ein”nop“ eingefugt werden. Aufgrund
der einfachheit dieser CPU ist es dieser nicht moglich die Bearbeitung fur einen Takt zu
verzogern (stall).
Der Datenpfad der CPU ist auf Seite 24 wiedergegeben. Die Schaltung ist der Doku-
mentation der CPU von [1] entnommen. Auf dieser Abbildung ist zu erkennen, daß der
Ausgang des”RESULT MUX“ uber den
”FWD“-MUX als Parameter
”A“ zur Verfugung
steht. Somit kann das Ergebnis zeitgleich mit dem Ruckschreiben in ein Register als Pa-
rameter verwendet werden.
In dem Datenpfad des”B“-Parameters ist an dieser Stelle die
”IMMED“-Schaltung
zur Bearbeitung von 16-Bit Immediates vorhanden. Ein”FWD“-Block fehlt hier. Daher
kann fur den”B“-Parameter kein Forwarding durchgefuhrt werden.
7 Instruktionsformate
Jeder Befehl des xr-16 Prozessors hat 16 Bits. Die Befehle sind in 6 unterschiedliche
Formate unterteilt, wobei der Opcode immer 4 Bits umfasst. Da dieses nur 16 Befehle
ermoglichen wurde haben einige Instruktionsformate ein weiteres 4-Bit Feld, uber wel-
ches Unterfunktionen ausgewahlt werden konnen. Somit ist es moglich mit einem Opcode
bis zu 16 Varianten zu realisieren.
7.1 Register-Typ (rrr)
Wie in der Abbildung zu sehen, ist dieses Instruktionsformat in 4 Felder zu je 4 Bit
unterteilt. Neben dem immer vorhandenen Opcode sind noch Felder fur rd, ra und rb
Klaus Bicker, Carsten Thiele 14/24
RST - FPGA und Anwendungen
4 Bit 4 Bit 4 Bit 4 Bit
OpCode rd ra rb
vorhanden. Mit diesen Feldern kann jeweils eines der 16 Register ausgewahlt werden.
Somit kann ein Befehl auf drei unterschiedliche Register zugreifen, zwei Quell- und ein
Zielregister. Dieses Befehlsformat beansprucht sehr viel Platz, da fur jeden implementier-
ten Befehl einer der Opcodes”verbraucht“ wird. Daher sind nur zwei Befehle vorhanden,
die dieses Format nutzen.
add rd,ra,rb ; rd = ra + rb
sub rd,ra,rb ; rd = ra - rb
7.2 Register-Typ mit”
Unterfunktionen“ (rr)
4 Bit 4 Bit 4 Bit 4 Bit
OpCode rd Funktion rb
Wie schon beschrieben ist die Anzahl der Opcodes mit maximal 16 recht gering.
Um diese Einschrankung zu umgehen, gibt es Formate, in denen eine”Unterfunktion“
ausgewahlt werden kann.
Auch dieses Format setzt sich aus 4 Feldern zu je 4 Bit zusammen. Dadurch, daß
ein Feld in diesem Format fur die Auswahl der Unterfunktion verwendet wird, stehen
nur noch zwei Felder fur Register zur Verfugung. Daher wird bei Befehlen, die zwei
Quellregister benotigen, das Zielregister als erste Quelle verwendet, wie die folgenden
Beispiele zeigen.
or rd,rb ; rd = rd or rb
xor rd,rb ; rd = rd xor rb
Diese Befehle haben beide den Opcode”3“ und unterscheiden sich nur in dem Wert
der Funktion (or = 1, xor = 2).
7.3 Immediate-Typ (rri)
Auch dieses Befehlsformat setzt sich aus 4 Feldern zu je 4 Bit zusammen. Neben dem
Zielregister, und dem ersten Quellregister werden die unteren 4 Bits fur einen 4 Bit
Klaus Bicker, Carsten Thiele 15/24
RST - FPGA und Anwendungen
4 Bit 4 Bit 4 Bit 4 Bit
OpCode rd ra Imm
Immediate Anteil verwendet. Dies erscheint zunachst als recht wenig Platz fur einen
Immediate Anteil. Es gibt jedoch eine Moglichkeit, den Immediate Anteil auf 16 Bits
zu erweitern. Darauf wird weiter unten noch eingegangen. Da auch dieses Befehlsformat
sehr viel Platz verbraucht, existieren von diesem Typ nur 6 Befehle. Dabei handelt es
sich hauptsachlich um die Load- und Store-Anweisungen. Durch den Immediate-Anteil
sind diese Befehle sehr flexibel einsetzbar, wie in dem Abschnitt 8.3 gezeigt wird.
addi rd,ra,imm ; rd = ra + imm
lw rd,imm(ra) ; rd = (ra + imm)
7.4 Immediate-Typ mit”
Unterfunktionen“ (ri)
4 Bit 4 Bit 4 Bit 4 Bit
OpCode rd Funktion Imm
Auch dieses Format setzt sich aus 4 Feldern zu je 4 Bit zusammen. Neben dem
Opcode und der Funktionserweiterung bleibt nur noch Platz fur ein Zielregister und
den Immediate Anteil. Dieser Typ wird im Befehlssatz recht haufig verwendet. Das
Zielregister stellt auch hier das erste Quellregister.
andi rd,imm ; rd = rd and imm
xori rd,imm ; rd = rd xor imm
7.5 Branch-Typ (br)
4 Bit 4 Bit 8 Bit
OpCode rd Displacement
Dieses Format besitzt 2 Felder zu je 4 Bit, und ein Feld zu 8 Bit. Es wird nur fur
Sprungbefehle eingesetzt. Der Opcode”B“ kennzeichnet einen solchen Befehl. Uber den
Klaus Bicker, Carsten Thiele 16/24
RST - FPGA und Anwendungen
Funktionswert kann dann die Bedingung des Sprungbefehls ausgewahlt werden (beq,
bge, bltu, etc.). Der 8 Bit-Displacement-Wert gibt die”Entfernung“ des Sprungs an.
Durch die Begrenzung auf 8 Bit, kann nur in einem Bereich von -128 bis +127 Befehle
gesprungen werden. Soll ein Sprungbefehl uber einen weiteren Bereich gehen, so muss die
Struktur des Programms geandert werden. Darauf wird in Abschnitt 8.4 noch genauer
eingegangen.
br label ; pc = pc + 2x sign_ext(disp) + 2
beq label ; rd = if (==) pc = pc + 2x sign_ext(disp) + 2
7.6 12-Bit Immediate-Typ (i12)
4 Bit 12 Bit
OpCode Immediate
Das letzte Befehlsformat der xr-16 CPU hat neben dem 4 Bit Opcode-Feld nur ein
weiteres. Dieses 12 Bit große Feld kann einen Immediate Wert aufnehmen. Da auch
dieses Format einen kompletten Opcode belegt, existieren nur zwei Befehle, die dieses
Format verwenden. Dies ist zum einen der call-Befehl zum Aufruf einer Subroutine, und
zum anderen der imm-Befehl, der den 4-Bit Immediatewert einer folgenden Instruktion
auf 16 Bit erweitert. Auf diesen Befehl wird in Abschnitt 8 noch naher eingegangen.
call label ; r15 = pc; pc = imm[12:0]||0[3:0]
imm wert ; immed = wert
8 Der Befehlssatz
In diesem Abschnitt wird ein Teil des Befehlssatzes vorgestellt. Es wird auch auf Be-
sonderheiten und Limitierungen eingegangen. Des weiteren wird auch gezeigt, wie diese
Probleme umgangen werden konnen.
Da das 16 Bit-Befehlsformat nicht viel Platz fur eine große Anzahl an Befehlen bietet,
wurden nicht alle von anderen Prozessoren bekannte Befehle implementiert. Sie lassen
sich im Normalfall jedoch durch eine andere vorhandene Instruktion nachbilden. Dazu
werden durch den Assembler sogenannte pseudoinstruktionen bereitgestellt.
Klaus Bicker, Carsten Thiele 17/24
RST - FPGA und Anwendungen
8.1 Nicht implementierte Befehle
Hier werden einige Befehle aufgefuhrt, die nicht im Befehlssatz der xr-16 CPU vorhan-
den sind. Zusatzlich wird beschrieben, wie entsprechende Instruktionen mit der CPU
nachgebildet werden konnen.
Ein haufig zur Losung von Problemen, die aufgrund der Pipelinestruktur auftreten,
eingesetzter Befehl ist”nop“. Dieser ist nicht vorhanden, kann jedoch durch
”add r0,r0“
nachgebildet werden. Da das Register r0 immer”0“ ist, hat diese Verwendung des
”add“-
Befehls keine nutzliche Funktion.
Es ist auch nicht moglich, einen Transfer von einem Register in ein anderes vor-
zunehmen. Ein Befehl wie”mov r2,r3“ existiert nicht. Auch hier kann das Register r0
eingesetzt werden, um diesen Befehl nachzubilden. Mit dem Befehl”add r2,r0,r3“ kann
ein Transfer zwischen zwei Registern durchgefuhrt werden, da eine Addition von”0“ das
Ergebnis nicht beeinflusst. Dies wird auch bei der DLX oder dem MIPS-Prozessor in
gleicher Weise realisiert.
Auch Vergleichsbefehle wie”cmp“ sind nicht vorhanden. Diese konnen durch Befehle
wie”sub r0,r3,r4“ ersetzt werden. Nach dieser Operation kann z.B. mit
”beq“ oder
”bne“
die Gleichheit, bzw. Ungleichheit der Register r3 und r4 festgestellt werden. Hier kann
das unveranderbare Register”r0“ als Ziel verwendet werden, da die Informationen die
benotigt werden schon for dem zuruckschreiben des Ergebnisses bereit stehen.
8.2 Der”
imm“-Befehl
Wie in den vorhergehenden Abschnitten zu erkennen war, kann direkt in einem Be-
fehl nur ein 4 Bit Immediate-Wert angegeben werden. Fur viele Anwendungen ist das
nicht ausreichend. Daher besitzt die CPU einen Befehl, um den Immediate-Anteil auf 16
Bit zu erweitern. Dieser”imm“-Befehl transportiert den als Parameter angegebenen 12
Bit-Wert in ein Zwischenregister, welches dann von dem folgenden Befehl zur Erweite-
rung des 4 Bit-Immediate Wertes herangezogen wird. So ist es z.B. moglich, folgenden,
aufgrund des großen Immediate Wertes, eigentlich nicht nutzbaren Befehl auszufuhren:
addi r2,r1,0x1234
Durch den”imm“-Befehl kann diese Anweisung wie folgt umgeschrieben werden:
imm 0x123
addi r2,r1,0x4
Klaus Bicker, Carsten Thiele 18/24
RST - FPGA und Anwendungen
Somit ist es bei jedem Befehl mit Immediate Anteil moglich, diesen auf 16 Bit aus-
zuweiten. Es ist zu beachten, daß der”imm“-Befehl immer unmittelbar vor der zu er-
weiternden Anweisung stehen muß.
8.3 Load/Store-Befehle
Die Load- und Store-Befehle der CPU sind flexibel gestaltet. Sie ermoglichen es, Da-
ten zwischen dem Hauptspeicher und den Registern zu transferieren. Obwohl nur eine
Adressierungsart vorhanden ist, konnen diese Befehle vielseitig eingesetzt werden. Diese
Befehle haben immer folgendes Aussehen:
lw rd,imm(ra)
Durch geschickte Wahl der Werte von”imm“, dem Immediateanteil, und ra, dem
Register, dessen Inhalt als Adresse genommen wird, konnen verschiedene Zugriffe auf
den Hauptspeicher erfolgen. So ist es moglich, entweder indirekt auf die Adresse in einem
Register zuzugreifen:
lw rd,0(ra)
oder direkt auf eine angegebene Adresse ohne Verwendung eines Registers:
imm 0x123
lw rd,4(r0)
oder aber auf eine Kombination von beiden, z.B. zum Zugriff auf Felder einer Da-
tenstruktur:
lw rd,4(r3)
8.4 Weite Sprunge
Bedingte Sprungbefehle, die uber den Bereich von -128 bis +127 Befehle hinausgehen,
konnen einfach durch Umformen der Anweisungen realisiert werden. So kann der unbe-
dingte Sprungbefehl:
br L1
einfach durch:
imm L1[15:4]
jal r0,L1[3:0](r0)
Klaus Bicker, Carsten Thiele 19/24
RST - FPGA und Anwendungen
nachgebildet werden. Bei bedingten Sprungen kann das Ziel durch Umkehr der Be-
dingung erreicht werden. Aus:
blt L1
wird dann:
bge skip
imm L1[15:4]
jal r0,L1[3:0](r0)
skip:
Durch etwas Mehraufwand in der Programmierung, die jedoch vom Assember auto-
matisch durchgefuhrt wird, kann also ein Sprungbefehl auf den gesamten Adressraum
der CPU ausgedehnt werden.
8.5 Return-Befehle
Wenn der Befehlssatz der CPU betrachtet wird, fallt auf, daß es zwar einen”call“-Befehl
gibt, jedoch keinen zugehorigen”ret“-Befehl. Auch ein
”reti“ zur Beendigung der Inter-
ruptbehandlung ist nicht vorhanden. Dies ist jedoch kein Problem, da die entsprechenden
Befehle durch:
jal r0,0(r15)
fur”ret“ und:
jal r0,0(r14)
fur”reti“ nachgebildet werden konnen. Daher werden von den entsprechenden An-
weisungen (”call“ und Interruptrequest durch die Hardware) die Rucksprungadressen in
den Registern r15 bzw. r14 abgelegt.
9 Der Assembler
Durch die Ausfuhrungen in den vorhergehenden Abschnitten wird klar, daß es bei der
Programmierung der CPU einiges zu beachten gibt. Damit die Entwicklung eines Pro-
gramms nicht unnotig erschwert wird, ist der zugehorige Assembler mit vereinfachenden
Klaus Bicker, Carsten Thiele 20/24
RST - FPGA und Anwendungen
Funktionen ausgestattet. So kann bei einem Immediate-Befehl direkt ein 16 Bit-Wert
angegeben werden. Der notwendige”imm“-Befehl wird automatisch eingefugt.
Sollten Datenabhangigkeiten zwischen aufeinanderfolgenden Befehlen bestehen, so
wird automatisch ein”nop“ (also: and r0,r0) eingefugt, oder wenn es moglich ist eine
Umsortierung der Parameter vorgenommen.
Auch Befehle wie cmp, ret, reti oder mov werden durch den Assembler nachgebil-
det. Somit entstehen also fur den Programmierer keine großen Einschrankungen bei der
Verwendung dieser CPU.
Klaus Bicker, Carsten Thiele 21/24
RST - FPGA und Anwendungen
10 Fazit
Die in diesem Bericht beschriebene CPU ist durchaus fur kleinere Aufgaben geeignet.
Die Leistung einer 16 Bit-CPU reicht in vielen Bereichen aus. Außerdem kann die CPU
auch an die entsprechende Aufgabe angepasst werden.
Die Einsparung der zu verwendenden Hardware ist auch ein wichtiger Punkt. Dies
ist jedoch nur dann sinnvoll, wenn genugend Platz fur eine CPU in dem FPGA-Baustein
vorhanden ist. Wenn fur die CPU sowieso ein zusatzlicher Baustein eingebaut werden
musste, kann auch gleich eine”normale“ CPU verwendet werden.
Durch die Verlagerung der durch die Implementierung gegebenen Einschrankungen in
die Entwicklungswerkzeuge, ist diese CPU nicht schwerer zu programmieren als andere
Prozessoren.
Auch mit einem relativ kleinen FPGA-Baustein, wie die der XS40-Serie, ist es moglich
eine solche CPU zu realisieren. Dies zeigt das auch umfangreiche realisierungen in relativ
kleinen Bausteinen moglich sind.
Klaus Bicker, Carsten Thiele 22/24
RST - FPGA und Anwendungen
11 Quellen
[1] http://www.fpgacpu.org - Unterlagen zu der”Soft“-CPU xr-16
[2] http://www.xess.com - Produktbeschreibung XS40-Board
[3] http://www.xilinx.com - Datenblatt der XC4000 FPGA Reihe
Klaus Bicker, Carsten Thiele 23/24
RST - FPGA und Anwendungen
Cop
yrig
ht (C
) 200
0, G
ray
Res
earc
h LL
C.
This
wor
k an
d its
use
sub
ject
to X
SOC
Lice
nse
Agre
emen
t. Se
e LI
CEN
SE fi
le.
Proj
ect:
[Non
e]M
acro
: DP1
6D
ate:
02/
23/1
00
EXEC
UTI
ON
UN
IT
ADD
RES
S/PC
UN
IT
RES
ULT
MU
X
Figu
re S
3: X
R16
CPU
Data
path
Sch
emat
ic
RET
BUF
RLO
C=R
1C9
BUFT
16X
T
BREG
S
REG
FILE
RLO
C=R
1C1
D[1
5:0]
A[3:
0]
WE
CLK
Q[1
5:0]
LOG
ICBU
F
RLO
C=R
1C4
BUFT
16X
T
SRBU
F
RLO
C=R
1C1
BUFT
16X
T
IMM
ED
IMM
16R
LOC
=R1C
3
B[15
:0]
IR[1
1:0]
O[1
5:0]
OP[
5:0]
B FD12
E4E
RLO
C=R
1C3
D[1
5:0]
Q[1
5:0]
CE1
5_4
CE3
_0
CLK
AREG
S
REG
FILE
RLO
C=R
1C0
D[1
5:0]
A[3:
0]
WE
CLK
Q[1
5:0]
A FD16
ER
LOC
=R1C
2
D[1
5:0]
CE C
LK
Q[1
5:0]
ADD
SUB
RLO
C=R
-1C
5
ADSU
16
A[15
:0]
ADD
B[15
:0]
CI
CO
OFL
S[15
:0]
LOG
IC
LOG
IC16
RLO
C=R
1C4
A[15
:0]
B[15
:0]
OP[
1:0]
O[1
5:0]
SUM
BUF
RLO
C=R
1C5
BUFT
16X
TBU
F
SLBU
F
RLO
C=R
1C0
BUFT
16X
T
PCIN
CR
RLO
C=R
-1C
8
ADD
16
A[15
:0]
B[15
:0]
CI
CO
OFL
S[15
:0]
ADD
RM
UX
M2_
16Z
RLO
C=R
1C7
A[15
:0]
B[15
:0]
SEL
O[1
5:0]
ZER
O
PC RAM
16X1
6SR
LOC
=R1C
9
A[3:
0]
D[1
5:0]
WE W
CLK
O[1
5:0]
RET
FD16
ER
LOC
=R1C
9
D[1
5:0]
CE C
LK
Q[1
5:0]
PCD
ISP
PCD
ISP1
6R
LOC
=R1C
6
BRD
ISP[
7:0]
BRAN
CH
PCD
ISP[
15:0
]
ZHBU
F
RLO
C=R
1C2
BUFT
8XT
DO
UT
FD16
ER
LOC
=R1C
4
D[1
5:0]
CE C
LK
Q[1
5:0]
FWD
M2_
16R
LOC
=R1C
2
A[15
:0]
B[15
:0]
SEL
O[1
5:0]
Z ZER
OD
ETR
LOC
=R1C
6
I[15:
0]Z
UD
LDBU
F
RLO
C=R
5C2
BUFT
8XT
UD
BUF
RLO
C=R
1C3
BUFT
8XT
LDBU
F
RLO
C=R
5C3
BUFT
8XT
RN
A[3:
0]
RN
B[3:
0]
AREG
[15:
0]
BREG
[15:
0]B[
15:0
]
AMU
X[15
:0]
BMU
X[15
:0]
RET
AD[1
5:0]
A[15
:0]
SUM
[15:
0]
LOG
IC[1
5:0]
PCN
EXT[
15:0
]
IMM
OP[
5:0]
PCD
ISP[
15:0
]
IMM
[11:
0]
DO
UT[
7:0]
BRD
ISP[
7:0]
G,G
,G,G
,G,G
,G,G
RES
ULT
[15:
8]
RES
ULT
[15:
8]
SRI,A
[15:
1]
RES
ULT
[7:0
]
RES
ULT
[15:
0]
PC[1
5:0]
DO
UT[
15:8
]R
ESU
LT[7
:0]
DO
UT[
15:8
]
LOG
ICO
P[1:
0]
DO
UT[
15:0
]
A[14
:0],G
ADD
R[1
5:0]
G,G
,G,D
MAP
C
CLK
RFW
E
ZXT
CLK
CLK
RFW
E
CLK
PCE
SLT
Z
RET
ADT
PCC
E
LDT
GN
D
SRT
SUM
T
LOG
ICT
CI
ADD
FWD
N
A15
CLK
CO
SELP
C
ZER
OPC
CLK
CLK
BCE1
5_4
V
G
SUM
15
PCE
BRAN
CH
PCE
SRI
UD
LDT
UD
T
RET
CE
DM
APC
Klaus Bicker, Carsten Thiele 24/24