Programmierbare Logik



Ähnliche Dokumente
Transkript:

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