Programmierbare Logik Ein Überblick über programmierbare logische Bausteine TU Berlin FG emsp 1
Einleitung Verschiedene Realisierungsmöglichkeiten von logischen Zusammenhängen 1. Kombination von einfachen Standard-ICs 2. Verwendung von standardisierten Bauteilen 3. Verwendung von anwenderspezifischer Software (Mikroprozessor) 4. Verwendung von anwenderspezifischer Hardware TU Berlin FG emsp 2
Übersicht Übersicht anwenderspezifische Hardware ASIC SEMI CUSTOM IC FULL CUSTOM IC GATE ARRAY STANDARD CELL PLD SPLD CPLD FPGA TU Berlin FG emsp 3
Einleitung 1. Einleitung 2. Übersicht anwenderspezifischer Hardware 3. Aufbau programmierbarer Bausteine Simple Programmable Logic Devices (SPLD) Complex Programmable Logic Devices (CPLD) Field Programmable Gate Arrays (FPGA) 4. Technologie der Verbindungselemente 5. Schaltungsentwurf und Programmierung TU Berlin FG emsp 4
2. Übersicht anwenderspezifischer Hardware TU Berlin FG emsp 5
Übersicht Vollständig kundenspezifische ASICs Schaltungsentwurf, Design und Layout geschieht kundenspezifisch + Kompletter Designprozess in einer Hand + Kleine Chipfläche geringe Kosten pro Chip + Volle Kontrolle über jeden Schaltungsteil Hohe Herstellungskosten (Maske) Hohe Entwicklungskosten Nur für sehr große Stückzahlen (> 1 000 000) TU Berlin FG emsp 6
Standardzellen ASICs Übersicht modulares Design mithilfe von Herstellerbibliotheken + Komplexe Schaltungen realisierbar + Standardisierte Entwurfsverfahren + Geringere Entwicklungskosten Hohe Herstellungskosten (Masken) Einschränkungen bei der Schaltungsoptimierung Nur für größere Stückzahlen (> 100 000) TU Berlin FG emsp 7
Übersicht Gate Array vorgefertigter Chip mit Logikelementen; nur die oberste Metallisierungsebene (Verbindungskanäle) muss aufgebracht werden + Komplexe Schaltungen realisierbar + Standardisierte Entwurfsverfahren + Geringere Entwicklungskosten + Geringe Herstellungskosten Weitere Einschränkungen bei der Schaltungsoptimierung Höherer Stromverbrauch TU Berlin FG emsp 8
Übersicht Programmierbare Bausteine Vorgefertigte Chips; Funktion direkt durch den Anwender programmierbar + Kurze Entwicklungszeiten + Komplexe Schaltungen realisierbar + Zusätzliche Strukturen verfügbar (z.b. RAM, Schnittstellen, ) + Große Typenauswahl Chips nicht immer vollständig ausnutzbar TU Berlin FG emsp 9
Übersicht Vergleich verschiedener ASIC-Lösungen Full-Custom Standardbaustein Semi- Custom Programmierbare Logik Entwicklungszeit - Monate Wochen Tage Entwicklungskosten - Teuer Mittel Günstig Fertigungszeit - Wochen Tage Minuten Maskenkosten - Teuer Mittel - Entwurfsänderungen Ressourcenausnutzung - Sehr aufwendig Aufwendig Einfach Sehr gut Sehr gut Mittel Schlecht Stückkosten Günstig Günstig Mittel Teuer TU Berlin FG emsp 10
Übersicht Vorteil anwenderprogrammierbarer Bausteine Integrationsgrad steigt ständig (Moore s Law) Spezielle, umfangreiche Funktionen verhindern universellen Einsatz von Standardbausteinen Geringe Stückzahlen (< 100 000) Immer schnellere Markteinführungen Schnelle Entwicklung von Prototypen TU Berlin FG emsp 11
Übersicht Vergleich ASIC und Microcontroller Direkte Hardware-Implementierung Gesteigerte Leistungsfähigkeit, parallele Verarbeitung Gesteigerte Flexibilität und Komplexität SoC Beispiel: Parallele Verarbeitung Umsetzung der folgenden Funktionen in Hardware und Software: E = A+B F = C+D Z = E-F TU Berlin FG emsp 12
Übersicht E = A+B F = C+D Z = E-F Hardware: Software: A B C D + + E F - Z load A add B store E load C add D store F load E sub F store Z 2 Takte 9 Takte TU Berlin FG emsp 13
3.1 Simple Programmable Logic Devices (SPLD) TU Berlin FG emsp 14
SPLD Kombinatorischer Logik ist vollständig durch UND/ODER-Verknüpfungen darstellbar 2-stufige Struktur aus UND- und ODER-Gattern Eingänge Konjunktionstherme UND-Array ODER-Array Ausgänge TU Berlin FG emsp 15
SPLD Beispiel Bestimmung der konjunktiven Normalform aus der Wahrheitstabelle A B C Y 1 Y 2 0 0 0 1 0 0 0 1 0 0 Y = ABC + ABC + ABC + 1 Y = AC + BC + 1 ABC ABC 0 1 0 1 1 0 1 1 0 0 1 0 0 0 1 1 0 1 1 1 1 1 0 1 1 Y = BC + 2 A 1 1 1 0 1 TU Berlin FG emsp 16
SPLD Vereinfachte Darstellung von UND/ODER-Gattern mit vielen Eingängen Jedes Kreuz markiert eine entsprechende Verbindung, von dem Signal zum Gatter Quelle: Tietze Schenk TU Berlin FG emsp 17
SPLD PLA - Programmable Logic Array UND- und ODER-Matrix frei programmierbar A B C 1 1 1 & & & & & & & & 1 Y 1 1 Y 2 TU Berlin FG emsp 18
SPLD Beispiel: Y = AC + BC + 1 Y = BC + 2 A ABC A B C 1 1 1 & & & & & & & & 1 Y 1 1 Y 2 TU Berlin FG emsp 19
SPLD PAL - Programmable AND Logic Nur UND- Matrix frei programmierbar ODER-Matrix besitzt feste Verbindungen A B C 1 1 1 & & & & & & & & 1 Y 1 1 Y 2 TU Berlin FG emsp 20
SPLD Beispiel: Y = AC + BC + 1 Y = BC + 2 A ABC A B C 1 1 1 & & & & & & & & 1 Y 1 1 Y 2 TU Berlin FG emsp 21
SPLD PLE - Programmable Logic Element UND-Matrix besitzt feste Verbindungen ODER-Matrix frei programmierbar A B C 1 1 1 & & & & & & & & 1 Y 1 1 Y 2 TU Berlin FG emsp 22
SPLD Beispiel: Y = AC + BC + 1 Y = BC + 2 A ABC A B C Y 1 Y 2 0 0 0 1 0 0 0 1 0 0 0 1 0 1 1 0 1 1 0 0 1 0 0 0 1 A B C 1 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 0 1 & & & & & & & & 1 Y 1 1 Y 2 TU Berlin FG emsp 23
SPLD Quelle: Tietze Schenk TU Berlin FG emsp 24
SPLD Quelle: Tietze Schenk TU Berlin FG emsp 25
SPLD Beispiel PAL16R8 Registerausgänge 8+8=16 Eingänge, 8 Ausgänge Programmierbare UND-Matrix 8 Eingänge pro OR-Gatter Quelle: Datenblatt National Semiconductor TU Berlin FG emsp 26
CPLD TU Berlin FG emsp 27
3.2 Complex Programmable Logic Device (CPLD) TU Berlin FG emsp 28
CPLD PAL-ähnliche logische Blöcke werden mit Makrozellen zu LAB (Logic Array Block) vereint Programmierbare zentrale Verbindungsmatrix LAB LAB Macro- zelle Macro- zelle I/O- Block Macrozelle Macrozelle PAL Konfigurierbare Verbindungsmatrix PAL Macrozelle Macrozelle I/O- Block Macrozelle Macrozelle TU Berlin FG emsp 29
CPLD Vorteile: Wesentlich größere, komplexere Schaltungen implementierbar Sequentielle Logik möglich Regelmäßig angeordnete Struktur führt zu voraussehbarem Zeitverhalten Nachteile: Ressourcenverschwendung TU Berlin FG emsp 30
CPLD Quelle: Datenblatt Altera MAX 7000 Programmable Logic Device Family TU Berlin FG emsp 31
CPLD Macrocell Quelle: Datenblatt Altera MAX 7000 Programmable Logic Device Family TU Berlin FG emsp 32
3.3 Field Programmable Gate Array (FPGA) TU Berlin FG emsp 33
FPGA Field Progammable Gate Array (FPGA) im Feld programmierbares Gate Array Matrixförmige Anordnung von logischen Einheiten, den sogenannten configurable logic blocks (CLBs) CLBs können logische Operationen wie AND, OR, Multiplexer, realisieren Verbindungsleitungen programmierbar TU Berlin FG emsp 34
FPGA Anordnung TU Berlin FG emsp 35
FPGA Configurable Logic Blocks (CLBs) Input 0000 0 Look-Up-Table (LUT) für den logischen Zusammenhang FlipFlop zur Speicherung 0001 0010 0011 0100 0101 0110 0 0 0 0 0 0 0111 0 1000 0 1001 0 1010 0 1011 0 1100 0 1101 0 1110 0 1111 1 Output TU Berlin FG emsp 36
FPGA CLB des XC4000 Quelle: Datenblatt Xilinx TU Berlin FG emsp 37
Verbindungsmatrizen FPGA XC4000 Quelle: Datenblatt Xilinx Singles verbinden benachbarte Kreuzpunkte (switch matrix) Double-/Quad-/Long-Leitungen verbinden jeden zweiten/vierten/weiter entfernte Kreuzpunkte TU Berlin FG emsp 38
FPGA I/O-Block CLB des XC4000 Quelle: Datenblatt Xilinx TU Berlin FG emsp 39
FPGA Beispiel Architektur Spartan-3 TU Berlin FG emsp 40
FPGA Hauptunterschiede zu CPLD: Anordnung der logischen Einheiten Zeitverhalten Anzahl der Logikelemente Schematischer Aufbau CPLD Schematischer Aufbau FPGA TU Berlin FG emsp 41
FPGA Vorteile: Höhere Komplexität, Flexibilität Größere Anzahl an FlipFlops Sehr hohe Anzahl Ein-/Ausgänge Nachteile: Geschwindigkeit vom Design abhängig Meist in SRAM-Technik (flüchtiger Speicher) ausgeführt, dadurch externer Programmspeicher erforderlich TU Berlin FG emsp 42
FPGA Übersicht verschiedener FPGA/CPLD-Typen Hersteller/Device Anzahl logic elements Anzahl user-i/o Altera CycloneIII 119.088 auf 8 Bänken insgesamt 534 Altera StratixIII 337.500 Auf 24 Bänken insgesamt 1.152 Altera MAXII (CPLD) (LUTs) 1700 272 Altera MAX7000 (CPLD) (Makrozellen) 256 164 Xilinx Virtex-5 330.000 1.200 Xilinx Spartan-3 74.880 784 Xilinx CoolRunner XPLA3 (CPLD) (Makrozellen) 512 212 Lattice LatticeSC/M 115.000 942 Lattice LatticeXP 19.700 340 Lattice MachXO (CPLD) (LUTs) 2280 271 TU Berlin FG emsp 43
4. Technologie der Verbindungselemente TU Berlin FG emsp 44
Verbindungselemente Verbindungselemente Reversibel Konfigurierbar Irreversibel Speicherzelle Antifuse Fusible Link SRAM EPROM PLICE ViaLink TU Berlin FG emsp 45
Verbindungen Antifuse Herstellung einer leitenden Verbindung; Programmierspannung durchbrennt die Isolierschicht Viel weniger zu programmierende Knoten als bei der Fused-Link- Technologie (nur ca. 2-4%) Anwendung in FPGAs One Time Programmable (OTP) Plice-Antifuse-Element ViaLink-Antifuse-Element TU Berlin FG emsp 46
Verbindungen SRAM (static random access memory): Speicherinhalt steuert Zustand der Verbindung Die Informationen werden in FlipFlops gespeichert Flüchtiger Speicher Sehr schnell, verbraucht aber viel Platz und Strom SRAM Pass Gate SRAM-Speicherzelle TU Berlin FG emsp 47
Verbindungen EPROM (erasable programmable read-only memory) MOSFET mit Floating Gate, Programmierung schaltet dauerhaft aus Nicht flüchtiger Speicher UV-Bestrahlung macht Programmierung rückgängig G S D Floating Gate P-Substrat TU Berlin FG emsp 48
Verbindungen Offene, unprogrammierte Verbindung: D V DD Getrennte, programmierte Verbindung: D V DD D 1 EEPROM (electrically EPROM) und Flash-Speicher Ähnlich wie EPROM, allerdings elektrisch löschbar TU Berlin FG emsp 49
Verbindungen Übersicht S-RAM (E)EPROM Antifuse Reprogrammierbar Ja Ja Nein Flüchtig Ja Nein Nein Bedarf an Chipfläche Hoch Mittel Klein Programmiergeschwindigkeit Schnell Mittel Schnell Typ Dauer Programmier- /Löschvorgang (OT)PROM min / - 0 Max. Anzahl Löschvorgänge Verwendung EPROM ms / 30min 100 Kundenspezifische Produkte EEPROM ms / ms 1000000 FPGAs Flash µs /100ms pro Sektor 1000000 Speicherkarten, µc Antifuse µs / - 0 Satteliten, Sicherheit TU Berlin FG emsp 50
5. Schaltungsentwurf und Programmierung TU Berlin FG emsp 51
Entwurfsmethoden VHDL-Eingabe Texteditor Grafischer Editor VHDL VHDL- Simulation (funktional) Synthese Vorgaben Netzliste Bitsteamgenerierung Pre-Layout- Simulation (funktional oder timing) Herstellerbibliotheken FPGA Place 6 Routing Vorgaben Netzliste mit Timing- Annotation Post-Layout- Simulation (timing) TU Berlin FG emsp 52
Entwicklungsmethoden Textuelle Programmierung in einer Hardware- Beschreibungssprache (High Level Design) HDL Modulare grafische Programmierung (MGP) Entwicklungsumgebungen dienen der Umwandlung in Schaltung, dem Testen und Simulieren TU Berlin FG emsp 53
VHDL VHDL Very High Speed Integrated Circuit (VHSIC) Hardware Description Language (HDL) Synthetisierbares VHDL: Code kann durch Entwicklungswerkzeuge in eine digitale Schaltung umgesetzt werden Nicht synthetisierbares VHDL: Für Simulationsanweisungen TU Berlin FG emsp 54
VHDL entity Spezifiziert die Ein- und Ausgabe-Schnittstelle eines Moduls entity <Entityname> is [generic(<deklaration von Parametern>);] port(<deklaration der Ein- und Ausgänge>); [<Entitydeklarationen>;] end <Entityname>; TU Berlin FG emsp 55
VHDL architecture Spezifiziert das funktionale Verhalten eines Moduls Jeder entity muss (mindestens) eine architecture zugeodnet werden Nebenläufige Abarbeitung der Anweisungen architecture <Architecturename> of <Entityname> is [<Achitecturedeklarationen>;] begin {<VHDL-Anweisungen>}; end < Architecturename >; TU Berlin FG emsp 56
VHDL Beispiel Und-Gatter entity ANDGATE is port( IN1: in bit; IN2: OUTPUT: end ANDGATE ; in bit; out bit); IN1 IN2 & OUTPUT architecture BEHAVIOUR of ANDGATE is begin OUTPUT <= IN1 and IN2; end BEHAVIOUR; TU Berlin FG emsp 57
VHDL process Sequentielle Abarbeitung innerhalb eines Prozesses Änderungen von Signalen in der Empfindlichkeitsliste starten den Prozess Mehrere Prozesse arbeiten parallel zueinander [<Prozessname>:] process [(<Empfindlichkeitsliste>)] [<Deklarationsteil>] begin {<sequentielle Anwendungen>} end process [<Prozessname>:]; TU Berlin FG emsp 58
VHDL Beispiel D-FlipFlop D 1D OUTPUT entity D_FLIPFLOP is CLK C1 port( CLK: in bit; D: in bit; OUTPUT: out bit); end D_FLIPFLOP ; architecture BEHAVIOUR of D_FLIPFLOP is begin FF: process (CLK) --Steigende Taktflanke if CLK'event and CLK = '1' then OUTPUT <= D; end if; end process FF; end BEHAVIOUR; TU Berlin FG emsp 59
VHDL signal Beschreiben physikalische Leitungen bzw. Busse --Declaration interner Signale signal <Signalname>{,<Signalname>}: <Datentyp> [Wertebereich] [:=Wert]; --Zuweisung <Signalname> <= <Wert> <Signalname>; TU Berlin FG emsp 60
VHDL variable Zwischenspeichern in Prozessen oder Unterprogrammen variable <Variablenname> [:=Wert]; --Zuweisung <Variablenname> := <Wert>; constante Konstanter Wert, zu Beginn initialisiert constant <Konstantenname> :=Wert; TU Berlin FG emsp 61
Signaldatentypen bit VHDL std_logic/std_ulogic boolean integer real time... TU Berlin FG emsp 62
oder als Vektoren VHDL std_logic_vector(0 to 8) bit_vector(8 downto 0)... TU Berlin FG emsp 63
VHDL Configuration Bekanntmachen von Komponenten in der architecture component <Entityname> [generic(<deklaration von Parametern>);] port(<deklaration der Ein- und Ausgänge>); end component; Einbindung einer Komponente in das System <Marke> : <Entityname> [generic map(<parameterzuordnung>);] port map(<schnittstellenzuordnung>); TU Berlin FG emsp 64
Beispiel Volladdierer VHDL library ieee; use ieee.std_logic_1164.all; entity HALB_ADD is port( A,B: in std_logic; S,C: out std_logic); end HALB_ADD; A B C S 0 0 0 0 0 1 0 1 1 0 0 1 1 1 1 0 TU Berlin FG emsp 65
Beispiel Volladdierer VHDL architecture BEHAVIOUR of HALB_ADD is begin process(a,b) variable TEMP_IN, TEMP_OUT: std_logic_vector(1 downto 0); begin TEMP_IN := A & B; case TEMP_IN is when "00" => TEMP_OUT := "00"; when "11" => TEMP_OUT := "10"; when others => TEMP_OUT := "01"; end case; S <= TEMP_OUT(0); C <= TEMP_OUT(1); end process; end BEHAVIOUR; TU Berlin FG emsp 66
Beispiel Volladdierer VHDL library ieee; use ieee.std_logic_1164.all; entity VOLL_ADD is port( INPUT: in std_logic_vector(1 downto 0); CIN: in std_logic; SOUT,COUT: out std_logic); end VOLL_ADD; TU Berlin FG emsp 67
Beispiel Volladdierer VHDL architecture BEHAVIOUR of VOLL_ADD is signal INT_A, INT_B, INT_C: std_logic; component HALB_ADD port( A,B: in std_logic S,C: out std_logic); end component ; begin H_ADD_A: HALB_ADD port map( A => INPUT(1), B => INPUT(0), S => INT_B, C => INT_A); H_ADD_B: HALB_ADD port map( A => INT_B, B => CIN, S => SOUT, C => INT_C); COUT <= INT_A or INT_C; end BEHAVIOUR; TU Berlin FG emsp 68
VHDL Testbench Zur Simulation der Funktionen Generiert alle Eingangssignale (Testvektoren) für das zu testende Modul Verwendung von nicht synthetisierbarem VHDL TU Berlin FG emsp 69
Beispiel Volladdierer VHDL library ieee; use ieee.std_logic_1164.all; entity TEST_ADD is end TEST_ADD; architecture BEHAVIOUR of TEST_ADD is signal INPUT: std_logic_vector(1 downto 0) := "00"; signal IN_C: std_logic := '0'; signal OUTPUT: std_logic; signal OUT_C: std_logic; TU Berlin FG emsp 70
Beispiel Volladdierer VHDL component VOLL_ADD port( INPUT: in std_logic_vector(1 downto 0); CIN: in std_logic; SOUT,COUT: out std_logic); end component; begin ADD: VOLL_ADD port map( INPUT => INPUT, CIN => IN_C, SOUT => OUTPUT, COUT => OUT_C); TU Berlin FG emsp 71
Beispiel Volladdierer VHDL STIMULUS : process begin wait for 50 ns; INPUT <= "01"; wait for 50 ns; INPUT <= "10"; wait for 50 ns; INPUT <= "11"; wait for 50 ns; INPUT <= "00"; IN_C <= '1'; wait for 50 ns; INPUT <= "01"; wait for 50 ns; INPUT <= "10"; wait for 50 ns; INPUT <= "11"; end process STIMULUS; end BEHAVIOUR; TU Berlin FG emsp 72
VHDL Simulation TU Berlin FG emsp 73
VHDL-Übung Entwurf eines nicht-rekursiven FIR-Filters Paralleler Dateneingang x[n] und -ausgang y[n] y[ n] = N k = 0 a k x[ n k] Beschränkung: Gleitender Mittelwert Filter 3. Ordnung Koeffizienten gegeben mit a 0 = a 1 = a 2 = a 3 = 0,25 [ x[ n] + x[ n 1] + x[ n 2] + x[ 3] ] y[ n] = 0,25 n TU Berlin FG emsp 74
VHDL-Übung clk x[n] x[n-1] x[n-2] x[n-3] Register Register Register a 0 a 1 a 2 a 3 y[n] TU Berlin FG emsp 75
VHDL-Übung Verwendung von Dezimalzahlen für die Koeffizienten Koeffizienten a ersetzen durch a x = 1/2 Ax Division durch 2 x entspricht dem Schieben um x Bit nach rechts a x = ¼ A x = 2 TU Berlin FG emsp 76
VHDL-Übung library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity FIR_FILTER is generic(width: positive := 8); port( CLK: in bit; X: in std_logic_vector(width-1 downto 0); Y: out std_logic_vector(width-1 downto 0)); end FIR_FILTER; TU Berlin FG emsp 77
VHDL-Übung architecture BEHAVE of FIR_FILTER is begin REG: process(clk) variable X3, X2, X1 : std_logic_vector(width-1 downto 0); variable TEMP_Y : std_logic_vector(width-1+2 downto 0); begin if CLK='1' and CLK'event then TEMP_Y := ("00"&X)+("00"&X1)+("00"&X2)+("00"&X3); Y <= TEMP_Y(WIDTH-1+2 downto 2); X3 := X2; X2 := X1; X1 := X; end if; end process REG; end; TU Berlin FG emsp 78
library ieee; use ieee.std_logic_1164.all; VHDL-Übung entity FIR_TEST is end FIR_TEST; architecture BEHAVE of FIR_TEST is component FIR_FILTER port( CLK: in bit; X: in std_logic_vector(7 downto 0); Y: out std_logic_vector(7 downto 0)); end component; constant PERIOD: time := 10 ns; TU Berlin FG emsp 79
signal CLOCK: bit := '0'; VHDL-Übung signal SPRUNG, OUTPUT : std_logic_vector(7 downto 0); begin CLK_SIM: process begin wait for (PERIOD/2); CLOCK <= not CLOCK; end process CLK_SIM; SPRUNG_SIM: process begin SPRUNG <= "00000000"; wait for (16*PERIOD); SPRUNG <= "11111111"; wait for (16*PERIOD); end process SPRUNG_SIM; TU Berlin FG emsp 80
VHDL Übung FILTER: FIR_FILTER port map(clk => CLOCK, X => SPRUNG, Y => OUTPUT); end; TU Berlin FG emsp 81
Hersteller Wichtigsten Hersteller von CPLD und FPGA: Xilinx: CoolRunner (low-power CPLD), XC9500 (CPLD), Spartan (FPGA), Virtex (FPGA) Altera: MAX (CPLD), Cyclone (low-cost FPGA), Stratix (FPGA), ArriaGX (FPGA) Lattice: ispxpga (FPGA), ispxpld (CPLD), ispmach (low-power CPLD), ispgal (CPLD), LatticeSC/XP (FPGA) Actel: Igloo (low-power FPGA), ProASIC3 (low-power FPGA), RTAX (space-systems FPGA), Fusion (mixed-signal PSC) Cypress: PSoC (µc + analoge und digitale Komponenten), Delta39K (CPLD), Ultra 37000 (CPLD) Quicklogic: Eclipse (FPGA), PolarPro (low-power FPGA), ArcticLink Atmel: AT40 (FPGA), AT6000 (FPGA), FPSLIC (FPGA + µc + SRAM) Anadigm: AN120E04 (FPAA ) TU Berlin FG emsp 82