<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://www.mikrocontroller.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=87.178.104.168</id>
	<title>Mikrocontroller.net - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://www.mikrocontroller.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=87.178.104.168"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/87.178.104.168"/>
	<updated>2026-04-10T14:41:55Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=I%C2%B2C&amp;diff=96973</id>
		<title>I²C</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=I%C2%B2C&amp;diff=96973"/>
		<updated>2017-08-10T13:33:03Z</updated>

		<summary type="html">&lt;p&gt;87.178.104.168: /* Reale Beispiele */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;I²C&#039;&#039;&#039; (gesprochen &amp;quot;I quadrat C&amp;quot;) ist ein synchroner serieller Zweidraht-[[Bus]], der jeweils eine bidirektionale Daten- und Taktleitung verwendet und für die Kommunikation zwischen [[IC]]s über kleine Distanzen geeignet ist. Die Bezeichnung steht für IIC, Inter-Integrated Circuit. Der Bus wurde Anfang der 80er Jahre von Philips entwickelt.&lt;br /&gt;
&lt;br /&gt;
Aus Lizenzgründen heißt der I²C Bus bei manchen Herstellern auch &#039;&#039;&#039;TWI&#039;&#039;&#039;, two wire interface. Im PC wird ein dem I²C-Bus sehr ähnliches System benutzt, um z.&amp;amp;nbsp;B. die Daten eines SDRAM-Modules auszulesen. Dieser nennt sich [[SMBus]] (System Management Bus).&lt;br /&gt;
&lt;br /&gt;
=== Busstruktur und Adressierung ===&lt;br /&gt;
In einem I²C-Bus gibt es mindestens einen Master sowie bis zu 127 Slaves. Ein I²C-Bus mit mehreren Mastern wird als &amp;quot;Multi-Master-Bus&amp;quot; bezeichnet. &lt;br /&gt;
&lt;br /&gt;
Die Slaves in einem Verbund müssen alle mit einer eigenen, individuellen Adresse codiert werden. Somit sind sie für jedem Master individuell anzusprechen. Darüber hinaus existiert ein sogenannter Broadcastkanal, mit dem alle Slaves gleichzeitig angesprochen werden können. &lt;br /&gt;
&lt;br /&gt;
Ein Problem mit manchen Slaves ist der eingeschränkte Adressbereich, d.h. sie liegen auf einem definierten Bereich und haben darin z.b. nur 3 Bit als Programmieroption. Somit schließen diese Slaves indirekt andere Adressen aus.&lt;br /&gt;
&lt;br /&gt;
=== Adressierung ===&lt;br /&gt;
Der (oder die) Master sprechen die Slaves jeweils aktiv an. Slaves können &#039;&#039;&#039;nie&#039;&#039;&#039; selbstständig beginnen, Daten zu senden. Um eine Kommunikation zu etablieren, übernimmt der Master, der Daten senden oder empfangen möchte, den Bus und gibt die (7-bit- bzw. 10-bit-)Adresse des Slaves aus, mit dem er kommunizieren möchte. &lt;br /&gt;
Nach der Adresse teilt der Master dem entsprechenden Slave mit, ob er Daten senden oder empfangen möchte. Danach werden die eigentlichen Daten (entweder vom Master oder Slave) auf den Bus gelegt. Hat der Master den Lese- oder Schreibvorgang abgeschlossen, so gibt er den Bus wieder frei.&lt;br /&gt;
Sofern mehrere Master vorhanden sind, stellt ein logisches Protokoll sicher, dass sich diese nicht gegenseitig stören. Im Fall einer broad cast Operation kann ein time slot System sicherstellen, dass nie mehr als ein slave gleichzeitig antwortet.&lt;br /&gt;
&lt;br /&gt;
=== Handshaking / Quittierung ===&lt;br /&gt;
Die Kommunikation auf Bitebene erfolgt seitens des Masters durch Senden von Start / Stopp Bedingungen, die sich aus der Kombination der Zustände von Takt- und Datenleitung ergeben. Um die erfolgreiche Kommunikation zwischen Master und Slave sicherzustellen, senden Slaves - ausser im broadcast Betrieb - nach erfolgreicher Dekodierung ihrer Adresse sowie im Schreibfall ein Acknowledge, in dem sie die Datenleitung ziehen. Diese muss dazu vom Master rechtzeitig freigegeben worden sein und beobachtet werden. Umgekehrt quittiert der Master in ähnlicher Weise den Empfang eines Datenbytes vom Slave und signalisiert somit weitere Empfangsbereitschaft. Der Takt wird immer vom Master getrieben.&lt;br /&gt;
&lt;br /&gt;
=== Übertragungsraten  ===&lt;br /&gt;
Die genormte Übertragungsrate beträgt beim sogenannten &amp;quot;standard mode&amp;quot; 100 kbit/s, beim &amp;quot;fast mode&amp;quot; 400 kbit/s und beim &amp;quot;fast mode+&amp;quot; 1000kbit/sec. Im sogenannten high-speed mode, der mit etwas anderen Spannungs- und Stromrandbedingungen arbeitet sind es zu 3,4 MBit/s. Die Raten beziehen sich auf die festgelegten Taktraten. Andere sind möglich, jedoch nicht genormt.&lt;br /&gt;
&lt;br /&gt;
Die reale maximale Datenrate ist infolge des asynchronen Betriebs und der Pausen meistens etwas niedriger. Zudem kann - falls die Taktrate für einen Slave zu hoch ist - die Clock-Leitung auf Null durch ihn auf GND gezogen- und damit die Übertragung verlangsamt werden, was als sog. &amp;quot;Clock Stretching&amp;quot; bezeichnet wird. Dies ist auf Bit- wie auf Byte-Ebene möglich; ersteres allerdings nicht im high-speed mode.&lt;br /&gt;
&lt;br /&gt;
==== Reale Beispiele ====&lt;br /&gt;
Um sich an längere Übertragungswege anzupassen, kann man die Taktrate theoretisch beliebig vermindern, jedoch erzeugen einige Bausteine aber irgendwann ein Time-Out. Manche interpretieren einen lange niedergehaltenen Takt auch als Reset. Daher sind Taktraten von unter 1kbps in der Regel nicht denkbar.&lt;br /&gt;
&lt;br /&gt;
Als Beispiel können jedoch mit einer Taktfrequenz von nur 5 kbit/s durchaus mehrere Meter überbrückt werden:&lt;br /&gt;
&lt;br /&gt;
Erfahrungen mit den Atmegas (gemessene I2C-Taktfrequenzen):&lt;br /&gt;
* 16,000MHz - schafft sauber bis zu 700KHz&lt;br /&gt;
* 18,432MHz - schafft sauber bis zu 950KHz&lt;br /&gt;
&lt;br /&gt;
Selbst unter schlechten Bedingungen wie...&lt;br /&gt;
&lt;br /&gt;
* 50cm 6-adriges Spiralkabel, frei schwingend verbaut in einem Rennwagen als Verbindung zwischen Lenkraddisplay und Amaturenbrett&lt;br /&gt;
* Nähe zu nicht geschirmten Leitungen mit 12V, GND und 5V PWM zum Dimmen von LEDs&lt;br /&gt;
* grausamen Umgebungsbedingungen, Fahrten im Regen, Schnee oder bei glühender Sonne und gefühlten 100° C ;-) auf der Rennstrecke.&lt;br /&gt;
&lt;br /&gt;
... hat der Bus ohne Probleme funktioniert.&lt;br /&gt;
&lt;br /&gt;
Um anders herum hohe Bandbreiten zu erreichen, lassen sich krumme I2C-Frequenzen ausserhalb der SPEC verwenden, damit sie besser zu den Controllern und deren Taktfrequenzen passen.&lt;br /&gt;
&lt;br /&gt;
=== Bausteine ===&lt;br /&gt;
&lt;br /&gt;
Neben Mikrocontrollern gibt es eine Reihe von Peripheriebausteinen, die per I²C angeschlossen werden können. Eine gute Anlaufstelle bei der Suche ist die unten angegebene Seite des &amp;quot;Erfinders&amp;quot; Philips, heute als [http://www.nxp.com NXP] bekannt.&lt;br /&gt;
&lt;br /&gt;
*serielle [[Speicher#EEPROM | EEPROM]]s &lt;br /&gt;
** [http://www.datasheetcatalog.net/cgi-bin/helo.pl?text=24C01&amp;amp;action=Search 24Cxx]&lt;br /&gt;
** [http://ics.nxp.com/products/pcf/seeproms/ PCF85xx von NXP, 256-2048 Byte]&lt;br /&gt;
&lt;br /&gt;
*I/O-Portexpander&lt;br /&gt;
** [[Port-Expander_PCF8574|PCF8574]]&lt;br /&gt;
** [http://www.mikrocontroller.net/part/MCP23008 MCP23008] (8-bit) von Microchip&lt;br /&gt;
** [http://www.mikrocontroller.net/part/MCP23017 MCP23017](16-bit) von Microchip&lt;br /&gt;
&lt;br /&gt;
* I2C MUX, zum Anschluss von ICs mit gleicher, fester Adresse&lt;br /&gt;
** [http://www.datasheetcatalog.org/cgi-bin/helo.pl?field=Nume&amp;amp;type=C&amp;amp;text=PCA9545A&amp;amp;producedby=&amp;amp;action=Search PCA9545A]&lt;br /&gt;
&lt;br /&gt;
* [[AD-Wandler]]&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/182614 12x12 Bit ADC MAX1238]&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/182614 12x10 Bit ADC MAX1138]&lt;br /&gt;
** [http://www.maxim-ic.com/datasheet/index.mvp/id/1890 MAX127 und MAX128 von Maxim, 12bit x8, PDIP24+SSOP28]&lt;br /&gt;
** [http://www.jtronics.de/platinen.html 12x8  Bit ADC MAX1038]&lt;br /&gt;
&lt;br /&gt;
* [[DA-Wandler]]&lt;br /&gt;
** [http://www.datasheetcatalog.net/cgi-bin/helo.pl?field=Nume&amp;amp;type=C&amp;amp;text=TDA8444&amp;amp;producedby=&amp;amp;action=Search TDA8444, 8x6Bit]&lt;br /&gt;
&lt;br /&gt;
* Uhrenbausteine&lt;br /&gt;
** [http://ww1.microchip.com/downloads/en/DeviceDoc/20005010F.pdf MCP7940N]&lt;br /&gt;
** [http://www.datasheetcatalog.net/cgi-bin/helo.pl?field=Nume&amp;amp;type=C&amp;amp;text=PCF8583&amp;amp;producedby=&amp;amp;action=Search PCF8583, mit 256 Bytes RAM]&lt;br /&gt;
** DS1307&lt;br /&gt;
&lt;br /&gt;
* [[LCD]]-Treiber&lt;br /&gt;
** [http://www.datasheetcatalog.net/cgi-bin/helo.pl?field=Nume&amp;amp;type=C&amp;amp;text=PCF8577&amp;amp;producedby=&amp;amp;action=Search PCF8577, 2x32 Segmente]&lt;br /&gt;
&lt;br /&gt;
*[[LED]]-Treiber&lt;br /&gt;
** [http://www.mikrocontroller.net/part/HT16K33 HT16K33] (RAM Mapping 16*8 LED) von Holtek&lt;br /&gt;
** SAA1064 (seit 2005 abgekündigt! Restposten sehr teuer)&lt;br /&gt;
&lt;br /&gt;
* [[Temperatursensor|Temperatursensoren]]&lt;br /&gt;
** [http://www.datasheetcatalog.net/cgi-bin/helo.pl?text=DS1621&amp;amp;action=Search DS1621]&lt;br /&gt;
** [http://www.datasheetcatalog.net/cgi-bin/helo.pl?text=lm75&amp;amp;action=Search LM75]&lt;br /&gt;
** [http://www.sensirion.com/en/pdf/product_information/Datasheet-humidity-sensor-SHT21.pdf SHT21]&lt;br /&gt;
** TMP101 von TexasInstruments&lt;br /&gt;
** TMP175 von TI (mehr als 8 Bausteine im gleichen Bus möglich)&lt;br /&gt;
&lt;br /&gt;
* Drucksensoren&lt;br /&gt;
** SMD500&lt;br /&gt;
** BMP085&lt;br /&gt;
&lt;br /&gt;
* Beschleunigungssensor&lt;br /&gt;
** [http://www.mikrocontroller.net/articles/BMA020 BMA020]&lt;br /&gt;
&lt;br /&gt;
* Audioverstärker&lt;br /&gt;
** TPA2016&lt;br /&gt;
** TPA2026&lt;br /&gt;
** TDA8594&lt;br /&gt;
&lt;br /&gt;
* TPMs (Trusted Platform Module)&lt;br /&gt;
** [http://www.infineon.com/cms/de/product/security-and-smart-card-solutions/optiga-embedded-security-solutions/optiga-tpm/channel.html?channel=5546d462503812bb015066de24291768 SLB 9645]&lt;br /&gt;
&lt;br /&gt;
=== Galvanische Trennung ===&lt;br /&gt;
* http://www.analog.com/static/imported-files/application_notes/AN_913.pdf&lt;br /&gt;
* http://www.analog.com/en/interface/digital-isolators/products/index.html#Isolated_I2C_Isolators&lt;br /&gt;
* http://www.silabs.com/Support%20Documents/TechnicalDocs/Si840x.pdf &#039;&#039;&#039;(Not Recommended for New Designs)&#039;&#039;&#039;&lt;br /&gt;
* http://www.silabs.com/applications/industrial/Pages/i2c-isolation.aspx&lt;br /&gt;
* http://www.mikrocontroller.net/attachment/5670/Galvanische_Trennung_fuer_I2C-Bus.pdf&lt;br /&gt;
* http://www.esacademy.com/en/library/technical-articles-and-documents/miscellaneous/i2c-bus/frequently-asked-questions/i2c-faq.html&lt;br /&gt;
* http://www.mikrocontroller.net/topic/17425#125464&lt;br /&gt;
* https://www.mikrocontroller.net/articles/Modulares_Board#I2C_Bus_Isolator&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[AT91-TWI]]&lt;br /&gt;
* [[AVR TWI]]&lt;br /&gt;
* [[I2C als Hausbus]]&lt;br /&gt;
* [[Modulares Board]]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/181115#1748880 Forumsbeitrag]: I2C-Adressen mit 7 oder 8 Bit&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/385874#4410598 Forumsbeitrag]: I2C über lange Entfernungen als differentielles Signal übertragen.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://ics.nxp.com/interface/ NXP (ehemals Philips) Produktseite]&lt;br /&gt;
* [http://www.nxp.com/acrobat/usermanuals/UM10204_3.pdf I2C Spezifikation 3.0]&lt;br /&gt;
* [http://www.i2c-bus.org I²C Bus FAQ, Einführung, Hintergrundinformationen zum I2C Bus auf Deutsch und Englisch]&lt;br /&gt;
* [http://www.robotikhardware.de/download/rn_pc_i2c.pdf robotikhardware.de]&lt;br /&gt;
* [http://www.elektronikwissen.net/pegelwandler/7-bidirektionaler-levelshifter-fuer-i2c.html Betrieb von 3V3 und 5V-Bausteinen am I2C-Bus]&lt;br /&gt;
&lt;br /&gt;
=== Bibliotheken ===&lt;br /&gt;
* [http://www.jtronics.de/avr-projekte.html AVR TWI Slave]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/235733#2398750 TWI MASTER in ASM]&lt;br /&gt;
* [http://homepage.hispeed.ch/peterfleury/avr-software.html AVR TWI/I2C MASTER in C]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/87597 AVR TWI Master und Slave Funktionen in C]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/266642 universelle I2C Master Prozedur für AVR]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/103600 I2C (TWI) Sniffer mit AVR]&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/334653#3697582 I2CLCD], HD44780 LCD Ansteuerung über I2C Bus&lt;br /&gt;
&lt;br /&gt;
===I²C-Interface===&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/155136#1462320 Beitrag &amp;quot;i2c usb interface&amp;quot;] (Linux)&lt;br /&gt;
* [http://sprut.de/electronic/pic/projekte/usb4all/usb4all.htm USB4ALL bei sprut.de] universeller USB-Baustein, auch für I2C&lt;br /&gt;
* [http://www.totalphase.com/products/aardvark-i2cspi/ Aardvark I2C/SPI Host Adapter], Universeller Adapter für I2C und SPI&lt;br /&gt;
* [http://www.elv.de/usb-i2c-interface-komplettbausatz-inkl-gehaeuse-bearbeitet-und-bedruckt-usb-kabel-3-anschlusskabel.html USB-I2C-Interface], Komplettbausatz bei ELV&lt;br /&gt;
&lt;br /&gt;
===I²C-Monitor===&lt;br /&gt;
*http://realterm.sourceforge.net/#I2C%20Bus&lt;br /&gt;
*http://www.avrfreaks.net/index.php?module=FreaksTools&amp;amp;func=viewItem&amp;amp;item_id=411&lt;br /&gt;
* [http://www.telos.info/p/hw/conniimm20/ telos Connii MM 2.0 - I²C Monitor with USB Interface]&lt;br /&gt;
* [http://www.telos.info/p/hw/traciixl20/ telos Tracii XL 2.0 - High-End I²C Monitor]&lt;br /&gt;
*http://i2cchip.com/&lt;br /&gt;
* [http://www.ullihome.de/index.php/Hauptseite#USB_AVR-Lab I2C Logger Firmware für USB AVR-ISP]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/41535 I2C Monitor mit Mega8 (Firmware)]&lt;br /&gt;
* [http://warmcat.com/milksop/cheapi2c.html Cheapi2c] by Numbnut (Andy Green) uses your PC CPU (Linux only!) and printer port to perform realtime snooping of a standard 100kHz I2C bus with 100% capture.&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/103600#905495 I2C (TWI) Sniffer]. Basierend auf einem ATtiny85 mit Ausgabe auf RS232 (C und ASM).&lt;br /&gt;
* [http://en.radzio.dxp.pl/i2c-sniffer/ I2C/TWI bus sniffer/analyzer] (ATTiny2313 @ 20 MHz und USB über FTDI FT245RL oder UM245R)&lt;br /&gt;
* [http://www.i2cchip.com/start_bit_detector1.jpg I2C Startbit-Detector] auf [http://www.i2cchip.com/ www.i2cchip.com]&lt;br /&gt;
* [http://www.harbaum.org/till/i2c_tiny_usb/index.shtml i2c-tiny-usb open source/open hardware zum Auslesen mit einem PC]&lt;br /&gt;
&lt;br /&gt;
[[Category:I2C| ]]&lt;/div&gt;</summary>
		<author><name>87.178.104.168</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=I%C2%B2C&amp;diff=96972</id>
		<title>I²C</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=I%C2%B2C&amp;diff=96972"/>
		<updated>2017-08-10T13:21:19Z</updated>

		<summary type="html">&lt;p&gt;87.178.104.168: /* Busstruktur und Adressierung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;I²C&#039;&#039;&#039; (gesprochen &amp;quot;I quadrat C&amp;quot;) ist ein synchroner serieller Zweidraht-[[Bus]], der jeweils eine bidirektionale Daten- und Taktleitung verwendet und für die Kommunikation zwischen [[IC]]s über kleine Distanzen geeignet ist. Die Bezeichnung steht für IIC, Inter-Integrated Circuit. Der Bus wurde Anfang der 80er Jahre von Philips entwickelt.&lt;br /&gt;
&lt;br /&gt;
Aus Lizenzgründen heißt der I²C Bus bei manchen Herstellern auch &#039;&#039;&#039;TWI&#039;&#039;&#039;, two wire interface. Im PC wird ein dem I²C-Bus sehr ähnliches System benutzt, um z.&amp;amp;nbsp;B. die Daten eines SDRAM-Modules auszulesen. Dieser nennt sich [[SMBus]] (System Management Bus).&lt;br /&gt;
&lt;br /&gt;
=== Busstruktur und Adressierung ===&lt;br /&gt;
In einem I²C-Bus gibt es mindestens einen Master sowie bis zu 127 Slaves. Ein I²C-Bus mit mehreren Mastern wird als &amp;quot;Multi-Master-Bus&amp;quot; bezeichnet. &lt;br /&gt;
&lt;br /&gt;
Die Slaves in einem Verbund müssen alle mit einer eigenen, individuellen Adresse codiert werden. Somit sind sie für jedem Master individuell anzusprechen. Darüber hinaus existiert ein sogenannter Broadcastkanal, mit dem alle Slaves gleichzeitig angesprochen werden können. &lt;br /&gt;
&lt;br /&gt;
Ein Problem mit manchen Slaves ist der eingeschränkte Adressbereich, d.h. sie liegen auf einem definierten Bereich und haben darin z.b. nur 3 Bit als Programmieroption. Somit schließen diese Slaves indirekt andere Adressen aus.&lt;br /&gt;
&lt;br /&gt;
=== Adressierung ===&lt;br /&gt;
Der (oder die) Master sprechen die Slaves jeweils aktiv an. Slaves können &#039;&#039;&#039;nie&#039;&#039;&#039; selbstständig beginnen, Daten zu senden. Um eine Kommunikation zu etablieren, übernimmt der Master, der Daten senden oder empfangen möchte, den Bus und gibt die (7-bit- bzw. 10-bit-)Adresse des Slaves aus, mit dem er kommunizieren möchte. &lt;br /&gt;
Nach der Adresse teilt der Master dem entsprechenden Slave mit, ob er Daten senden oder empfangen möchte. Danach werden die eigentlichen Daten (entweder vom Master oder Slave) auf den Bus gelegt. Hat der Master den Lese- oder Schreibvorgang abgeschlossen, so gibt er den Bus wieder frei.&lt;br /&gt;
Sofern mehrere Master vorhanden sind, stellt ein logisches Protokoll sicher, dass sich diese nicht gegenseitig stören. Im Fall einer broad cast Operation kann ein time slot System sicherstellen, dass nie mehr als ein slave gleichzeitig antwortet.&lt;br /&gt;
&lt;br /&gt;
=== Handshaking / Quittierung ===&lt;br /&gt;
Die Kommunikation auf Bitebene erfolgt seitens des Masters durch Senden von Start / Stopp Bedingungen, die sich aus der Kombination der Zustände von Takt- und Datenleitung ergeben. Um die erfolgreiche Kommunikation zwischen Master und Slave sicherzustellen, senden Slaves - ausser im broadcast Betrieb - nach erfolgreicher Dekodierung ihrer Adresse sowie im Schreibfall ein Acknowledge, in dem sie die Datenleitung ziehen. Diese muss dazu vom Master rechtzeitig freigegeben worden sein und beobachtet werden. Umgekehrt quittiert der Master in ähnlicher Weise den Empfang eines Datenbytes vom Slave und signalisiert somit weitere Empfangsbereitschaft. Der Takt wird immer vom Master getrieben.&lt;br /&gt;
&lt;br /&gt;
=== Übertragungsraten  ===&lt;br /&gt;
Die genormte Übertragungsrate beträgt beim sogenannten &amp;quot;standard mode&amp;quot; 100 kbit/s, beim &amp;quot;fast mode&amp;quot; 400 kbit/s und beim &amp;quot;fast mode+&amp;quot; 1000kbit/sec. Im sogenannten high-speed mode, der mit etwas anderen Spannungs- und Stromrandbedingungen arbeitet sind es zu 3,4 MBit/s. Die Raten beziehen sich auf die festgelegten Taktraten. Andere sind möglich, jedoch nicht genormt.&lt;br /&gt;
&lt;br /&gt;
Die reale maximale Datenrate ist infolge des asynchronen Betriebs und der Pausen meistens etwas niedriger. Zudem kann - falls die Taktrate für einen Slave zu hoch ist - die Clock-Leitung auf Null durch ihn auf GND gezogen- und damit die Übertragung verlangsamt werden, was als sog. &amp;quot;Clock Stretching&amp;quot; bezeichnet wird. Dies ist auf Bit- wie auf Byte-Ebene möglich; ersteres allerdings nicht im high-speed mode.&lt;br /&gt;
&lt;br /&gt;
==== Reale Beispiele ====&lt;br /&gt;
Um sich an längere Übertragungswege anzupassen, kann man die Taktrate theoretisch beliebig vermindern, jedoch erzeugen einige Bausteine aber irgendwann ein Time-Out. Als Beispiel können mit einer Taktfrequenz von nur 5 kbit/s durchaus mehrere Meter überbrückt werden.&lt;br /&gt;
&lt;br /&gt;
Erfahrungen mit den Atmegas (gemessene I2C-Taktfrequenzen):&lt;br /&gt;
* 16,000MHz - schafft sauber bis zu 700KHz&lt;br /&gt;
* 18,432MHz - schafft sauber bis zu 950KHz&lt;br /&gt;
&lt;br /&gt;
Selbst unter schlechten Bedingungen wie...&lt;br /&gt;
&lt;br /&gt;
* 50cm 6-adriges Spiralkabel, frei schwingend verbaut in einem Rennwagen als Verbindung zwischen Lenkraddisplay und Amaturenbrett&lt;br /&gt;
* Nähe zu nicht geschirmten Leitungen mit 12V, GND und 5V PWM zum Dimmen von LEDs&lt;br /&gt;
* grausamen Umgebungsbedingungen, Fahrten im Regen, Schnee oder bei glühender Sonne und gefühlten 100° C ;-) auf der Rennstrecke.&lt;br /&gt;
&lt;br /&gt;
... hat der Bus ohne Probleme funktioniert.&lt;br /&gt;
&lt;br /&gt;
=== Bausteine ===&lt;br /&gt;
&lt;br /&gt;
Neben Mikrocontrollern gibt es eine Reihe von Peripheriebausteinen, die per I²C angeschlossen werden können. Eine gute Anlaufstelle bei der Suche ist die unten angegebene Seite des &amp;quot;Erfinders&amp;quot; Philips, heute als [http://www.nxp.com NXP] bekannt.&lt;br /&gt;
&lt;br /&gt;
*serielle [[Speicher#EEPROM | EEPROM]]s &lt;br /&gt;
** [http://www.datasheetcatalog.net/cgi-bin/helo.pl?text=24C01&amp;amp;action=Search 24Cxx]&lt;br /&gt;
** [http://ics.nxp.com/products/pcf/seeproms/ PCF85xx von NXP, 256-2048 Byte]&lt;br /&gt;
&lt;br /&gt;
*I/O-Portexpander&lt;br /&gt;
** [[Port-Expander_PCF8574|PCF8574]]&lt;br /&gt;
** [http://www.mikrocontroller.net/part/MCP23008 MCP23008] (8-bit) von Microchip&lt;br /&gt;
** [http://www.mikrocontroller.net/part/MCP23017 MCP23017](16-bit) von Microchip&lt;br /&gt;
&lt;br /&gt;
* I2C MUX, zum Anschluss von ICs mit gleicher, fester Adresse&lt;br /&gt;
** [http://www.datasheetcatalog.org/cgi-bin/helo.pl?field=Nume&amp;amp;type=C&amp;amp;text=PCA9545A&amp;amp;producedby=&amp;amp;action=Search PCA9545A]&lt;br /&gt;
&lt;br /&gt;
* [[AD-Wandler]]&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/182614 12x12 Bit ADC MAX1238]&lt;br /&gt;
** [http://www.mikrocontroller.net/topic/182614 12x10 Bit ADC MAX1138]&lt;br /&gt;
** [http://www.maxim-ic.com/datasheet/index.mvp/id/1890 MAX127 und MAX128 von Maxim, 12bit x8, PDIP24+SSOP28]&lt;br /&gt;
** [http://www.jtronics.de/platinen.html 12x8  Bit ADC MAX1038]&lt;br /&gt;
&lt;br /&gt;
* [[DA-Wandler]]&lt;br /&gt;
** [http://www.datasheetcatalog.net/cgi-bin/helo.pl?field=Nume&amp;amp;type=C&amp;amp;text=TDA8444&amp;amp;producedby=&amp;amp;action=Search TDA8444, 8x6Bit]&lt;br /&gt;
&lt;br /&gt;
* Uhrenbausteine&lt;br /&gt;
** [http://ww1.microchip.com/downloads/en/DeviceDoc/20005010F.pdf MCP7940N]&lt;br /&gt;
** [http://www.datasheetcatalog.net/cgi-bin/helo.pl?field=Nume&amp;amp;type=C&amp;amp;text=PCF8583&amp;amp;producedby=&amp;amp;action=Search PCF8583, mit 256 Bytes RAM]&lt;br /&gt;
** DS1307&lt;br /&gt;
&lt;br /&gt;
* [[LCD]]-Treiber&lt;br /&gt;
** [http://www.datasheetcatalog.net/cgi-bin/helo.pl?field=Nume&amp;amp;type=C&amp;amp;text=PCF8577&amp;amp;producedby=&amp;amp;action=Search PCF8577, 2x32 Segmente]&lt;br /&gt;
&lt;br /&gt;
*[[LED]]-Treiber&lt;br /&gt;
** [http://www.mikrocontroller.net/part/HT16K33 HT16K33] (RAM Mapping 16*8 LED) von Holtek&lt;br /&gt;
** SAA1064 (seit 2005 abgekündigt! Restposten sehr teuer)&lt;br /&gt;
&lt;br /&gt;
* [[Temperatursensor|Temperatursensoren]]&lt;br /&gt;
** [http://www.datasheetcatalog.net/cgi-bin/helo.pl?text=DS1621&amp;amp;action=Search DS1621]&lt;br /&gt;
** [http://www.datasheetcatalog.net/cgi-bin/helo.pl?text=lm75&amp;amp;action=Search LM75]&lt;br /&gt;
** [http://www.sensirion.com/en/pdf/product_information/Datasheet-humidity-sensor-SHT21.pdf SHT21]&lt;br /&gt;
** TMP101 von TexasInstruments&lt;br /&gt;
** TMP175 von TI (mehr als 8 Bausteine im gleichen Bus möglich)&lt;br /&gt;
&lt;br /&gt;
* Drucksensoren&lt;br /&gt;
** SMD500&lt;br /&gt;
** BMP085&lt;br /&gt;
&lt;br /&gt;
* Beschleunigungssensor&lt;br /&gt;
** [http://www.mikrocontroller.net/articles/BMA020 BMA020]&lt;br /&gt;
&lt;br /&gt;
* Audioverstärker&lt;br /&gt;
** TPA2016&lt;br /&gt;
** TPA2026&lt;br /&gt;
** TDA8594&lt;br /&gt;
&lt;br /&gt;
* TPMs (Trusted Platform Module)&lt;br /&gt;
** [http://www.infineon.com/cms/de/product/security-and-smart-card-solutions/optiga-embedded-security-solutions/optiga-tpm/channel.html?channel=5546d462503812bb015066de24291768 SLB 9645]&lt;br /&gt;
&lt;br /&gt;
=== Galvanische Trennung ===&lt;br /&gt;
* http://www.analog.com/static/imported-files/application_notes/AN_913.pdf&lt;br /&gt;
* http://www.analog.com/en/interface/digital-isolators/products/index.html#Isolated_I2C_Isolators&lt;br /&gt;
* http://www.silabs.com/Support%20Documents/TechnicalDocs/Si840x.pdf &#039;&#039;&#039;(Not Recommended for New Designs)&#039;&#039;&#039;&lt;br /&gt;
* http://www.silabs.com/applications/industrial/Pages/i2c-isolation.aspx&lt;br /&gt;
* http://www.mikrocontroller.net/attachment/5670/Galvanische_Trennung_fuer_I2C-Bus.pdf&lt;br /&gt;
* http://www.esacademy.com/en/library/technical-articles-and-documents/miscellaneous/i2c-bus/frequently-asked-questions/i2c-faq.html&lt;br /&gt;
* http://www.mikrocontroller.net/topic/17425#125464&lt;br /&gt;
* https://www.mikrocontroller.net/articles/Modulares_Board#I2C_Bus_Isolator&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[AT91-TWI]]&lt;br /&gt;
* [[AVR TWI]]&lt;br /&gt;
* [[I2C als Hausbus]]&lt;br /&gt;
* [[Modulares Board]]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/181115#1748880 Forumsbeitrag]: I2C-Adressen mit 7 oder 8 Bit&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/385874#4410598 Forumsbeitrag]: I2C über lange Entfernungen als differentielles Signal übertragen.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://ics.nxp.com/interface/ NXP (ehemals Philips) Produktseite]&lt;br /&gt;
* [http://www.nxp.com/acrobat/usermanuals/UM10204_3.pdf I2C Spezifikation 3.0]&lt;br /&gt;
* [http://www.i2c-bus.org I²C Bus FAQ, Einführung, Hintergrundinformationen zum I2C Bus auf Deutsch und Englisch]&lt;br /&gt;
* [http://www.robotikhardware.de/download/rn_pc_i2c.pdf robotikhardware.de]&lt;br /&gt;
* [http://www.elektronikwissen.net/pegelwandler/7-bidirektionaler-levelshifter-fuer-i2c.html Betrieb von 3V3 und 5V-Bausteinen am I2C-Bus]&lt;br /&gt;
&lt;br /&gt;
=== Bibliotheken ===&lt;br /&gt;
* [http://www.jtronics.de/avr-projekte.html AVR TWI Slave]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/235733#2398750 TWI MASTER in ASM]&lt;br /&gt;
* [http://homepage.hispeed.ch/peterfleury/avr-software.html AVR TWI/I2C MASTER in C]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/87597 AVR TWI Master und Slave Funktionen in C]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/266642 universelle I2C Master Prozedur für AVR]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/103600 I2C (TWI) Sniffer mit AVR]&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/334653#3697582 I2CLCD], HD44780 LCD Ansteuerung über I2C Bus&lt;br /&gt;
&lt;br /&gt;
===I²C-Interface===&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/155136#1462320 Beitrag &amp;quot;i2c usb interface&amp;quot;] (Linux)&lt;br /&gt;
* [http://sprut.de/electronic/pic/projekte/usb4all/usb4all.htm USB4ALL bei sprut.de] universeller USB-Baustein, auch für I2C&lt;br /&gt;
* [http://www.totalphase.com/products/aardvark-i2cspi/ Aardvark I2C/SPI Host Adapter], Universeller Adapter für I2C und SPI&lt;br /&gt;
* [http://www.elv.de/usb-i2c-interface-komplettbausatz-inkl-gehaeuse-bearbeitet-und-bedruckt-usb-kabel-3-anschlusskabel.html USB-I2C-Interface], Komplettbausatz bei ELV&lt;br /&gt;
&lt;br /&gt;
===I²C-Monitor===&lt;br /&gt;
*http://realterm.sourceforge.net/#I2C%20Bus&lt;br /&gt;
*http://www.avrfreaks.net/index.php?module=FreaksTools&amp;amp;func=viewItem&amp;amp;item_id=411&lt;br /&gt;
* [http://www.telos.info/p/hw/conniimm20/ telos Connii MM 2.0 - I²C Monitor with USB Interface]&lt;br /&gt;
* [http://www.telos.info/p/hw/traciixl20/ telos Tracii XL 2.0 - High-End I²C Monitor]&lt;br /&gt;
*http://i2cchip.com/&lt;br /&gt;
* [http://www.ullihome.de/index.php/Hauptseite#USB_AVR-Lab I2C Logger Firmware für USB AVR-ISP]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/41535 I2C Monitor mit Mega8 (Firmware)]&lt;br /&gt;
* [http://warmcat.com/milksop/cheapi2c.html Cheapi2c] by Numbnut (Andy Green) uses your PC CPU (Linux only!) and printer port to perform realtime snooping of a standard 100kHz I2C bus with 100% capture.&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/103600#905495 I2C (TWI) Sniffer]. Basierend auf einem ATtiny85 mit Ausgabe auf RS232 (C und ASM).&lt;br /&gt;
* [http://en.radzio.dxp.pl/i2c-sniffer/ I2C/TWI bus sniffer/analyzer] (ATTiny2313 @ 20 MHz und USB über FTDI FT245RL oder UM245R)&lt;br /&gt;
* [http://www.i2cchip.com/start_bit_detector1.jpg I2C Startbit-Detector] auf [http://www.i2cchip.com/ www.i2cchip.com]&lt;br /&gt;
* [http://www.harbaum.org/till/i2c_tiny_usb/index.shtml i2c-tiny-usb open source/open hardware zum Auslesen mit einem PC]&lt;br /&gt;
&lt;br /&gt;
[[Category:I2C| ]]&lt;/div&gt;</summary>
		<author><name>87.178.104.168</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Oszilloskop&amp;diff=96971</id>
		<title>Oszilloskop</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Oszilloskop&amp;diff=96971"/>
		<updated>2017-08-10T13:17:53Z</updated>

		<summary type="html">&lt;p&gt;87.178.104.168: /* Allgemein */ Bandbreite&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ein &#039;&#039;&#039;Oszilloskop&#039;&#039;&#039; dient zur grafischen Darstellung des Spannungsverlaufs eines oder mehrerer elektrischer Signale in einem einstellbaren Zeitfenster. Es ist das wichtigste Werkzeug der Elektrotechniker.&lt;br /&gt;
&lt;br /&gt;
== Anfragen bezüglich Kaufberatung im Forum ==&lt;br /&gt;
&lt;br /&gt;
=== Kritik an den Anfragen ===&lt;br /&gt;
Im Forum finden sich regelmäßig Anfragen nach individueller Beratung zum Oszilloskopkauf. Die Anzahl solcher Oszilloskop-Threads hat schon lange die 1000 überschritten. Sie sind langweilig, eine Qual und oft unnütz - besonders dann, wenn sich der Fragesteller offenbar nicht mit den Grundlagen eines Oszilloskops und den wichtigsten Kennzahlen bekanntgemacht hat oder nicht einmal weiß, was er überhaupt messen will. Auch, wenn ein Fragesteller ein paar Grundlagen besitzt, hat er anscheinend meistens keine Lust, verständlich darzustellen, was er genau will und lässt sich stattdessen umständlich befragen.&lt;br /&gt;
&lt;br /&gt;
Den meisten regelmäßigen Forumbenutzern ist daher gründlich die Lust an Oszilloskop-Threads vergangen. Dort &amp;quot;diskutieren&amp;quot; eigentlich nur noch Trolle und anonyme Gäste, die oft genug nur Werbung über Billigangebote über die x-te Ausgabe einer billigen, als Oszilloskop bezeichneten Plastikkiste, einem super tollen eBay-Schnäppchen oder angeblicher asiatischer Wundertüten.&lt;br /&gt;
&lt;br /&gt;
==== Links für Anfänger ====&lt;br /&gt;
Wer sich ernsthafte Beratung wünscht und eine &amp;quot;sanfte&amp;quot; Einführung in das Thema sucht, kann sich die englischsprachige YouTube-Videos von AfroTechMods anschauen:&lt;br /&gt;
&lt;br /&gt;
[http://afrotechmods.com/tutorials/2011/11/27/oscilloscope-tutorials/ http://afrotechmods.com/tutorials/2011/11/27/oscilloscope-tutorials]&lt;br /&gt;
&lt;br /&gt;
Dazu passt auch sein Tutorial über Funktionsgeneratoren:&lt;br /&gt;
[http://afrotechmods.com/tutorials/2011/11/27/function-generator-tutorial/ http://afrotechmods.com/tutorials/2011/11/27/function-generator-tutorial].&lt;br /&gt;
&lt;br /&gt;
===Maßgeschneidert?===&lt;br /&gt;
Besonders die immer wiederkehrende Forderung, dass es unbedingt das maßgeschneiderte Oszilloskop zum Superpreis genau für den Fragesteller geben muss, ist sinnlos. Wer mit diesem Anspruch kommt, der wird enttäuscht werden. Das gibt es nicht, und gute Oszilloskope kosten Geld, da qualitativ hochwertige Geräte keine Massenware sind. Lediglich billige Geräte werden in grosser Zahl hergestellt und sind entsprechend preiswert, diese sind jedoch für anspruchsvolle Anwender meist untauglich, da genau an den wichtigen Dingen gespart und nur auf Optik gesetzt wird.&lt;br /&gt;
&lt;br /&gt;
===Gebraucht ist auch keine Lösung===&lt;br /&gt;
Es gibt eine Reihe von gebrauchte Oszilloskopen- vorwiegend im Internet, von denen die meisten billig sind. Da niemand per Ferndiagnose oder Blick in eine Glaskugel in ein gebrauchtes Gerät hineinsehen und etwas über den Zustand berichten kann, besteht immer das typische Risiko eines Kaufs aus zweiter Hand, das jeder selber tragen muss. Niemand im Forum kann und wird das jemandem abnehmen. &lt;br /&gt;
&lt;br /&gt;
Was man allgemein sagen kann, ist, dass man besser die Finger von Angeboten lassen sollte, wenn der Verkäufer mit den übliche Phrasen wie, &amp;quot;Dachbodenfund&amp;quot;, &amp;quot;Keine Ahnung davon&amp;quot;, &amp;quot;Keine Möglichkeit zu testen&amp;quot; kommt. Vorsicht ist auch bei dem beliebten Trick &amp;quot;Funktioniert, aber aus rechtlichen Gründen (Garantie) verkaufe ich es als defekt, für Bastler&amp;quot; gegeben. Man muss sich immer vor Augen führen, dass niemand ein gutes und wertvolles Gerät dieser Art zum Billigpreis abgegeben wird und dies schon gar nicht über Internetplattformen, wo es kaum einen Markt für Topgeräte gibt. Gute gebrauchte Geräte gibt es von privat daher nur auf Elektronikbörsen zu entsprechenden Preisen.&lt;br /&gt;
Das gilt allerdings hauptsächlich für Personen die von Elektronikreparaturen absolut keine Ahnung haben,&lt;br /&gt;
es konnten schon viele Geräte mit einfachen Handgriffen wiederbelebt werden!&lt;br /&gt;
&lt;br /&gt;
Es gibt demgemäss natürlich auch Geräte von seriösen Gebrauchthändlern mit Garantie - allerdings ebenso zu derartigen Preisen, dass dagegen der Kauf eines aktuellen Neugeräts ebenfalls attraktiv erscheint.&lt;br /&gt;
&lt;br /&gt;
=== Erfahrungen? ===&lt;br /&gt;
Eine Vorgehensweise, von der man auch abraten muss, ist die Frage nach Erfahrungen anderer Mitglieder! Die meisten Antworten kommen von Trollen und Posern, die eigentlich keine Ahnung haben. Die einen wollen als anonymer Gast mal wieder trollen, die anderen wollen nur mitteilen, dass Funkamateure sowieso die besseren Menschen sind. Andere wiederum haben &amp;quot;zufällig&amp;quot; gerade *das* richtige Oszilloskop zu verkaufen. Dann gibt es noch die, die sich ihr eigenes Oszilloskop schönreden wollen, ihren Vorurteilen oder ihrem Fetisch frönen. Zum Beispiel&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Kauf ja kein Gerät aus Asien!&#039;&#039;&lt;br /&gt;
* &#039;&#039;Unter LeCroy|Agilent|Yokogawa|Tektronix geht gar nichts!&#039;&#039;&lt;br /&gt;
* &#039;&#039;Nur Gebrauchtgeräte lohnen sich!&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Hinweise wie &#039;&#039;mein vor 30 Jahren gekauftes Markengerät funktioniert noch heute tadellos&#039;&#039; sind ebenfalls ziemlich sinnlos. Der Hersteller wird dieses Gerät gar nicht mehr anbieten und er wird schon gar nicht mehr mit der gleichen Qualität fertigen, wie vor 30 Jahren. Dazu ist der Kostendruck zu hoch und Technologien haben sich geändert. Selten sind die neuen Technologien heute so robust, wie die vor 30 Jahren.&lt;br /&gt;
&lt;br /&gt;
Als Unerfahrener kann man daher aus den Antworten nicht herauslesen, ob sie wirklich auf Erfahrung beruhen. Man braucht also gewissermassen selbst Erfahrung, um die Erfahrungsberichte anderer richtig einzuordnen.&lt;br /&gt;
&lt;br /&gt;
Ein anderer Aspekt aus alten Threads ist, dass viele Fragesteller die Erfahrungen gar nicht zur Kenntnis nehmen wollen, wenn sie der eigenen Wunschvorstellung widersprechen. So etwas nennt man beratungsresistent. Da stellt sich schon mal heraus, dass der Fragesteller schon längst ein Gerät bestellt hat und jetzt gebauchpinselt werden will. Eine Zeitverschwendung für alle.&lt;br /&gt;
&lt;br /&gt;
Erfahrungen mit eigenen Geräten lassen bedingt den Schluss zu, welche&lt;br /&gt;
Marken grundsätzlich empfehlenswert sind, weil dort gegebenenfalls mehr auf Qualität geachtet wird.&lt;br /&gt;
&lt;br /&gt;
=== Zusatzkosten beim Kauf im Ausland ===&lt;br /&gt;
&lt;br /&gt;
Siehe Hauptartikel [[Zoll und Abgaben]].&lt;br /&gt;
&lt;br /&gt;
Beim Kauf eines scheinbar preisgünstigen Gerätes im Ausland ist zu beachten, dass hier neben Versandkosten noch [[Zoll und Abgaben]] fällig werden. Ein &#039;&#039;PC-basierten Messinstrument mit Oszilloskopfunktion&#039;&#039; für US$ 719,- aus Taiwan kostet dann letztendlich 875,- €, die sich so zusammensetzen:&lt;br /&gt;
* Umrechnung in Euro (und Zollveranschlagung): 650,- €&lt;br /&gt;
* Umsatzsteuer: 123,- €&lt;br /&gt;
* Zollgebühren: 60,- €&lt;br /&gt;
* Versand und Bankgebühren: 44,- €&lt;br /&gt;
&lt;br /&gt;
Der Preis unterscheidet sich am Ende kaum noch vom dem des lokalen Händlers. Aber der gibt auch noch Garantie, so dass ein Defekt nicht zum Totalverlust wird.&lt;br /&gt;
&lt;br /&gt;
===Spielzeuge aller Art===&lt;br /&gt;
[[Datei:Karikatur oscilloscope sale.jpg|thumb|left|240px|Preisgünstiges Spitzenoszilloskop 5Gs]]&lt;br /&gt;
&lt;br /&gt;
Offensichtlich scheint es gerade Mode zu werden, einen schwachbrüstigen Analog-Digital-Konverter hinter eine eher zufällig gewählte, krumme analoge Eingangsschaltung zu klemmen und an einen Mikrocontroller mit Grafik-LCD anzuschließen.  Das ganze wird als digitales Speicheroszilloskop (DSO) zum Sonderpreis verkauft.&lt;br /&gt;
&lt;br /&gt;
Je nach Hersteller wird so ein Gerät komplett ohne Gehäuse geliefert, was mit Hinblick auf die Sicherheit sehr fragwürdig ist, oder es kommt in einem lustig aufgemachten Plastikgehäuse in MP3-Player-Format daher, das auch keine großartige Isolation bietet. Hinzu kommen Eindruck schindende Namen und Logos, die Modernität und Qualität suggerieren sollen, oft noch unterstrichen durch die Assoziierung mit Open-Source und pseudo-Hacker / Maker Bewegungen.&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
Im Vergleich zu richtigen Oszilloskopen sind dies leider nur Spielzeuge. Unsichere Spielzeuge. Es nervt diese Dinger immer wieder im Forum als das &amp;quot;Beste seit Erfindung von geschnitten Brot&amp;quot; vorgestellt zu bekommen. Ein Blick auf die technischen Daten dieser &amp;quot;Oszilloskope&amp;quot; (sofern die Daten überhaupt angegeben werden) reicht, um festzustellen, dass man ein Spielzeug vor sich hat. Schön für den, der spielen will, schlecht für den, der sicher messen will.&lt;br /&gt;
&lt;br /&gt;
Ebenso verrät ein Blick auf die Schaltung des Analogeingangs, ob man Qualität vor sich hat. Fehlende Spannungsfestigkeit und fehlende Frequenzkompensation des Eingangsverstärkers sind sichere Zeichen für Schund. Wenn es eine Verbindung zum PC gibt, aber diese nicht isoliert ist, ist das ein weiteres Zeichen für Scheinqualität.&lt;br /&gt;
&lt;br /&gt;
In [http://welecw2000a.sourceforge.net/docs/Hardware/GW_Instek_GDS-1152A.pdf] kann man das Innenleben eines richtigen DSO bewundern. Man vergleiche dies mit den Innenleben der Spielzeug-&amp;quot;DSO&amp;quot;s.&lt;br /&gt;
&lt;br /&gt;
Ein anderes, sicheres Zeichen eines Spielzeug-&amp;quot;DSOs&amp;quot; ist es, wenn irgendein Ding aus Abgreifklemmen und Klinkenstecker als &amp;quot;Tastkopf&amp;quot; mitgeliefert wird oder die Buchse für den Tastkopf aus einer Klinkenbuchse oder ähnlicher Niederfrequenz-Anschlusstechnik besteht.&lt;br /&gt;
&lt;br /&gt;
Auffällig ist bei diesen Spielzeugen auch, dass sie vehement von typischen Fanboys verteidigt werden. Nicht mit technischem Argumenten, sondern mit Aussagen wie &amp;quot;aber ist billig&amp;quot;, &amp;quot;aber ist cool&amp;quot;, &amp;quot;aber enthält doch einen Arduino&amp;quot;. Trotzdem, wer ein Oszilloskop haben möchte, sollte sich das Geld für ein Spielzeug-&amp;quot;DSO&amp;quot; sparen.&lt;br /&gt;
&lt;br /&gt;
== Funktion von Oszilloskopen ==&lt;br /&gt;
=== Was wird gemessen? ===&lt;br /&gt;
Oszilloskope zeigen einen Spannungsverlauf über einen kurzen, für das menschliche Auge in Realzeit meist nicht erfassbaren Zeitraum an. Je hochwertiger das Oszilloskop, desto kürzer ist dieser Zeitraum, beziehungsweise desto schneller darf sich das Signal ändern. Spitzengeräte können Perioden von wenigen Nanosekunden im gesamten sichtbaren Bildbereich darstellen, in welchem auch noch in Teilabschnitte hineingezoomt werden kann. Maßgeblich ist dafür ein manuell oder automatisch erzeugter Startzeitpunkt, der sogenannten Trigger. &lt;br /&gt;
&lt;br /&gt;
Darüber hinaus lassen sich andere Größen, zum Beispiel Ströme, Drücke und Magnetfelder anzeigen, wenn man zusätzlich entsprechende Wandler einsetzt, um aus den Größen zuvor eine Spannung zu erzeugen.&lt;br /&gt;
&lt;br /&gt;
=== Was wird dargestellt? ===&lt;br /&gt;
&lt;br /&gt;
Den Eingang für eine Spannung bezeichnet man bei einem Oszilloskop als Kanal. Die an den Kanälen anliegenden Spannungen können einzeln oder gemeinsam angezeigt werden. Bei Mehrkanal-Oszilloskopen kann man üblicherweise auch eine Spannung über eine Spannung darstellen (XY-Modus), womit Übertragungskennlinien von Bauteilen dargestellt werden können.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich bieten moderne Oszilloskope die Möglichkeit, sich gewisse Kenngrößen der Spannungsverläufe anzeigen zu lassen. Gängige Werte sind zum Beispiel die Anzeige von Spitzenspannung und Effektivwert einer Spannung, Frequenz/Periodendauer, Anstiegs- und Abfallzeiten, Tastverhältnis und so weiter. Darüber hinaus bieten gute Oszilloskope Positionsmarken (Cursor), mit denen man, durch eine Linie dargestellt, auf dem Bildschirm Positionen im Spannungsverlauf markieren kann. Zur Position zugehörige Werte (Zeit oder Spannung), sowie die Differenz dieser Werte zwischen zwei Positionsmarken können abgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Besonders [[#Digitale_Tischoszilloskope|digitale Oszilloskope]] können relativ viele unterschiedliche Kenngrößen anzeigen, da sich viele dieser Größen mit einfachen Algorithmen aus den vom Oszilloskop im Speicher erfassten Daten berechnen lassen. Ebenso sind einfache mathematische Operationen möglich, etwa eine diskrete Fourier-Transformation oder die Summe oder Differenz der Spannungsverläufe von zwei Kanälen. Oszilloskope der Oberklasse bieten darüber hinaus ausgeklügelte Möglichkeiten der Signalanalyse. &lt;br /&gt;
&lt;br /&gt;
Für spezielle Anwendungen finden sich in manchen Oszilloskopen besondere Messfunktionen. Zum Beispiel go/no-go (heißt meistens pass/fail) Messungen, mit denen eine Spannungsverlauf mit einem vorgegebenen Verlauf verglichen wird. Entspricht der Spannungsverlauf hinreichend dem vorgegebenen Verlauf wird ein &amp;quot;go&amp;quot; (oder pass = alles ist OK) Signal über einen externen Ausgang ausgegeben. Weicht der Verlauf zu stark ab ein &amp;quot;no go&amp;quot; (fail = Spannung stimmt nicht) Signal.&lt;br /&gt;
&lt;br /&gt;
Bereits in der Unterklasse digitaler Oszilloskope ist heutzutage eine PC-Schnittstelle üblich. Beim Kauf sollte man darauf achten, dass das Protokoll der Schnittstelle dokumentiert ist. Sonst ist man auf proprietäre PC-Software des Herstellers angewiesen. Bei Oszilloskopen der Unterklasse wird zwar häufig kostenlos PC-Software mitgeliefert, doch leider sind diese Programme durchgehend von erschreckend schlechter Qualität. Bei Oszilloskopen der Oberklasse lassen sich die Hersteller ihre PC-Software gerne zusätzlich sehr teuer bezahlen.&lt;br /&gt;
&lt;br /&gt;
== Analoge Oszilloskope ==&lt;br /&gt;
=== Allgemeines ===&lt;br /&gt;
[[Bild:Oszilloskop.png|thumb|right|300px|Hybrides Analog/Digital Oszilloskop]]&lt;br /&gt;
Bei analogen Oszilloskopen wird das darzustellende Signal nach der Verstärkung direkt zur Ablenkung eines Elektronenstrahls verwendet.&lt;br /&gt;
&lt;br /&gt;
Brauchbare analoge Oszilloskope findet man oft schon für ca. 50 Euro bei Online-Auktionen und Kleinanzeigenmärkten. Für 200-400 Euro bekommt man dort recht gute Profigeräte&amp;lt;ref&amp;gt;Ein Gerät, welches mit dem Attribut &#039;&#039;Profigerät&#039;&#039; beworben wird, ist normalerweise keins.&amp;lt;/ref&amp;gt;  mit 60-200 MHz Bandbreite. Brauchbare Neugeräte fangen bei 600 Euro an. Der Oszilloskopmarkt wird von einigen wenigen Marken dominiert. Im höherpreisigen Segment sind es vor allem HP (Agilent) und Tektronix, sowie Yokogawa und Lecroy. Hameg (Rohde &amp;amp; Schwarz) ist vor allem im mittleren Segment (500-1500 Euro) weit verbreitet. Man findet sie oft in Schule und Ausbildung. Preislich darunter finden sich diverse asiatische oder gelegentlich noch osteuropäische Hersteller von Analogoszilloskopen. Häufig treten diese Hersteller nicht unter eigenem Namen auf, sondern bieten ihre Geräte als OEM-Produkte an. &lt;br /&gt;
&lt;br /&gt;
Ganz einfache Geräte verfügen nur über einen Kanal&amp;lt;ref&amp;gt;Es gibt, beziehungsweise gab, nochmals einfachere Geräte, nämlich solche ohne Trigger. Die Zeiten solcher Gerät sind allerdings seit rund 50 Jahren vorbei. Daher sollte man den fehlenden Trigger nur bei historischen Gebrauchtgeräten finden.&amp;lt;/ref&amp;gt;. Damit ist es nicht möglich, zwei Signale in zeitliche Beziehung zu setzen. Dies ist jedoch oft wichtig. Deshalb verfügen heutzutage auch einfache Geräte meist über zwei Kanäle.&lt;br /&gt;
&lt;br /&gt;
=== Bandbreite ===&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;&#039;Bandbreite&#039;&#039;&#039; gibt Auskunft, welche Signal-Frequenzen das Oszilloskop noch verarbeiten kann. Bei angegebener Bandbreite fällt die Verstärkung des Oszilloskops um 3dB ab, ein Sinussignal wird dann nur noch mit ca. 70% der wahren Amplitude angezeigt. Um Signalverläufe noch vernünftig interpretieren zu können, kann man grob sagen, dass man Signale bis 1/10 der Bandbreite dargestellt bekommt. Ein Rechtecksignal nahe der Bandbreite würde z.&amp;amp;nbsp;B. nur noch als Sinus dargestellt werden &amp;lt;ref&amp;gt;Häufig wird von Anfängern bei der Bandbreitenbetrachtung vergessen, dass ein Rechtecksignal nicht aus einer einzigen Sinusschwingung der Frequenz f, sondern aus einer theoretisch unendlichen Summe von Signalen der Frequenzen f, 3 * f, 5 * f ... besteht. Für eine vernünftige Darstellung eines Rechtecksignals sollte die Oszilloskopbandbreite so groß sein, dass zumindest die ersten paar Oberwellen nicht zu stark gedämpft werden. Aus dieser Betrachtung ergeben sich Faustformeln, wie die, dass die Bandbreite eines Oszilloskops zehnmal (oder dreimal, oder fünfmal, je nachdem wie genau man messen möchte) größer sein sollte als die Grundfrequenz des Rechtecks.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Beim Messen von Digitalsignalen ist man meist an der &#039;&#039;&#039;Anstiegszeit&#039;&#039;&#039; interessiert. Die Anstiegszeit gibt an, wie lange ein Rechtecksignal von 10-90% benötigt. Die Anstiegszeit des Oszilloskops gibt an, welche Anstiegszeit dargestellt wird, wenn man ein nahezu ideales Rechtecksignal mit annähernd Null Anstiegszeit anlegen würde. Man kann die Anstiegszeit direkt aus der Bandbreite berechnen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_{Osc} = \frac{0.35}{B}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;\!\, t_{Osc}&amp;lt;/math&amp;gt; : Anstiegszeit des Oszilloskops in Sekunden (s)&lt;br /&gt;
* &amp;lt;math&amp;gt;\!\, B&amp;lt;/math&amp;gt; : Bandbreite in Hertz (Hz)&lt;br /&gt;
&lt;br /&gt;
Legt man ein reales Rechtecksignal an das Oszilloskop an, dann wird die Anzeige umso mehr verfälscht, je näher die Anstiegszeit des Eingangssignals der Anstiegszeit des Oszilloskops kommt. Dabei gilt folgender Zusammenhang.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_S = \sqrt{t_{ges}^2-t_{Osc}^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;\!\, t_S&amp;lt;/math&amp;gt;: Anstiegszeit des Eingangssignals&lt;br /&gt;
* &amp;lt;math&amp;gt;\!\, t_{ges}&amp;lt;/math&amp;gt;: Angezeigte Anstiegszeit auf dem Oszilloskop&lt;br /&gt;
* &amp;lt;math&amp;gt;\!\, t_{Osc}&amp;lt;/math&amp;gt;: Anstiegszeit des Oszilloskops&lt;br /&gt;
&lt;br /&gt;
Bei analogen Oszilloskopen ist die Bandbreite gegeben durch die Begrenzung des analogen Eingangsverstärkers sowie die Signaldarstellung, also die Qualität des Ablenkverstärkers.&lt;br /&gt;
&lt;br /&gt;
=== Tastköpfe richtig benutzen ===&lt;br /&gt;
&lt;br /&gt;
Wenn man wirklich schnelle Signale messen will, spielt auch die Bandbreite des verwendeten Tastkopfes eine wichtige Rolle. Näheres dazu findet man [http://www.sigcon.com/Pubs/straight/probes.htm hier]. Aber der beste Tastkopf nützt nichts, wenn man ihn falsch anschließt. Für schnelle Messung jenseits von ein paar MHz nutzt man praktisch immer 10:1 Tastköpfe mit 10 MOhm Eingangswiderstand und ca. 8-15pF Eingangskapazität. Je nach Typ erreicht man damit Bandbreiten von 100-500MHz. Danach muss man aber auch den Tastkopf richtig anschließen. Der mitgelieferte Masseanschluß mit Krokodilklemme ist zwar praktisch, für viele hochfrequente Messungen aber unbrauchbar. Ein Rechtecksignal damit zu messen ergibt dann starke Überschwinger, welche real aber gar nicht vorhanden sind, sondern durch die zu lange, induktive Masseleitung im Zusammenspiel mit der Eingangskapazität verursacht werden. Das sieht man z.B. [http://www.mikrocontroller.net/topic/281669?goto=2975948#2975754 hier], den Messaufbau sieht man [http://www.mikrocontroller.net/topic/281669?goto=2975948#2975896 hier].&lt;br /&gt;
&lt;br /&gt;
Für saubere, hochfrequente Messungen muss man die Masseanbindung so kurz wie möglich machen. Dafür haben die Tastköpfe oft ein kleines Zusatzteil, eine Massefeder, beigelegt (engl. [http://www.mikrocontroller.net/attachment/27280/groundspring.png ground spring]). Damit kann man die Masse auf kürzestem Wege anschließen und erhält ein sauberes Messergebnis wie man [http://www.mikrocontroller.net/topic/281669?goto=2975948#2975931 hier] und [https://www.youtube.com/watch?v=U7GQmwCKBUI hier] sieht. Eine sehr gute Einführung zum Thema Tastköpfe und deren richtige Nutzung gibt es [[media:Probe_Fundamentals-_Tektronix.pdf | hier]] von [http://www.tek.com Tektronix] (engl.).&lt;br /&gt;
&lt;br /&gt;
Wenn es dann in den Bereich 100MHz++ geht, wird man schnell auf einen aktiven Tastkopf oder einen passiven Z0-Tastkopf wechseln wollen. Warum das so ist, ist in diesem [http://www.signalintegrity.com/Pubs/straight/probes.htm Artikel] (engl.) erklärt.&lt;br /&gt;
&lt;br /&gt;
===Terminierung bei DC-Messung===&lt;br /&gt;
Schliesst man an den hochomigen Messeingang eines Oszilloskopes eine Koaxialleitung mit 50 Ohm Impedanz direkt an, um irgendwo direkt zu messen, so muss diese möglichst dicht am Oszilloskop mit 50 Ohm terminiert werden, um Reflexionen und Phantomsignale zu vermeiden. Wird aber direkt mit 50 Ohm terminiert, so führt das zu einer starken Belastung der Quelle und des Terminierungswiderstandes. Insbesondere dann, wenn man z.B. auf einem DC-Pegel eine Welligkeit messen möchte. Die Gleichspannung liegt in diesem Falle direkt am Terminierungswiderstand an. Das ist oft nicht tolerierbar, da dann ein u.U. hoher Gleichstrom durch den Widerstand abfließt, die Quelle belastet und selber heiß wird.. Aus diesem Grunde muss der Terminierungswiderstand mit einem schnellen, keramischen Kondensator entkoppelt werden. Siehe Bild.&lt;br /&gt;
[[Bild:DC-Messadapter.svg|thumb|300px|DC-Messadapter mit 50 Ohm Terminierung]]&lt;br /&gt;
Achtung, die Anordnung hat einen Frequenzgang. Es ist gegebenenfalls zu überlegen, ob der Frequenzgang noch toleriert werden kann. Gegebenenfalls ist der Kondensator entsprechend zu ändern. Auf ausreichende Spannungsfestigkeit achten!&lt;br /&gt;
An den 4mm Klemmen kann über einen 2k2 ohm Widerstand ein Digitalmultimeter angeschlossen werden. Der 2k2 Widerstand beeinflusst die Messung mit einem hochomigen Digitalmultimeter fast nicht, verhindert aber das verstärkte Einkoppeln von Störungen über die Messleitungen in das Oszilloskop.&lt;br /&gt;
&lt;br /&gt;
Eine Platine für eine solche kapazitiv entkoppelte 50 Ohm Terminierung als [http://www.mikrocontroller.net/articles/KiCAD KiCad] Projekt findet sich hier: [[Media:DC-50Ohm_Terminierung_RevE_25Mar2015.zip]] Gerber Files und ein Schaltplan in PDF sind im Projekt vorhanden, es kann also auch ohne KiCad verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== Triggerung ===&lt;br /&gt;
&lt;br /&gt;
Oszilloskope unterscheiden sich oft stark in den Triggerungsmöglichkeiten. Bei guten Geräten kann man z.&amp;amp;nbsp;B. die Triggerung variabel verzögern. Erst dadurch wird es möglich, dass man sich Signale genauer anschauen kann, die zeitlich weit hinter einem Triggerereignis kommen. Eine weitere Funktion bei höherklassigen Oszilloskopen ist eine zweite Zeitbasis. Mit dieser kann man in einen Ausschnitt des Messsignals hereinzoomen&amp;lt;ref&amp;gt;Die zweite Zeitbasis steuert einen zweiten Strahl (ähnlich wie einen separaten Kanal), der das gleiche Eingangssignal erhält. Die zweite Zeitbasis wird auf eine höhere Horizontalfrequenz eingestellt als die erste. Zusammen mit einer horizontalen Verschiebung der Darstellung kann man nun Ausschnitte des Signals durchfahren und vergrößert betrachten.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Mit Analog-Oszilloskopen kann man sich hauptsächlich periodische Signalverläufe anschauen, also solche, die zeitlich immer wiederkehrend sind. Denn nur so kann ein Signal immer wieder auf den Schirm &amp;quot;geschrieben&amp;quot; werden und erscheint als stehendes Bild. Aperiodische Signale, wie z.&amp;amp;nbsp;B. auf Datenübertragungsleitungen, sind damit nicht darstellbar. Sie laufen mit einem Strahldurchgang über den Schirm. In dieser kurzen Zeit ist es jedoch nur selten möglich, sie visuell aufzunehmen. Mit einer Digitalkamera kann man solche Signalverläufe mitunter trotzdem einfangen. Früher sehr hochpreisige, heute nicht mehr übliche Analog-Oszilloskope hatten eine eingebaute Speichermöglichkeit (Speicherröhre) für einmalige Signale. Diese Klasse von Analog-Oszilloskopen wurde durch digitale Speicheroszilloskope (DSOs) abgelöst.&lt;br /&gt;
&lt;br /&gt;
Manche Analog-Oszilloskope bieten eine Möglichkeit, die Triggerung nur zu einem definiertem Zeitpunkt anzustoßen, somit kann auch der Anlaufstrom eines Motors mit einem Analog-Oszilloskop dargestellt werden.&lt;br /&gt;
&lt;br /&gt;
=== Analoge Speicheroszilloskope ===&lt;br /&gt;
Inzwischen eher selten sind analoge Speicheroszilloskope anzutreffen. Diese speichern im Gegensatz zu digitalen Speicheroszilloskopen nicht das Signal selbst, sondern das Bild auf der Röhre. Dies wird mit speziellen speichernden Bildröhren erreicht. Je nach Typ kann es mehrere getrennt betreibbare Bereiche geben, um beispielsweise 2 Bilder eines Signales zu unterschiedlichen Zeitpunkten darstellen zu können (z.B. Tektronix 549).&lt;br /&gt;
&lt;br /&gt;
Einige wenige dieser Oszilloskope waren sogar in der Lage, das aufgezeichnete Bild auf Papier auszugeben (z.B. &amp;quot;HP Model 175A&amp;quot; mit Modul 1784A).&lt;br /&gt;
&lt;br /&gt;
=== Vergleichstabelle Analogoszilloskope ===&lt;br /&gt;
&lt;br /&gt;
Diese Tabelle soll einen Überblick über interessante oder bekannte Neugeräte besonders im unteren Preisbereich geben. Eine vollständige Auflistung aller existierenden Geräte ergibt wegen der Vielzahl an Baureihen und Modellen wenig Sinn.&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;wikitable sortable&amp;quot; id=&amp;quot;analogoszis&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bezeichnung&lt;br /&gt;
! Hersteller&lt;br /&gt;
! Preis [&amp;amp;euro;]&lt;br /&gt;
! Kanäle&lt;br /&gt;
! Bandbreite &amp;lt;BR/&amp;gt;[MHz]&lt;br /&gt;
! Röhre [cm]&lt;br /&gt;
! Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| generisches 10 MHz Oszilloskop unter Bezeichnungen wie C1-94, S1-94, OS10, AO-610, [http://www.ett-online.de/html/de/werkstatt/oszilloskope/digitale-oszilloskope/oszilloskop-mccheck-st16b-1-kanal-10-mhz/article-4-55152-459045509045501590.html ST16B], CS10, GOS-310, 72-6602, HUC70, CS1010 [http://www.conrad.de/ce/de/product/122413/VOLTCRAFT-6102-Analoges-1-Kanal-Oszilloskop-Bandbreite-0-DC-10-MHz VC 610/2]&lt;br /&gt;
| Diverse. Wer der Originalhersteller war oder ist ist nicht mehr festzustellen.&lt;br /&gt;
| ab 115&lt;br /&gt;
| 1&lt;br /&gt;
| 10&lt;br /&gt;
| 4 − 4,8 × 6&lt;br /&gt;
| Seit Jahrzehnten von vielen No-Name Herstellern in unterschiedlichen Ausführungen und Bauformen im Angebot. Wenig empfehlenswert für µC-Arbeiten. &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.attenelectronics.com/Products/Oscilloscopes/Analog_oscilloscope/2012/0728/129.html Atten AT7328], CS-4128 und Andere.&lt;br /&gt;
| Atten&lt;br /&gt;
| ab 280&lt;br /&gt;
| 2&lt;br /&gt;
| 20&lt;br /&gt;
| 8 × 10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.attenelectronics.com/Products/Oscilloscopes/Analog_oscilloscope/2012/0728/128.html Atten AT7340], [http://www.conrad.de/ce/de/product/122421/VOLTCRAFT-VC-630-2-Analoges-2-Kanal-Oszilloskop-Bandbreite-0-DC-bis-30-MHz/?ref=category&amp;amp;rt=category&amp;amp;rb=1 VC 630-2] und Andere.&lt;br /&gt;
| Atten&lt;br /&gt;
| ab 450&lt;br /&gt;
| 2&lt;br /&gt;
| 40/30 Voltcraft&lt;br /&gt;
| 8 × 10&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Digitale Speicheroszilloskope ==&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:tektronix.jpg|thumb|right|300px|Digitales Speicheroszilloskop vom Anfang des Jahrtausends]]&lt;br /&gt;
Ein digitales Speicheroszilloskop (englisch DSO, &#039;&#039;&#039;D&#039;&#039;&#039;igital &#039;&#039;&#039;S&#039;&#039;&#039;torage &#039;&#039;&#039;O&#039;&#039;&#039;scilloscope) digitalisiert das Eingangssignal mit einem Analog-Digital-Wandler und legt die Werte in einem Speicher ab. Damit ist die Bandbreite nur durch die Begrenzung des analogen Eingangsverstärkers gegeben. Der Vorteil der Speicherung ist, dass man auf diese Weise Momentaufnahmen eines Signals machen und damit einmalige (transiente) Ereignisse (Spikes, Datenübertragungen) erkennen und darstellen kann, was besonders bei digitalen Schaltungen, z.&amp;amp;nbsp;B. mit Mikrocontrollern, sehr nützlich ist. Weiterhin lässt sich das Signal &amp;quot;vermessen&amp;quot; (z.&amp;amp;nbsp;B. um die Baudrate einer Datenübertragung zu bestimmen), man kann die Frequenz und den Effektivwert anzeigen lassen, das Frequenzspektrum, und je nach Modell noch vieles mehr. Das Signal wird in S/W oder Farbe auf einem LCD dargestellt, lässt sich aber oft auch über einen angeschlossenen Drucker ausdrucken oder an den PC übermitteln.&lt;br /&gt;
&lt;br /&gt;
Der wichtigste Parameter bei digitalen Oszilloskopen ist die &#039;&#039;&#039;Abtastrate&#039;&#039;&#039;, die angibt, mit welcher Rate das Eingangssignal digitalisiert wird. Um ein Signal mit einer gegebenen Frequenz ausreichend genau in Phase und Amplitudenverlauf darstellen zu können, sollte es mindestens mit der 10-fachen Frequenz abgetastet werden. Nur dann lassen sich in der Regel die interessanten Details in einem Signal erkennen. Für eine genaue Analyse analoger Signale, um z.B. die Güte einer Flanke oder Überschwinger beurteilen zu kjönnen, ist sogar ein Faktor von 25 bis 40 anzuraten&amp;lt;ref&amp;gt;Dieser Anhaltswert liegt nochmals weit über der Nyquist-Frequenz (zweifache Grenzfrequenz), ist aber nötig, um Abweichungen von der idealen Signalform zu sehen - z.B. bei Rechecksignalen. Die zehnfache Abtastfrequenz bedeutete, dass man nur 10 Messpunkte pro Signalperiode hat, was in einer 1:1 Darstellung auf dem Bildschirm gerade eben 10 nebeneinander liegenden Pixeln entspräche, was in der Regel sehr wenig ist, um ein Signal zu beurteilen.&amp;lt;/ref&amp;gt; Wichtig ist in dem Zusammenhang auch die analoge Bandbreite des Oszilloskops. Ein gutes Verhältnis ist wäre eine mindestens 4-6 fache Überabstastung im Bezug auf die Bandbreite je Kanal, also z.B. 1Gsps für einen Zweikanaler mit 100MHz Bandbreite - besser 2Gsps. Damit wären dann Signale bis etwa 10 MHz ausreichend genau darstellbar. &lt;br /&gt;
&lt;br /&gt;
Außerdem sind die &#039;&#039;&#039;Speichertiefe&#039;&#039;&#039; und die &#039;&#039;&#039;Wandler-Auflösung&#039;&#039;&#039; interessant. Ein Oszilloskop, das mit acht Bit Auflösung abtastet und 2000*8 Bit Speicher hat, kann 2000 Samples abspeichern, was einer Darstellung von 2000*256 Pixeln entspricht. Acht Bit Auflösung ist heutzutage ein gängiger Wert, auch wenn er niedrig erscheint. Ein normales Oszilloskop ist kein Präzisionsmessgerät und acht Bit sind für die Darstellung auf den Displays normaler Oszilloskope ausreichend.   &lt;br /&gt;
&lt;br /&gt;
Bei der Wandlung und Speicherung gibt es unterschiedliche Verfahren: Ehemals günstige Oszilloskope wie die TDS1000-Serie von Tektronix verwenden &#039;&#039;&#039;CCD-Speicher&#039;&#039;&#039; (Eimerkettenspeicher, ein analoges Schieberegister); die Messwerte werden erst gespeichert, und dann digitalisiert. Nachteile dieser Vorgehensweise sind ein stärkeres Rauschen, die begrenzte Speichertiefe und Totzeiten, während der keine Eingangswerte aufgenommen werden. Diese entstehen, da das Wandeln aller Werte aus dem analogen Zwischenspeicher länger dauert als die Zeit zum Füllen dieses Speichers. Deshalb muss das Gerät bis zum Abschluss der Wandlung warten, bevor es den Speicher erneut füllt.&lt;br /&gt;
&lt;br /&gt;
Früher wandelten nur teurere Modelle in Echtzeit mit schnellen Flash-[[AD-Wandler]]n und speicherten die Messwerte direkt in einem schnellen RAM. Die Speichertiefe ist dabei praktisch unbegrenzt, allerdings sind Wandler sehr teuer, die mehrere GS/s schaffen. Durch einen Trick (mehrere verschachtelte langsame AD-Wandler) setzen sich AD-Wandler bei günstigen Modellen durch. Oszilloskope, die diesen Trick verwenden, erkennt man daran, dass die Abtastfrequenz mit der Anzahl der aktivierten Kanäle sinkt. Zum Beispiel, findet man Vierkanaloszilloskop mit vier Wandlern à 250 MS/s, die bei Benutzung nur eines Kanals 1 GS/s für diesen Kanal erreichen, bei Benutzung von zwei Kanäle 500 MS/s pro Kanal und bei Benutzung von drei oder vier Kanälen 250 MS/s pro Kanal.&lt;br /&gt;
&lt;br /&gt;
In den richtig schnellen Geräten (mehrere GHz Samplerate) ist ein ähnlicher Trick üblich. Dort sind in den verwendeten Wandlerschaltkreisen eine größere Anzahl Sample-and-Hold-Stufen und AD-Wandler integriert. Die Eingangsspannung wird dann zeitversetzt in den Sample-and-Hold-Stufen gespeichert und von den im Vergleich zur Samplerate langsameren AD-Wandlern umgesetzt. Die Ausgangslogik sorgt dann dafür, dass die Daten in der richtigen Reihenfolge ausgegeben werden. Ein Problem bei dieser Vorgehensweise sind unterschiedliche elektrische Eigenschaften der parallelen Wandlerstufen. &lt;br /&gt;
&lt;br /&gt;
Natürlich spielt der Verwendungszweck eine entscheidende Rolle bei der Auswahl. Auf dem Labortisch, wo meist nur kleine Spannungen mit einem gemeinsamen Massebezug vorkommen, werden andere Anforderungen an ein Oszilloskop gestellt, als z.&amp;amp;nbsp;B. im Servicebereich für Industriesteuerungsanlagen, Automatisierungstechnik, usw. Dort sind weniger hohe Abtastraten wichtig, sondern eher eine größere Anzahl Eingangskanäle, die galvanisch voneinander getrennt sind, Spannungsfestigkeit bis min. 500 Volt, sowie speziell bei Störungsanalysen, die Möglichkeit, komplexe Triggermuster einzustellen, und eine integrierte große Festplatte, um einzelne Ereignisse automatisiert über lange Zeiträume hinweg festhalten zu können. Ein Beispiel für so ein hochwertiges Gerät ist ein Yokogawa Scopecorder (DL708). Allerdings sind bei solchen Geräten die Preise nach oben hin offen.&lt;br /&gt;
&lt;br /&gt;
===  Digitale Tischoszilloskope ===&lt;br /&gt;
==== Allgemeines ====&lt;br /&gt;
&lt;br /&gt;
DSO Tischoszilloskope sind die klassischen, in sich abgeschlossenen Geräte, die in der Gestaltung analogen Oszilloskopen ähneln. Daneben gibt es zum Beispiel auch PC DSOs. Viele Tischgeräte sind bereits so klein (geringe Tiefe) und leicht, dass sie zu Recht als tragbare Geräte bezeichnet werden. Beim Neukauf eines Oszilloskops sind diese Geräte die interessantesten.&lt;br /&gt;
&lt;br /&gt;
Mittlerweile ist es üblich, dass man bereits bei Einsteigermodellen eingebaute USB oder RS-232 Schnittstellen findet und eine (häufig sehr simple) Windows-Software zur Bedienung vom PC aus oder zumindest zum Auslesen von Daten auf den PC. Ebenfalls häufig sind USB oder ähnliche Schnittstellen für USB-Memorysticks oder Speicherkarten zum Speichern von Messwerten, Screenshots und Konfigurationen. Ironischerweise sind Schnittstellen und Windows-Software bei Markengeräten häufig gesondert zu erwerben, während sie bei eher unbekannten Marken kostenlos mitgeliefert werden, wenn auch die Qualität der kostenlosen Software häufig zu wünschen übrig lässt. &lt;br /&gt;
&lt;br /&gt;
Beispiele für günstige Einstiegsmodelle unter 600 Euro sind einige, aber nicht alle, Geräte von Rigol, Hantek, Owon, Siglent oder Atten. Für relativ wenig Geld erhält man für einfache Anwendungen ein brauchbares Oszilloskop mit ein paar Highlights aber auch auffälligen Einschränkungen und Fehlern in der Hard- und Software. Viel oder überhaupt Service kann man von diesen Firmen für sein Geld meist nicht erwarten.&lt;br /&gt;
&lt;br /&gt;
Geräte bspw. von [http://www.instek.com/ Instek] sind etwas teurer. Geräte aus der GDS-1000A oder GDS-1000U Serie dürften zum Einstieg interessant sein, oder mittlerweile die modernere Serie DS2000 von Rigol,&lt;br /&gt;
bzw SDS2000 Serie von Siglent.&lt;br /&gt;
&lt;br /&gt;
Ein weiteres Beispiel für ein Einstiegsmodell war das [http://www.tek.com/site/ps/0,,40-15314-INTRO_EN,00.html TDS1002] von Tektronix (ca. 1200 Euro). Dazu muss man allerdings sagen, dass Tektronix die aktuelle Entwicklung etwas verschlafen hat. Der nur 2 kByte große Speicher ist nicht mehr zeitgemäß. Geräte der [http://www.home.agilent.com/agilent/product.jspx?nid=-33575.0&amp;amp;cc=DE&amp;amp;lc=ger&amp;amp;pageMode=OV Agilent InfiniiVision 2000X Serie] beginnen in einem ähnlichen Preisbereich aber mit wesentlich mehr Features.&lt;br /&gt;
&lt;br /&gt;
Sind 4 Kanäle gewünscht, aber das Budget begrenzt, lohnt sich ein Blick auf die DS1000&#039;&#039;&#039;Z&#039;&#039;&#039; Serie von Rigol.&lt;br /&gt;
&lt;br /&gt;
==== Vergleichstabelle digitale Tischoszilloskope ====&lt;br /&gt;
&lt;br /&gt;
;Wichtiger Hinweis:Diese und andere Tabellen werden gelegentlich von Freiwilligen auf den aktuellen Stand gebracht. Das heißt, sie können veraltet sein. &lt;br /&gt;
&lt;br /&gt;
Diese Tabelle soll einen Überblick über interessante oder bekannte Geräte besonders im unteren Preisbereich geben. Eine vollständige Auflistung aller existierenden Geräte ergibt wegen der Vielzahl an Baureihen und Modellen wenig Sinn. &amp;lt;BR/&amp;gt;&lt;br /&gt;
Anmerkung: Für Viele Modelle aus dieser Tabelle gibt es bereits Nachfolgemodelle. &amp;lt;BR/&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
Legende: &amp;lt;BR/&amp;gt;&lt;br /&gt;
opt.: optional, kostenpflichige Erweiterung (Hardware und/oder Software)&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;wikitable sortable&amp;quot; id=&amp;quot;digitaloszis&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Be&amp;amp;shy;zeich&amp;amp;shy;nung&lt;br /&gt;
! Her&amp;amp;shy;stel&amp;amp;shy;ler&lt;br /&gt;
! width=&amp;quot;70&amp;quot; | Preis [&amp;amp;euro;]&lt;br /&gt;
! width=&amp;quot;35&amp;quot; | Ka&amp;amp;shy;nä&amp;amp;shy;le&lt;br /&gt;
! width=&amp;quot;40&amp;quot; | Samp&amp;amp;shy;le&amp;amp;shy;ra&amp;amp;shy;te [MS/s]&lt;br /&gt;
! width=&amp;quot;40&amp;quot; | Band&amp;amp;shy;breite [MHz]&lt;br /&gt;
! width=&amp;quot;35&amp;quot; | Auf&amp;amp;shy;lö&amp;amp;shy;sung [Bit]&lt;br /&gt;
! Spei&amp;amp;shy;cher&amp;amp;shy;tie&amp;amp;shy;fe [Samp&amp;amp;shy;les]&lt;br /&gt;
! Dis&amp;amp;shy;play&lt;br /&gt;
! In&amp;amp;shy;ter&amp;amp;shy;face&lt;br /&gt;
! width=&amp;quot;130&amp;quot; | Be&amp;amp;shy;mer&amp;amp;shy;kun&amp;amp;shy;gen&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.conrad.de/ce/de/product/122485/VOLTCRAFT-Vorteilsset-DSO-1062D-2-Kanal-Oszilloskop-Digitales-Speicheroszilloskop-Bandbreite-60-MHz-inkl-2-Tastkoepf DSO5062D]&lt;br /&gt;
| [http://www.conrad.de/ Conrad]&lt;br /&gt;
| 329.-&lt;br /&gt;
| 2&lt;br /&gt;
| 500/1000&lt;br /&gt;
| 60&lt;br /&gt;
| 8&lt;br /&gt;
| 1M&lt;br /&gt;
| 800x&amp;amp;shy;480, 7&amp;quot;&lt;br /&gt;
| •USB Device &amp;lt;BR/&amp;gt; •USB Host&lt;br /&gt;
| Gleiche Hardware wie das Hantek DSO5062B und leicht modifizierte Software.&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.hantek.com.cn/en/ProductDetail_3_3.html DSO5000B Series]&lt;br /&gt;
| [http://www.hantek.com.cn/en/index.html Hantek]&lt;br /&gt;
| ab 290$ (eBay + Zoll!)&lt;br /&gt;
| 2&lt;br /&gt;
| 500/1000&lt;br /&gt;
| 60/&amp;lt;BR/&amp;gt;100/&amp;lt;BR/&amp;gt;200&lt;br /&gt;
| 8&lt;br /&gt;
| 1M&lt;br /&gt;
| 800x&amp;amp;shy;480, 7&amp;quot;&lt;br /&gt;
| •USB Device &amp;lt;BR/&amp;gt; •USB Host&lt;br /&gt;
| Mit 60MHz beliebt, da es einen Hack auf 200 MHz gibt. Ebenso diverse Hacks an der Hardware. Auch als Tekway oder Protek im Handel.&lt;br /&gt;
|-&lt;br /&gt;
| MSO5000D serie&lt;br /&gt;
| Hantek&lt;br /&gt;
| &lt;br /&gt;
| 2&lt;br /&gt;
| 1G&lt;br /&gt;
| 60/ &amp;lt;br/&amp;gt; 100/ &amp;lt;br/&amp;gt; 200&lt;br /&gt;
| 8&lt;br /&gt;
| 1M&lt;br /&gt;
| 800x&amp;amp;shy;480, 7&amp;quot;&lt;br /&gt;
| •USB Device &amp;lt;BR/&amp;gt; •USB Host &lt;br /&gt;
| 2CH +16 Logik &amp;lt;br/&amp;gt; weitgehend baugleich mit DSO5000B Serie&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| DSO3062A&lt;br /&gt;
| Agilent&lt;br /&gt;
| 800&lt;br /&gt;
| 2&lt;br /&gt;
| 500&lt;br /&gt;
| 60&lt;br /&gt;
| 8&lt;br /&gt;
| 4k&lt;br /&gt;
| 320x&amp;amp;shy;240, 5.7&amp;quot;&lt;br /&gt;
| •USB Device &amp;lt;BR/&amp;gt; •USB Host (modul)&lt;br /&gt;
| weitgehend baugleich mit Rigol DS5000&lt;br /&gt;
|-&lt;br /&gt;
| InfiniiVision 2000 X Serie&lt;br /&gt;
| Agilent&lt;br /&gt;
| 950 - 2600 (MSO) &lt;br /&gt;
| 2/4&lt;br /&gt;
| 1 G/Kanal. Bei Benutzung der Hälfte aller Kanäle 2G/Kanal&lt;br /&gt;
| 70/&amp;lt;BR/&amp;gt;100/&amp;lt;BR/&amp;gt;200 &lt;br /&gt;
| 8 &lt;br /&gt;
| 100k&lt;br /&gt;
| 800x&amp;amp;shy;480, 8.5&amp;quot;&lt;br /&gt;
| •USB Device &amp;lt;BR/&amp;gt; •USB Host 2x&lt;br /&gt;
| Markengeräte mit exzellentem Preis-Leistungs-Verhältnis. Software-Aufrüstbar (Funktionsgenerator, Protokoll-Dekoder, usw.)&lt;br /&gt;
|-&lt;br /&gt;
| [http://%5Bhttp://www.owon.com.hk/products.asp?ParentID=57&amp;amp;SortID=87 OWON &amp;lt;br/&amp;gt; XDS--A(+)&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;   &#039;&#039;&#039;•12-bit:&#039;&#039;&#039; &amp;lt;br /&amp;gt; 3062 A(+) &amp;lt;br /&amp;gt; 3102 A(+) &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; &#039;&#039;&#039;•14-bit:&#039;&#039;&#039; &amp;lt;br /&amp;gt; 3202 A(+)]&lt;br /&gt;
| [http://www.owon.com.hk/main.asp L I L L I P U T &amp;lt;BR/&amp;gt; ----------------- &amp;lt;BR/&amp;gt;   ( - OWON - )   &amp;lt;BR/&amp;gt; &amp;lt;BR/&amp;gt;          ®]&lt;br /&gt;
| &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt; 430.. &amp;lt;br/&amp;gt; bis &amp;lt;br/&amp;gt; 720€ &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
~1350€&lt;br /&gt;
| 2&lt;br /&gt;
| 1 GS/s &lt;br /&gt;
| &amp;lt;BR/&amp;gt;&amp;lt;BR/&amp;gt;60&amp;lt;BR/&amp;gt;&amp;lt;BR/&amp;gt;100&amp;lt;BR/&amp;gt;&amp;lt;BR/&amp;gt;200 &lt;br /&gt;
| &amp;lt;BR/&amp;gt;&amp;lt;BR/&amp;gt;12&amp;lt;BR/&amp;gt;&amp;lt;BR/&amp;gt;12&amp;lt;BR/&amp;gt;&amp;lt;BR/&amp;gt;14&lt;br /&gt;
| &amp;lt;BR/&amp;gt;&amp;lt;BR/&amp;gt;      40M&amp;lt;br /&amp;gt;&lt;br /&gt;
| 800x600 &amp;lt;br /&amp;gt; &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
8&amp;quot; Touch-screen &amp;lt;BR/&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
(3062A(+): ohne &amp;lt;BR/&amp;gt; Touchscreen) &lt;br /&gt;
| •USBx2 &amp;lt;BR/&amp;gt; •LAN &amp;lt;BR/&amp;gt; •WiFi &amp;lt;BR/&amp;gt; •VGA/AV &amp;lt;br /&amp;gt;&lt;br /&gt;
•• A+ : incl. &amp;lt;BR/&amp;gt; •2ch-FG &amp;lt;BR/&amp;gt; •Multimeter &amp;lt;BR/&amp;gt; •DataLogger&lt;br /&gt;
| •LabView komp. &amp;lt;br /&amp;gt;&lt;br /&gt;
•LiIon-Akku opt. •Bus-Decoder opt. &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;•Echtes Glimpse-Of-Nirvana Teil&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.rigolna.com/products/digital-oscilloscopes/ds1000e/ Rigol DS1000E Serie]&lt;br /&gt;
| [http://www.rigolna.com/ Rigol]&lt;br /&gt;
| ab 285&lt;br /&gt;
| 2&lt;br /&gt;
| 1000/500&amp;lt;BR/&amp;gt;(1/2 Kanäle)&lt;br /&gt;
| 50/&amp;lt;BR/&amp;gt;100&lt;br /&gt;
| 8&lt;br /&gt;
| 1M&lt;br /&gt;
| 320x&amp;amp;shy;240, 5.7”&lt;br /&gt;
| •USB Device &amp;lt;BR/&amp;gt; •USB Host &amp;lt;BR/&amp;gt; •RS-232&lt;br /&gt;
| optional 16-Kanal Logikanalysator = DS1052D (DS1102D). Im Netz kursieren diverse, mehr oder weniger ernst zu nehmende Anleitungen, wie man ein DS1052E per Software auf ein DS1102E umrüsten kann.&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.rigolna.com/products/digital-oscilloscopes/ds1000z/ Rigol DS1000Z Series]&lt;br /&gt;
| [http://www.rigolna.com/ Rigol]&lt;br /&gt;
| ab 360&lt;br /&gt;
| 4&lt;br /&gt;
| 1000/500&amp;lt;BR/&amp;gt;/250&amp;lt;BR/&amp;gt;(1/2/4&amp;lt;BR/&amp;gt;Kanäle)&lt;br /&gt;
| 50/&amp;lt;BR/&amp;gt;70/&amp;lt;BR/&amp;gt;100&lt;br /&gt;
| 8&lt;br /&gt;
| 12M&amp;lt;BR/&amp;gt;(24M opt.)&lt;br /&gt;
| 800x&amp;amp;shy;480, 7&amp;quot;&lt;br /&gt;
| •USB Device (Pict Bridge) &amp;lt;BR/&amp;gt; •USB Host &amp;lt;BR/&amp;gt; •LAN (LXI)&lt;br /&gt;
| optionaler dualer Funktionsgenerator 25Mhz (DS1000Z&#039;&#039;&#039;-S&#039;&#039;&#039;). Im Netz kursieren diverse, mehr oder weniger ernst zu nehmende Anleitungen, wie man ein DS1054Z/DS1074Z per Software auf ein DS1104Z umrüsten und den gesamten Funktionsumfang freischalten kann.&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.rigolna.com/products/digital-oscilloscopes/ds2000/ DS2000 Serie]&lt;br /&gt;
| [http://www.rigolna.com/ Rigol]&lt;br /&gt;
| 845 - 1640&lt;br /&gt;
| 2&lt;br /&gt;
| 2 GS/s&lt;br /&gt;
| 70/&amp;lt;BR/&amp;gt;100/&amp;lt;BR/&amp;gt;200/&amp;lt;BR/&amp;gt;300&lt;br /&gt;
| 8&lt;br /&gt;
| 14M&amp;lt;BR/&amp;gt;56M (opt.)&lt;br /&gt;
| 800x&amp;amp;shy;480, 8&amp;quot;&lt;br /&gt;
| •USB Device (Pict Bridge) &amp;lt;BR/&amp;gt; •USB Host &amp;lt;BR/&amp;gt; •LAN (LXI)&lt;br /&gt;
| Per Kauflizenz jeweils freischaltbar sind 56M, serielle Dekoder, weitere Trigger. Lassen sich alle über generierte Serial freischalten und sogar auf Topmodel DS2202 (200MHz) upgraden, da identische (gute) Hardware u. Lieferumfang - keine Hardwaremodifikation nötig. Dank LXI (offene Spezifikation) gute Softwareanbindung. Vertikalauflösung ab 0,5mV/Div!&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.siglent.com/ens/pdxx.aspx?id=25&amp;amp;T=2&amp;amp;tid=1/ SDS2000 Serie]&lt;br /&gt;
| [http://www.siglent.com/ENs/index.aspx/ Siglent]&lt;br /&gt;
| 850 - 2700&lt;br /&gt;
| 2/&amp;lt;br/&amp;gt;4 &lt;br /&gt;
| 2 GS/s&lt;br /&gt;
| 70/&amp;lt;BR/&amp;gt;100/&amp;lt;BR/&amp;gt;200/&amp;lt;BR/&amp;gt;300&lt;br /&gt;
| 8&lt;br /&gt;
| 28M&lt;br /&gt;
| 800x&amp;amp;shy;480, 8&amp;quot;&lt;br /&gt;
| •USB Device (Pict Bridge) &amp;lt;BR/&amp;gt; •USB Host &amp;lt;BR/&amp;gt; •LAN (LXI) &amp;lt;br/&amp;gt; •PASS/FAIL&lt;br /&gt;
| 110.000wrfms/s, seqmentierter Speicher! (dann bis 300.000wrfms/s, HRES Erfassung mit höherer vertikaler Auflösung, Per Kauflizenz jeweils freischaltbar sind serielle Bus-Dekoder, MSO Option, Funktionsgeneratorausgang Dank LXI gute Softwareanbindung.  &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owon.com.hk/products.asp?ParentID=57&amp;amp;SortID=66 Owon SDS Serie]&lt;br /&gt;
| [http://www.owon.com.hk/main.asp Owon]&lt;br /&gt;
| 260€ (5032E) - 1100€ (9302)&lt;br /&gt;
| 2&lt;br /&gt;
| 250/125 - 3.2/1.6 G&lt;br /&gt;
| 30/&amp;lt;BR/&amp;gt;60/&amp;lt;BR/&amp;gt;70/&amp;lt;BR/&amp;gt;100/&amp;lt;BR/&amp;gt;125/&amp;lt;BR/&amp;gt;200/&amp;lt;BR/&amp;gt;300&lt;br /&gt;
| 8&lt;br /&gt;
| 10M/Kanal (5032E 10k/Kanal)&lt;br /&gt;
| 800x&amp;amp;shy;600, 8&amp;quot;&lt;br /&gt;
| •USB Device &amp;lt;BR/&amp;gt; •USB Host &amp;lt;BR/&amp;gt; •LAN &amp;lt;BR/&amp;gt; •VGA (opt.) &amp;lt;BR/&amp;gt; &#039;&#039;oder&#039;&#039; &amp;lt;BR/&amp;gt; •RS-232 (opt.)&amp;amp;shy;(nicht -E)&lt;br /&gt;
| Akkubetrieb optional (nicht -E)&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.gwinstek.com/en/product/productdetail.aspx?pid=3&amp;amp;mid=7&amp;amp;id=46 GW Instek GDS-1000 Serie]&lt;br /&gt;
| [http://www.gwinstek.com/en/index.aspx GW Instek], alias Good Will Instrument Co., Ltd.&lt;br /&gt;
| 350 - 550&amp;lt;br&amp;gt;(Conrad: 475 - 950)&lt;br /&gt;
| 2&lt;br /&gt;
| 250&lt;br /&gt;
| 25/&amp;lt;BR/&amp;gt;40/&amp;lt;BR/&amp;gt;60/&amp;lt;BR/&amp;gt;100&lt;br /&gt;
| 8&lt;br /&gt;
| 4k&lt;br /&gt;
| 320x&amp;amp;shy;234, 5.6&amp;quot;&lt;br /&gt;
| •USB Device &amp;lt;BR/&amp;gt; •SD-Slot&lt;br /&gt;
| Von Conrad teurer als DSO-4000 Serie erhältlich.&amp;lt;br&amp;gt;[http://code.google.com/p/gds2000tools/ Einfache Software für Linux erhältlich]&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.gwinstek.com/en/product/productdetail.aspx?pid=3&amp;amp;mid=7&amp;amp;id=42 GW Instek GDS-1000&#039;&#039;&#039;A&#039;&#039;&#039; Serie]&lt;br /&gt;
| [http://www.gwinstek.com/en/index.aspx GW Instek], alias Good Will Instrument Co., Ltd.&lt;br /&gt;
| 500 - ?&lt;br /&gt;
| 2&lt;br /&gt;
| bis 1GS/s&lt;br /&gt;
| 60/&amp;lt;BR/&amp;gt;100/&amp;lt;BR/&amp;gt;150&lt;br /&gt;
| 8&lt;br /&gt;
| bis 2M&lt;br /&gt;
| 320x&amp;amp;shy;234, 5.6&amp;quot;&lt;br /&gt;
| •USB Device &amp;lt;BR/&amp;gt; •SD-Slot&lt;br /&gt;
| [http://code.google.com/p/gds2000tools/ Einfache Software für Linux erhältlich]&lt;br /&gt;
|-&lt;br /&gt;
! Be&amp;amp;shy;zeich&amp;amp;shy;nung&lt;br /&gt;
! Her&amp;amp;shy;stel&amp;amp;shy;ler&lt;br /&gt;
! width=&amp;quot;35&amp;quot; | Preis [&amp;amp;euro;]&lt;br /&gt;
! width=&amp;quot;35&amp;quot; | Ka&amp;amp;shy;nä&amp;amp;shy;le&lt;br /&gt;
! width=&amp;quot;40&amp;quot; | Samp&amp;amp;shy;le&amp;amp;shy;ra&amp;amp;shy;te [MS/s]&lt;br /&gt;
! width=&amp;quot;40&amp;quot; | Band&amp;amp;shy;breite [MHz]&lt;br /&gt;
! width=&amp;quot;35&amp;quot; | Auf&amp;amp;shy;lö&amp;amp;shy;sung [Bit]&lt;br /&gt;
! Spei&amp;amp;shy;cher&amp;amp;shy;tie&amp;amp;shy;fe [Samp&amp;amp;shy;les]&lt;br /&gt;
! Dis&amp;amp;shy;play&lt;br /&gt;
! In&amp;amp;shy;ter&amp;amp;shy;face&lt;br /&gt;
! width=&amp;quot;130&amp;quot; | Be&amp;amp;shy;mer&amp;amp;shy;kun&amp;amp;shy;gen&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.gwinstek.com/en/product/productdetail.aspx?pid=3&amp;amp;mid=7&amp;amp;id=34 GW Instek GDS-2000 Serie]&lt;br /&gt;
| [http://www.gwinstek.com/en/index.aspx GW Instek], alias Good Will Instrument Co., Ltd.&lt;br /&gt;
| 850 - 1800&lt;br /&gt;
| 2/4&lt;br /&gt;
| 1000&lt;br /&gt;
| 60/&amp;lt;BR/&amp;gt;100/&amp;lt;BR/&amp;gt;200&lt;br /&gt;
| 8&lt;br /&gt;
| max. 5000 (alle Kanäle benutzt) / 25000 (ein Kanal in Benutzung)&lt;br /&gt;
| 320x&amp;amp;shy;234, 5.6&amp;quot;&lt;br /&gt;
| •USB Device &amp;lt;BR/&amp;gt; •USB Host 2x &amp;lt;BR/&amp;gt; •RS-232&lt;br /&gt;
| Weitgehend baugleich mit Conrad Voltcraft DSO-8000 Serie. Vier-Kanal Versionen haben keinen externen Trigger und weniger Trigger-Funktionen.&amp;lt;br&amp;gt;[http://code.google.com/p/gds2000tools/ Einfache Software für Linux erhältlich]&lt;br /&gt;
|-&lt;br /&gt;
| TDS-1002B&lt;br /&gt;
| Tektronix&lt;br /&gt;
| 1100&lt;br /&gt;
| 2&lt;br /&gt;
| 1000&lt;br /&gt;
| 60&lt;br /&gt;
| 8&lt;br /&gt;
| 2.5k&lt;br /&gt;
| 320x&amp;amp;shy;240&lt;br /&gt;
| •USB Device (Pict Bridge) &amp;lt;BR/&amp;gt; •USB Host&lt;br /&gt;
| verhältnismäßig starkes Rauschen, siehe Text oben&lt;br /&gt;
|-&lt;br /&gt;
| [http://teledynelecroy.com/oscilloscope/oscilloscopeseries.aspx?mseries=50 WaveJet 3xx]&lt;br /&gt;
| [http://teledynelecroy.com/ LeCroy]&lt;br /&gt;
| 2800..8000 (brutto)&lt;br /&gt;
| 2/4&lt;br /&gt;
| 1000/2000&lt;br /&gt;
| 100/&amp;lt;BR/&amp;gt;200/&amp;lt;BR/&amp;gt;350/&amp;lt;BR/&amp;gt;500&lt;br /&gt;
| 8&lt;br /&gt;
| 500k&lt;br /&gt;
| 640x&amp;amp;shy;480, 7.5&amp;quot;&lt;br /&gt;
| •USB Device &amp;lt;BR/&amp;gt; •USB Host &amp;lt;BR/&amp;gt; •LAN&lt;br /&gt;
| verfügbar z.&amp;amp;nbsp;B. bei Farnell&lt;br /&gt;
|-&lt;br /&gt;
| WaveAce Serie&lt;br /&gt;
| [http://teledynelecroy.com/ LeCroy]&lt;br /&gt;
| 1000 - 3500&lt;br /&gt;
| 2&lt;br /&gt;
| 250 - 2000&lt;br /&gt;
| 60 - 300&lt;br /&gt;
| 8&lt;br /&gt;
| 4k - 8k&lt;br /&gt;
| 320x&amp;amp;shy;240&lt;br /&gt;
| •USB Device &amp;lt;BR/&amp;gt; •USB Host &amp;lt;BR/&amp;gt; •RS-232(?)&lt;br /&gt;
| Daten beziehen sich etvl. auf nicht mehr erhälltliche Serie (bitte überprüfen)&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.dlm2000.de DLM20XX]&lt;br /&gt;
| YOKOGAWA &lt;br /&gt;
| 3300..8000 (brutto)&lt;br /&gt;
| 2 oder 4 (3+1) wobei 1 wahlweise 8Kanal Digital ist&lt;br /&gt;
| 2500 (1250)&lt;br /&gt;
| 200/&amp;lt;BR/&amp;gt;350/&amp;lt;BR/&amp;gt;500&lt;br /&gt;
| 8&lt;br /&gt;
| 12,5MPts&lt;br /&gt;
| 1024x&amp;amp;shy;768, 8.4&amp;quot;&lt;br /&gt;
| •USB Device &amp;lt;BR/&amp;gt; •USB Host 2x &amp;lt;BR/&amp;gt; •LAN (opt.) &amp;lt;BR/&amp;gt; •RGB Video&lt;br /&gt;
| Vertrieb vom Hersteller direkt!&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.uni-trend.com/UT2025B.html UNI-T UT2025B] / Voltcraft DSO-1022 M&lt;br /&gt;
| [http://www.uni-trend.com/ Uni-Trend Group Limited]&lt;br /&gt;
| 290 - 356&lt;br /&gt;
| 2&lt;br /&gt;
| 250&lt;br /&gt;
| 25&lt;br /&gt;
| 8&lt;br /&gt;
| 512k/Kanal&amp;lt;ref name=&amp;quot;unit&amp;quot;&amp;gt;Uni-Ts Angaben zur Speichertiefe sind mit Vorsicht zu genießen. Seit Jahren wirbelt die Firma mit Begriffen wie &#039;&#039;memory length&#039;&#039;, &#039;&#039; memory depth&#039;&#039;, &#039;&#039;recording length&#039;&#039; und &#039;&#039;saving depth&#039;&#039; herum - jeweils mit unterschiedlichen Werten für das gleiche Oszilloskop. Dabei vermeidet Uni-T Begriffsdefinitionen zu geben. Im Zweifelsfall sollte man mit dem kleinsten Wert aller Angaben rechnen.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| 320x&amp;amp;shy;240 (Monochrom)&lt;br /&gt;
| •USB Device &amp;lt;BR/&amp;gt; •USB Host &amp;lt;BR/&amp;gt; •RS-232 &amp;lt;BR/&amp;gt; •LAN (opt.)&lt;br /&gt;
| Als UT2025&#039;&#039;&#039;C&#039;&#039;&#039; mit Farbdisplay. UT2000 Serie 25-200MHz, 2CH 250MSa/s bis 1GSa/s&amp;lt;br&amp;gt;wenig Rauschen&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.uni-trend.com/UTD2052CEL.html UTD2052CEL]&lt;br /&gt;
| [http://www.uni-trend.com/ Uni-Trend Group Limited]&lt;br /&gt;
| 369,-&lt;br /&gt;
| 2&lt;br /&gt;
| 1000&lt;br /&gt;
| 50&lt;br /&gt;
| 8&lt;br /&gt;
| 2x600k &#039;&#039;recording length&#039;&#039;;&amp;lt;br&amp;gt;25k &#039;&#039;saving depth&#039;&#039; ein Kanal;&amp;lt;br&amp;gt;12,5k &#039;&#039;memory depth&#039;&#039; zwei Kanäle&amp;lt;ref name=&amp;quot;unit&amp;quot; /&amp;gt;&lt;br /&gt;
| 400x&amp;amp;shy;240 &amp;lt;BR/&amp;gt; (effektiv)&lt;br /&gt;
| •USB Host&lt;br /&gt;
| Displayauflösung beträgt 800x480, der Displaycontroller faßt jedoch immer 2x2 Pixel zusammen (Menü nimmt relativ viel Platz auf dem Bildschirm ein)&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.rohde-schwarz.de/de/Produkte/messtechnik-testsysteme/oszilloskope/HMO1002-%7C-Kerndaten-%7C-4-%7C-11696.html HMO1002]&lt;br /&gt;
| [http://www.rohde-schwarz.de/ Rohde &amp;amp; Schwarz]&lt;br /&gt;
| 950 - 1190&lt;br /&gt;
| 2&lt;br /&gt;
| 1000 &lt;br /&gt;
| 50-100&lt;br /&gt;
| 8&lt;br /&gt;
| 2x 500 kSample&lt;br /&gt;
| 640x&amp;amp;shy;480, 6,5&amp;quot;&lt;br /&gt;
| •USB Device &amp;lt;BR/&amp;gt; •USB Host &amp;lt;BR/&amp;gt; •LAN &lt;br /&gt;
| Umfangreiche Zusatzfunktionen wie Mustergenerator, Frequenzgenerator, 2-Kanal DVM, Frequenzzähler, Komponententester und 8 Kanal MSO Opt. &lt;br /&gt;
|-&lt;br /&gt;
| [http://value.rohde-schwarz.com/vi/value/oscilloscopes/r-srhmo1202-digital-oscilloscope.html/ HMO1202]&lt;br /&gt;
| [http://www.rohde-schwarz.de/ Rohde &amp;amp; Schwarz]&lt;br /&gt;
| - &lt;br /&gt;
| 2&lt;br /&gt;
| 2GSA &amp;lt;br/&amp;gt; 2x1GSA&lt;br /&gt;
| 100 &amp;lt;br/&amp;gt; 200 &amp;lt;br/&amp;gt; 300&lt;br /&gt;
| 8&lt;br /&gt;
| 2Mpoints &amp;lt;br/&amp;gt; 2x 1Mpoints&lt;br /&gt;
| 640x&amp;amp;shy;480, 6,5&amp;quot;&lt;br /&gt;
| •USB Device &amp;lt;BR/&amp;gt; •USB Host &amp;lt;BR/&amp;gt; •LAN &lt;br /&gt;
| Optionen für I2C, RS232, UART, CAN, LIN serielle Busanalyse, Umfangreiche Zusatzfunktionen wie Mustergenerator, Frequenzgenerator, 2-Kanal DVM, Frequenzzähler, Komponententester und 8 Kanal MSO Opt. &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.hameg.com/720.0.html?&amp;amp;L=1 HMO Kompakt Serie]&lt;br /&gt;
| [http://www.hameg.com R&amp;amp;S Hameg]&lt;br /&gt;
| ab 1400&lt;br /&gt;
| 2/4&lt;br /&gt;
| 500 (4CH) 1000 (2CH) 2000 (1CH) &lt;br /&gt;
| 70,&amp;lt;BR/&amp;gt;100,&amp;lt;BR/&amp;gt;150,&amp;lt;BR/&amp;gt;200&lt;br /&gt;
| 8&lt;br /&gt;
| 2 MPts, Zoom bis 50.000:1&lt;br /&gt;
| 640x&amp;amp;shy;480, 6,5&amp;quot;&lt;br /&gt;
| •USB Device &amp;lt;BR/&amp;gt; •USB Host 2x &amp;lt;BR/&amp;gt; •RS-232 &amp;lt;BR/&amp;gt; •DVI-D Out &lt;br /&gt;
| 8 Kanal MSO Opt. Ethernet/IEEE-488 Opt.&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.peaktech.de/produktdetails/kategorie/digital-oszilloskope/produkt/p-1265.html PT 1265]&lt;br /&gt;
| [http://www.PEAKTECH.de Peaktech]&lt;br /&gt;
| ca. 290&lt;br /&gt;
| 2&lt;br /&gt;
| 125 (1CH) 125 (2CH)&lt;br /&gt;
| 30&lt;br /&gt;
| 8&lt;br /&gt;
| 10k pro Kanal&lt;br /&gt;
| 800x&amp;amp;shy;600, 8&amp;quot;&lt;br /&gt;
| •USB Device &amp;lt;BR/&amp;gt; •USB Host &amp;lt;BR/&amp;gt; •LAN &amp;lt;BR/&amp;gt; •VGA&lt;br /&gt;
| Optional: Akkupack  4000 mA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Weitere Marken, die gelegentlich auf dem deutschen Markt auftauchen, häufig über eBay, sind &lt;br /&gt;
&lt;br /&gt;
* GAOtek&lt;br /&gt;
* Hangzhou Jingce (JC)&lt;br /&gt;
* Tonghui&lt;br /&gt;
* Ypioneer&lt;br /&gt;
* Jiangsu Lvyang&lt;br /&gt;
* Siglent (Zweitmarke von Atten)&lt;br /&gt;
&lt;br /&gt;
Über deren Qualität hört man wenig oder gar nichts.&lt;br /&gt;
&lt;br /&gt;
=== PC-Oszilloskope ===&lt;br /&gt;
==== PC-Zusätze ====&lt;br /&gt;
===== Allgemeines &amp;amp; Beachtenswertes =====&lt;br /&gt;
&lt;br /&gt;
PC-Oszilloskope / PC-Zusätze sind im Prinzip digitale Speicheroszilloskope, mit der Besonderheit, dass sie die Daten nicht selbst anzeigen, sondern an einen PC übermitteln. Beim Kauf eines PC-Oszilloskops sollte man besonders vorsichtig sein, da viele Angebote irreführende Informationen enthalten. Sehr beliebt ist z.&amp;amp;nbsp;B. die Werbung mit der Analogbandbreite, also die Bandbreite die der Analogteil der Schaltung (Eingangsverstärker) verarbeiten kann. Wenn hier 100 MHz angegeben sind bedeutet das aber nicht, dass sich auch wirklich Signale bis 100 MHz darstellen lassen; wenn der Wandler nur mit 40 MS/s abtastet ist das Oszilloskop gerade noch bis 4 MHz verwendbar. Ebenso sollte man nur die Echtzeit- oder Realtime-Abtastrate beachten, eine manchmal ebenfalls angegebene &amp;quot;Äquivalent-Abtastrate&amp;quot; ist nur bei periodischen Signalen zu gebrauchen und damit im Umfeld von Mikrocontrollern meist wertlos.&lt;br /&gt;
&lt;br /&gt;
Die Wahl zwischen einem Tischoszilloskop und einem PC-Zusatz ist nicht nur eine Geld-, Leistungs- oder Qualitätsfrage. Ein Tischgerät lässt sich anders bedienen (echte Knöpfe, sicherer Stand) und belegt nicht den PC oder Laptop. Erfahrene Entwickler ziehen ein separates Gerät einem PC-Zusatz vor. Zum Teil ist dies eine Generationsfrage.&lt;br /&gt;
&lt;br /&gt;
Hinzu kommt, dass billige PC-Oszilloskope meist keine galvanische Trennung an ihrer USB-Schnittstelle besitzen. Ein Fehler bei einer Messung kann daher nicht nur das Oszilloskop, sondern gleich den PC mit beschädigen. Das gleiche Problem kann man übrigens auch bei einfachen Tischoszilloskopen mit PC-Schnittstelle haben. Allerdings kann man Tischgeräte auch ohne die PC-Verbindung betreiben, PC-Oszilloskope nicht.&lt;br /&gt;
&lt;br /&gt;
Gelegentlich wird geraten, das Oszilloskop, egal ob Tischgerät oder PC-Zusatz, immer über einen &amp;quot;self powered&amp;quot; USB-Hub (einer mit eigenem Netzteil) mit dem PC zu verbinden. Ob ein solcher Hub als Schutzmaßnahme geeignet ist, besonders zum Personenschutz, sei dahingestellt. Schaden sollte er nicht.&lt;br /&gt;
&lt;br /&gt;
Besonders zu beachten ist die PC-Software. Nicht nur, ob sie zum Zeitpunkt des Kaufs wenigstens grundsätzlichen Ansprüchen genügt, sondern auch, ob der Hersteller vermutlich willens und in der Lage ist, die Software über viele Jahre zu warten. Stichwort Investitionssicherheit. Ohne Wartung kann eine Inkompatibilität in der Software zum nächste Windows Service-Pack oder zur nächste Windows-Version das Gerät völlig entwerten.&lt;br /&gt;
&lt;br /&gt;
Leider ist es so, dass es fast keine freie [[Oszilloskop#Software|Oszilloskopsoftware]] gibt. Die Protokolle zwischen Oszilloskop-Vorsätzen und Computer sind meist proprietär, und selten hat sich ein Entwickler freier Software die Mühe gemacht, ein Protokoll zu entschlüsseln. Noch seltener ist es, dass auf dieser Basis eine brauchbare oder gar gute Software geschrieben wurde. So ist ein Ausweichen auf freie Software kaum möglich, sollte der Hersteller die Wartung aufgeben. Man ist im Normalfall auf Gedeih und Verderb dem Hersteller ausgeliefert.&lt;br /&gt;
&lt;br /&gt;
===== Vergleichstabelle PC-Zusätze =====&lt;br /&gt;
&lt;br /&gt;
Diese Tabelle soll einen Überblick über interessante oder bekannte Geräte besonders im unteren Preisbereich geben. Eine vollständige Auflistung aller existierenden Geräte ergibt wegen der Vielzahl an Baureihen und Modellen wenig Sinn.&lt;br /&gt;
&lt;br /&gt;
Alle hier gelisteten Geräte haben einen USB-Anschluss.&lt;br /&gt;
{| {{Tabelle}} class=&amp;quot;wikitable sortable&amp;quot; id=&amp;quot;pczusatzoszis&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Be&amp;amp;shy;zeich&amp;amp;shy;nung&lt;br /&gt;
! Her&amp;amp;shy;stel&amp;amp;shy;ler&lt;br /&gt;
! width=&amp;quot;25&amp;quot; | Preis [&amp;amp;euro;]&lt;br /&gt;
! width=&amp;quot;35&amp;quot; | Ka&amp;amp;shy;nä&amp;amp;shy;le&lt;br /&gt;
! width=&amp;quot;40&amp;quot; | Samp&amp;amp;shy;le&amp;amp;shy;ra&amp;amp;shy;te [MS/s]&lt;br /&gt;
! width=&amp;quot;40&amp;quot; | Band&amp;amp;shy;breite [MHz]&lt;br /&gt;
! width=&amp;quot;35&amp;quot; | Auf&amp;amp;shy;lö&amp;amp;shy;sung [Bit]&lt;br /&gt;
! Spei&amp;amp;shy;cher&amp;amp;shy;tie&amp;amp;shy;fe [Samp&amp;amp;shy;les]&lt;br /&gt;
! Be&amp;amp;shy;mer&amp;amp;shy;kun&amp;amp;shy;gen&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.elandigitalsystems.com/support/usbtmfaq/software.php USBscope50]&lt;br /&gt;
| Elan Digital Systems / dt. Vertrieb Hacker&lt;br /&gt;
| 249&lt;br /&gt;
| 1 (-4)&lt;br /&gt;
| 50 / 1000&lt;br /&gt;
| 10 / 75&lt;br /&gt;
| 8&lt;br /&gt;
| 3k pro Kanal&lt;br /&gt;
| CAT II, 300V galv. Trennung zu USB, OpenSource SDK, Java, Linux, LabView&lt;br /&gt;
|-&lt;br /&gt;
| PicoScope 2104&lt;br /&gt;
| Pico Technology&lt;br /&gt;
| 180&lt;br /&gt;
| 1&lt;br /&gt;
| 50&lt;br /&gt;
| 10&lt;br /&gt;
| 8&lt;br /&gt;
| 8K&lt;br /&gt;
| Spektralanalyse und Voltmeter in Software.&lt;br /&gt;
|-&lt;br /&gt;
| PicoScope 2105&lt;br /&gt;
| Pico Technology&lt;br /&gt;
| 235&lt;br /&gt;
| 1&lt;br /&gt;
| 100&lt;br /&gt;
| 25&lt;br /&gt;
| 8&lt;br /&gt;
| 24K&lt;br /&gt;
| Spektralanalyse und Voltmeter in Software.&lt;br /&gt;
|-&lt;br /&gt;
| PicoScope 2204A&lt;br /&gt;
| Pico Technology&lt;br /&gt;
| 165&lt;br /&gt;
| 2&lt;br /&gt;
| 100&lt;br /&gt;
| 10&lt;br /&gt;
| 8 - 12&lt;br /&gt;
| 8K&lt;br /&gt;
| Kleiner Arbitrary Waveform Generator eingebaut.&lt;br /&gt;
|-&lt;br /&gt;
| PicoScope 2205A&lt;br /&gt;
| Pico Technology&lt;br /&gt;
| 255&lt;br /&gt;
| 2&lt;br /&gt;
| 200&lt;br /&gt;
| 25&lt;br /&gt;
| 8 - 12&lt;br /&gt;
| 16K&lt;br /&gt;
| Kleiner Arbitrary Waveform Generator eingebaut.&lt;br /&gt;
|-&lt;br /&gt;
| PicoScope 2206A&lt;br /&gt;
| Pico Technology&lt;br /&gt;
| 429&lt;br /&gt;
| 2&lt;br /&gt;
| 500&lt;br /&gt;
| 50&lt;br /&gt;
| 8 - 12&lt;br /&gt;
| 32K&lt;br /&gt;
| Kleiner Arbitrary Waveform Generator eingebaut.&lt;br /&gt;
|-&lt;br /&gt;
| PicoScope 2207A&lt;br /&gt;
| Pico Technology&lt;br /&gt;
| 548&lt;br /&gt;
| 2&lt;br /&gt;
| 1000&lt;br /&gt;
| 100&lt;br /&gt;
| 8 - 12&lt;br /&gt;
| 40K&lt;br /&gt;
| Kleiner Arbitrary Waveform Generator eingebaut.&lt;br /&gt;
|-&lt;br /&gt;
| P 1280&lt;br /&gt;
| Peaktech&lt;br /&gt;
| 329&lt;br /&gt;
| 2&lt;br /&gt;
| 250&lt;br /&gt;
| 60&lt;br /&gt;
| 8&lt;br /&gt;
| 10M&lt;br /&gt;
| USB und LAN Anschluss, 40V&amp;lt;sub&amp;gt;SS&amp;lt;/sub&amp;gt; bei USB, 400V&amp;lt;sub&amp;gt;SS&amp;lt;/sub&amp;gt; bei LAN&lt;br /&gt;
|-&lt;br /&gt;
| P 1285&lt;br /&gt;
| Peaktech&lt;br /&gt;
| 389&lt;br /&gt;
| 2&lt;br /&gt;
| 500&lt;br /&gt;
| 100&lt;br /&gt;
| 8&lt;br /&gt;
| 10M&lt;br /&gt;
| USB und LAN Anschluss, 40V&amp;lt;sub&amp;gt;SS&amp;lt;/sub&amp;gt; bei USB, 400V&amp;lt;sub&amp;gt;SS&amp;lt;/sub&amp;gt; bei LAN&lt;br /&gt;
|-&lt;br /&gt;
| P 1290&lt;br /&gt;
| Peaktech&lt;br /&gt;
| 197&lt;br /&gt;
| 2&lt;br /&gt;
| 100&lt;br /&gt;
| 25&lt;br /&gt;
| 8&lt;br /&gt;
| 5k&lt;br /&gt;
| 400V&amp;lt;sub&amp;gt;SS&amp;lt;/sub&amp;gt; galv. Trennung zu USB&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.hantek.com.cn/english/produce_list.asp?unid=62 DSO-2090 USB]&lt;br /&gt;
| Hantek - Qingdao Hatek Electronic Co., Ltd.&lt;br /&gt;
| 200&lt;br /&gt;
| 2&lt;br /&gt;
| 1 Kanal: 100 / 2 Kanäle: 50&lt;br /&gt;
| 40&lt;br /&gt;
| 8&lt;br /&gt;
| 1 Kanal: 64K / 2 Kanäle: 32K&lt;br /&gt;
| Wenige Vorteile gegenüber einem Tischgerät. Analogbandbreite bei der Samplingrate nicht ausnutzbar. Kleiner Eingangsspannungsbereich. Unter diversen anderen Namen erhältlich.&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.hantek.com.cn/english/produce_list.asp?unid=63 DSO-2150 USB]&lt;br /&gt;
| Hantek - Qingdao Hatek Electronic Co., Ltd.&lt;br /&gt;
| 200&lt;br /&gt;
| 2&lt;br /&gt;
| max. 150&lt;br /&gt;
| 60&lt;br /&gt;
| 8&lt;br /&gt;
| 10K-32K/Kanal&lt;br /&gt;
| .&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.hantek.com.cn/english/produce_list.asp?unid=64 DSO-2250 USB]&lt;br /&gt;
| Hantek - Qingdao Hatek Electronic Co., Ltd.  &lt;br /&gt;
| 220&lt;br /&gt;
| 2&lt;br /&gt;
| max. 250&lt;br /&gt;
| 100&lt;br /&gt;
| 8&lt;br /&gt;
| 10K-512K/Kanal&lt;br /&gt;
| .&lt;br /&gt;
|-&lt;br /&gt;
| Mephisto Scope 1 (UM202)&lt;br /&gt;
| Meilhaus&lt;br /&gt;
| 333&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 16&lt;br /&gt;
| 256K&lt;br /&gt;
| 5 in 1,&lt;br /&gt;
Oszilloskop,&lt;br /&gt;
Logik-Analysator,&lt;br /&gt;
Voltmeter,&lt;br /&gt;
Datenlogger analog und digital,&lt;br /&gt;
Digital-I/O&lt;br /&gt;
|-&lt;br /&gt;
| MSO-19&lt;br /&gt;
| Link Instruments Inc.&lt;br /&gt;
| 172&lt;br /&gt;
| 1&lt;br /&gt;
| 200&lt;br /&gt;
| 60&lt;br /&gt;
| ??&lt;br /&gt;
| 1K&lt;br /&gt;
|&lt;br /&gt;
Oszilloskop,&lt;br /&gt;
Logik-Analysator,&lt;br /&gt;
Pattern Generator,&lt;br /&gt;
TDR&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Soundkarten-Oszilloskope ====&lt;br /&gt;
[[Bild:Soundoszi.JPG|thumb|right|300px|Soundkarten Oszilloskop]]&lt;br /&gt;
Wem ein wirklich einfaches Oszilloskop für kleine Frequenzen (bis etwa 20 kHz) ausreicht, bspw. um die Kommunikation am I2C-Bus zu analysieren, kann dazu die Soundkarte des PC benutzen.&lt;br /&gt;
Allerdings eignet sich eine Soundkarte nicht dazu, Gleichspannungen zu messen, zu niederfrequente Signale können daher nicht damit erfasst werden: Im Screenshot nebenan erkennt man das z.&amp;amp;nbsp;B. an der fallenden Gerade am Schluss (obwohl der tatsächliche Signalpegel konstant oben bleibt). Auch ist hier besondere Vorsicht geboten, da Soundkarten nur für geringe Spannungen ausgelegt sind und bei einer zu hohen Eingangsspannung möglicherweise der ganze PC beschädigt wird. Daher ist eine Vorschaltung mit Spannungsbegrenzung (ca 0,7V) nötig. &lt;br /&gt;
&lt;br /&gt;
Der Vorteil der Soundkartennutzung ist, dass es sich dank des PCs um eine Art  Speicheroszilloskop handelt und die Daten zum Beispiel in Excel analysiert werden können.&lt;br /&gt;
&lt;br /&gt;
* [http://www.scheidig.de/Deutsch/Download/SpekOszi/info.htm Hardy u. Karola Scheidig] verschiedene Programme zum Messen mit der Soundkarte.&lt;br /&gt;
* [http://www.sillanumsoft.org/ Visual Analyser] von Alfredo Accattatis und der University of Rome Tor Vergata, &amp;quot;Donateware&amp;quot; &lt;br /&gt;
* [http://www.zeitnitz.de/Christian/scope_en Soundcard Oscilloscope für Windows] von Christian Zeitnitz, kostenlos für Privatanwendung&lt;br /&gt;
* [http://www.qsl.net/dl4yhf/spectra1.html Spectrum Lab von DL4YHF]&lt;br /&gt;
* [http://w5big.com/spectrogram.htm Spectrogram] von R.S. Horne, ältere Version kostenlos&lt;br /&gt;
* [http://www.audiotester.de/ Audiotester 30-Tage-Version kostenlos]&lt;br /&gt;
* [http://www.dasylab.com/ DasyLab] Eingeschränkte Version (Soundkarte und serielle Schnittstelle) als Beilage zum Buch &amp;quot;Signale-Prozesse-Systeme&amp;quot; ISBN 9783642018633&lt;br /&gt;
* [http://www.zelscope.com/ Zelscope] von Constantin Zeldovich 14-Tage Evaluationsversion&lt;br /&gt;
* [http://web222.webclient5.de/prj/VarEl/SndCrdAmp/ Sound Card Pre-Amp] Selbstbau-Vorverstärker für Sound-Karte von Dr. Thomas Redelberger&lt;br /&gt;
* [http://www.dxzone.com/catalog/Software/Spectrum_analyzers/ Linksammlung]&lt;br /&gt;
&lt;br /&gt;
==== Grafikkarten-Oszilloskope ====&lt;br /&gt;
Videokarten, die über einen analogen Input verfügen, stellen ebenfalls eine Alternative zu käuflichen Oszilloskopen dar, da sie 3kanalig Frequenzen bis rund 180 MHz verarbeiten können. Die digitale Auflösung liegt meist bei 8 Bit maximal, was für einfache Anzeigen jedoch reicht, wenn die Aussteuerung entsprechend ist. Durch Übersampeln lässt sich die Auflösung wie gehabt steigern, indem man z.B. 4 Werte softwareseitig zusammenfasst und damit 1 Bit an Auflösung gewinnt. Bei 16 Werten kann man 2 Bit erwarten und erhält eine Güte von ca. 10 Bit bei 10MHz.&lt;br /&gt;
&lt;br /&gt;
=== Selbstbau ===&lt;br /&gt;
Der Selbstbau eines solchen Gerätes erspart (wie fast immer in solchen Fällen) kein Geld, sofern man nicht eine Spezialfunktion benötigt, die im Markt nicht beschaffbar ist. Der Spaß liegt also wieder im Bauen selbst.&lt;br /&gt;
&lt;br /&gt;
Es gibt diverse preiswerte Bausätze für Spielzeug-Oszilloskope. Die Ergebnisse nach dem Zusammenbau sind aber als Oszilloskop wenig brauchbar.&lt;br /&gt;
&lt;br /&gt;
Eine positive Ausnahme stellt hier das [http://www.elv.de/usb-mini-scope-modul-usb-msm-komplettbausatz.html USB-MSM] von ELV dar, das bei sorgfältiger Kalibrierung und &amp;quot;analog powert&amp;quot; bis zu 200kHz trotz seiner Einfachheit durchaus für das Hobbylabor oder schulische Zwecke brauchbar ist.&lt;br /&gt;
&lt;br /&gt;
Daneben findet man nur sehr wenige Selbstbau-Projekte deren Ergebnisse überzeugen. Einige interessante Projekte sind [http://www.mikrocontroller.net/topic/228997?goto=new#2308320]n und [http://www.ssalewski.de/DAD.html.de]. Dazu sei allerdings gesagt, dass der Aufwand an Material und Messmitteln schnell die Kosten für ein fertiges Oszilloskop überschreitet.&lt;br /&gt;
&lt;br /&gt;
=== Umbau ===&lt;br /&gt;
Sofern man tatsächlich etwas benötigt, was nicht käuflich zu erwerben ist, kann der Kauf und Umbau eines vorhandenen Gerätes sinnvoll sein. &lt;br /&gt;
&lt;br /&gt;
Auf eBay werden immer noch die Oszilloskope der früheren Firma Wittig (heute Welec), wie zum Beispiel das W2012A, angeboten. Als Alternative zu der fehlerträchtigen Orginalfirmware ist mittlerweile eine Open-Source Variante verfügbar die kontinuierlich weiterentwickelt wird. Ebenfalls wird an Hardware Erweiterungen gearbeitet die die Qualität des Oszilloskops deutlich steigern. Wer sich nicht sicher ist ob das Gerät seinen Ansprüchen genügt sollte bei den Entwicklern nachfragen. [http://sourceforge.net/apps/trac/welecw2000a/wiki] Auch hier ist der Weg das Ziel.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[AVR_Softwarepool#Oszilloskop|AVR Softwarepool: Oszilloskop]]&lt;br /&gt;
* [[Einfaches Oszilloskop mit Bascom-AVR]]&lt;br /&gt;
* [[USB_Oszilloskop]]&lt;br /&gt;
* [[Logic_Analyzer]]&lt;br /&gt;
* [[LCS-1M - Ein einfaches, preiswertes, mikrokontrollergesteuertes Zweikanal-Oszilloskop zum Selberbauen | LCS-1M]] ([[Picaxe]])&lt;br /&gt;
* [[media:Probe_Fundamentals-_Tektronix.pdf | Probe_Fundamentals-_Tektronix.pdf]] (engl.)&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/389844#4467981 Forumsbeitrag]: Bitte Tipp für ein einfaches Speicheroszilloskop&lt;br /&gt;
&lt;br /&gt;
== Links &amp;amp; Literatur ==&lt;br /&gt;
* [http://www.elektronikpraxis.vogel.de/index.cfm?pid=9681 Online-Dossier Grundlagen digitaler Oszilloskope. ] Veröffentlicht auf Elektronikpraxis online&lt;br /&gt;
* [http://www.tek.com/Measurement/App_Notes/XYZs/03W_8605_3.pdf XYZs of Oscilloscopes Primer]. Tektronix 03W-8605-3. 20091. Grundlagen digitaler Oszilloskope und das messen mit ihnen, wobei die Tektronix-Produktpalette im Vordergrund steht.  &lt;br /&gt;
* [http://www.tek.com/Measurement/App_Notes/ABCsProbes/60W_6053_9.pdf ABCs of Probes Primer]. Tektronix 60W-6053-9. 2009. Die Grundlagen von Tastköpfen, natürlich am Beispiel von Tektronix-Tastköpfen.&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/1?filter=oszi*+-oszillator Forum-Beiträge zum Thema Oszilloskop] (Kaufberatung, Anwendung)&lt;br /&gt;
* [http://www.mikrocontroller.net/forum/3?filter=oszi*+-oszillator Beiträge im Markt-Forum]&lt;br /&gt;
* [http://www.virtuelles-oszilloskop.de/ Ein virtuelles interaktives Oszilloskop] ala HAMEG HM203-6 20 MHz zum Üben (Seite auf [http://www.virtuelles-oszilloskop.com Englisch])&lt;br /&gt;
* [http://www.eosystems.ro/eoscope/eoscope_en.htm Selbstbau-DSO 40MSPS]&lt;br /&gt;
* [http://www.sigcon.com/Pubs/straight/probes.htm Probing High-Speed Digital Designs], Originally published in [http://www.elecdesign.com/ Electronic Design Magazine], March, 1997&lt;br /&gt;
* [http://hackedgadgets.com/2007/12/10/oscilloscope-tutorials/ Oscilloscope Tutorials] Linkliste bei hackedgadgets.com&lt;br /&gt;
* [http://www.eevblog.com/2011/03/30/eevblog-159-oscilloscope-trigger-holdoff-tutorial/ EEVBlog #159] Videotutorial von Dave Jones zu &#039;&#039;&#039;Trigger Holdoff&#039;&#039;&#039;, (engl.)&lt;br /&gt;
* [http://www.all-about-test.info/spezial-oszilloskope.html/ Marktübersicht Spezial-Oszilloskope mit Hintergrundinfos]&lt;br /&gt;
* [http://oscopes.info/market/2256-usb-oscilloscopes-product-overview-low-end/ Produktübersicht kostengünstige USB-Oszilloskope (englisch)]&lt;br /&gt;
* [https://www.youtube.com/watch?v=kUU2afffAdE&amp;amp;list=PLMKxBlyAyypxuaI7pbfRkSryvTDef_Y1S&amp;amp;index=16 Video] von Bob Peace zum Thema Tastköpfe und High Speed Measurements (engl.)&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/167705#1602827 WinXP Software für OsziFox/ProbeScope] von  Micha B. (chameo)&lt;br /&gt;
&lt;br /&gt;
* [http://users.physik.fu-berlin.de/~jtt/fsc2.phtml fsc2] is a program running under GNU/Linux for controlling spectrometers. Supported devices include digitizing oscilloscopes too:&lt;br /&gt;
** Tektronix Digitizing Oscilloscope TDS520, TDS520A, TDS520C, TDS540, TDS744A and TDS754A&lt;br /&gt;
** LeCroy Digitizing Oscilloscope 9400, 9410, 9420, 9424, 9424e and 9450(A)&lt;br /&gt;
** LeCroy Digitizing Oscilloscope Waverunner and Waverunner-2 (LT224, LT 262, LT264, LT342, LT344, LT354, LT362, LT364, LT372, LT374, LT584, 44(M)Xi, 62X1, 64(M)Xi, 104(M)Xi, 204(M)Xi)&lt;br /&gt;
** LeCroy Digitizing Oscilloscope WaveSurfer (422, 424, 432, 434, 452 and 454)&lt;br /&gt;
&lt;br /&gt;
* [http://xoscope.sourceforge.net/ xoscope, oscope] is a digital oscilloscope using input from a sound card or EsounD and/or a ProbeScope/osziFOX and Bitscope hardware. Includes 8 signal displays, variable time scale, math,memory, measurements, and file save/load. (Linux, GPL)&lt;br /&gt;
&lt;br /&gt;
* [http://www.mtoussaint.de/qtdso.html QtDSO] is a frontend for the Velleman PCS64i digital oscilloscope (Anm.: Velleman nicht mehr unterstützt) It provides a fully featured oscillocope mode (including XY  plot and math) and a highly configurable spectrum analyzer mode. Für &#039;&#039;&#039;Digitalmultimeter&#039;&#039;&#039; gibt es vom gleichen Autor [http://www.mtoussaint.de/qtdmm.html QtDMM] und [http://www.mtoussaint.de/qtdmm2.html QtDMM2].&lt;br /&gt;
&lt;br /&gt;
* [http://www.eig.ch/fr/laboratoires/systemes-numeriques/projets/osqoop-l-oscilloscope-libre/index.html Osqoop] est un oscilloscope logiciel sous licence libre. Il permet de travailler sur un nombre arbitraire de canaux et des acquisitions de longue durée. Wiki description: [http://gitorious.org/osqoop Osqoop] is a multi-platform open source software oscilloscope based on Qt 4. It connects to various hardware data sources such as the sound input or a dedicated USB board.&lt;br /&gt;
&lt;br /&gt;
*[http://code.google.com/p/gds2000tools/ gds2000tools] ist eine Linux-Software für GW-Instek GDS-2000 und andere GW-Instek Oszilloskope.&lt;br /&gt;
&lt;br /&gt;
* [https://code.google.com/p/xoscillo/ Xoscillo] - A software oscilloscope that acquires data using an Arduino or a Parallax (more platforms to come). (Lizenz: CC-BY-NC-SA 3.0; Windows and Linux (needs mono))&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/projects/oscope2100/ Oscope 2100] Linux software für Hantek DSO-2100.&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/projects/openhantek/ OpenHantek] Linux Software für Hantek (Voltcraft/Darkwire/Protek/Acetech) DSO-2090.&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/projects/dsoda/ Digital Soda] DSO-2250 Software.&lt;br /&gt;
&lt;br /&gt;
* [http://owondriver.sourceforge.net/ Owon Driver, Ownon Dump] Linux-Treiber für Owon-Oszilloskope.&lt;br /&gt;
&lt;br /&gt;
* [http://sdaaubckp.sourceforge.net/attenload/ Attenload] Linux - fetch data from Atten oscilloscopes via USB&lt;br /&gt;
&lt;br /&gt;
* [http://www.ant.uni-bremen.de/whomes/rinas/agiload/ Agiload] Linux - fetch data and screenshots from Agilent 5462x oscilloscopes - RS232&lt;br /&gt;
&lt;br /&gt;
* [http://foss.doredevelopment.dk/wiki/Lxi-control Lxi-Control] Kommandozeilen-Applikation zur Fernsteuerung von Geräten mit LXI-Schnittstelle.&lt;br /&gt;
&lt;br /&gt;
* [http://gpib-utils.sourceforge.net/ gpib-util] Linux Kommandozeilen-Applikation, unterstützt diverse Oszilloskope (und andere Geräte) mit GPIB-Schnittstelle.&lt;br /&gt;
&lt;br /&gt;
* [http://optics.eee.nottingham.ac.uk/vxi11/ VXI11] Bibliothek und Programme für Geräte mit VXI-11 Schnittstelle.&lt;br /&gt;
&lt;br /&gt;
* [http://sourceforge.net/projects/wfmreader/ Linux WFM Datenformat-Leser].&lt;br /&gt;
&lt;br /&gt;
* [http://sigrok.org/ &#039;&#039;sigrok&#039;&#039; Open Source Signal Analysis Software Suite]&lt;br /&gt;
&lt;br /&gt;
=== Datenauswertung ===&lt;br /&gt;
&lt;br /&gt;
Bei Oszilloskopen (DSOs), die es erlauben, die gemessenen Daten zu einem PC zu übertragen, kann man die Messwerte auf dem PC weiter auswerten. Zum Beispiel ein Signal demodulieren, filtern oder dekodieren. Grundsätzlich ist die Auswertung in jeder Programmiersprache möglich. Programmiersprachen für numerische Berechnungen eignen sich jedoch besonders.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mathworks.com Matlab] und Freie Alternativen wie [http://www.scilab.org/ SciLab] oder [http://www.gnu.org/software/octave/ GNU Octave]&lt;br /&gt;
&lt;br /&gt;
* [http://www.mathworks.com/matlabcentral/fileexchange/?term=Oscilloscope Matlabcentral Fileexchange, Suche nach &#039;&#039;Oscilloscope&#039;&#039;] Auf Matlabcentral Fileexchange finden sich auch MatLab Lese- und Auswertungsfunktionen für diverse Oszilloskope. Hinweis: Die von MatLab für die Kommunikation mit einem Oszilloskop verwendeten Toolboxen und Funktionen dürfen aufgrund der Matlabcentral Lizenz nicht mit freien Alternativen verwendet werden. [http://wiki.octave.org/FAQ#Why_can.27t_I_use_code_from_File_Exchange_in_Octave.3F_It.27s_released_under_a_BSD_license.21 siehe GNU OCtave FAQ]&lt;br /&gt;
&lt;br /&gt;
* [http://octave.sourceforge.net/instrument-control/ Octave-Forge instrument-control] für die Kommunikation mit diversen Geräten wie z.B. LXI-compatible Agilent, LeCroy or Tektronix Oszilloskope über VXI11. Außerdem UART, I2C, GPIB usw.&lt;br /&gt;
&lt;br /&gt;
* Eines Ingenieurs angeblich unwürdig&amp;lt;ref&amp;gt;Es ist sehr einfach Fehler in Tabellenkalkulationen zu machen, die typischerweise lange unentdeckt bleiben. [http://www.eusprig.org/ Untersuchungen] haben gezeigt, dass bereits dann bis zu 90% aller Tabellenkalkulationsblätter fehlerhaft sind, wenn es nur um einfache mathematische Grundoperationen (Addieren, Subtrahieren, Multiplizieren, Dividieren) geht.&amp;lt;/ref&amp;gt; sind Microsoft Excel oder andere Tabellenkalkulationen. Trotzdem sind sie zur Datenauswertung populär und auch geeignet, wenn sie richtig gehandhabt werden.&lt;br /&gt;
&lt;br /&gt;
== Fußnoten ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Grundlagen]]&lt;br /&gt;
[[Category:Oszilloskope und Analyzer| ]]&lt;/div&gt;</summary>
		<author><name>87.178.104.168</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=FPGA&amp;diff=96970</id>
		<title>FPGA</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=FPGA&amp;diff=96970"/>
		<updated>2017-08-10T12:59:18Z</updated>

		<summary type="html">&lt;p&gt;87.178.104.168: /* FPGA als Ersatz von alten digitalen ICs und Prozessoren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FPGA ist die Abkürzung für &amp;quot;&#039;&#039;&#039;F&#039;&#039;&#039;ield &#039;&#039;&#039;P&#039;&#039;&#039;rogrammable &#039;&#039;&#039;G&#039;&#039;&#039;ate &#039;&#039;&#039;A&#039;&#039;&#039;rray&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Es handelt es sich dabei um programmierbare digitale Bausteine mit denen eine Vielzahl von Schaltungen realisiert werden können.&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
&lt;br /&gt;
=== Grundelemente  ===&lt;br /&gt;
&lt;br /&gt;
Ein FPGA besteht, ähnlich wie ein [[CPLD]], aus vielen Logikelementen, hauptsächlich [[FlipFlop]]s (FF) und davor gelagerten kombinatorischen Logikschaltungen. Diese sind entweder Verknüpfungen verschiedener Logikgatter (FPGAs der Firma Actel), die über elektronische &amp;quot;Schalter&amp;quot; entsprechend der vom Entwickler gewünschten Funktion miteinander verknüpft werden können oder es handelt sich um sogenannte LUTs (Look-Up-Table), mit denen die Logikfunktion explizit realisiert wird.&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;LUT&#039;&#039;&#039; kann eine beliebige kombinatorische Funktion (NAND, XOR, AND, Multiplexer etc.) aus den Eingangssignalen realisieren. Die Anzahl der Eingangssignale pro LUT ist vom FPGA abhängig und liegt meist zwischen 4 und 6. Für Funktionen die mehr Eingänge erfordern als eine einzige LUT besitzt (hohes Fan-In), werden mehrere LUTs direkt miteinander verschaltet. Die [[FlipFlop]]s dienen dazu, Signalwerte zwischenzuspeichern, um sie im nächsten Takt weiterverarbeiten zu können. Das Verhältnis zwischen der Anzahl der LUTs und der Anzahl der Flip-Flops ist meist 1:1. Aktuelle FPGAs bestehen aus bis zu einigen zehntausend Logikelementen.&lt;br /&gt;
&lt;br /&gt;
Die logischen Schalter und Speicher sind in den meisten FPGAs durch [[Speicher#SRAM | SRAM]]-Speicherzellen realisiert, welche beim Bootprozess passend geladen werden. Das Laden dieser Konfigurationsdaten bzw. Verknüpfungsregeln geschieht dabei in der Regel aus einem speziellen [[Speicher#Flash | Flash-ROM]]-Baustein heraus. Es kann aber auch ein Mikrocontroller benutzt werden. Die meisten FPGAs bieten daher für diesen Konfigurationsvorgang mehrere Modi an (seriell, parallel, Master/Slave). Da die SRAM-Zellen ihren Inhalt beim Abschalten der Versorgungsspannung verlieren, muss ein SRAM-basierter FPGA bei jedem Einschalten neu konfiguriert werden. Daher benötigt ein solcher FPGA einige Millisekunden bis zu einigen Sekunden, bevor er voll betriebsbereit ist.&lt;br /&gt;
&lt;br /&gt;
Eine FPGA-Familie beinhaltet Typen mit unterschiedlicher Anzahl und Komplexität von Logikzellen. So enthält ein Spartan3-1000 ca. 2,5 mal so viel Logik (FF, LUTs) wie ein Spartan3-400.  &lt;br /&gt;
&lt;br /&gt;
FPGAs mit nichtflüchtigem Speicher basieren auf [[Speicher#EEPROM | EEPROM]]-, [[Speicher#Flash | Flash]]-Speicher (einige Familien von Lattice und Actel) oder AntiFuse- Technologie (Actel). Die sogenannten AntiFuse FPGAs sind nur einmalig programmierbar.&lt;br /&gt;
&lt;br /&gt;
=== I/O Anschlüsse ===&lt;br /&gt;
&lt;br /&gt;
FPGAs unterstützen als universal einsetzbare Digital-ICs eine Vielzahl von Signalstandards, um mit den unterschiedlichen Digitalbausteinen im Markt kommunizieren zu können.&lt;br /&gt;
&lt;br /&gt;
==== Pegelstandards ====&lt;br /&gt;
Es existieren je nach FPGA-Familie verschiedene TTL-Pegel (5V, 3,3V, 2,5V), differentielle Signalstandards (LVDS, GTL, GTP) und im Hochpreisbereich serielle Hochgeschwindigkeitsstandards mit bis zu 28 Gbit/s. Oftmals sind weitere Eigenschaften wie Treiberstärke und Flankensteilheit für jeden benutzerdefinierbaren Anschluss (User-IO) einstellbar. Meist sind die Pins zu Bänken mit gleichem I/O Standard zusammengefasst. Innerhalb einer solchen Bank arbeiten alle Pins im gleichen I/O Standard und mit der selben I/O Spannung. Für hohe Taktraten wird sowohl für Daten als auch die Takte der LVDS IO-Standard verwendet. Hier sind zwei komplementäre Buffer in unmittelbarer Nachbarschaft angeordnet.&lt;br /&gt;
&lt;br /&gt;
==== Signalrichtung ====&lt;br /&gt;
Innerhalb eines FPGAs gibt es nur eine Datenrichtung, d.h. der Ausgang eines Elementes kann nur mit Eingängen verbunden werden, da die FPGA-typischen Optimierungen nur so sinnvoll anwendbar sind. Rückwärtspfade zwischen internen Modulen müssen daher parallel und ausdrücklich aufgebaut werden. Bei den Ports hingegen kann zwischen den Optionen Eingang, Ausgang und Hochohmig gewählt werden. Die dazu benötigten &lt;br /&gt;
[[Ausgangsstufen Logik-ICs | Tristatebuffer]] werden implizit über VHDL definiert, indem einem Ausgang zeitabhängig der Zustand &amp;quot;Z&amp;quot; zugewiesen wird. Alternativ kann er explizit als Element eingefügt werden. Bei komplexeren FPGAs sind die Ein- und Ausgänge mit Verzögerungsgliedern versehen, die ein Anpassen des Timings bei Bussen wie z.B. schnellen Speichern ermöglichen.&lt;br /&gt;
&lt;br /&gt;
==== Terminierung ====&lt;br /&gt;
Ebenso können je nach Hersteller und Typ interne Pull-Up und Pull-Down-Widerstände sowie Terminationswiderstände zugeschaltet werden, [[Wellenwiderstand | Terminierung]] wird ebenfalls unterstützt.&lt;br /&gt;
&lt;br /&gt;
==== Test und Inbetriebnahme ====&lt;br /&gt;
Einige Pins übernehmen besondere Funktionen und sind somit vom Anwender nicht uneingeschränkt oder z.T. auch gar nicht nutzbar. Dazu zählen neben der [[JTAG]]-Schnittstelle z.&amp;amp;nbsp;B. die Pins zum Einlesen der Konfigurationsdaten. Zudem befinden sich hinter vielen IO-Pads sog. [[Boundary_scan| Boundary Scan]] Zellen.&lt;br /&gt;
&lt;br /&gt;
==== Takteingänge ====&lt;br /&gt;
Einige wenige Pins (2 - 8) sind zum Einspeisen des Taktes für das Design vorgesehen. Für schnelle Schaltungen sollten diese reservierten Pins benutzt werden. Sie enthalten kein Eingangs-FF und wirken über instanziierbare Buffer direkt auf Taktnetze / PLLs. Bei leistungsfähigen großen Applikationen mit mehreren Takten müssen diese genutzt werden, da nur eine begrenzte Zahl von DCMs (Digital Clock Manager) zur Verfügung steht und benachbarte IO-Pins genutzt werden müssen. Für hohe Taktraten werden LVDS-Eingänge verwendet.&lt;br /&gt;
&lt;br /&gt;
==== Verwendung ====&lt;br /&gt;
Das I/O Verhalten wird zusammen mit vielen anderen Parametern in einer Datei festgelegt (Xilinx *.ucf, Altera *.acf, Lattice *.lpf). Alternativ können diese auch als Syntheseoption im Kommentarfeld des [[Verilog]]/[[VHDL]] Codes mit angegeben werden. Die Hersteller bieten FPGAs mit gleicher Anzahl von Logikelementen in unterschiedlichen Gehäusen an. So kann der FPGA mit der passenden Anzahl von Pins eingesetzt werden. Das obere Ende markieren Chips mit über 1500 I/Os, die kleinsten bieten ca. 50 User-I/O. Oft werden nur [[IC-Geh%C3%A4useformen#BGA|BGA]] und [[IC-Geh%C3%A4useformen#QFP|QFP]] Gehäuse (bis ca. 240 Pins) angeboten. Umgekehrt kann innerhalb einer Gehäusefamilie hochmigriert werden, d.h. bei gleichbleibendem Pinout, kann ein komplexerer FPGA eingesetzt werden. Das Layout muss dann nicht verändert werden, um eine Schaltung mit mehr Funktionen auszustatten.&lt;br /&gt;
&lt;br /&gt;
=== Besondere Funktionsblöcke ===&lt;br /&gt;
Neben den LUTs und den FlipFlops beinhalten FPGAs komplexe Routing- und Speicherkonfigurationsoptionen innerhalb und außerhalb der logischen Elemente, die es überhaupt erst gestatten, komplexe Schalt- und Rechenstrukturen aufzubauen. Aufgrund der gestiegenen Anforderungen geht man immer mehr dazu über, häufig benötigte Schaltungsteile fast in Hardware zu integrieren.&lt;br /&gt;
&lt;br /&gt;
==== DSP-Elemente ====&lt;br /&gt;
Für rechenintensive Designs, z.&amp;amp;nbsp;B. in der Signalverarbeitung, enthalten inzwischen praktisch alle FPGAs dedizierte &#039;&#039;&#039;Multiplizierer&#039;&#039;&#039; auf dem Chip, die in sehr kurzer Zeit, z.B. auch einem einzigen Taktzyklus, breite Multiplikationen durchführen können. Diese müssen daher nicht mehr in Logik aufgebaut werden. Aktuelle MUL-Elemente können z.B. 18x25 Bit in einem Schritt multiplizieren. Außerdem treten noch Carry-Chains, Akkumulatoren und Speicher-FFs hinzu, um direkt lokal schnelle Summierer und Zähler realisieren zu können.&lt;br /&gt;
&lt;br /&gt;
==== Block-RAMs ====&lt;br /&gt;
Ferner haben FPGAs oft einen von den LEs getrennt verfügbaren &#039;&#039;&#039;RAM&#039;&#039;&#039;-Bereich integriert, der sich in vielfältiger Weise ansprechen lässt. So können damit Single- oder Dualport-RAMs mit variabler Bitbreite erzeugt werden. Üblich sind mehrere (4 - 30) kleinere Dualport [[Speicher#BRAM | RAM-Blöcke]] von 4 - 16 kbit. Einige Familien besitzen einen größeren internen RAM, andere spezielle FIFO-Blöcke.&lt;br /&gt;
==== Taktgeneratoren ====&lt;br /&gt;
Zur Erzeugung der internen Takte sind &#039;&#039;&#039;PLL&#039;&#039;&#039;s (Phase Locked Loop) auf dem FPGA integriert. Einige Hersteller setzen eine Kombination aus statischen Taktmultiplizierer &#039;&#039;&#039;DLL&#039;&#039;&#039;s (Delay Locked Loop) ein. Mittels dieser Blöcke können aus einem Taktsignal weitere Takte abgeleitet werden. Typisch sind Taktverdopplung oder -vervielfachung. Ebenso kann der Takt bei gleicher Frequenz um eine einstellbare Phase verschoben erzeugt werden. Typische Anwendungen sind die Kompensation von Eingangsbufferverzögerungen, die Ansteuerung von [[Speicher#DDR-RAM | DDR-RAMs]] oder die Kompensation von Laufzeitunterschieden zwischen Takt und mit diesem getakteten Steuersignalen. Meist sind 2 - 8 Taktnetzwerke und PLL/DLLs gleicher Anzahl integriert. Siehe auch [[Taktung FPGA/CPLD]].&lt;br /&gt;
&lt;br /&gt;
=== CPU im FPGA ===&lt;br /&gt;
Microprozessoren sind auch in FPGA-Designs immer häufiger anzutreffen. CPUs sind zwar im Allgemeinen langsamer und weniger effizient, als eine vollständige Implementation aus Logik-Primitiven - aber bei komplexen Abläufen deutlich einfacher, schneller und zielführender zu programmieren, da die Strukturen festgelegt und damit bekannt sind. Insbesondere bei langsamen sequentiellen Aufgaben (Benutzerinterface, komplexe Steueraufgaben etc.) wird gerne auf eine klassische CPU zurückgegriffen, weil ein eventueller Zeitnachteil wegfällt, aber das Testen des Systems vereinfacht wird. Die CPUs sind teilweise kompatibel zu etablierten Prozessorarchitekturen (MIPS, SPARC, AVR), zum Teil aber auch auf die FPGAs einzelner Hersteller hin optimiert.&lt;br /&gt;
&lt;br /&gt;
Als Programmspeicher werden die FPGA-internen [[Speicher#BRAM | RAM-Blöcke]] oder externe [[Speicher]] (SDRAM, SRAM) genutzt. Für einige Prozessorkerne stehen Hochsprachen wie C, C++ etc. zur Verfügung, andere werden in Assembler programmiert.&lt;br /&gt;
&lt;br /&gt;
==== Hardcores ====&lt;br /&gt;
Manche FPGAs haben dazu einen oder mehrere Prozessorkerne als &#039;&#039;HardCores&#039;&#039; physikalisch auf dem Chip integriert, entweder als Chipstruktur auf dem FPGA-kern selbst oder als gebondeter Chip im selben Gehäuse. So findet man z.B. [[AVR]] bei Atmels FPSLIC, PowerPC bei Xilinx&#039; Virtex bzw Dual ARM A9 bei Xilinx&#039; Zynq oder ARM Cortex-M3 bei Actel (Microsemi) SmartFusion, bzw. Dual ARM-CPUs bei Altera. Diese Kerne sind mehr oder weniger funktionell identisch mit den externen Modellen und oftmals mit denselben Werkzeugen zu programmieren und zu testen, d.h. man kann ein komplettes System extern entwickeln und dann auf den FPGA bringen.&lt;br /&gt;
&lt;br /&gt;
==== Softcores ====&lt;br /&gt;
Auf der anderen Seite gibt es auch [[FPGA Soft Core | SoftCores]] (z. B. ARM-Cortex-M1 bei IGLOO-FPGA von [http://www.actel.com ACTEL]), Prozessorkerne die als Quelltext oder als vorsynthetisierte Netzliste vorliegen. In Abhängigkeit von den zur Verfügung stehenden Ressourcen können diese &#039;&#039;SoftCores&#039;&#039; beliebig oft instanziiert und auch in der Funktion konfiguriert werden, um sie zu optimieren. Es gibt eine Vielzahl verschiedener &#039;&#039;SoftCores&#039;&#039;. Einige sind sehr klein und platzsparend realisiert, damit kann man auch auf vergleichsweise kleinen aktuellen FPGAs problemlos eine 32bit-RISC-CPU integrieren. Der Nutzen der Softcores liegt vor allem darin, daß man vorhandene physische CPUs platzsparend integrieren und alte Systeme beschleunigen kann. Ferner können einfache Interfacefunktionen, die schon in SW vorliegen ohne Portierung in VHDL genutzt werden.&lt;br /&gt;
&lt;br /&gt;
== Eigenschaften ==&lt;br /&gt;
&lt;br /&gt;
=== Chipausnutzung ===&lt;br /&gt;
Aufgrund des Umstandes, dass FPGAs eine Reihe von spezialisierten Funktionsblöcken, wie BRAMs, Multiplier und Transceiver beinhalten, die naturgemäß nicht in allen Designs genutzt werden können, bleibt ein Teil der Chipfläche des FPGAs immer ungenutzt. Auch die Beschränkung der routing-Resourcen führt aufgrund der Lage von IOs und spezialisierten Blöcken dazu, dass zur Erreichung der Wunschtaktfrequenz zusätzliche FlipFlops eingesetzt werden müssen, die dann nicht mehr zur Verfügung stehen. Schließlich sind die universellen routing-Resourcen selbst ein Erfordernis, welches Chipfläche kostet. Im Vergleich zu einem full custom asic gleicher Funktion benötigt ein FPGA daher erheblich mehr Chipfläche.&lt;br /&gt;
&lt;br /&gt;
=== Taktgeschwindigkeit ===&lt;br /&gt;
Die maximale „Geschwindigkeit“, eines FPGAs ist von der verwendeten Halbleitertechnologie (Prozess, Strukturgrößen), der internen Schaltungstopologie (Komplexität der LEs), dem Vorhandensein von harten Strukturen und vor allem vom Design abhängig. Dabei sind der sogenannte Datendurchsatz und die rein maximale Systemtaktfrequenz zu unterscheiden. Die erreichbare Taktfrequenz lässt sich ohne detaillierte Kenntnis des Designs nicht abschätzen; möglich sind je nach »Speed Grade« des ICs typischerweise Taktfrequenzen von 300-800 MHz für die Schaltgeschwindigkeit der reinen Logikelemente. Je nach der Anzahl und Komplexität der pro Takt durchzuführenden Operationen ergeben sich dann reale Systemtaktfrequenzen von meist 10-200 MHz für global operierende Einheiten und bis zu 400 MHz für schnelle lokale Module. Maßgeblich ist, in wieweit das Design auf Fläche bzw. Geschwindigkeit hin optimiert- und vom Tool synthetisiert wurde: Durch das Einbringen von zusätzlichen Registerstufen lassen sich z.&amp;amp;nbsp;B. zeitkritische Pfade (Pipelines) entschärfen, sodass die Frequenz des Chips angehoben werden kann und somit der effektive Datendurchsatz erhöht wird, mit dem Nachteil der gesteigerten Latenz durch das Mehr an Takten. Der Datendurchsatz insgesamt lässt sich wiederum durch die Nutzung paralleler Architekturen erhöhen.&lt;br /&gt;
&lt;br /&gt;
Die Systemfrequenz kann, muss aber nicht der Frequenz entsprechen, mit der Daten zyklisch eingetaktet und verarbeitet werden; zudem sind Schaltungsteile mit unterschiedlichen Taktfrequenzen zu unterscheiden: Mit einem Systemtakt von 20 MHz lassen sich z.&amp;amp;nbsp;B. 18-Bit AD-Wandler auslesen, die so z.&amp;amp;nbsp;B. alle 1 µs neue Daten liefern, die verarbeitet werden müssen. Bei der Nutzung von 5 solchen Wandlern, die sequentiell verarbeitet werden, lägen 5 MHz Datenfrequenz vor. Für andere Schaltungsteile, die z.&amp;amp;nbsp;B. asynchron an die Peripherie andocken, sowie reine »state machines« können Schaltungsteile auf der 2-4 fachen Frequenz betrieben werden.&lt;br /&gt;
&lt;br /&gt;
Generell sind Fläche und Geschwindigkeit konkurrierende Größen, zwischen denen ein Optimum gefunden werden muss. Für die preiswerten FPGA-Serien wie Spartan (Xilinx) und Cyclone (Altera) sind aufgrund technologischer Randbedingungen bei gleichem Design etwa 10-30% weniger Taktgeschwindigkeit zu erwarten, als bei den großen Brüdern der Virtex- (Xilinx) bzw. Stratix-Familie (Altera). Es muss mit mehr Verbrauch an Logikelementen und Taktzyklen gerechnet werden (weniger Routingreserven, geringere Zahl von LUT-Eingängen, langsamere Logikelemente). Dafür sind sie sehr preiswerter.&lt;br /&gt;
&lt;br /&gt;
Funktionstechnisch identische Chips werden oft in mehrere Geschwindigkeitsklassen (speed grades) angeboten, die sich meist durch Bauteilselektion bei der Produktion ergeben. Grob kann man ca. 5%-15% höhere Taktung zwischen zwei speed grades erwarten. Teilweise werden durch produktionstechnische Maßnahmen wie veränderte Dotierung auch gezielt schnellere, bzw stromsparende Typen generiert, entsprechend klassifiziert und  angeboten.&lt;br /&gt;
&lt;br /&gt;
== Herstellung ==&lt;br /&gt;
&lt;br /&gt;
FPGAs heutiger Bauart sind hochkomplexe Strukturen, da sie einerseits sehr hochgetaktet werden müssen, umfangreiche Funktionen bewerkstelligen sollen und damit genügend Resourcen haben müssen, andererseits aber preisgünstig und flexibel sein sollen, was umfangreiche Umschaltmöglichkeiten erfordert. Damit sind FPGAs als universelles Bauteil vergleichsweise teuer. Umso problematischer ist deren Fertigung:&lt;br /&gt;
&lt;br /&gt;
=== Herstellungsprozess ===&lt;br /&gt;
FPGAs werden letztlich als Analogschaltkreis unter Verwendung von sogenannten Standardbibliotheken entwickelt, indem fertige, mehrfach simulierte und getestete Blöcke zusammengeschaltet werden, die ihre Funktion mehrfach in Silizium bewiesen haben. Dies betrifft hauptsächlich die IO-Zellen, Schaltmatritzen und vor allem Controller, RAM-Blöcke und andere hard cores.&lt;br /&gt;
&lt;br /&gt;
Deren Funktion wird zunächst in einer Logiksimulation im Zusammenwirken geprüft und anschließend mit einer Analogsimulation ausgewählter Baugruppen untermauert. Besonders die kritischen Bauteile PLLs, IO-Treiber und Taktleitungen werden dabei untersucht. Fertige FPGA-Prototypen werden dann mit unterschiedlichen Stress-Schaltungen auf ihr Leistungsvermögen hin geprüft.&lt;br /&gt;
&lt;br /&gt;
Die auszuliefernden Exemplare für Kunden, werden mit dem boundary scan Verfahren getestet und mit einem Testdesign beladen.&lt;br /&gt;
&lt;br /&gt;
=== Prozessqualifizierung ===&lt;br /&gt;
Das Entwickeln, fertigen und Testen der FPGAs führt zu einer Regelschleife, die es gestattet, ständige Verbesserungen vorzunehmen. Für den Anwender ist bedeutsam, dass im Zuge der Informationsgewinnung bezüglich Taktraten und Strombedarf für alle FPGAs und Fertigungsprozesse kontinuierlich Modelle entwickelt werden, welche sukzessive in die Entwicklungswerkzeuge einfließen. Im Laufe des Lebenszyklus eines Chips werden diese Modelle immer präziser und gestatten ein engeres Timing und eine exaktere Voraussage hinsichtlich des Leistungsbedarfs. Zu Beginn ist es daher oft so, dass die Modellierung eher konservativ erfolgt, was dazu führt, dass neue Chips bei der Simulation der Taktgeschwindigkeiten zunächst ihre realen Reserven nicht ausschöpfen können. Oftmals sind daher FPGA-Designs, welche das Timing gerade nicht getroffen haben, dennoch voll leistungsfähig. Umgekehrt gibt es immer wieder einzelne Exemplare, die das eigentlich simulierte Taktziel in Tests verfehlen.&lt;br /&gt;
&lt;br /&gt;
=== Hersteller ===&lt;br /&gt;
&lt;br /&gt;
Die größten Hersteller von FPGAs sind [http://www.altera.com Altera] und [http://www.xilinx.com Xilinx]. Weitere Hersteller sind [http://www.latticesemi.com/ Lattice], [http://www.actel.com Actel] und [http://www.atmel.com Atmel].&lt;br /&gt;
&lt;br /&gt;
Einige  Hersteller wie Altera verfügen über keine eigene Fabrik (-&amp;gt; &amp;quot;fabless&amp;quot;), sondern lassen ihre entwickelten FPGAs und ASICs bei wechselnden Halbleiterherstellern fertigen. Dies führt zu jeweils günstigen Produktionskosten, allerdings auch zu Qualitätsschwankungen. Auch Liefergarantien sind schwerer zu erhalten, besonders, wenn man darauf angewiesen ist, dass ein Chip auch in 25 Jahren noch zu bekommen ist.&lt;br /&gt;
&lt;br /&gt;
== Anwendung und Programmierung ==&lt;br /&gt;
=== Erstellung der FPGA firmware===&lt;br /&gt;
&lt;br /&gt;
==== Design Flow ====&lt;br /&gt;
Die Erstellung des Programmier-Datenstroms für den FPGA, um die oft komplizierten Funktionen heutiger Applikationen zu erreichen, wird inzwischen ausschließlich durch automatische Routing- und Synthesewerkzeuge erledigt, welche mit einer funktionellen- bzw strukturellen Beschreibung der gewünschten Architektur in einer sogenannten Hardwarebeschreibungssprache wie z.B. [[VHDL]] oder [[Verilog]] &amp;quot;gefüttert&amp;quot; werden. Die Hardwarebeschreibung gelingt ihrerseits entweder ausdrücklich durch Texteditoren indem Logikstrukturen, hardwarenahe Strukturen, Ablaufdiagramme und Zustandsautomaten formuliert werden, oder mit Code-generierenden Werkzeugen. Mit deren Hilfe sind komplexe IO-Interfaces, mathematische Funktionen wie Regelalgorithmen und ganze Rechnerarchitakturen formulierbar.&lt;br /&gt;
&lt;br /&gt;
Während und nach der Erstellung der Schaltungsteile, wird die Korrektheit der Funktion einzelner Blöcke sowie der gesamten Schaltung mit Simulationswerkzeugen theoretisch geprüft und gfs im Rahmen der Qualitätsmanagementprozesse auch formell nachgewiesen und geeignet dokumentiert. Danach folgt eine Integration und ein praktischer Schaltungstest Generell unterscheidet man folgende formelle Schritte während des Entwicklungsprozesses:&lt;br /&gt;
&lt;br /&gt;
Validierung: Die gewünschte Funktion der Schaltung wird theoretisch geprüft. Dies betrifft im Wesentlichen die komplizierten Funktionsblöcke wie state machines, CPU-Firmware und Rechenpipelines / Algorithmen und Codierungen wie CRC und AES. Hierbei wird untersucht, ob die Funktion grundsätzlich richtig ist. Das Prüfen erfolgt meist theoretisch mit MATLAB, EXCEL oder einer Programm-analyse-Software. Ziel ist der Nachweis der Richtigkeit des Konzeptes.&lt;br /&gt;
&lt;br /&gt;
Verifikation: Hierbei wird die konkrete Art der Umsetzung geprüft. Dies betrifft alle Schaltungsteile die einer bestimmten Funktion zuzuordnen sind. Praktisch wird die gesamte Schaltung blockweise dahingehend simuliert, ob alle Funktionen berücksichtigt wurden und das Verhalten in allen erdenklichen Situationen stimmig ist. Dazu werden Testfälle generiert und in die Schaltung eingespeist. Hierbei wird auch auf das logische Timing infolge des synchronen Designs Rücksicht genommen. In einigen besonderen Fällen wird auch das platizerte Design, so wie es letztlich im FPGA realisiert ist, zurückgelesen und das timing näher unterucht, um bestimmte Nachweise in Grenzsituationen zu führen.&lt;br /&gt;
&lt;br /&gt;
Test: Das fertig programmierte FPGA wird real in der Hardware getestet. Dazu können Testszenarien und -mittel aus der Validierungs- und Verfikationssphase herangezogen werden und/oder ein Testplan abgearbeitet werden. Hierbei ist in aller Regel umgebende Peripherie beteiligt, weil der FPGA alleine schlecht testbar ist. Bei diesem Schritt kommt dann auch die Elektronik mit ins Spiel, d.h. das Verhalten des Ladevorgangs, Probleme mit Spannungsstabilität, Pegeln, Leitungen etc. Da so ein konkretes Exemplar des Chips zur Anwendung kommt, wird ein solcher Test meist mit mehreren Baugruppen durchgeführt. In aller Regel sind Normabweichungen hier aber nicht durch den FPGA- sondern durch das Layout des PCB bestimmt. Diese Tests offenbaren demgemäß, dass ein und dasselbe Programmierfile in einem FPGA-System funktinoniert und aufgrund geringer Unterschiede der Elektronik in einem anderen gfs nicht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein wichtiger Punkt bei der Validierung, der Verifikation und auch dem Test ist dabei die Vollständigkeit der Testfälle, also die Abdeckung der Realität, in der sich das System bewegt. Um bereist bei der Validierung des Konzeptes eventuelle Fehler und Grenzen des Systems ausloten und das FPGA entsprechend fehlertolerant machen zu können, werden theoretische Modelle der Peripherie, der Physik, der Bedieneraktivität und der Randbedingungen / Abläufe erzeugt und in die Simulation eingefügt. Dies passiert sowohl bei der formellen Verfikation mit z.B. MATLAB, als auch der funktionellen Verifikation mit VHDL-Simulationswerkzeugen wie ModelSIM. Durch geeignete Modellierung von PLLs, Jitter, Variation der Signale von Aussen, können dadurch quasi alle erdenklichen Szenarien durchgespielt werden. Dies ist besonders wichtig bei Fällen, die sich in der Realität nur schwer nachstellen lassen, wie z.B: dem Auftreten zufälliger Fehler in RAMs, Störungen auf Leitungen oder Drahtbrüche.&lt;br /&gt;
&lt;br /&gt;
==== Wiederverwendbarkeit ====&lt;br /&gt;
Durch die Standardisierung der Architektur einerseits sowie die Entkopplung von applikationsorientierter Beschreibung und Chip- und Hersteller-spezifischer Synthese andererseits, wird die Hardware quasi durch Software gebaut. Dies wiederum schafft alle Optionen der Wiederverwendung und dem flexibleb Austausch von &amp;quot;Hardwareteilen&amp;quot;. So stehen inzwischen komplette Schaltungen für serielle Bausteine, RAM-Controller und vieles mehr zur Verfügung - teilweise sogar in Form von Open Source Projekten.&lt;br /&gt;
&lt;br /&gt;
Andererseits ist eine Tendenz erkennbar, dass Hersteller ihre Software und die damit erstellbare VHDL, speziell bei IP-Cores, immer stärker schützen und abkapseln. Diese produzieren kaum noch allgemeine VHDL, sondern nur noch herstellerspezifische Scripte. Diese lassen sich in aller Regel nicht übertragen. Zudem führen auch immer grösser werdende Unterschiede in den Chipstrukturen und Resourcen in modernen FPGAs dazu, dass die Portierbarkeit weiter eingeschränkt wird. Dies ist besonders bezüglich der Integration von Peripherie-Controllern oder ganzer Mikrocontroller der Fall. Bei SOPC-Systemen sind die generierten Strukturen praktisch überhaupt nicht mehr von einem FPGA-Hersteller zum anderen zu portieren und oftmals nicht einmal mehr zwischen FPGA-Familien desselben Herstellers untereinander kompatibel.&lt;br /&gt;
&lt;br /&gt;
Dadurch entsteht ein immer weiter wachsender Design- und Pflegeaufwand, dem viele Firmen inzwischen dadurch begegnen, daß sie - soweit als möglich - herstellerunabhängige Beschreibungen verwenden. Z.B. können RAM-Beschreibungen und State Machine, rein in VHDL-Text generiert werden, anstatt sie mit den mitgelieferten Code-Generatoren zu erzeugen.&lt;br /&gt;
&lt;br /&gt;
=== Anbindung an Mikrocontroller ===&lt;br /&gt;
Es gibt unterschiedliche Arten, wie ein FPGA mit einem Controller verbunden sein kann. In der Regel ist der Controller der Master und arbeitet auf den FPGA. Dabei ist zwischen direkten impulsiven Zugriffen auf den FPGA nach Massgabe des internen Ablaufs im Prozessor, die jederzeit und wortweise an irgendeine Adresse erfolgen können und blockweisem Schreiben, also permanentem Datenfluss ohne Adressierung zu unterscheiden.&lt;br /&gt;
&lt;br /&gt;
Das wortweise Schreiben und Lesen erfolgt in Form eines klassischen Speicherinterfaces durch aktiven Zugriff auf den FPGA oder den FPGA hindurch auf einen RAM-Bereich, in den der FPGA seinen Speicher einblendet.&lt;br /&gt;
&lt;br /&gt;
==== Memory Mapped ====&lt;br /&gt;
Hierunter versteht man den Zugriff des Mikrocontrollers auf das FPGA in Form eines Speichers. Dabei muss der FPGA ein klassisches Speicherinterface zur Verfügung stellen. In einzelnen Fällen reicht es auch, wenn dieser ein internes Blockram im dual ported Modus an die Ports des Mikrocontrollers heranführt.&lt;br /&gt;
&lt;br /&gt;
==== Streaming IO ====&lt;br /&gt;
Liefert ein Mikrocontroller häufig grosse Datenmengen an einen FPGA, ist es mitunter sinnvoll auf einen aktiven Zugriff mit Wortadressierung zu verzichten und einen pipeline-Zugriff zu implementieren. Der FPGA &amp;quot;hört&amp;quot; dazu den Datenbus des Mikrocontroller ab und erkennt anhand z.B. der Aktivierung nur einer Schreibleitung den Beginn des Sendens und empfängt dann mit jedem Takt ein Wort. Was die Daten zu bedeuten haben und wohin sie zu schreiben sind, muss dann in den Daten codiert werden. Auch ist es denkbar den FPGA so zu konfigurieren, dass beim Schreiben auf eine ganz bestimmte Adresse ein grösserer Datenblock übergeben wird. &lt;br /&gt;
&lt;br /&gt;
In beiden Fällen wird im FPGA ein FIFO eingesetzt, der synchron mit dem Mikroprozessortakt beschrieben wird. Auf der Seite des FPGAs muss eine FSM überwachen, ob Daten ankommen und diese geeignet verarbeiten.&lt;br /&gt;
&lt;br /&gt;
==== Indirekte Busverbindung ====&lt;br /&gt;
Oftmals sind FPGAs und MCUs in grösseren Systemen über Busse verschaltet. So kann der FPGA an einem klassischen Daten-Adress-Bus parallel zu einem RAM und anderen Bausteinen über Adressdekodierung und Chip-Select betrieben werden, oder er wird über ein logisches Interface wie SPI angebunden.&lt;br /&gt;
&lt;br /&gt;
=== Anbindung an RAMs und ROMs ===&lt;br /&gt;
&lt;br /&gt;
==== DDR2 / DDR3 - RAM ====&lt;br /&gt;
Während die Ansteuerung eines normalen SRAMS mittels eines klassischen memory mapped interface recht einfach ist, bedürfen DRAMS- speziell mit DDR-Funktion einer aufwändigeren Schaltung, welche die komplizierte Kommandostruktur der DDR-Ansteuerung versteht, pipelining und gfs caching praktiziert und das RAM entsprechend bedient. Dabei sind RAM-spezifische Randbedingungen (refresh / self refresh) zu beachten. Für FPGAs existieren hier eine Reihe von konfigurierbaren IP-Cores. &lt;br /&gt;
&lt;br /&gt;
In jüngster Zeit beobachtet man hier einen Umstieg auf prozessorähnliche Funktionen und Stukturen, d.h. die RAMs werden nicht mehr nativ sondern über eine Prozessorinterface angesteuert. Die Firma Xilinx z.B. bietet keine nativen Mehrportlösungen mehr an. DDR-Controller mit den in FPGAs meistens benötigten Multiportfunktionen, also Zugriffen durch mehrere Module, sind damit praktisch nur noch über AXI-Interface zu realisieren.&lt;br /&gt;
&lt;br /&gt;
==== SPI-Flash ====&lt;br /&gt;
Die Anbindung über SPI erfolgt meist über serielle Verbindungen wie I2C, da nur wenig Bandbreite benötigt wird. In selteneren Fällen werden FPGAs parallel mit einem Flash verbunden, z.B. bei grossen FPGAs mit umfangreichem image, welches aus einem Flash schnell geladen werden soll.&lt;br /&gt;
&lt;br /&gt;
=== Anbindung an Peripherie ===&lt;br /&gt;
Typische Anwendungen für FPGAs sind die breitbandige (grosse Busbreite und/oder hohe Taktfrequenz) Gewinnung und Verarbeitung von Daten, bei denen DSPs oder MCUs nicht mehr (effektiv) eingesetzt werden können. Typische Beispiele dafür sind:&lt;br /&gt;
&lt;br /&gt;
==== Videotechnik ====&lt;br /&gt;
[[Bildsensor]]en produzieren traditionell die grössten Datenmengen je Zeiteinheit und sind ohne FPGAs praktisch nicht mit der Aussenwelt in Kontakt zu bringen. FPGAs arbeiten hier entweder auf der Kunden- oder auch der Herstellerseite, um die komplexen Datenströme anzunehmen, vorzuverarbeiten und in eine reduziertes, praktikableres Datenformat umzusetzen. Auch die Annahme eines Videoformates ist praktisch nur mit FPGAs möglich.&lt;br /&gt;
&lt;br /&gt;
Die benötigten Datenschnittstellen können mit Hilfe von Transceiver-Ports / LVDS manuell realisiert werden, oder es werden Umsetzer-Chips verwendet. Beispiele:&lt;br /&gt;
&lt;br /&gt;
* HDMI-Transceiver für FPGAs ohne Gigabit-Transceiver&lt;br /&gt;
* SERDES-Transceiver für mittelpreise FPGAs ohne SERDES / sehr hohe Frequenzen&lt;br /&gt;
* Camera-Link-Deserializer (für langsame FPGAs)&lt;br /&gt;
* LVDS-Buffer-Deserializer (für langsame FPGAs ohne LVDS buffer)&lt;br /&gt;
* DVI-Buffer&lt;br /&gt;
&lt;br /&gt;
Für Analoge Daten benötigt man selbstredend noch Video-ADCs / Video-DACs, die überhaupt erst ein digitales Signal erzeugen.&lt;br /&gt;
&lt;br /&gt;
==== Gigabit-Ethernet ====&lt;br /&gt;
Für die Umsetzung auf den (praktisch analogen) [[Ethernet]]-Standard braucht es immer einen sogenannten [[Glossar#p|PHY]], also einen physikalischen Zusatzchip. Dieser vollzieht die [[Glossar#p|5PAM]]-Modulation und die Codierung im 10/8-Format. Die Ankopplung an den FPGA erfolgt direkt.&lt;br /&gt;
&lt;br /&gt;
Während althergebrachte 100MBit-Verbindungen dabei oft noch mit UCs und softcores zu bedienen waren, können 1GBit-Netzwerke nur noch mit FPGAs sinnvoll angesteuert werden. Umgekehrt ist das Gigabit-Netzwerk eine gute Lösung, um Daten effektiv und billig in einen PC zu transportieren, da moderne PCs alle eine GBit-Karte besitzen und die Datenrate bei schnellen CPUs auch weitgehend ausgenutzt werden kann. Typische Bandbreiten bewegen sich für Linux mit unmodifizierten Treibern bei 700MBit-800MBit.&lt;br /&gt;
&lt;br /&gt;
Der [[Glossar#m|MAC]], bzw MAC-ähnliche Funktionen, sind im FPGA direkt implementierbar (z.B. mit IP-Cores) und können mit einfachen [[Glossar#f|FSM]]s angesteuert werden. Für die Verwendung von C-Software ist es notwendig, einen hardcore zu verwenden, da mit softcores die Bandbreite kaum erreicht werden kann. Besonders das Verpacken der Daten, die Abarbeitung des Protokolls sowie die Bildung der Ethernet-header mit Checksummen, CRC und zusätzlichen Prüf- und Steuerinformationen sind in VHDL sehr einfach und entspannt zu erzeugen, weil parallel gearbeitet werden kann.&lt;br /&gt;
&lt;br /&gt;
Die Bandbreite einer typischen [[Glossar#g|GMII]]-Verbindung mit [[Glossar#d|DDR]] beträgt 2x150MHz x 8 Bit, was mit mittleren FPGAs gut zu machen ist. Die interne Bandbreite ohne header beträgt dann typisch etwa 800MBit, z.B. 50MHz x 16 Bit für die Daten. Ab diesem Punkt ist dann wieder ein schneller softcore einsetzbar.&lt;br /&gt;
&lt;br /&gt;
==== High-Speed-USB ====&lt;br /&gt;
Für die Übersetzung auf den immer schnelleren USB-Bus (inzwischen bis 5Gb Bandbreite!) stehen Chips zur Verfügung, die sich in vergleichsweise einfacher Weise ansteuern lassen. Eine passende Sende- und Empfangsarchtiktur ist in FPGAs relativ rasch zu implementieren.&lt;br /&gt;
&lt;br /&gt;
=== Implementierung von Steuerfunktionen ===&lt;br /&gt;
In den meisten FPGA-Applikationen sind mehr oder weniger komplizierte Abläufe zu integrieren, die den Datenfluss steuern und die einzelnen Komponenten so mit einenander verschalten, dass sie wunschgemäss aufeinander reagieren.&lt;br /&gt;
&lt;br /&gt;
Mit nativem VHDL sind einfache sequenzielle Abläufe mit überschaubaren Verschachtelungstiefen und Schleifen direkt in Form von Zählersteuerungen oder abstrakten State Machines realisierbar. Dazu kann auf die automatische Codegeneration aus state machine designern heraus oder die halbautomatische Erzeugung von Code mit z.B. Excel zurückgreifen, die die Enumeration von states, die Abfragen und die Sprünge zu den nächsten states automatisch vollzieht. Dies hat aber seine Grenzen, weil dies früher oder später unübersichtlich wird und nicht mehr so gut pflegbar ist. Zudem kann sich der Code stark aufblähen und die Zusammenfassung etwaiger Redundanz durch die Synthese zu hohen Synthesezeiten führen.&lt;br /&gt;
&lt;br /&gt;
Applikationen, die nicht ganz so zeitkritisch sind, sollten lieber mit einer flexiblen, verschachtelten Struktur von 2 state machines abgearbeitet werden, bei denen der Ablauf von der Generation des Timings für die Hardware getrennt ist. In reinen Ablaufsteuerung stehen dann wie in einem Befehlsspeicher abstrakte Codes hintereinander und werden mittels einer intelligenten Struktur sequenziell abgearbeitet werden. Diese agiert wie ein Befehlsinterpreter und  stösst eine untergeordnete state machine an. Damit wird zwar mehr Zeit für die Verwaltung benötigt, es führt aber letztlich zu quantitav weniger Steuer-Code. Die Befehlsfolgen lassen sich z.B. günstig in einem ROM realisieren. Die gesamte Steuerung wird intelligenter und insgesamt kleiner.&lt;br /&gt;
&lt;br /&gt;
Eine deartige Steuerlogik lässt sich soweit ausbauen, dass untergeordnete state machines wie Unterprogramme ablaufen und durch ein flexibles Hauptprogramm gesteuert werden, womit sie sich immer mehr einer Prozessorarchitektur annähert.&lt;br /&gt;
&lt;br /&gt;
Wenn die Komplexität viele &amp;quot;Befehle&amp;quot; erfordert, gfs noch gerechnet und viel entschieden werden muss, lohnt der Rückgriff auf einen vorgefertigen Softcore. Dies hat den Vorteil, dass eine Standardstruktur verwendet wird, für die es erweiterte Entwicklungs- und Debugging-Software gibt. Spätestens, wenn man mit virtuellen Datenstrukturen und rekursiven Funktionen arbeitet, oder z.B. Zeichenkettenverarbeitung braucht, ist ein Softcore unerlässlich, &lt;br /&gt;
weil dann alle Methoden-, Variablen und sonstige Aspekte der jeweiligen Hochsprache verwendet werden können.&lt;br /&gt;
&lt;br /&gt;
=== Beispiele von VHDL Code ===&lt;br /&gt;
Siehe [[VHDL_Softwarepool]]&lt;br /&gt;
&lt;br /&gt;
== Einsatz in elektronischen Schaltungen ==&lt;br /&gt;
Der Einsatz von modernen FPGAs erfordert neben dem grundsätzlichen Wissen im Bezug auf den design flow und den für FPGAs optimierten Schaltungs- und Rechenstrukturen auch grosses Knowhow im Bereich der analogen Schaltungstechnik sowie auch der effektiven Vorgehensweise beim Design. &lt;br /&gt;
&lt;br /&gt;
=== FPGA aus analoger Sicht ===&lt;br /&gt;
FPGAs bedürfen heute eines perfekten Layouts, um mit RAMs und externen Chips zusammenarbeiten zu können, da sowohl die internen, als auch externen Taktfrequenzen rapide angestiegen sind. Ferner ist grosses Augenmerk auf die Spannungsversorgungen zu legen.&lt;br /&gt;
&lt;br /&gt;
=== Integration ins PCB ===&lt;br /&gt;
Weiter ist es heute kaum noch möglich, FPGA-Design vom board-Design funktionell zu trennen, wie man es mit Blick auf den scheinbar rein logischen Schaltungsentwurf glauben könnte und früher auch der Fall war. Da FPGAs heute stark dedizierte Funktionen enthalten, die nicht in jeder IO-Zelle zur Verfügung stehen oder spezielle Bank-Konfigurationen erforden, muss der Schaltungsentwurf und das Layouten des FPGAs und des Boards einhergehen.&lt;br /&gt;
&lt;br /&gt;
=== Entwicklungsboards und Starter-Kits ===&lt;br /&gt;
Von mehreren Seiten gibt es im Markt eine ganze Palette von sogenannten Entwicklungs- und Evaluierungsboards. Diese eignen sich nicht nur zum Kennenlernen des Chips, bez. zur Validierung der Lösung (ob die Schaltung wie gebaut auch im konkreten Ziel-FPGAs arbeitet) sondern werden immer öfter auch in bestehenden Systemen verbaut, weil aufgrund einer geringen Stückzahl die Selbstentwicklung nicht lohnt.&lt;br /&gt;
&lt;br /&gt;
Siehe [[Liste von FPGA Eval boards]]&lt;br /&gt;
&lt;br /&gt;
=== FPGA als Ersatz von alten digitalen ICs und Prozessoren ===&lt;br /&gt;
Es gibt vielfach den Wunsch, ICs, die nicht mehr direkt zu beschaffen sind, durch FPGAs (oder wenn möglich CPLDs) zu ersetzen. Gerade ältere Schaltungen basieren aber durchaus noch auf 5V TTL und CMOS Logik. Oft sind die Systeme nicht ohne sehr hohen Aufwand und Verlust der Wirtschaftlichkeit zu ersetzen (wie ältere, produktive Industrieanalagen oder komplexe Rechensysteme - aber auch wenn es um die Erhaltung alter Hardware bei &amp;quot;retro-computing&amp;quot; geht).&lt;br /&gt;
&lt;br /&gt;
Nun bieten heute erhältliche (und günstige) FPGAs - aufgrund ihrer verwendeten Technologie - keine direkte 5V Kompatibilität mehr. FPGAs wie die Spartan II (nicht IIe), erlauben zumindest noch &amp;quot;5V Toleranz&amp;quot; auf den I/O-Pins. Das heißt: das FPGA wird zwar mit 3.3V versorgt und kann daher nur 3.3V am Ausgang treiben, erlaubt aber 5V von externen Bausteinen am Pin - dies ist nach wie vor TTL kompatibel, aber auch viele CMOS-Schaltungen können so durchaus noch betrieben werden.&lt;br /&gt;
&lt;br /&gt;
Für neueste 3.3V (oder weniger) FPGAs kann man Levelshifter-Schaltungen verwenden, die entweder bidirektional ausgeführt sind und ein &amp;quot;open-drain-artiges&amp;quot; Verhalten zeigen (also beide Seiten können die Leitung nur auf Lowpegel treiben, der Highpegel wird durch pull-up Widerstände erreicht) oder die unidirektional (mit optionaler Richtungsumkehr und/oder Treiberdeaktivierung über Kontrolleingänge) gebaut sind. Verwendung von Spannungsteilern, Zenerdioden-Schaltungen oder Ausnutzung von Diodenlimitierungen der I/O Treiber des FPGAs (und Verwendung eines Serienwiderstands zur Stromlimitierung) sind zumeist nur für niedrige Schaltfrequenzen gut geeignet und sorgen für eine erhöhte Stromaufnahme.&lt;br /&gt;
&lt;br /&gt;
Siehe auch: [[Pegelwandler]]&lt;br /&gt;
=== FPGA als Erweiterung von ICs und Prozessoren ===&lt;br /&gt;
In jüngster Zeit ist immer öfters zu beobachten, dass in ASICs und CPUs FPGA-Strukturen eingesetzt werden, um deren Funktion im Nachhinein zu optimieren und im Einzelfall Fehler auszugleichen.&lt;br /&gt;
&lt;br /&gt;
1) Bei Kundenspezifischen ASIC-Schaltungen bieten einige Hersteller inzwischen an, einen kleinen FPGA als IO-Vorsatz zusammen mit einem EEPROM zu integrieren, um ein und denselben ASIC an unterschiedliche Baugruppen anpassen zu können.&lt;br /&gt;
&lt;br /&gt;
2) Bei modernen Rechen-Cubes, die mit CUDA arbeiten, werden FPGAs mit integriert, um die Verschaltung zu optimieren und Nebenrechnungen durchzuführen. Einige Chips werden mit FPGA-ähnlichen RAM-Strukturen ausgestattet und beim Start geladen, um harte Schaltungen während des Betriebs zu ernmöglichen.&lt;br /&gt;
&lt;br /&gt;
3) Zumindest der CPU-Hersteller Intel integriert FPGAs in seine CPUs, um langfristig längere Prozessorlaufzeiten zu ermöglichen, weil diese sich so einfacher an neue RAMs und andere Peripherie anpassen zu können. Gleichzeitig kann man so CPUs mit geringerem Reifestand produzieren und ausliefern.&lt;br /&gt;
&lt;br /&gt;
== Debugging-Hilfen ==&lt;br /&gt;
=== Soft-Debugging ===&lt;br /&gt;
&lt;br /&gt;
=== Logikanalysatoren ===&lt;br /&gt;
Gerade beim [[Debugging]] größerer FPGA-Designs ist es oft notwendig, auf interne Signale und Busse zuzugreifen, die aus routing- oder Platzgründen nicht an Pins des FPGAs gelegt - und mit konventionellen Analysatoren beobachtet werden können. Nebst den einschlägigen Tools der Hersteller, welche Signal probing über JTAG gestatten (z.&amp;amp;nbsp;B. ChipsScope und SignalTap), werden in FPGAs oft mehr oder weniger komplexe [[Logic Analyzer]] integriert, welche die internen Signale in vielfältiger Weise aufzeichnen. Diese werden in Block-RAMs oder FIFOs gespeichert und durch externe Master ausgelesen. Hier kommen auf der Platine befindliche MCUs oder fremd zugreifende FPGAs / CPUs in Betracht, welche über unterschiedliche Kommunikationsverbindungen (seriell, parallel, LVDS) angeschlossen sind. Dazu werden in die FPGAs entsprechende Cores und state machines instanziiert und mit Software auf PC-Seite ausgelesen.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend einige Beispiele:&lt;br /&gt;
&lt;br /&gt;
==== Automatisch instanziierte Logic Analyzer ====&lt;br /&gt;
Praktisch alle FPGA-Hersteller bieten die Möglichkeit, mit einem internen Tool ein script zu erzeugen, welches der Synthese übergeben wird, welche dann anhand von Signallisten und diversen Randbedingungen einen LA automatisiert aufbaut und verdrahtet. SampleZeit und -Takt sind dabei genauso einstellbar, wie RAM-Tiefe und -Breite. Die so generierten Datenpakete können dann mittels JTAG ausgelesen werden. Im Continous-Betrieb können so sogar permanente Datenausgaben wie bei einem Oszilloskop vorgenommen werden.&lt;br /&gt;
&lt;br /&gt;
==== Proprietärer serieller Logic Analyzer ====&lt;br /&gt;
&lt;br /&gt;
Die einfachste Möglichkeit ist die direkte Instanziierung eines Blockrams als FIFO mit &amp;quot;breitem&amp;quot; Busanschluss: Linksseitig besitzt das FIFO eine Breite von z.&amp;amp;nbsp;B. 256 Bit (Xilinx-Rams lassen sich ohne weitere Umbeschaltung über den Wizzard mit bis zu 1024 Bits deklarieren und nutzen). Rechtsseitig einen 16- oder 32 Bit breiten Busanschluss für einen Prozessor bzw Parallelinterface oder einen 1 Bit breiten Anschluss für ein serielles streaming interface. Mit einem FiFo-enable können die zu sampelnden Zeiten (Busphasen) festgelegt werden, z.&amp;amp;nbsp;B. anhand eines Kriteriums wie die Erfüllung einer bestimmten mathematischen Bedingung, die man in VHDL formuliert, oder es wird einfach ein Trigger gesetzt. Solange das FiFo nicht voll ist, kann geschrieben werden, was durch die interne FiFo-Verwaltung selbst bereits komplett geregelt wird.&lt;br /&gt;
&lt;br /&gt;
Beim einfachen seriellen Logic Analyzer benötigt man nur noch einen kleinen Core, der permanent das FiFo liest, und den seriellen Overhead (Startbit, Stoppbit, Parity und gfs CRC) hinzufügt. Mit einem einfach Pegelwandler kann so ein PC direkt angeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
Auch denkbar ist die Anbindung an ein fremdes FPGA-board mit viel Speicher über (LV-)DS-Kommunikation. In komplexeren Systemen wird ein CAN- oder USB-Core eingesetzt.&lt;br /&gt;
&lt;br /&gt;
Wenn mittels des Kriteriums nur ganz bestimmte kritische Phasen herausgesampelt werden (z.&amp;amp;nbsp;B. das Auftauchen eines bestimmten Rechenfehlers im FPGA) und so das Datenaufkommen je Zeiteinheit über längere Zeit betrachtet eher gering ist, kann bei geeignetem Datendurchsatz in Echtzeit dauerhaft mitprotokolliert werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== BusProbe ====&lt;br /&gt;
Mit der BusProbe, dem Debugging Core von abaxor engineering, kann der Entwickler den Signalfluss im FPGA-Design auch über einen längeren Zeitraum überwachen und am PC aufzeichnen. Der Core verarbeitet an jedem Eingang einen kompletten Bus. &lt;br /&gt;
&lt;br /&gt;
Die Daten werden gemultiplext zum PC geschickt und dort per Software demultiplext. Im PC erfolgt auch die Auswertung mit beliebigen Analyse-Tools.&lt;br /&gt;
&lt;br /&gt;
Gegenüber dem Betriebssystem verhält sich die BusProbe wie eine Festplatte, von der die Daten mit gewöhnlichen Zugriffen gelesen werden können.&lt;br /&gt;
&lt;br /&gt;
* Streaming der Daten zum PC mit mehr als 20 MByte/s&lt;br /&gt;
* keine Treiber im PC da Nutzung von Standardschnittstellen (USB oder IDE)&lt;br /&gt;
* Hot-Plugging&lt;br /&gt;
* Visualisierung mit beliebigen Programmen&lt;br /&gt;
* geringer Logikaufwand&lt;br /&gt;
&lt;br /&gt;
==== open source Logikanalysator ====&lt;br /&gt;
===== sump.org =====&lt;br /&gt;
Ein einfacher, übersichtlicher Logikanalysator findet sich auf sump.org. Er liegt im Quelltext vor wird mit ins Design einsynthetisiert. Als Speicher dient wahlweise SRAM oder internes RAM. Es können 32 Kanäle mit 100 MHz (oder weniger) gesampelt werden. Die Bediensoftware läuft platformunabhängig unter Java und benötigt eine serielle Schnittstelle (auch über USB-seriell Wandler) zum Core.&lt;br /&gt;
&lt;br /&gt;
[http://de.sump.org/projects/analyzer/ sump.org-Webseite]&lt;br /&gt;
&lt;br /&gt;
===== Weitere =====&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/articles/Logic_Analyzer&lt;br /&gt;
&lt;br /&gt;
== FPGA-Design aus Projektsicht ==&lt;br /&gt;
Vielfach wird die Auffassung vertreten, die FPGA-Entwicklung gehöre allein zur Hardwareentwicklung, da es sich um ein elektronisches Bauteil handle, welches lediglich konfiguriert werde. Man spricht bei der FPGA-Entwicklung oft auch ausdrücklich nicht vom &amp;quot;Programmieren&amp;quot; sondern &amp;quot;Beschreiben&amp;quot; der Hardware. Beides ist aus folgenden Gründen unrichtig:&lt;br /&gt;
&lt;br /&gt;
* Die Vorgehensweise, die Struktur einer Schaltung durch virtuelle Konstrukte wie Logikgatter, Multiplexer und Schalter zu definieren, die in der Praxis so gar nicht exisiteren, sondern später in Form von LUTs realisiert wird, ist zwar formell eine Beschreibung einer Struktur, jedoch ist es eine sehr abstrahierte Form, da äquivalente Funktionen definiert werden. Die Sollhardware wird demnach in weicher Form beschrieben.&lt;br /&gt;
&lt;br /&gt;
* Der output des Designers besteht aus Grafiken, Skripten, Anweisungen, Einstellungen der Synthesesoftware und Strukturvorgaben, die nicht selbst Hardware sind, sondern Anweisungen an eine Erzeugersoftware und stellen damit ein Programm (lat. &amp;quot;Vorschrift&amp;quot;) dar.&lt;br /&gt;
&lt;br /&gt;
* Neben den allein schon durch die Nutzung bestimmter Funktionen wie RAMs, MCBs und Soft-Cores implizit vorgegebenen Abläufen im FPGA, werden fast immer auch noch weitere, explizite Handlungsabläufe mit Reaktionen auf äussere Einflüsse implementiert, die als klassische Software aufzufassen sind.&lt;br /&gt;
&lt;br /&gt;
* Der erzeugte Code der Erzeugersoftware wiederum ist selbst ein Programm und wird zusammen wie die Quellinformation des Designers archiviert, versioniert und wie übliche Software gehandhabt.&lt;br /&gt;
&lt;br /&gt;
Damit erfüllt die FPGA-Entwicklung formell mehrere Bedingungen, die als Softwareentwicklung aufgefasst und eingruppiert zu werden. Andererseits ergeben sich durch die weiter oben erwähnten, sehr ausgeprägten Themen im Bereich der Elektronik (z.B. der Nachrichten- und HF-Technik) sowie der Physik eine Vielzahl von harten Anforderungen, der klassischen Hardwareentwicklung.&lt;br /&gt;
&lt;br /&gt;
Zusammengefasst kann man daher 2 grundlegende Aspekte des FPGA-Designs konstatieren, die je nach Anwendungsfall als mehr oder weniger unabhängig von einander gesehen werden können.&lt;br /&gt;
&lt;br /&gt;
=== Logikdesign ===&lt;br /&gt;
Das funktionslogische Design besteht aus dem Entwurf des Systems, der benötigten Abläufe und der zu realisierenden Protokolle und Berechnungsverfahren. Hierbei sind Kenntnisse im Systementwurf, gfs. von SOPC-Systemen, der üblichen Bussysteme und der Software generell nötig. Hinzu treten Kenntnisse in der elementaren und/oder der komplexen abstrakten Mathematik und der Signalverarbeitung sowie der theoretischen Nachrichtentechnik. Ferner sind Methoden des Script- und Softwareentwurfes, sowie Handhabung von Software nötig.&lt;br /&gt;
&lt;br /&gt;
Dies alles stellt den Anteil dar, der klassischerweise als Softwareentwicklung aufgefasst wird. Es ist die Schnittstelle zur Funktionsschicht, also der grundsätzlichen Funktion eines Gerätes.&lt;br /&gt;
&lt;br /&gt;
=== Schaltungsdesign ===&lt;br /&gt;
Das praktische, hardwaretechnische Anteil des Designens erstreckt sich zudem über die physikalischen Themen der Temperatur- und Betriebsstabilität, der Strahlungs- und Störsicherheit, der Produzier- und Herstellbarkeit, des Wirkens und der Fehleranfälligkeit interner Schaltungsstrukturen, der Art und Weise der Ressourcennutzung bei unterschiedlichen Realisationsformen - besonders, wenn es auch Kostenoptimierung ankommt, des Analogverhalten der IOs und internen Strukturen im Bezug auf Frequenz und Pegel, der Signalintegrität der FPGAs und der Leiterbahnen sowie alle Anfordernisse im Umfeld der anzubindenen Chips.&lt;br /&gt;
&lt;br /&gt;
Dies ist der Anteil der gerne als Hardwareentwicklung eingestuft wird. Er stellt die Schnittstelle zur Physik und der Fertigung dar.&lt;br /&gt;
&lt;br /&gt;
=== Fazit ===&lt;br /&gt;
Die Verwendung von FPGAs ist heute komplexer denn je und erfordert in aller Regel starke Kenntnisse in beiden Feldern. FPGA-Entwicklung kann praktisch wie die Einbindung eines komplexen Evaluierungsboards oder einer programierbaren Steuerplatine mit festgelegten Funktionen aufgefasst werden.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Hardwarebeschreibungssprachen]]&lt;br /&gt;
* [[Reset für FPGA/CPLD]]&lt;br /&gt;
* [[Taktung FPGA/CPLD]]&lt;br /&gt;
* Projekt [[Audio-DSP mit Spartan 3-FPGA]]&lt;br /&gt;
* Projekt [[FPGA Lab]]&lt;br /&gt;
&lt;br /&gt;
== Forumlinks ==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/274159 Tonleiter im PLD] - Beispiel einer einfachen Musikapplikation&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/326462?goto=3564346#3564346 Kopierschutz] für FPGAs und programmierbare ICs&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/392278 Verfikationsumgebung] Verfikation beim FPGA-Design&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/381136 FPGA-Standards] bezüglich Codierung&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/382356#4357686 Inferred True Dual Port RAM für Xilinx und Altera]&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/252255#2595360 Dual Port Block RAM - Gleichzeitiges lesen und schreiben]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.fpga4fun.com/index.html FPGA4Fun] - FPGA-Projekte, größtenteils mit Altera und Verilog&lt;br /&gt;
* [http://marcowuen.wordpress.com/2014/09/08/overview-cheap-fpga-development-boards/ Übersicht Development Boards] - Zusammenstellung günstiger FPGA Boards unter 100$&lt;br /&gt;
* [http://video.google.com/videoplay?docid=-4969729965240981475 Ein Vortrag, auf Englisch: General Purpose, Low Power Supercomputing Using Reconfiguration Logic]&lt;br /&gt;
* http://www.opencores.org - FPGA-Projekte, Opensource, jeder kann seine Eigenen einstellen und an anderen mitarbeiten. U.a. gibt es verschiedene CPUs für FPGAs.&lt;br /&gt;
* [http://pin4.at/pro_misc.php#fdil Projekt &amp;quot;FDIL v2&amp;quot;]: 5V DIL-Ersatz mit 100kGates Spartan II FPGA (Englisch)&lt;br /&gt;
* [http://members.optushome.com.au/jekent/FPGA.htm John&#039;s FPGA Page]&lt;br /&gt;
* [http://www.embedded.com/columns/whatsnew/197003073 More about designing with embedded FPGAs] by Bernard Cole, Embedded.com&lt;br /&gt;
* [http://chaosradio.ccc.de/cre117.html Chaosradio Express - FPGA]&lt;br /&gt;
* [http://www.pin4.at/pro_custom.php Custom IC replacements] - DIL / TTL-Replacements mit FPGA (Englisch)&lt;br /&gt;
&lt;br /&gt;
[[Category:FPGA und Co|Grundlagen|Bauteile]]&lt;/div&gt;</summary>
		<author><name>87.178.104.168</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=FPGA&amp;diff=96969</id>
		<title>FPGA</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=FPGA&amp;diff=96969"/>
		<updated>2017-08-10T12:50:20Z</updated>

		<summary type="html">&lt;p&gt;87.178.104.168: /* CPU im FPGA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FPGA ist die Abkürzung für &amp;quot;&#039;&#039;&#039;F&#039;&#039;&#039;ield &#039;&#039;&#039;P&#039;&#039;&#039;rogrammable &#039;&#039;&#039;G&#039;&#039;&#039;ate &#039;&#039;&#039;A&#039;&#039;&#039;rray&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Es handelt es sich dabei um programmierbare digitale Bausteine mit denen eine Vielzahl von Schaltungen realisiert werden können.&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
&lt;br /&gt;
=== Grundelemente  ===&lt;br /&gt;
&lt;br /&gt;
Ein FPGA besteht, ähnlich wie ein [[CPLD]], aus vielen Logikelementen, hauptsächlich [[FlipFlop]]s (FF) und davor gelagerten kombinatorischen Logikschaltungen. Diese sind entweder Verknüpfungen verschiedener Logikgatter (FPGAs der Firma Actel), die über elektronische &amp;quot;Schalter&amp;quot; entsprechend der vom Entwickler gewünschten Funktion miteinander verknüpft werden können oder es handelt sich um sogenannte LUTs (Look-Up-Table), mit denen die Logikfunktion explizit realisiert wird.&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;LUT&#039;&#039;&#039; kann eine beliebige kombinatorische Funktion (NAND, XOR, AND, Multiplexer etc.) aus den Eingangssignalen realisieren. Die Anzahl der Eingangssignale pro LUT ist vom FPGA abhängig und liegt meist zwischen 4 und 6. Für Funktionen die mehr Eingänge erfordern als eine einzige LUT besitzt (hohes Fan-In), werden mehrere LUTs direkt miteinander verschaltet. Die [[FlipFlop]]s dienen dazu, Signalwerte zwischenzuspeichern, um sie im nächsten Takt weiterverarbeiten zu können. Das Verhältnis zwischen der Anzahl der LUTs und der Anzahl der Flip-Flops ist meist 1:1. Aktuelle FPGAs bestehen aus bis zu einigen zehntausend Logikelementen.&lt;br /&gt;
&lt;br /&gt;
Die logischen Schalter und Speicher sind in den meisten FPGAs durch [[Speicher#SRAM | SRAM]]-Speicherzellen realisiert, welche beim Bootprozess passend geladen werden. Das Laden dieser Konfigurationsdaten bzw. Verknüpfungsregeln geschieht dabei in der Regel aus einem speziellen [[Speicher#Flash | Flash-ROM]]-Baustein heraus. Es kann aber auch ein Mikrocontroller benutzt werden. Die meisten FPGAs bieten daher für diesen Konfigurationsvorgang mehrere Modi an (seriell, parallel, Master/Slave). Da die SRAM-Zellen ihren Inhalt beim Abschalten der Versorgungsspannung verlieren, muss ein SRAM-basierter FPGA bei jedem Einschalten neu konfiguriert werden. Daher benötigt ein solcher FPGA einige Millisekunden bis zu einigen Sekunden, bevor er voll betriebsbereit ist.&lt;br /&gt;
&lt;br /&gt;
Eine FPGA-Familie beinhaltet Typen mit unterschiedlicher Anzahl und Komplexität von Logikzellen. So enthält ein Spartan3-1000 ca. 2,5 mal so viel Logik (FF, LUTs) wie ein Spartan3-400.  &lt;br /&gt;
&lt;br /&gt;
FPGAs mit nichtflüchtigem Speicher basieren auf [[Speicher#EEPROM | EEPROM]]-, [[Speicher#Flash | Flash]]-Speicher (einige Familien von Lattice und Actel) oder AntiFuse- Technologie (Actel). Die sogenannten AntiFuse FPGAs sind nur einmalig programmierbar.&lt;br /&gt;
&lt;br /&gt;
=== I/O Anschlüsse ===&lt;br /&gt;
&lt;br /&gt;
FPGAs unterstützen als universal einsetzbare Digital-ICs eine Vielzahl von Signalstandards, um mit den unterschiedlichen Digitalbausteinen im Markt kommunizieren zu können.&lt;br /&gt;
&lt;br /&gt;
==== Pegelstandards ====&lt;br /&gt;
Es existieren je nach FPGA-Familie verschiedene TTL-Pegel (5V, 3,3V, 2,5V), differentielle Signalstandards (LVDS, GTL, GTP) und im Hochpreisbereich serielle Hochgeschwindigkeitsstandards mit bis zu 28 Gbit/s. Oftmals sind weitere Eigenschaften wie Treiberstärke und Flankensteilheit für jeden benutzerdefinierbaren Anschluss (User-IO) einstellbar. Meist sind die Pins zu Bänken mit gleichem I/O Standard zusammengefasst. Innerhalb einer solchen Bank arbeiten alle Pins im gleichen I/O Standard und mit der selben I/O Spannung. Für hohe Taktraten wird sowohl für Daten als auch die Takte der LVDS IO-Standard verwendet. Hier sind zwei komplementäre Buffer in unmittelbarer Nachbarschaft angeordnet.&lt;br /&gt;
&lt;br /&gt;
==== Signalrichtung ====&lt;br /&gt;
Innerhalb eines FPGAs gibt es nur eine Datenrichtung, d.h. der Ausgang eines Elementes kann nur mit Eingängen verbunden werden, da die FPGA-typischen Optimierungen nur so sinnvoll anwendbar sind. Rückwärtspfade zwischen internen Modulen müssen daher parallel und ausdrücklich aufgebaut werden. Bei den Ports hingegen kann zwischen den Optionen Eingang, Ausgang und Hochohmig gewählt werden. Die dazu benötigten &lt;br /&gt;
[[Ausgangsstufen Logik-ICs | Tristatebuffer]] werden implizit über VHDL definiert, indem einem Ausgang zeitabhängig der Zustand &amp;quot;Z&amp;quot; zugewiesen wird. Alternativ kann er explizit als Element eingefügt werden. Bei komplexeren FPGAs sind die Ein- und Ausgänge mit Verzögerungsgliedern versehen, die ein Anpassen des Timings bei Bussen wie z.B. schnellen Speichern ermöglichen.&lt;br /&gt;
&lt;br /&gt;
==== Terminierung ====&lt;br /&gt;
Ebenso können je nach Hersteller und Typ interne Pull-Up und Pull-Down-Widerstände sowie Terminationswiderstände zugeschaltet werden, [[Wellenwiderstand | Terminierung]] wird ebenfalls unterstützt.&lt;br /&gt;
&lt;br /&gt;
==== Test und Inbetriebnahme ====&lt;br /&gt;
Einige Pins übernehmen besondere Funktionen und sind somit vom Anwender nicht uneingeschränkt oder z.T. auch gar nicht nutzbar. Dazu zählen neben der [[JTAG]]-Schnittstelle z.&amp;amp;nbsp;B. die Pins zum Einlesen der Konfigurationsdaten. Zudem befinden sich hinter vielen IO-Pads sog. [[Boundary_scan| Boundary Scan]] Zellen.&lt;br /&gt;
&lt;br /&gt;
==== Takteingänge ====&lt;br /&gt;
Einige wenige Pins (2 - 8) sind zum Einspeisen des Taktes für das Design vorgesehen. Für schnelle Schaltungen sollten diese reservierten Pins benutzt werden. Sie enthalten kein Eingangs-FF und wirken über instanziierbare Buffer direkt auf Taktnetze / PLLs. Bei leistungsfähigen großen Applikationen mit mehreren Takten müssen diese genutzt werden, da nur eine begrenzte Zahl von DCMs (Digital Clock Manager) zur Verfügung steht und benachbarte IO-Pins genutzt werden müssen. Für hohe Taktraten werden LVDS-Eingänge verwendet.&lt;br /&gt;
&lt;br /&gt;
==== Verwendung ====&lt;br /&gt;
Das I/O Verhalten wird zusammen mit vielen anderen Parametern in einer Datei festgelegt (Xilinx *.ucf, Altera *.acf, Lattice *.lpf). Alternativ können diese auch als Syntheseoption im Kommentarfeld des [[Verilog]]/[[VHDL]] Codes mit angegeben werden. Die Hersteller bieten FPGAs mit gleicher Anzahl von Logikelementen in unterschiedlichen Gehäusen an. So kann der FPGA mit der passenden Anzahl von Pins eingesetzt werden. Das obere Ende markieren Chips mit über 1500 I/Os, die kleinsten bieten ca. 50 User-I/O. Oft werden nur [[IC-Geh%C3%A4useformen#BGA|BGA]] und [[IC-Geh%C3%A4useformen#QFP|QFP]] Gehäuse (bis ca. 240 Pins) angeboten. Umgekehrt kann innerhalb einer Gehäusefamilie hochmigriert werden, d.h. bei gleichbleibendem Pinout, kann ein komplexerer FPGA eingesetzt werden. Das Layout muss dann nicht verändert werden, um eine Schaltung mit mehr Funktionen auszustatten.&lt;br /&gt;
&lt;br /&gt;
=== Besondere Funktionsblöcke ===&lt;br /&gt;
Neben den LUTs und den FlipFlops beinhalten FPGAs komplexe Routing- und Speicherkonfigurationsoptionen innerhalb und außerhalb der logischen Elemente, die es überhaupt erst gestatten, komplexe Schalt- und Rechenstrukturen aufzubauen. Aufgrund der gestiegenen Anforderungen geht man immer mehr dazu über, häufig benötigte Schaltungsteile fast in Hardware zu integrieren.&lt;br /&gt;
&lt;br /&gt;
==== DSP-Elemente ====&lt;br /&gt;
Für rechenintensive Designs, z.&amp;amp;nbsp;B. in der Signalverarbeitung, enthalten inzwischen praktisch alle FPGAs dedizierte &#039;&#039;&#039;Multiplizierer&#039;&#039;&#039; auf dem Chip, die in sehr kurzer Zeit, z.B. auch einem einzigen Taktzyklus, breite Multiplikationen durchführen können. Diese müssen daher nicht mehr in Logik aufgebaut werden. Aktuelle MUL-Elemente können z.B. 18x25 Bit in einem Schritt multiplizieren. Außerdem treten noch Carry-Chains, Akkumulatoren und Speicher-FFs hinzu, um direkt lokal schnelle Summierer und Zähler realisieren zu können.&lt;br /&gt;
&lt;br /&gt;
==== Block-RAMs ====&lt;br /&gt;
Ferner haben FPGAs oft einen von den LEs getrennt verfügbaren &#039;&#039;&#039;RAM&#039;&#039;&#039;-Bereich integriert, der sich in vielfältiger Weise ansprechen lässt. So können damit Single- oder Dualport-RAMs mit variabler Bitbreite erzeugt werden. Üblich sind mehrere (4 - 30) kleinere Dualport [[Speicher#BRAM | RAM-Blöcke]] von 4 - 16 kbit. Einige Familien besitzen einen größeren internen RAM, andere spezielle FIFO-Blöcke.&lt;br /&gt;
==== Taktgeneratoren ====&lt;br /&gt;
Zur Erzeugung der internen Takte sind &#039;&#039;&#039;PLL&#039;&#039;&#039;s (Phase Locked Loop) auf dem FPGA integriert. Einige Hersteller setzen eine Kombination aus statischen Taktmultiplizierer &#039;&#039;&#039;DLL&#039;&#039;&#039;s (Delay Locked Loop) ein. Mittels dieser Blöcke können aus einem Taktsignal weitere Takte abgeleitet werden. Typisch sind Taktverdopplung oder -vervielfachung. Ebenso kann der Takt bei gleicher Frequenz um eine einstellbare Phase verschoben erzeugt werden. Typische Anwendungen sind die Kompensation von Eingangsbufferverzögerungen, die Ansteuerung von [[Speicher#DDR-RAM | DDR-RAMs]] oder die Kompensation von Laufzeitunterschieden zwischen Takt und mit diesem getakteten Steuersignalen. Meist sind 2 - 8 Taktnetzwerke und PLL/DLLs gleicher Anzahl integriert. Siehe auch [[Taktung FPGA/CPLD]].&lt;br /&gt;
&lt;br /&gt;
=== CPU im FPGA ===&lt;br /&gt;
Microprozessoren sind auch in FPGA-Designs immer häufiger anzutreffen. CPUs sind zwar im Allgemeinen langsamer und weniger effizient, als eine vollständige Implementation aus Logik-Primitiven - aber bei komplexen Abläufen deutlich einfacher, schneller und zielführender zu programmieren, da die Strukturen festgelegt und damit bekannt sind. Insbesondere bei langsamen sequentiellen Aufgaben (Benutzerinterface, komplexe Steueraufgaben etc.) wird gerne auf eine klassische CPU zurückgegriffen, weil ein eventueller Zeitnachteil wegfällt, aber das Testen des Systems vereinfacht wird. Die CPUs sind teilweise kompatibel zu etablierten Prozessorarchitekturen (MIPS, SPARC, AVR), zum Teil aber auch auf die FPGAs einzelner Hersteller hin optimiert.&lt;br /&gt;
&lt;br /&gt;
Als Programmspeicher werden die FPGA-internen [[Speicher#BRAM | RAM-Blöcke]] oder externe [[Speicher]] (SDRAM, SRAM) genutzt. Für einige Prozessorkerne stehen Hochsprachen wie C, C++ etc. zur Verfügung, andere werden in Assembler programmiert.&lt;br /&gt;
&lt;br /&gt;
==== Hardcores ====&lt;br /&gt;
Manche FPGAs haben dazu einen oder mehrere Prozessorkerne als &#039;&#039;HardCores&#039;&#039; physikalisch auf dem Chip integriert, entweder als Chipstruktur auf dem FPGA-kern selbst oder als gebondeter Chip im selben Gehäuse. So findet man z.B. [[AVR]] bei Atmels FPSLIC, PowerPC bei Xilinx&#039; Virtex bzw Dual ARM A9 bei Xilinx&#039; Zynq oder ARM Cortex-M3 bei Actel (Microsemi) SmartFusion, bzw. Dual ARM-CPUs bei Altera. Diese Kerne sind mehr oder weniger funktionell identisch mit den externen Modellen und oftmals mit denselben Werkzeugen zu programmieren und zu testen, d.h. man kann ein komplettes System extern entwickeln und dann auf den FPGA bringen.&lt;br /&gt;
&lt;br /&gt;
==== Softcores ====&lt;br /&gt;
Auf der anderen Seite gibt es auch [[FPGA Soft Core | SoftCores]] (z. B. ARM-Cortex-M1 bei IGLOO-FPGA von [http://www.actel.com ACTEL]), Prozessorkerne die als Quelltext oder als vorsynthetisierte Netzliste vorliegen. In Abhängigkeit von den zur Verfügung stehenden Ressourcen können diese &#039;&#039;SoftCores&#039;&#039; beliebig oft instanziiert und auch in der Funktion konfiguriert werden, um sie zu optimieren. Es gibt eine Vielzahl verschiedener &#039;&#039;SoftCores&#039;&#039;. Einige sind sehr klein und platzsparend realisiert, damit kann man auch auf vergleichsweise kleinen aktuellen FPGAs problemlos eine 32bit-RISC-CPU integrieren. Der Nutzen der Softcores liegt vor allem darin, daß man vorhandene physische CPUs platzsparend integrieren und alte Systeme beschleunigen kann. Ferner können einfache Interfacefunktionen, die schon in SW vorliegen ohne Portierung in VHDL genutzt werden.&lt;br /&gt;
&lt;br /&gt;
== Eigenschaften ==&lt;br /&gt;
&lt;br /&gt;
=== Chipausnutzung ===&lt;br /&gt;
Aufgrund des Umstandes, dass FPGAs eine Reihe von spezialisierten Funktionsblöcken, wie BRAMs, Multiplier und Transceiver beinhalten, die naturgemäß nicht in allen Designs genutzt werden können, bleibt ein Teil der Chipfläche des FPGAs immer ungenutzt. Auch die Beschränkung der routing-Resourcen führt aufgrund der Lage von IOs und spezialisierten Blöcken dazu, dass zur Erreichung der Wunschtaktfrequenz zusätzliche FlipFlops eingesetzt werden müssen, die dann nicht mehr zur Verfügung stehen. Schließlich sind die universellen routing-Resourcen selbst ein Erfordernis, welches Chipfläche kostet. Im Vergleich zu einem full custom asic gleicher Funktion benötigt ein FPGA daher erheblich mehr Chipfläche.&lt;br /&gt;
&lt;br /&gt;
=== Taktgeschwindigkeit ===&lt;br /&gt;
Die maximale „Geschwindigkeit“, eines FPGAs ist von der verwendeten Halbleitertechnologie (Prozess, Strukturgrößen), der internen Schaltungstopologie (Komplexität der LEs), dem Vorhandensein von harten Strukturen und vor allem vom Design abhängig. Dabei sind der sogenannte Datendurchsatz und die rein maximale Systemtaktfrequenz zu unterscheiden. Die erreichbare Taktfrequenz lässt sich ohne detaillierte Kenntnis des Designs nicht abschätzen; möglich sind je nach »Speed Grade« des ICs typischerweise Taktfrequenzen von 300-800 MHz für die Schaltgeschwindigkeit der reinen Logikelemente. Je nach der Anzahl und Komplexität der pro Takt durchzuführenden Operationen ergeben sich dann reale Systemtaktfrequenzen von meist 10-200 MHz für global operierende Einheiten und bis zu 400 MHz für schnelle lokale Module. Maßgeblich ist, in wieweit das Design auf Fläche bzw. Geschwindigkeit hin optimiert- und vom Tool synthetisiert wurde: Durch das Einbringen von zusätzlichen Registerstufen lassen sich z.&amp;amp;nbsp;B. zeitkritische Pfade (Pipelines) entschärfen, sodass die Frequenz des Chips angehoben werden kann und somit der effektive Datendurchsatz erhöht wird, mit dem Nachteil der gesteigerten Latenz durch das Mehr an Takten. Der Datendurchsatz insgesamt lässt sich wiederum durch die Nutzung paralleler Architekturen erhöhen.&lt;br /&gt;
&lt;br /&gt;
Die Systemfrequenz kann, muss aber nicht der Frequenz entsprechen, mit der Daten zyklisch eingetaktet und verarbeitet werden; zudem sind Schaltungsteile mit unterschiedlichen Taktfrequenzen zu unterscheiden: Mit einem Systemtakt von 20 MHz lassen sich z.&amp;amp;nbsp;B. 18-Bit AD-Wandler auslesen, die so z.&amp;amp;nbsp;B. alle 1 µs neue Daten liefern, die verarbeitet werden müssen. Bei der Nutzung von 5 solchen Wandlern, die sequentiell verarbeitet werden, lägen 5 MHz Datenfrequenz vor. Für andere Schaltungsteile, die z.&amp;amp;nbsp;B. asynchron an die Peripherie andocken, sowie reine »state machines« können Schaltungsteile auf der 2-4 fachen Frequenz betrieben werden.&lt;br /&gt;
&lt;br /&gt;
Generell sind Fläche und Geschwindigkeit konkurrierende Größen, zwischen denen ein Optimum gefunden werden muss. Für die preiswerten FPGA-Serien wie Spartan (Xilinx) und Cyclone (Altera) sind aufgrund technologischer Randbedingungen bei gleichem Design etwa 10-30% weniger Taktgeschwindigkeit zu erwarten, als bei den großen Brüdern der Virtex- (Xilinx) bzw. Stratix-Familie (Altera). Es muss mit mehr Verbrauch an Logikelementen und Taktzyklen gerechnet werden (weniger Routingreserven, geringere Zahl von LUT-Eingängen, langsamere Logikelemente). Dafür sind sie sehr preiswerter.&lt;br /&gt;
&lt;br /&gt;
Funktionstechnisch identische Chips werden oft in mehrere Geschwindigkeitsklassen (speed grades) angeboten, die sich meist durch Bauteilselektion bei der Produktion ergeben. Grob kann man ca. 5%-15% höhere Taktung zwischen zwei speed grades erwarten. Teilweise werden durch produktionstechnische Maßnahmen wie veränderte Dotierung auch gezielt schnellere, bzw stromsparende Typen generiert, entsprechend klassifiziert und  angeboten.&lt;br /&gt;
&lt;br /&gt;
== Herstellung ==&lt;br /&gt;
&lt;br /&gt;
FPGAs heutiger Bauart sind hochkomplexe Strukturen, da sie einerseits sehr hochgetaktet werden müssen, umfangreiche Funktionen bewerkstelligen sollen und damit genügend Resourcen haben müssen, andererseits aber preisgünstig und flexibel sein sollen, was umfangreiche Umschaltmöglichkeiten erfordert. Damit sind FPGAs als universelles Bauteil vergleichsweise teuer. Umso problematischer ist deren Fertigung:&lt;br /&gt;
&lt;br /&gt;
=== Herstellungsprozess ===&lt;br /&gt;
FPGAs werden letztlich als Analogschaltkreis unter Verwendung von sogenannten Standardbibliotheken entwickelt, indem fertige, mehrfach simulierte und getestete Blöcke zusammengeschaltet werden, die ihre Funktion mehrfach in Silizium bewiesen haben. Dies betrifft hauptsächlich die IO-Zellen, Schaltmatritzen und vor allem Controller, RAM-Blöcke und andere hard cores.&lt;br /&gt;
&lt;br /&gt;
Deren Funktion wird zunächst in einer Logiksimulation im Zusammenwirken geprüft und anschließend mit einer Analogsimulation ausgewählter Baugruppen untermauert. Besonders die kritischen Bauteile PLLs, IO-Treiber und Taktleitungen werden dabei untersucht. Fertige FPGA-Prototypen werden dann mit unterschiedlichen Stress-Schaltungen auf ihr Leistungsvermögen hin geprüft.&lt;br /&gt;
&lt;br /&gt;
Die auszuliefernden Exemplare für Kunden, werden mit dem boundary scan Verfahren getestet und mit einem Testdesign beladen.&lt;br /&gt;
&lt;br /&gt;
=== Prozessqualifizierung ===&lt;br /&gt;
Das Entwickeln, fertigen und Testen der FPGAs führt zu einer Regelschleife, die es gestattet, ständige Verbesserungen vorzunehmen. Für den Anwender ist bedeutsam, dass im Zuge der Informationsgewinnung bezüglich Taktraten und Strombedarf für alle FPGAs und Fertigungsprozesse kontinuierlich Modelle entwickelt werden, welche sukzessive in die Entwicklungswerkzeuge einfließen. Im Laufe des Lebenszyklus eines Chips werden diese Modelle immer präziser und gestatten ein engeres Timing und eine exaktere Voraussage hinsichtlich des Leistungsbedarfs. Zu Beginn ist es daher oft so, dass die Modellierung eher konservativ erfolgt, was dazu führt, dass neue Chips bei der Simulation der Taktgeschwindigkeiten zunächst ihre realen Reserven nicht ausschöpfen können. Oftmals sind daher FPGA-Designs, welche das Timing gerade nicht getroffen haben, dennoch voll leistungsfähig. Umgekehrt gibt es immer wieder einzelne Exemplare, die das eigentlich simulierte Taktziel in Tests verfehlen.&lt;br /&gt;
&lt;br /&gt;
=== Hersteller ===&lt;br /&gt;
&lt;br /&gt;
Die größten Hersteller von FPGAs sind [http://www.altera.com Altera] und [http://www.xilinx.com Xilinx]. Weitere Hersteller sind [http://www.latticesemi.com/ Lattice], [http://www.actel.com Actel] und [http://www.atmel.com Atmel].&lt;br /&gt;
&lt;br /&gt;
Einige  Hersteller wie Altera verfügen über keine eigene Fabrik (-&amp;gt; &amp;quot;fabless&amp;quot;), sondern lassen ihre entwickelten FPGAs und ASICs bei wechselnden Halbleiterherstellern fertigen. Dies führt zu jeweils günstigen Produktionskosten, allerdings auch zu Qualitätsschwankungen. Auch Liefergarantien sind schwerer zu erhalten, besonders, wenn man darauf angewiesen ist, dass ein Chip auch in 25 Jahren noch zu bekommen ist.&lt;br /&gt;
&lt;br /&gt;
== Anwendung und Programmierung ==&lt;br /&gt;
=== Erstellung der FPGA firmware===&lt;br /&gt;
&lt;br /&gt;
==== Design Flow ====&lt;br /&gt;
Die Erstellung des Programmier-Datenstroms für den FPGA, um die oft komplizierten Funktionen heutiger Applikationen zu erreichen, wird inzwischen ausschließlich durch automatische Routing- und Synthesewerkzeuge erledigt, welche mit einer funktionellen- bzw strukturellen Beschreibung der gewünschten Architektur in einer sogenannten Hardwarebeschreibungssprache wie z.B. [[VHDL]] oder [[Verilog]] &amp;quot;gefüttert&amp;quot; werden. Die Hardwarebeschreibung gelingt ihrerseits entweder ausdrücklich durch Texteditoren indem Logikstrukturen, hardwarenahe Strukturen, Ablaufdiagramme und Zustandsautomaten formuliert werden, oder mit Code-generierenden Werkzeugen. Mit deren Hilfe sind komplexe IO-Interfaces, mathematische Funktionen wie Regelalgorithmen und ganze Rechnerarchitakturen formulierbar.&lt;br /&gt;
&lt;br /&gt;
Während und nach der Erstellung der Schaltungsteile, wird die Korrektheit der Funktion einzelner Blöcke sowie der gesamten Schaltung mit Simulationswerkzeugen theoretisch geprüft und gfs im Rahmen der Qualitätsmanagementprozesse auch formell nachgewiesen und geeignet dokumentiert. Danach folgt eine Integration und ein praktischer Schaltungstest Generell unterscheidet man folgende formelle Schritte während des Entwicklungsprozesses:&lt;br /&gt;
&lt;br /&gt;
Validierung: Die gewünschte Funktion der Schaltung wird theoretisch geprüft. Dies betrifft im Wesentlichen die komplizierten Funktionsblöcke wie state machines, CPU-Firmware und Rechenpipelines / Algorithmen und Codierungen wie CRC und AES. Hierbei wird untersucht, ob die Funktion grundsätzlich richtig ist. Das Prüfen erfolgt meist theoretisch mit MATLAB, EXCEL oder einer Programm-analyse-Software. Ziel ist der Nachweis der Richtigkeit des Konzeptes.&lt;br /&gt;
&lt;br /&gt;
Verifikation: Hierbei wird die konkrete Art der Umsetzung geprüft. Dies betrifft alle Schaltungsteile die einer bestimmten Funktion zuzuordnen sind. Praktisch wird die gesamte Schaltung blockweise dahingehend simuliert, ob alle Funktionen berücksichtigt wurden und das Verhalten in allen erdenklichen Situationen stimmig ist. Dazu werden Testfälle generiert und in die Schaltung eingespeist. Hierbei wird auch auf das logische Timing infolge des synchronen Designs Rücksicht genommen. In einigen besonderen Fällen wird auch das platizerte Design, so wie es letztlich im FPGA realisiert ist, zurückgelesen und das timing näher unterucht, um bestimmte Nachweise in Grenzsituationen zu führen.&lt;br /&gt;
&lt;br /&gt;
Test: Das fertig programmierte FPGA wird real in der Hardware getestet. Dazu können Testszenarien und -mittel aus der Validierungs- und Verfikationssphase herangezogen werden und/oder ein Testplan abgearbeitet werden. Hierbei ist in aller Regel umgebende Peripherie beteiligt, weil der FPGA alleine schlecht testbar ist. Bei diesem Schritt kommt dann auch die Elektronik mit ins Spiel, d.h. das Verhalten des Ladevorgangs, Probleme mit Spannungsstabilität, Pegeln, Leitungen etc. Da so ein konkretes Exemplar des Chips zur Anwendung kommt, wird ein solcher Test meist mit mehreren Baugruppen durchgeführt. In aller Regel sind Normabweichungen hier aber nicht durch den FPGA- sondern durch das Layout des PCB bestimmt. Diese Tests offenbaren demgemäß, dass ein und dasselbe Programmierfile in einem FPGA-System funktinoniert und aufgrund geringer Unterschiede der Elektronik in einem anderen gfs nicht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein wichtiger Punkt bei der Validierung, der Verifikation und auch dem Test ist dabei die Vollständigkeit der Testfälle, also die Abdeckung der Realität, in der sich das System bewegt. Um bereist bei der Validierung des Konzeptes eventuelle Fehler und Grenzen des Systems ausloten und das FPGA entsprechend fehlertolerant machen zu können, werden theoretische Modelle der Peripherie, der Physik, der Bedieneraktivität und der Randbedingungen / Abläufe erzeugt und in die Simulation eingefügt. Dies passiert sowohl bei der formellen Verfikation mit z.B. MATLAB, als auch der funktionellen Verifikation mit VHDL-Simulationswerkzeugen wie ModelSIM. Durch geeignete Modellierung von PLLs, Jitter, Variation der Signale von Aussen, können dadurch quasi alle erdenklichen Szenarien durchgespielt werden. Dies ist besonders wichtig bei Fällen, die sich in der Realität nur schwer nachstellen lassen, wie z.B: dem Auftreten zufälliger Fehler in RAMs, Störungen auf Leitungen oder Drahtbrüche.&lt;br /&gt;
&lt;br /&gt;
==== Wiederverwendbarkeit ====&lt;br /&gt;
Durch die Standardisierung der Architektur einerseits sowie die Entkopplung von applikationsorientierter Beschreibung und Chip- und Hersteller-spezifischer Synthese andererseits, wird die Hardware quasi durch Software gebaut. Dies wiederum schafft alle Optionen der Wiederverwendung und dem flexibleb Austausch von &amp;quot;Hardwareteilen&amp;quot;. So stehen inzwischen komplette Schaltungen für serielle Bausteine, RAM-Controller und vieles mehr zur Verfügung - teilweise sogar in Form von Open Source Projekten.&lt;br /&gt;
&lt;br /&gt;
Andererseits ist eine Tendenz erkennbar, dass Hersteller ihre Software und die damit erstellbare VHDL, speziell bei IP-Cores, immer stärker schützen und abkapseln. Diese produzieren kaum noch allgemeine VHDL, sondern nur noch herstellerspezifische Scripte. Diese lassen sich in aller Regel nicht übertragen. Zudem führen auch immer grösser werdende Unterschiede in den Chipstrukturen und Resourcen in modernen FPGAs dazu, dass die Portierbarkeit weiter eingeschränkt wird. Dies ist besonders bezüglich der Integration von Peripherie-Controllern oder ganzer Mikrocontroller der Fall. Bei SOPC-Systemen sind die generierten Strukturen praktisch überhaupt nicht mehr von einem FPGA-Hersteller zum anderen zu portieren und oftmals nicht einmal mehr zwischen FPGA-Familien desselben Herstellers untereinander kompatibel.&lt;br /&gt;
&lt;br /&gt;
Dadurch entsteht ein immer weiter wachsender Design- und Pflegeaufwand, dem viele Firmen inzwischen dadurch begegnen, daß sie - soweit als möglich - herstellerunabhängige Beschreibungen verwenden. Z.B. können RAM-Beschreibungen und State Machine, rein in VHDL-Text generiert werden, anstatt sie mit den mitgelieferten Code-Generatoren zu erzeugen.&lt;br /&gt;
&lt;br /&gt;
=== Anbindung an Mikrocontroller ===&lt;br /&gt;
Es gibt unterschiedliche Arten, wie ein FPGA mit einem Controller verbunden sein kann. In der Regel ist der Controller der Master und arbeitet auf den FPGA. Dabei ist zwischen direkten impulsiven Zugriffen auf den FPGA nach Massgabe des internen Ablaufs im Prozessor, die jederzeit und wortweise an irgendeine Adresse erfolgen können und blockweisem Schreiben, also permanentem Datenfluss ohne Adressierung zu unterscheiden.&lt;br /&gt;
&lt;br /&gt;
Das wortweise Schreiben und Lesen erfolgt in Form eines klassischen Speicherinterfaces durch aktiven Zugriff auf den FPGA oder den FPGA hindurch auf einen RAM-Bereich, in den der FPGA seinen Speicher einblendet.&lt;br /&gt;
&lt;br /&gt;
==== Memory Mapped ====&lt;br /&gt;
Hierunter versteht man den Zugriff des Mikrocontrollers auf das FPGA in Form eines Speichers. Dabei muss der FPGA ein klassisches Speicherinterface zur Verfügung stellen. In einzelnen Fällen reicht es auch, wenn dieser ein internes Blockram im dual ported Modus an die Ports des Mikrocontrollers heranführt.&lt;br /&gt;
&lt;br /&gt;
==== Streaming IO ====&lt;br /&gt;
Liefert ein Mikrocontroller häufig grosse Datenmengen an einen FPGA, ist es mitunter sinnvoll auf einen aktiven Zugriff mit Wortadressierung zu verzichten und einen pipeline-Zugriff zu implementieren. Der FPGA &amp;quot;hört&amp;quot; dazu den Datenbus des Mikrocontroller ab und erkennt anhand z.B. der Aktivierung nur einer Schreibleitung den Beginn des Sendens und empfängt dann mit jedem Takt ein Wort. Was die Daten zu bedeuten haben und wohin sie zu schreiben sind, muss dann in den Daten codiert werden. Auch ist es denkbar den FPGA so zu konfigurieren, dass beim Schreiben auf eine ganz bestimmte Adresse ein grösserer Datenblock übergeben wird. &lt;br /&gt;
&lt;br /&gt;
In beiden Fällen wird im FPGA ein FIFO eingesetzt, der synchron mit dem Mikroprozessortakt beschrieben wird. Auf der Seite des FPGAs muss eine FSM überwachen, ob Daten ankommen und diese geeignet verarbeiten.&lt;br /&gt;
&lt;br /&gt;
==== Indirekte Busverbindung ====&lt;br /&gt;
Oftmals sind FPGAs und MCUs in grösseren Systemen über Busse verschaltet. So kann der FPGA an einem klassischen Daten-Adress-Bus parallel zu einem RAM und anderen Bausteinen über Adressdekodierung und Chip-Select betrieben werden, oder er wird über ein logisches Interface wie SPI angebunden.&lt;br /&gt;
&lt;br /&gt;
=== Anbindung an RAMs und ROMs ===&lt;br /&gt;
&lt;br /&gt;
==== DDR2 / DDR3 - RAM ====&lt;br /&gt;
Während die Ansteuerung eines normalen SRAMS mittels eines klassischen memory mapped interface recht einfach ist, bedürfen DRAMS- speziell mit DDR-Funktion einer aufwändigeren Schaltung, welche die komplizierte Kommandostruktur der DDR-Ansteuerung versteht, pipelining und gfs caching praktiziert und das RAM entsprechend bedient. Dabei sind RAM-spezifische Randbedingungen (refresh / self refresh) zu beachten. Für FPGAs existieren hier eine Reihe von konfigurierbaren IP-Cores. &lt;br /&gt;
&lt;br /&gt;
In jüngster Zeit beobachtet man hier einen Umstieg auf prozessorähnliche Funktionen und Stukturen, d.h. die RAMs werden nicht mehr nativ sondern über eine Prozessorinterface angesteuert. Die Firma Xilinx z.B. bietet keine nativen Mehrportlösungen mehr an. DDR-Controller mit den in FPGAs meistens benötigten Multiportfunktionen, also Zugriffen durch mehrere Module, sind damit praktisch nur noch über AXI-Interface zu realisieren.&lt;br /&gt;
&lt;br /&gt;
==== SPI-Flash ====&lt;br /&gt;
Die Anbindung über SPI erfolgt meist über serielle Verbindungen wie I2C, da nur wenig Bandbreite benötigt wird. In selteneren Fällen werden FPGAs parallel mit einem Flash verbunden, z.B. bei grossen FPGAs mit umfangreichem image, welches aus einem Flash schnell geladen werden soll.&lt;br /&gt;
&lt;br /&gt;
=== Anbindung an Peripherie ===&lt;br /&gt;
Typische Anwendungen für FPGAs sind die breitbandige (grosse Busbreite und/oder hohe Taktfrequenz) Gewinnung und Verarbeitung von Daten, bei denen DSPs oder MCUs nicht mehr (effektiv) eingesetzt werden können. Typische Beispiele dafür sind:&lt;br /&gt;
&lt;br /&gt;
==== Videotechnik ====&lt;br /&gt;
[[Bildsensor]]en produzieren traditionell die grössten Datenmengen je Zeiteinheit und sind ohne FPGAs praktisch nicht mit der Aussenwelt in Kontakt zu bringen. FPGAs arbeiten hier entweder auf der Kunden- oder auch der Herstellerseite, um die komplexen Datenströme anzunehmen, vorzuverarbeiten und in eine reduziertes, praktikableres Datenformat umzusetzen. Auch die Annahme eines Videoformates ist praktisch nur mit FPGAs möglich.&lt;br /&gt;
&lt;br /&gt;
Die benötigten Datenschnittstellen können mit Hilfe von Transceiver-Ports / LVDS manuell realisiert werden, oder es werden Umsetzer-Chips verwendet. Beispiele:&lt;br /&gt;
&lt;br /&gt;
* HDMI-Transceiver für FPGAs ohne Gigabit-Transceiver&lt;br /&gt;
* SERDES-Transceiver für mittelpreise FPGAs ohne SERDES / sehr hohe Frequenzen&lt;br /&gt;
* Camera-Link-Deserializer (für langsame FPGAs)&lt;br /&gt;
* LVDS-Buffer-Deserializer (für langsame FPGAs ohne LVDS buffer)&lt;br /&gt;
* DVI-Buffer&lt;br /&gt;
&lt;br /&gt;
Für Analoge Daten benötigt man selbstredend noch Video-ADCs / Video-DACs, die überhaupt erst ein digitales Signal erzeugen.&lt;br /&gt;
&lt;br /&gt;
==== Gigabit-Ethernet ====&lt;br /&gt;
Für die Umsetzung auf den (praktisch analogen) [[Ethernet]]-Standard braucht es immer einen sogenannten [[Glossar#p|PHY]], also einen physikalischen Zusatzchip. Dieser vollzieht die [[Glossar#p|5PAM]]-Modulation und die Codierung im 10/8-Format. Die Ankopplung an den FPGA erfolgt direkt.&lt;br /&gt;
&lt;br /&gt;
Während althergebrachte 100MBit-Verbindungen dabei oft noch mit UCs und softcores zu bedienen waren, können 1GBit-Netzwerke nur noch mit FPGAs sinnvoll angesteuert werden. Umgekehrt ist das Gigabit-Netzwerk eine gute Lösung, um Daten effektiv und billig in einen PC zu transportieren, da moderne PCs alle eine GBit-Karte besitzen und die Datenrate bei schnellen CPUs auch weitgehend ausgenutzt werden kann. Typische Bandbreiten bewegen sich für Linux mit unmodifizierten Treibern bei 700MBit-800MBit.&lt;br /&gt;
&lt;br /&gt;
Der [[Glossar#m|MAC]], bzw MAC-ähnliche Funktionen, sind im FPGA direkt implementierbar (z.B. mit IP-Cores) und können mit einfachen [[Glossar#f|FSM]]s angesteuert werden. Für die Verwendung von C-Software ist es notwendig, einen hardcore zu verwenden, da mit softcores die Bandbreite kaum erreicht werden kann. Besonders das Verpacken der Daten, die Abarbeitung des Protokolls sowie die Bildung der Ethernet-header mit Checksummen, CRC und zusätzlichen Prüf- und Steuerinformationen sind in VHDL sehr einfach und entspannt zu erzeugen, weil parallel gearbeitet werden kann.&lt;br /&gt;
&lt;br /&gt;
Die Bandbreite einer typischen [[Glossar#g|GMII]]-Verbindung mit [[Glossar#d|DDR]] beträgt 2x150MHz x 8 Bit, was mit mittleren FPGAs gut zu machen ist. Die interne Bandbreite ohne header beträgt dann typisch etwa 800MBit, z.B. 50MHz x 16 Bit für die Daten. Ab diesem Punkt ist dann wieder ein schneller softcore einsetzbar.&lt;br /&gt;
&lt;br /&gt;
==== High-Speed-USB ====&lt;br /&gt;
Für die Übersetzung auf den immer schnelleren USB-Bus (inzwischen bis 5Gb Bandbreite!) stehen Chips zur Verfügung, die sich in vergleichsweise einfacher Weise ansteuern lassen. Eine passende Sende- und Empfangsarchtiktur ist in FPGAs relativ rasch zu implementieren.&lt;br /&gt;
&lt;br /&gt;
=== Implementierung von Steuerfunktionen ===&lt;br /&gt;
In den meisten FPGA-Applikationen sind mehr oder weniger komplizierte Abläufe zu integrieren, die den Datenfluss steuern und die einzelnen Komponenten so mit einenander verschalten, dass sie wunschgemäss aufeinander reagieren.&lt;br /&gt;
&lt;br /&gt;
Mit nativem VHDL sind einfache sequenzielle Abläufe mit überschaubaren Verschachtelungstiefen und Schleifen direkt in Form von Zählersteuerungen oder abstrakten State Machines realisierbar. Dazu kann auf die automatische Codegeneration aus state machine designern heraus oder die halbautomatische Erzeugung von Code mit z.B. Excel zurückgreifen, die die Enumeration von states, die Abfragen und die Sprünge zu den nächsten states automatisch vollzieht. Dies hat aber seine Grenzen, weil dies früher oder später unübersichtlich wird und nicht mehr so gut pflegbar ist. Zudem kann sich der Code stark aufblähen und die Zusammenfassung etwaiger Redundanz durch die Synthese zu hohen Synthesezeiten führen.&lt;br /&gt;
&lt;br /&gt;
Applikationen, die nicht ganz so zeitkritisch sind, sollten lieber mit einer flexiblen, verschachtelten Struktur von 2 state machines abgearbeitet werden, bei denen der Ablauf von der Generation des Timings für die Hardware getrennt ist. In reinen Ablaufsteuerung stehen dann wie in einem Befehlsspeicher abstrakte Codes hintereinander und werden mittels einer intelligenten Struktur sequenziell abgearbeitet werden. Diese agiert wie ein Befehlsinterpreter und  stösst eine untergeordnete state machine an. Damit wird zwar mehr Zeit für die Verwaltung benötigt, es führt aber letztlich zu quantitav weniger Steuer-Code. Die Befehlsfolgen lassen sich z.B. günstig in einem ROM realisieren. Die gesamte Steuerung wird intelligenter und insgesamt kleiner.&lt;br /&gt;
&lt;br /&gt;
Eine deartige Steuerlogik lässt sich soweit ausbauen, dass untergeordnete state machines wie Unterprogramme ablaufen und durch ein flexibles Hauptprogramm gesteuert werden, womit sie sich immer mehr einer Prozessorarchitektur annähert.&lt;br /&gt;
&lt;br /&gt;
Wenn die Komplexität viele &amp;quot;Befehle&amp;quot; erfordert, gfs noch gerechnet und viel entschieden werden muss, lohnt der Rückgriff auf einen vorgefertigen Softcore. Dies hat den Vorteil, dass eine Standardstruktur verwendet wird, für die es erweiterte Entwicklungs- und Debugging-Software gibt. Spätestens, wenn man mit virtuellen Datenstrukturen und rekursiven Funktionen arbeitet, oder z.B. Zeichenkettenverarbeitung braucht, ist ein Softcore unerlässlich, &lt;br /&gt;
weil dann alle Methoden-, Variablen und sonstige Aspekte der jeweiligen Hochsprache verwendet werden können.&lt;br /&gt;
&lt;br /&gt;
=== Beispiele von VHDL Code ===&lt;br /&gt;
Siehe [[VHDL_Softwarepool]]&lt;br /&gt;
&lt;br /&gt;
== Einsatz in elektronischen Schaltungen ==&lt;br /&gt;
Der Einsatz von modernen FPGAs erfordert neben dem grundsätzlichen Wissen im Bezug auf den design flow und den für FPGAs optimierten Schaltungs- und Rechenstrukturen auch grosses Knowhow im Bereich der analogen Schaltungstechnik sowie auch der effektiven Vorgehensweise beim Design. &lt;br /&gt;
&lt;br /&gt;
=== FPGA aus analoger Sicht ===&lt;br /&gt;
FPGAs bedürfen heute eines perfekten Layouts, um mit RAMs und externen Chips zusammenarbeiten zu können, da sowohl die internen, als auch externen Taktfrequenzen rapide angestiegen sind. Ferner ist grosses Augenmerk auf die Spannungsversorgungen zu legen.&lt;br /&gt;
&lt;br /&gt;
=== Integration ins PCB ===&lt;br /&gt;
Weiter ist es heute kaum noch möglich, FPGA-Design vom board-Design funktionell zu trennen, wie man es mit Blick auf den scheinbar rein logischen Schaltungsentwurf glauben könnte und früher auch der Fall war. Da FPGAs heute stark dedizierte Funktionen enthalten, die nicht in jeder IO-Zelle zur Verfügung stehen oder spezielle Bank-Konfigurationen erforden, muss der Schaltungsentwurf und das Layouten des FPGAs und des Boards einhergehen.&lt;br /&gt;
&lt;br /&gt;
=== Entwicklungsboards und Starter-Kits ===&lt;br /&gt;
Von mehreren Seiten gibt es im Markt eine ganze Palette von sogenannten Entwicklungs- und Evaluierungsboards. Diese eignen sich nicht nur zum Kennenlernen des Chips, bez. zur Validierung der Lösung (ob die Schaltung wie gebaut auch im konkreten Ziel-FPGAs arbeitet) sondern werden immer öfter auch in bestehenden Systemen verbaut, weil aufgrund einer geringen Stückzahl die Selbstentwicklung nicht lohnt.&lt;br /&gt;
&lt;br /&gt;
Siehe [[Liste von FPGA Eval boards]]&lt;br /&gt;
&lt;br /&gt;
=== FPGA als Ersatz von alten digitalen ICs und Prozessoren ===&lt;br /&gt;
Es gibt vielfach den Wunsch, ICs, die nicht mehr direkt zu beschaffen sind, durch FPGAs (oder wenn möglich CPLDs) zu ersetzen. Gerade ältere Schaltungen&lt;br /&gt;
basieren aber durchaus noch auf 5V TTL und CMOS Logik. Oft sind die Systeme nicht ohne sehr hohen Aufwand und Verlust der Wirtschaftlichkeit zu ersetzen (wie ältere, produktive Industrieanalagen oder komplexe Rechensysteme - aber auch wenn es um die Erhaltung alter Hardware bei &amp;quot;retro-computing&amp;quot; geht).&lt;br /&gt;
&lt;br /&gt;
Nun bieten heute erhältliche (und günstige) FPGAs - aufgrund ihrer verwendeten Technologie - keine direkte 5V Kompatibilität mehr. FPGAs wie die Spartan II (nicht IIe), erlauben zumindest noch &amp;quot;5V Toleranz&amp;quot; auf den I/O-Pins. Das heißt: das FPGA wird zwar mit 3.3V versorgt und kann daher nur 3.3V am Ausgang treiben, erlaubt aber 5V von externen Bausteinen am Pin - dies ist nach wie vor TTL kompatibel, aber auch viele CMOS-Schaltungen können so durchaus noch betrieben werden.&lt;br /&gt;
&lt;br /&gt;
Für neueste 3.3V (oder weniger) FPGAs kann man Levelshifter-Schaltungen verwenden, die entweder bidirektional ausgeführt sind und ein &amp;quot;open-drain-artiges&amp;quot; Verhalten zeigen (also beide Seiten können die Leitung nur auf Lowpegel treiben, der Highpegel wird durch pull-up Widerstände erreicht) oder die unidirektional (mit optionaler Richtungsumkehr und/oder Treiberdeaktivierung über Kontrolleingänge) gebaut sind. Verwendung von Spannungsteilern, Zenerdioden-Schaltungen oder Ausnutzung von Diodenlimitierungen der I/O Treiber des FPGAs (und Verwendung eines Serienwiderstands zur Stromlimitierung) sind zumeist nur für niedrige Schaltfrequenzen gut geeignet und sorgen für eine erhöhte Stromaufnahme.&lt;br /&gt;
&lt;br /&gt;
Siehe auch: [[Pegelwandler]]&lt;br /&gt;
&lt;br /&gt;
== Debugging-Hilfen ==&lt;br /&gt;
=== Soft-Debugging ===&lt;br /&gt;
&lt;br /&gt;
=== Logikanalysatoren ===&lt;br /&gt;
Gerade beim [[Debugging]] größerer FPGA-Designs ist es oft notwendig, auf interne Signale und Busse zuzugreifen, die aus routing- oder Platzgründen nicht an Pins des FPGAs gelegt - und mit konventionellen Analysatoren beobachtet werden können. Nebst den einschlägigen Tools der Hersteller, welche Signal probing über JTAG gestatten (z.&amp;amp;nbsp;B. ChipsScope und SignalTap), werden in FPGAs oft mehr oder weniger komplexe [[Logic Analyzer]] integriert, welche die internen Signale in vielfältiger Weise aufzeichnen. Diese werden in Block-RAMs oder FIFOs gespeichert und durch externe Master ausgelesen. Hier kommen auf der Platine befindliche MCUs oder fremd zugreifende FPGAs / CPUs in Betracht, welche über unterschiedliche Kommunikationsverbindungen (seriell, parallel, LVDS) angeschlossen sind. Dazu werden in die FPGAs entsprechende Cores und state machines instanziiert und mit Software auf PC-Seite ausgelesen.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend einige Beispiele:&lt;br /&gt;
&lt;br /&gt;
==== Automatisch instanziierte Logic Analyzer ====&lt;br /&gt;
Praktisch alle FPGA-Hersteller bieten die Möglichkeit, mit einem internen Tool ein script zu erzeugen, welches der Synthese übergeben wird, welche dann anhand von Signallisten und diversen Randbedingungen einen LA automatisiert aufbaut und verdrahtet. SampleZeit und -Takt sind dabei genauso einstellbar, wie RAM-Tiefe und -Breite. Die so generierten Datenpakete können dann mittels JTAG ausgelesen werden. Im Continous-Betrieb können so sogar permanente Datenausgaben wie bei einem Oszilloskop vorgenommen werden.&lt;br /&gt;
&lt;br /&gt;
==== Proprietärer serieller Logic Analyzer ====&lt;br /&gt;
&lt;br /&gt;
Die einfachste Möglichkeit ist die direkte Instanziierung eines Blockrams als FIFO mit &amp;quot;breitem&amp;quot; Busanschluss: Linksseitig besitzt das FIFO eine Breite von z.&amp;amp;nbsp;B. 256 Bit (Xilinx-Rams lassen sich ohne weitere Umbeschaltung über den Wizzard mit bis zu 1024 Bits deklarieren und nutzen). Rechtsseitig einen 16- oder 32 Bit breiten Busanschluss für einen Prozessor bzw Parallelinterface oder einen 1 Bit breiten Anschluss für ein serielles streaming interface. Mit einem FiFo-enable können die zu sampelnden Zeiten (Busphasen) festgelegt werden, z.&amp;amp;nbsp;B. anhand eines Kriteriums wie die Erfüllung einer bestimmten mathematischen Bedingung, die man in VHDL formuliert, oder es wird einfach ein Trigger gesetzt. Solange das FiFo nicht voll ist, kann geschrieben werden, was durch die interne FiFo-Verwaltung selbst bereits komplett geregelt wird.&lt;br /&gt;
&lt;br /&gt;
Beim einfachen seriellen Logic Analyzer benötigt man nur noch einen kleinen Core, der permanent das FiFo liest, und den seriellen Overhead (Startbit, Stoppbit, Parity und gfs CRC) hinzufügt. Mit einem einfach Pegelwandler kann so ein PC direkt angeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
Auch denkbar ist die Anbindung an ein fremdes FPGA-board mit viel Speicher über (LV-)DS-Kommunikation. In komplexeren Systemen wird ein CAN- oder USB-Core eingesetzt.&lt;br /&gt;
&lt;br /&gt;
Wenn mittels des Kriteriums nur ganz bestimmte kritische Phasen herausgesampelt werden (z.&amp;amp;nbsp;B. das Auftauchen eines bestimmten Rechenfehlers im FPGA) und so das Datenaufkommen je Zeiteinheit über längere Zeit betrachtet eher gering ist, kann bei geeignetem Datendurchsatz in Echtzeit dauerhaft mitprotokolliert werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== BusProbe ====&lt;br /&gt;
Mit der BusProbe, dem Debugging Core von abaxor engineering, kann der Entwickler den Signalfluss im FPGA-Design auch über einen längeren Zeitraum überwachen und am PC aufzeichnen. Der Core verarbeitet an jedem Eingang einen kompletten Bus. &lt;br /&gt;
&lt;br /&gt;
Die Daten werden gemultiplext zum PC geschickt und dort per Software demultiplext. Im PC erfolgt auch die Auswertung mit beliebigen Analyse-Tools.&lt;br /&gt;
&lt;br /&gt;
Gegenüber dem Betriebssystem verhält sich die BusProbe wie eine Festplatte, von der die Daten mit gewöhnlichen Zugriffen gelesen werden können.&lt;br /&gt;
&lt;br /&gt;
* Streaming der Daten zum PC mit mehr als 20 MByte/s&lt;br /&gt;
* keine Treiber im PC da Nutzung von Standardschnittstellen (USB oder IDE)&lt;br /&gt;
* Hot-Plugging&lt;br /&gt;
* Visualisierung mit beliebigen Programmen&lt;br /&gt;
* geringer Logikaufwand&lt;br /&gt;
&lt;br /&gt;
==== open source Logikanalysator ====&lt;br /&gt;
===== sump.org =====&lt;br /&gt;
Ein einfacher, übersichtlicher Logikanalysator findet sich auf sump.org. Er liegt im Quelltext vor wird mit ins Design einsynthetisiert. Als Speicher dient wahlweise SRAM oder internes RAM. Es können 32 Kanäle mit 100 MHz (oder weniger) gesampelt werden. Die Bediensoftware läuft platformunabhängig unter Java und benötigt eine serielle Schnittstelle (auch über USB-seriell Wandler) zum Core.&lt;br /&gt;
&lt;br /&gt;
[http://de.sump.org/projects/analyzer/ sump.org-Webseite]&lt;br /&gt;
&lt;br /&gt;
===== Weitere =====&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/articles/Logic_Analyzer&lt;br /&gt;
&lt;br /&gt;
== FPGA-Design aus Projektsicht ==&lt;br /&gt;
Vielfach wird die Auffassung vertreten, die FPGA-Entwicklung gehöre allein zur Hardwareentwicklung, da es sich um ein elektronisches Bauteil handle, welches lediglich konfiguriert werde. Man spricht bei der FPGA-Entwicklung oft auch ausdrücklich nicht vom &amp;quot;Programmieren&amp;quot; sondern &amp;quot;Beschreiben&amp;quot; der Hardware. Beides ist aus folgenden Gründen unrichtig:&lt;br /&gt;
&lt;br /&gt;
* Die Vorgehensweise, die Struktur einer Schaltung durch virtuelle Konstrukte wie Logikgatter, Multiplexer und Schalter zu definieren, die in der Praxis so gar nicht exisiteren, sondern später in Form von LUTs realisiert wird, ist zwar formell eine Beschreibung einer Struktur, jedoch ist es eine sehr abstrahierte Form, da äquivalente Funktionen definiert werden. Die Sollhardware wird demnach in weicher Form beschrieben.&lt;br /&gt;
&lt;br /&gt;
* Der output des Designers besteht aus Grafiken, Skripten, Anweisungen, Einstellungen der Synthesesoftware und Strukturvorgaben, die nicht selbst Hardware sind, sondern Anweisungen an eine Erzeugersoftware und stellen damit ein Programm (lat. &amp;quot;Vorschrift&amp;quot;) dar.&lt;br /&gt;
&lt;br /&gt;
* Neben den allein schon durch die Nutzung bestimmter Funktionen wie RAMs, MCBs und Soft-Cores implizit vorgegebenen Abläufen im FPGA, werden fast immer auch noch weitere, explizite Handlungsabläufe mit Reaktionen auf äussere Einflüsse implementiert, die als klassische Software aufzufassen sind.&lt;br /&gt;
&lt;br /&gt;
* Der erzeugte Code der Erzeugersoftware wiederum ist selbst ein Programm und wird zusammen wie die Quellinformation des Designers archiviert, versioniert und wie übliche Software gehandhabt.&lt;br /&gt;
&lt;br /&gt;
Damit erfüllt die FPGA-Entwicklung formell mehrere Bedingungen, die als Softwareentwicklung aufgefasst und eingruppiert zu werden. Andererseits ergeben sich durch die weiter oben erwähnten, sehr ausgeprägten Themen im Bereich der Elektronik (z.B. der Nachrichten- und HF-Technik) sowie der Physik eine Vielzahl von harten Anforderungen, der klassischen Hardwareentwicklung.&lt;br /&gt;
&lt;br /&gt;
Zusammengefasst kann man daher 2 grundlegende Aspekte des FPGA-Designs konstatieren, die je nach Anwendungsfall als mehr oder weniger unabhängig von einander gesehen werden können.&lt;br /&gt;
&lt;br /&gt;
=== Logikdesign ===&lt;br /&gt;
Das funktionslogische Design besteht aus dem Entwurf des Systems, der benötigten Abläufe und der zu realisierenden Protokolle und Berechnungsverfahren. Hierbei sind Kenntnisse im Systementwurf, gfs. von SOPC-Systemen, der üblichen Bussysteme und der Software generell nötig. Hinzu treten Kenntnisse in der elementaren und/oder der komplexen abstrakten Mathematik und der Signalverarbeitung sowie der theoretischen Nachrichtentechnik. Ferner sind Methoden des Script- und Softwareentwurfes, sowie Handhabung von Software nötig.&lt;br /&gt;
&lt;br /&gt;
Dies alles stellt den Anteil dar, der klassischerweise als Softwareentwicklung aufgefasst wird. Es ist die Schnittstelle zur Funktionsschicht, also der grundsätzlichen Funktion eines Gerätes.&lt;br /&gt;
&lt;br /&gt;
=== Schaltungsdesign ===&lt;br /&gt;
Das praktische, hardwaretechnische Anteil des Designens erstreckt sich zudem über die physikalischen Themen der Temperatur- und Betriebsstabilität, der Strahlungs- und Störsicherheit, der Produzier- und Herstellbarkeit, des Wirkens und der Fehleranfälligkeit interner Schaltungsstrukturen, der Art und Weise der Ressourcennutzung bei unterschiedlichen Realisationsformen - besonders, wenn es auch Kostenoptimierung ankommt, des Analogverhalten der IOs und internen Strukturen im Bezug auf Frequenz und Pegel, der Signalintegrität der FPGAs und der Leiterbahnen sowie alle Anfordernisse im Umfeld der anzubindenen Chips.&lt;br /&gt;
&lt;br /&gt;
Dies ist der Anteil der gerne als Hardwareentwicklung eingestuft wird. Er stellt die Schnittstelle zur Physik und der Fertigung dar.&lt;br /&gt;
&lt;br /&gt;
=== Fazit ===&lt;br /&gt;
Die Verwendung von FPGAs ist heute komplexer denn je und erfordert in aller Regel starke Kenntnisse in beiden Feldern. FPGA-Entwicklung kann praktisch wie die Einbindung eines komplexen Evaluierungsboards oder einer programierbaren Steuerplatine mit festgelegten Funktionen aufgefasst werden.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Hardwarebeschreibungssprachen]]&lt;br /&gt;
* [[Reset für FPGA/CPLD]]&lt;br /&gt;
* [[Taktung FPGA/CPLD]]&lt;br /&gt;
* Projekt [[Audio-DSP mit Spartan 3-FPGA]]&lt;br /&gt;
* Projekt [[FPGA Lab]]&lt;br /&gt;
&lt;br /&gt;
== Forumlinks ==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/274159 Tonleiter im PLD] - Beispiel einer einfachen Musikapplikation&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/326462?goto=3564346#3564346 Kopierschutz] für FPGAs und programmierbare ICs&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/392278 Verfikationsumgebung] Verfikation beim FPGA-Design&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/381136 FPGA-Standards] bezüglich Codierung&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/382356#4357686 Inferred True Dual Port RAM für Xilinx und Altera]&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/252255#2595360 Dual Port Block RAM - Gleichzeitiges lesen und schreiben]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.fpga4fun.com/index.html FPGA4Fun] - FPGA-Projekte, größtenteils mit Altera und Verilog&lt;br /&gt;
* [http://marcowuen.wordpress.com/2014/09/08/overview-cheap-fpga-development-boards/ Übersicht Development Boards] - Zusammenstellung günstiger FPGA Boards unter 100$&lt;br /&gt;
* [http://video.google.com/videoplay?docid=-4969729965240981475 Ein Vortrag, auf Englisch: General Purpose, Low Power Supercomputing Using Reconfiguration Logic]&lt;br /&gt;
* http://www.opencores.org - FPGA-Projekte, Opensource, jeder kann seine Eigenen einstellen und an anderen mitarbeiten. U.a. gibt es verschiedene CPUs für FPGAs.&lt;br /&gt;
* [http://pin4.at/pro_misc.php#fdil Projekt &amp;quot;FDIL v2&amp;quot;]: 5V DIL-Ersatz mit 100kGates Spartan II FPGA (Englisch)&lt;br /&gt;
* [http://members.optushome.com.au/jekent/FPGA.htm John&#039;s FPGA Page]&lt;br /&gt;
* [http://www.embedded.com/columns/whatsnew/197003073 More about designing with embedded FPGAs] by Bernard Cole, Embedded.com&lt;br /&gt;
* [http://chaosradio.ccc.de/cre117.html Chaosradio Express - FPGA]&lt;br /&gt;
* [http://www.pin4.at/pro_custom.php Custom IC replacements] - DIL / TTL-Replacements mit FPGA (Englisch)&lt;br /&gt;
&lt;br /&gt;
[[Category:FPGA und Co|Grundlagen|Bauteile]]&lt;/div&gt;</summary>
		<author><name>87.178.104.168</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=FPGA&amp;diff=96968</id>
		<title>FPGA</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=FPGA&amp;diff=96968"/>
		<updated>2017-08-10T12:37:59Z</updated>

		<summary type="html">&lt;p&gt;87.178.104.168: /* Wiederverwendbarkeit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FPGA ist die Abkürzung für &amp;quot;&#039;&#039;&#039;F&#039;&#039;&#039;ield &#039;&#039;&#039;P&#039;&#039;&#039;rogrammable &#039;&#039;&#039;G&#039;&#039;&#039;ate &#039;&#039;&#039;A&#039;&#039;&#039;rray&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Es handelt es sich dabei um programmierbare digitale Bausteine mit denen eine Vielzahl von Schaltungen realisiert werden können.&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
&lt;br /&gt;
=== Grundelemente  ===&lt;br /&gt;
&lt;br /&gt;
Ein FPGA besteht, ähnlich wie ein [[CPLD]], aus vielen Logikelementen, hauptsächlich [[FlipFlop]]s (FF) und davor gelagerten kombinatorischen Logikschaltungen. Diese sind entweder Verknüpfungen verschiedener Logikgatter (FPGAs der Firma Actel), die über elektronische &amp;quot;Schalter&amp;quot; entsprechend der vom Entwickler gewünschten Funktion miteinander verknüpft werden können oder es handelt sich um sogenannte LUTs (Look-Up-Table), mit denen die Logikfunktion explizit realisiert wird.&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;LUT&#039;&#039;&#039; kann eine beliebige kombinatorische Funktion (NAND, XOR, AND, Multiplexer etc.) aus den Eingangssignalen realisieren. Die Anzahl der Eingangssignale pro LUT ist vom FPGA abhängig und liegt meist zwischen 4 und 6. Für Funktionen die mehr Eingänge erfordern als eine einzige LUT besitzt (hohes Fan-In), werden mehrere LUTs direkt miteinander verschaltet. Die [[FlipFlop]]s dienen dazu, Signalwerte zwischenzuspeichern, um sie im nächsten Takt weiterverarbeiten zu können. Das Verhältnis zwischen der Anzahl der LUTs und der Anzahl der Flip-Flops ist meist 1:1. Aktuelle FPGAs bestehen aus bis zu einigen zehntausend Logikelementen.&lt;br /&gt;
&lt;br /&gt;
Die logischen Schalter und Speicher sind in den meisten FPGAs durch [[Speicher#SRAM | SRAM]]-Speicherzellen realisiert, welche beim Bootprozess passend geladen werden. Das Laden dieser Konfigurationsdaten bzw. Verknüpfungsregeln geschieht dabei in der Regel aus einem speziellen [[Speicher#Flash | Flash-ROM]]-Baustein heraus. Es kann aber auch ein Mikrocontroller benutzt werden. Die meisten FPGAs bieten daher für diesen Konfigurationsvorgang mehrere Modi an (seriell, parallel, Master/Slave). Da die SRAM-Zellen ihren Inhalt beim Abschalten der Versorgungsspannung verlieren, muss ein SRAM-basierter FPGA bei jedem Einschalten neu konfiguriert werden. Daher benötigt ein solcher FPGA einige Millisekunden bis zu einigen Sekunden, bevor er voll betriebsbereit ist.&lt;br /&gt;
&lt;br /&gt;
Eine FPGA-Familie beinhaltet Typen mit unterschiedlicher Anzahl und Komplexität von Logikzellen. So enthält ein Spartan3-1000 ca. 2,5 mal so viel Logik (FF, LUTs) wie ein Spartan3-400.  &lt;br /&gt;
&lt;br /&gt;
FPGAs mit nichtflüchtigem Speicher basieren auf [[Speicher#EEPROM | EEPROM]]-, [[Speicher#Flash | Flash]]-Speicher (einige Familien von Lattice und Actel) oder AntiFuse- Technologie (Actel). Die sogenannten AntiFuse FPGAs sind nur einmalig programmierbar.&lt;br /&gt;
&lt;br /&gt;
=== I/O Anschlüsse ===&lt;br /&gt;
&lt;br /&gt;
FPGAs unterstützen als universal einsetzbare Digital-ICs eine Vielzahl von Signalstandards, um mit den unterschiedlichen Digitalbausteinen im Markt kommunizieren zu können.&lt;br /&gt;
&lt;br /&gt;
==== Pegelstandards ====&lt;br /&gt;
Es existieren je nach FPGA-Familie verschiedene TTL-Pegel (5V, 3,3V, 2,5V), differentielle Signalstandards (LVDS, GTL, GTP) und im Hochpreisbereich serielle Hochgeschwindigkeitsstandards mit bis zu 28 Gbit/s. Oftmals sind weitere Eigenschaften wie Treiberstärke und Flankensteilheit für jeden benutzerdefinierbaren Anschluss (User-IO) einstellbar. Meist sind die Pins zu Bänken mit gleichem I/O Standard zusammengefasst. Innerhalb einer solchen Bank arbeiten alle Pins im gleichen I/O Standard und mit der selben I/O Spannung. Für hohe Taktraten wird sowohl für Daten als auch die Takte der LVDS IO-Standard verwendet. Hier sind zwei komplementäre Buffer in unmittelbarer Nachbarschaft angeordnet.&lt;br /&gt;
&lt;br /&gt;
==== Signalrichtung ====&lt;br /&gt;
Innerhalb eines FPGAs gibt es nur eine Datenrichtung, d.h. der Ausgang eines Elementes kann nur mit Eingängen verbunden werden, da die FPGA-typischen Optimierungen nur so sinnvoll anwendbar sind. Rückwärtspfade zwischen internen Modulen müssen daher parallel und ausdrücklich aufgebaut werden. Bei den Ports hingegen kann zwischen den Optionen Eingang, Ausgang und Hochohmig gewählt werden. Die dazu benötigten &lt;br /&gt;
[[Ausgangsstufen Logik-ICs | Tristatebuffer]] werden implizit über VHDL definiert, indem einem Ausgang zeitabhängig der Zustand &amp;quot;Z&amp;quot; zugewiesen wird. Alternativ kann er explizit als Element eingefügt werden. Bei komplexeren FPGAs sind die Ein- und Ausgänge mit Verzögerungsgliedern versehen, die ein Anpassen des Timings bei Bussen wie z.B. schnellen Speichern ermöglichen.&lt;br /&gt;
&lt;br /&gt;
==== Terminierung ====&lt;br /&gt;
Ebenso können je nach Hersteller und Typ interne Pull-Up und Pull-Down-Widerstände sowie Terminationswiderstände zugeschaltet werden, [[Wellenwiderstand | Terminierung]] wird ebenfalls unterstützt.&lt;br /&gt;
&lt;br /&gt;
==== Test und Inbetriebnahme ====&lt;br /&gt;
Einige Pins übernehmen besondere Funktionen und sind somit vom Anwender nicht uneingeschränkt oder z.T. auch gar nicht nutzbar. Dazu zählen neben der [[JTAG]]-Schnittstelle z.&amp;amp;nbsp;B. die Pins zum Einlesen der Konfigurationsdaten. Zudem befinden sich hinter vielen IO-Pads sog. [[Boundary_scan| Boundary Scan]] Zellen.&lt;br /&gt;
&lt;br /&gt;
==== Takteingänge ====&lt;br /&gt;
Einige wenige Pins (2 - 8) sind zum Einspeisen des Taktes für das Design vorgesehen. Für schnelle Schaltungen sollten diese reservierten Pins benutzt werden. Sie enthalten kein Eingangs-FF und wirken über instanziierbare Buffer direkt auf Taktnetze / PLLs. Bei leistungsfähigen großen Applikationen mit mehreren Takten müssen diese genutzt werden, da nur eine begrenzte Zahl von DCMs (Digital Clock Manager) zur Verfügung steht und benachbarte IO-Pins genutzt werden müssen. Für hohe Taktraten werden LVDS-Eingänge verwendet.&lt;br /&gt;
&lt;br /&gt;
==== Verwendung ====&lt;br /&gt;
Das I/O Verhalten wird zusammen mit vielen anderen Parametern in einer Datei festgelegt (Xilinx *.ucf, Altera *.acf, Lattice *.lpf). Alternativ können diese auch als Syntheseoption im Kommentarfeld des [[Verilog]]/[[VHDL]] Codes mit angegeben werden. Die Hersteller bieten FPGAs mit gleicher Anzahl von Logikelementen in unterschiedlichen Gehäusen an. So kann der FPGA mit der passenden Anzahl von Pins eingesetzt werden. Das obere Ende markieren Chips mit über 1500 I/Os, die kleinsten bieten ca. 50 User-I/O. Oft werden nur [[IC-Geh%C3%A4useformen#BGA|BGA]] und [[IC-Geh%C3%A4useformen#QFP|QFP]] Gehäuse (bis ca. 240 Pins) angeboten. Umgekehrt kann innerhalb einer Gehäusefamilie hochmigriert werden, d.h. bei gleichbleibendem Pinout, kann ein komplexerer FPGA eingesetzt werden. Das Layout muss dann nicht verändert werden, um eine Schaltung mit mehr Funktionen auszustatten.&lt;br /&gt;
&lt;br /&gt;
=== Besondere Funktionsblöcke ===&lt;br /&gt;
Neben den LUTs und den FlipFlops beinhalten FPGAs komplexe Routing- und Speicherkonfigurationsoptionen innerhalb und außerhalb der logischen Elemente, die es überhaupt erst gestatten, komplexe Schalt- und Rechenstrukturen aufzubauen. Aufgrund der gestiegenen Anforderungen geht man immer mehr dazu über, häufig benötigte Schaltungsteile fast in Hardware zu integrieren.&lt;br /&gt;
&lt;br /&gt;
==== DSP-Elemente ====&lt;br /&gt;
Für rechenintensive Designs, z.&amp;amp;nbsp;B. in der Signalverarbeitung, enthalten inzwischen praktisch alle FPGAs dedizierte &#039;&#039;&#039;Multiplizierer&#039;&#039;&#039; auf dem Chip, die in sehr kurzer Zeit, z.B. auch einem einzigen Taktzyklus, breite Multiplikationen durchführen können. Diese müssen daher nicht mehr in Logik aufgebaut werden. Aktuelle MUL-Elemente können z.B. 18x25 Bit in einem Schritt multiplizieren. Außerdem treten noch Carry-Chains, Akkumulatoren und Speicher-FFs hinzu, um direkt lokal schnelle Summierer und Zähler realisieren zu können.&lt;br /&gt;
&lt;br /&gt;
==== Block-RAMs ====&lt;br /&gt;
Ferner haben FPGAs oft einen von den LEs getrennt verfügbaren &#039;&#039;&#039;RAM&#039;&#039;&#039;-Bereich integriert, der sich in vielfältiger Weise ansprechen lässt. So können damit Single- oder Dualport-RAMs mit variabler Bitbreite erzeugt werden. Üblich sind mehrere (4 - 30) kleinere Dualport [[Speicher#BRAM | RAM-Blöcke]] von 4 - 16 kbit. Einige Familien besitzen einen größeren internen RAM, andere spezielle FIFO-Blöcke.&lt;br /&gt;
==== Taktgeneratoren ====&lt;br /&gt;
Zur Erzeugung der internen Takte sind &#039;&#039;&#039;PLL&#039;&#039;&#039;s (Phase Locked Loop) auf dem FPGA integriert. Einige Hersteller setzen eine Kombination aus statischen Taktmultiplizierer &#039;&#039;&#039;DLL&#039;&#039;&#039;s (Delay Locked Loop) ein. Mittels dieser Blöcke können aus einem Taktsignal weitere Takte abgeleitet werden. Typisch sind Taktverdopplung oder -vervielfachung. Ebenso kann der Takt bei gleicher Frequenz um eine einstellbare Phase verschoben erzeugt werden. Typische Anwendungen sind die Kompensation von Eingangsbufferverzögerungen, die Ansteuerung von [[Speicher#DDR-RAM | DDR-RAMs]] oder die Kompensation von Laufzeitunterschieden zwischen Takt und mit diesem getakteten Steuersignalen. Meist sind 2 - 8 Taktnetzwerke und PLL/DLLs gleicher Anzahl integriert. Siehe auch [[Taktung FPGA/CPLD]].&lt;br /&gt;
&lt;br /&gt;
=== CPU im FPGA ===&lt;br /&gt;
&lt;br /&gt;
Programmierbare Prozessoren sind auch in FPGA-Designs immer häufiger anzutreffen. CPUs sind zwar im Allgemeinen langsamer und weniger effizient, als eine vollständige Implementation aus Logik-Primitiven - aber bei komplexen Abläufen auch deutlich einfacher und zielführender zu programmieren, da die Strukturen festgelegt und damit bekannt sind. Insbesondere bei sequentiellen Aufgaben (Benutzerinterface, komplexe Steueraufgaben etc.) wird man gerne auf eine klassische CPU zurückgreifen. Die CPUs sind teilweise kompatibel zu etablierten Prozessorarchitekturen (MIPS, SPARC, AVR), zum Teil aber auch auf die FPGAs einzelner Hersteller hin optimiert.&lt;br /&gt;
&lt;br /&gt;
Als Programmspeicher werden die FPGA-internen [[Speicher#BRAM | RAM-Blöcke]] oder externe [[Speicher]] (SDRAM, SRAM) genutzt. Für einige Prozessorkerne stehen Hochsprachen wie C, C++ etc. zur Verfügung, andere werden in Assembler programmiert.&lt;br /&gt;
&lt;br /&gt;
==== Hardcores ====&lt;br /&gt;
Manche FPGAs haben dazu einen oder mehrere Prozessorkerne (z. B. [[AVR]] bei Atmels FPSLIC, PowerPC bei Xilinx&#039; Virtex bzw Dual ARM A9 bei Xilinx&#039; Zynq oder ARM Cortex-M3 bei Actel (Microsemi) SmartFusion ) als &#039;&#039;HardCores&#039;&#039; physikalisch auf dem Chip integriert, entweder als Chipstruktur auf dem FPGA-kern selbst oder als gebondeter Chip im selben Gehäuse.&lt;br /&gt;
&lt;br /&gt;
==== Softcores ====&lt;br /&gt;
Auf der anderen Seite gibt es auch [[FPGA Soft Core | SoftCores]] (z. B. ARM-Cortex-M1 bei IGLOO-FPGA von [http://www.actel.com ACTEL]), Prozessorkerne die als Quelltext oder als vorsynthetisierte Netzliste vorliegen. In Abhängigkeit von den zur Verfügung stehenden Ressourcen können diese &#039;&#039;SoftCores&#039;&#039; beliebig instanziiert werden. Es gibt eine Vielzahl verschiedener &#039;&#039;SoftCores&#039;&#039;. Einige sind sehr klein und platzsparend realisiert, damit kann man auch auf vergleichsweise kleinen aktuellen FPGAs problemlos eine 32bit-RISC-CPU integrieren.&lt;br /&gt;
&lt;br /&gt;
== Eigenschaften ==&lt;br /&gt;
&lt;br /&gt;
=== Chipausnutzung ===&lt;br /&gt;
Aufgrund des Umstandes, dass FPGAs eine Reihe von spezialisierten Funktionsblöcken, wie BRAMs, Multiplier und Transceiver beinhalten, die naturgemäß nicht in allen Designs genutzt werden können, bleibt ein Teil der Chipfläche des FPGAs immer ungenutzt. Auch die Beschränkung der routing-Resourcen führt aufgrund der Lage von IOs und spezialisierten Blöcken dazu, dass zur Erreichung der Wunschtaktfrequenz zusätzliche FlipFlops eingesetzt werden müssen, die dann nicht mehr zur Verfügung stehen. Schließlich sind die universellen routing-Resourcen selbst ein Erfordernis, welches Chipfläche kostet. Im Vergleich zu einem full custom asic gleicher Funktion benötigt ein FPGA daher erheblich mehr Chipfläche.&lt;br /&gt;
&lt;br /&gt;
=== Taktgeschwindigkeit ===&lt;br /&gt;
Die maximale „Geschwindigkeit“, eines FPGAs ist von der verwendeten Halbleitertechnologie (Prozess, Strukturgrößen), der internen Schaltungstopologie (Komplexität der LEs), dem Vorhandensein von harten Strukturen und vor allem vom Design abhängig. Dabei sind der sogenannte Datendurchsatz und die rein maximale Systemtaktfrequenz zu unterscheiden. Die erreichbare Taktfrequenz lässt sich ohne detaillierte Kenntnis des Designs nicht abschätzen; möglich sind je nach »Speed Grade« des ICs typischerweise Taktfrequenzen von 300-800 MHz für die Schaltgeschwindigkeit der reinen Logikelemente. Je nach der Anzahl und Komplexität der pro Takt durchzuführenden Operationen ergeben sich dann reale Systemtaktfrequenzen von meist 10-200 MHz für global operierende Einheiten und bis zu 400 MHz für schnelle lokale Module. Maßgeblich ist, in wieweit das Design auf Fläche bzw. Geschwindigkeit hin optimiert- und vom Tool synthetisiert wurde: Durch das Einbringen von zusätzlichen Registerstufen lassen sich z.&amp;amp;nbsp;B. zeitkritische Pfade (Pipelines) entschärfen, sodass die Frequenz des Chips angehoben werden kann und somit der effektive Datendurchsatz erhöht wird, mit dem Nachteil der gesteigerten Latenz durch das Mehr an Takten. Der Datendurchsatz insgesamt lässt sich wiederum durch die Nutzung paralleler Architekturen erhöhen.&lt;br /&gt;
&lt;br /&gt;
Die Systemfrequenz kann, muss aber nicht der Frequenz entsprechen, mit der Daten zyklisch eingetaktet und verarbeitet werden; zudem sind Schaltungsteile mit unterschiedlichen Taktfrequenzen zu unterscheiden: Mit einem Systemtakt von 20 MHz lassen sich z.&amp;amp;nbsp;B. 18-Bit AD-Wandler auslesen, die so z.&amp;amp;nbsp;B. alle 1 µs neue Daten liefern, die verarbeitet werden müssen. Bei der Nutzung von 5 solchen Wandlern, die sequentiell verarbeitet werden, lägen 5 MHz Datenfrequenz vor. Für andere Schaltungsteile, die z.&amp;amp;nbsp;B. asynchron an die Peripherie andocken, sowie reine »state machines« können Schaltungsteile auf der 2-4 fachen Frequenz betrieben werden.&lt;br /&gt;
&lt;br /&gt;
Generell sind Fläche und Geschwindigkeit konkurrierende Größen, zwischen denen ein Optimum gefunden werden muss. Für die preiswerten FPGA-Serien wie Spartan (Xilinx) und Cyclone (Altera) sind aufgrund technologischer Randbedingungen bei gleichem Design etwa 10-30% weniger Taktgeschwindigkeit zu erwarten, als bei den großen Brüdern der Virtex- (Xilinx) bzw. Stratix-Familie (Altera). Es muss mit mehr Verbrauch an Logikelementen und Taktzyklen gerechnet werden (weniger Routingreserven, geringere Zahl von LUT-Eingängen, langsamere Logikelemente). Dafür sind sie sehr preiswerter.&lt;br /&gt;
&lt;br /&gt;
Funktionstechnisch identische Chips werden oft in mehrere Geschwindigkeitsklassen (speed grades) angeboten, die sich meist durch Bauteilselektion bei der Produktion ergeben. Grob kann man ca. 5%-15% höhere Taktung zwischen zwei speed grades erwarten. Teilweise werden durch produktionstechnische Maßnahmen wie veränderte Dotierung auch gezielt schnellere, bzw stromsparende Typen generiert, entsprechend klassifiziert und  angeboten.&lt;br /&gt;
&lt;br /&gt;
== Herstellung ==&lt;br /&gt;
&lt;br /&gt;
FPGAs heutiger Bauart sind hochkomplexe Strukturen, da sie einerseits sehr hochgetaktet werden müssen, umfangreiche Funktionen bewerkstelligen sollen und damit genügend Resourcen haben müssen, andererseits aber preisgünstig und flexibel sein sollen, was umfangreiche Umschaltmöglichkeiten erfordert. Damit sind FPGAs als universelles Bauteil vergleichsweise teuer. Umso problematischer ist deren Fertigung:&lt;br /&gt;
&lt;br /&gt;
=== Herstellungsprozess ===&lt;br /&gt;
FPGAs werden letztlich als Analogschaltkreis unter Verwendung von sogenannten Standardbibliotheken entwickelt, indem fertige, mehrfach simulierte und getestete Blöcke zusammengeschaltet werden, die ihre Funktion mehrfach in Silizium bewiesen haben. Dies betrifft hauptsächlich die IO-Zellen, Schaltmatritzen und vor allem Controller, RAM-Blöcke und andere hard cores.&lt;br /&gt;
&lt;br /&gt;
Deren Funktion wird zunächst in einer Logiksimulation im Zusammenwirken geprüft und anschließend mit einer Analogsimulation ausgewählter Baugruppen untermauert. Besonders die kritischen Bauteile PLLs, IO-Treiber und Taktleitungen werden dabei untersucht. Fertige FPGA-Prototypen werden dann mit unterschiedlichen Stress-Schaltungen auf ihr Leistungsvermögen hin geprüft.&lt;br /&gt;
&lt;br /&gt;
Die auszuliefernden Exemplare für Kunden, werden mit dem boundary scan Verfahren getestet und mit einem Testdesign beladen.&lt;br /&gt;
&lt;br /&gt;
=== Prozessqualifizierung ===&lt;br /&gt;
Das Entwickeln, fertigen und Testen der FPGAs führt zu einer Regelschleife, die es gestattet, ständige Verbesserungen vorzunehmen. Für den Anwender ist bedeutsam, dass im Zuge der Informationsgewinnung bezüglich Taktraten und Strombedarf für alle FPGAs und Fertigungsprozesse kontinuierlich Modelle entwickelt werden, welche sukzessive in die Entwicklungswerkzeuge einfließen. Im Laufe des Lebenszyklus eines Chips werden diese Modelle immer präziser und gestatten ein engeres Timing und eine exaktere Voraussage hinsichtlich des Leistungsbedarfs. Zu Beginn ist es daher oft so, dass die Modellierung eher konservativ erfolgt, was dazu führt, dass neue Chips bei der Simulation der Taktgeschwindigkeiten zunächst ihre realen Reserven nicht ausschöpfen können. Oftmals sind daher FPGA-Designs, welche das Timing gerade nicht getroffen haben, dennoch voll leistungsfähig. Umgekehrt gibt es immer wieder einzelne Exemplare, die das eigentlich simulierte Taktziel in Tests verfehlen.&lt;br /&gt;
&lt;br /&gt;
=== Hersteller ===&lt;br /&gt;
&lt;br /&gt;
Die größten Hersteller von FPGAs sind [http://www.altera.com Altera] und [http://www.xilinx.com Xilinx]. Weitere Hersteller sind [http://www.latticesemi.com/ Lattice], [http://www.actel.com Actel] und [http://www.atmel.com Atmel].&lt;br /&gt;
&lt;br /&gt;
Einige  Hersteller wie Altera verfügen über keine eigene Fabrik (-&amp;gt; &amp;quot;fabless&amp;quot;), sondern lassen ihre entwickelten FPGAs und ASICs bei wechselnden Halbleiterherstellern fertigen. Dies führt zu jeweils günstigen Produktionskosten, allerdings auch zu Qualitätsschwankungen. Auch Liefergarantien sind schwerer zu erhalten, besonders, wenn man darauf angewiesen ist, dass ein Chip auch in 25 Jahren noch zu bekommen ist.&lt;br /&gt;
&lt;br /&gt;
== Anwendung und Programmierung ==&lt;br /&gt;
=== Erstellung der FPGA firmware===&lt;br /&gt;
&lt;br /&gt;
==== Design Flow ====&lt;br /&gt;
Die Erstellung des Programmier-Datenstroms für den FPGA, um die oft komplizierten Funktionen heutiger Applikationen zu erreichen, wird inzwischen ausschließlich durch automatische Routing- und Synthesewerkzeuge erledigt, welche mit einer funktionellen- bzw strukturellen Beschreibung der gewünschten Architektur in einer sogenannten Hardwarebeschreibungssprache wie z.B. [[VHDL]] oder [[Verilog]] &amp;quot;gefüttert&amp;quot; werden. Die Hardwarebeschreibung gelingt ihrerseits entweder ausdrücklich durch Texteditoren indem Logikstrukturen, hardwarenahe Strukturen, Ablaufdiagramme und Zustandsautomaten formuliert werden, oder mit Code-generierenden Werkzeugen. Mit deren Hilfe sind komplexe IO-Interfaces, mathematische Funktionen wie Regelalgorithmen und ganze Rechnerarchitakturen formulierbar.&lt;br /&gt;
&lt;br /&gt;
Während und nach der Erstellung der Schaltungsteile, wird die Korrektheit der Funktion einzelner Blöcke sowie der gesamten Schaltung mit Simulationswerkzeugen theoretisch geprüft und gfs im Rahmen der Qualitätsmanagementprozesse auch formell nachgewiesen und geeignet dokumentiert. Danach folgt eine Integration und ein praktischer Schaltungstest Generell unterscheidet man folgende formelle Schritte während des Entwicklungsprozesses:&lt;br /&gt;
&lt;br /&gt;
Validierung: Die gewünschte Funktion der Schaltung wird theoretisch geprüft. Dies betrifft im Wesentlichen die komplizierten Funktionsblöcke wie state machines, CPU-Firmware und Rechenpipelines / Algorithmen und Codierungen wie CRC und AES. Hierbei wird untersucht, ob die Funktion grundsätzlich richtig ist. Das Prüfen erfolgt meist theoretisch mit MATLAB, EXCEL oder einer Programm-analyse-Software. Ziel ist der Nachweis der Richtigkeit des Konzeptes.&lt;br /&gt;
&lt;br /&gt;
Verifikation: Hierbei wird die konkrete Art der Umsetzung geprüft. Dies betrifft alle Schaltungsteile die einer bestimmten Funktion zuzuordnen sind. Praktisch wird die gesamte Schaltung blockweise dahingehend simuliert, ob alle Funktionen berücksichtigt wurden und das Verhalten in allen erdenklichen Situationen stimmig ist. Dazu werden Testfälle generiert und in die Schaltung eingespeist. Hierbei wird auch auf das logische Timing infolge des synchronen Designs Rücksicht genommen. In einigen besonderen Fällen wird auch das platizerte Design, so wie es letztlich im FPGA realisiert ist, zurückgelesen und das timing näher unterucht, um bestimmte Nachweise in Grenzsituationen zu führen.&lt;br /&gt;
&lt;br /&gt;
Test: Das fertig programmierte FPGA wird real in der Hardware getestet. Dazu können Testszenarien und -mittel aus der Validierungs- und Verfikationssphase herangezogen werden und/oder ein Testplan abgearbeitet werden. Hierbei ist in aller Regel umgebende Peripherie beteiligt, weil der FPGA alleine schlecht testbar ist. Bei diesem Schritt kommt dann auch die Elektronik mit ins Spiel, d.h. das Verhalten des Ladevorgangs, Probleme mit Spannungsstabilität, Pegeln, Leitungen etc. Da so ein konkretes Exemplar des Chips zur Anwendung kommt, wird ein solcher Test meist mit mehreren Baugruppen durchgeführt. In aller Regel sind Normabweichungen hier aber nicht durch den FPGA- sondern durch das Layout des PCB bestimmt. Diese Tests offenbaren demgemäß, dass ein und dasselbe Programmierfile in einem FPGA-System funktinoniert und aufgrund geringer Unterschiede der Elektronik in einem anderen gfs nicht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein wichtiger Punkt bei der Validierung, der Verifikation und auch dem Test ist dabei die Vollständigkeit der Testfälle, also die Abdeckung der Realität, in der sich das System bewegt. Um bereist bei der Validierung des Konzeptes eventuelle Fehler und Grenzen des Systems ausloten und das FPGA entsprechend fehlertolerant machen zu können, werden theoretische Modelle der Peripherie, der Physik, der Bedieneraktivität und der Randbedingungen / Abläufe erzeugt und in die Simulation eingefügt. Dies passiert sowohl bei der formellen Verfikation mit z.B. MATLAB, als auch der funktionellen Verifikation mit VHDL-Simulationswerkzeugen wie ModelSIM. Durch geeignete Modellierung von PLLs, Jitter, Variation der Signale von Aussen, können dadurch quasi alle erdenklichen Szenarien durchgespielt werden. Dies ist besonders wichtig bei Fällen, die sich in der Realität nur schwer nachstellen lassen, wie z.B: dem Auftreten zufälliger Fehler in RAMs, Störungen auf Leitungen oder Drahtbrüche.&lt;br /&gt;
&lt;br /&gt;
==== Wiederverwendbarkeit ====&lt;br /&gt;
Durch die Standardisierung der Architektur einerseits sowie die Entkopplung von applikationsorientierter Beschreibung und Chip- und Hersteller-spezifischer Synthese andererseits, wird die Hardware quasi durch Software gebaut. Dies wiederum schafft alle Optionen der Wiederverwendung und dem flexibleb Austausch von &amp;quot;Hardwareteilen&amp;quot;. So stehen inzwischen komplette Schaltungen für serielle Bausteine, RAM-Controller und vieles mehr zur Verfügung - teilweise sogar in Form von Open Source Projekten.&lt;br /&gt;
&lt;br /&gt;
Andererseits ist eine Tendenz erkennbar, dass Hersteller ihre Software und die damit erstellbare VHDL, speziell bei IP-Cores, immer stärker schützen und abkapseln. Diese produzieren kaum noch allgemeine VHDL, sondern nur noch herstellerspezifische Scripte. Diese lassen sich in aller Regel nicht übertragen. Zudem führen auch immer grösser werdende Unterschiede in den Chipstrukturen und Resourcen in modernen FPGAs dazu, dass die Portierbarkeit weiter eingeschränkt wird. Dies ist besonders bezüglich der Integration von Peripherie-Controllern oder ganzer Mikrocontroller der Fall. Bei SOPC-Systemen sind die generierten Strukturen praktisch überhaupt nicht mehr von einem FPGA-Hersteller zum anderen zu portieren und oftmals nicht einmal mehr zwischen FPGA-Familien desselben Herstellers untereinander kompatibel.&lt;br /&gt;
&lt;br /&gt;
Dadurch entsteht ein immer weiter wachsender Design- und Pflegeaufwand, dem viele Firmen inzwischen dadurch begegnen, daß sie - soweit als möglich - herstellerunabhängige Beschreibungen verwenden. Z.B. können RAM-Beschreibungen und State Machine, rein in VHDL-Text generiert werden, anstatt sie mit den mitgelieferten Code-Generatoren zu erzeugen.&lt;br /&gt;
&lt;br /&gt;
=== Anbindung an Mikrocontroller ===&lt;br /&gt;
Es gibt unterschiedliche Arten, wie ein FPGA mit einem Controller verbunden sein kann. In der Regel ist der Controller der Master und arbeitet auf den FPGA. Dabei ist zwischen direkten impulsiven Zugriffen auf den FPGA nach Massgabe des internen Ablaufs im Prozessor, die jederzeit und wortweise an irgendeine Adresse erfolgen können und blockweisem Schreiben, also permanentem Datenfluss ohne Adressierung zu unterscheiden.&lt;br /&gt;
&lt;br /&gt;
Das wortweise Schreiben und Lesen erfolgt in Form eines klassischen Speicherinterfaces durch aktiven Zugriff auf den FPGA oder den FPGA hindurch auf einen RAM-Bereich, in den der FPGA seinen Speicher einblendet.&lt;br /&gt;
&lt;br /&gt;
==== Memory Mapped ====&lt;br /&gt;
Hierunter versteht man den Zugriff des Mikrocontrollers auf das FPGA in Form eines Speichers. Dabei muss der FPGA ein klassisches Speicherinterface zur Verfügung stellen. In einzelnen Fällen reicht es auch, wenn dieser ein internes Blockram im dual ported Modus an die Ports des Mikrocontrollers heranführt.&lt;br /&gt;
&lt;br /&gt;
==== Streaming IO ====&lt;br /&gt;
Liefert ein Mikrocontroller häufig grosse Datenmengen an einen FPGA, ist es mitunter sinnvoll auf einen aktiven Zugriff mit Wortadressierung zu verzichten und einen pipeline-Zugriff zu implementieren. Der FPGA &amp;quot;hört&amp;quot; dazu den Datenbus des Mikrocontroller ab und erkennt anhand z.B. der Aktivierung nur einer Schreibleitung den Beginn des Sendens und empfängt dann mit jedem Takt ein Wort. Was die Daten zu bedeuten haben und wohin sie zu schreiben sind, muss dann in den Daten codiert werden. Auch ist es denkbar den FPGA so zu konfigurieren, dass beim Schreiben auf eine ganz bestimmte Adresse ein grösserer Datenblock übergeben wird. &lt;br /&gt;
&lt;br /&gt;
In beiden Fällen wird im FPGA ein FIFO eingesetzt, der synchron mit dem Mikroprozessortakt beschrieben wird. Auf der Seite des FPGAs muss eine FSM überwachen, ob Daten ankommen und diese geeignet verarbeiten.&lt;br /&gt;
&lt;br /&gt;
==== Indirekte Busverbindung ====&lt;br /&gt;
Oftmals sind FPGAs und MCUs in grösseren Systemen über Busse verschaltet. So kann der FPGA an einem klassischen Daten-Adress-Bus parallel zu einem RAM und anderen Bausteinen über Adressdekodierung und Chip-Select betrieben werden, oder er wird über ein logisches Interface wie SPI angebunden.&lt;br /&gt;
&lt;br /&gt;
=== Anbindung an RAMs und ROMs ===&lt;br /&gt;
&lt;br /&gt;
==== DDR2 / DDR3 - RAM ====&lt;br /&gt;
Während die Ansteuerung eines normalen SRAMS mittels eines klassischen memory mapped interface recht einfach ist, bedürfen DRAMS- speziell mit DDR-Funktion einer aufwändigeren Schaltung, welche die komplizierte Kommandostruktur der DDR-Ansteuerung versteht, pipelining und gfs caching praktiziert und das RAM entsprechend bedient. Dabei sind RAM-spezifische Randbedingungen (refresh / self refresh) zu beachten. Für FPGAs existieren hier eine Reihe von konfigurierbaren IP-Cores. &lt;br /&gt;
&lt;br /&gt;
In jüngster Zeit beobachtet man hier einen Umstieg auf prozessorähnliche Funktionen und Stukturen, d.h. die RAMs werden nicht mehr nativ sondern über eine Prozessorinterface angesteuert. Die Firma Xilinx z.B. bietet keine nativen Mehrportlösungen mehr an. DDR-Controller mit den in FPGAs meistens benötigten Multiportfunktionen, also Zugriffen durch mehrere Module, sind damit praktisch nur noch über AXI-Interface zu realisieren.&lt;br /&gt;
&lt;br /&gt;
==== SPI-Flash ====&lt;br /&gt;
Die Anbindung über SPI erfolgt meist über serielle Verbindungen wie I2C, da nur wenig Bandbreite benötigt wird. In selteneren Fällen werden FPGAs parallel mit einem Flash verbunden, z.B. bei grossen FPGAs mit umfangreichem image, welches aus einem Flash schnell geladen werden soll.&lt;br /&gt;
&lt;br /&gt;
=== Anbindung an Peripherie ===&lt;br /&gt;
Typische Anwendungen für FPGAs sind die breitbandige (grosse Busbreite und/oder hohe Taktfrequenz) Gewinnung und Verarbeitung von Daten, bei denen DSPs oder MCUs nicht mehr (effektiv) eingesetzt werden können. Typische Beispiele dafür sind:&lt;br /&gt;
&lt;br /&gt;
==== Videotechnik ====&lt;br /&gt;
[[Bildsensor]]en produzieren traditionell die grössten Datenmengen je Zeiteinheit und sind ohne FPGAs praktisch nicht mit der Aussenwelt in Kontakt zu bringen. FPGAs arbeiten hier entweder auf der Kunden- oder auch der Herstellerseite, um die komplexen Datenströme anzunehmen, vorzuverarbeiten und in eine reduziertes, praktikableres Datenformat umzusetzen. Auch die Annahme eines Videoformates ist praktisch nur mit FPGAs möglich.&lt;br /&gt;
&lt;br /&gt;
Die benötigten Datenschnittstellen können mit Hilfe von Transceiver-Ports / LVDS manuell realisiert werden, oder es werden Umsetzer-Chips verwendet. Beispiele:&lt;br /&gt;
&lt;br /&gt;
* HDMI-Transceiver für FPGAs ohne Gigabit-Transceiver&lt;br /&gt;
* SERDES-Transceiver für mittelpreise FPGAs ohne SERDES / sehr hohe Frequenzen&lt;br /&gt;
* Camera-Link-Deserializer (für langsame FPGAs)&lt;br /&gt;
* LVDS-Buffer-Deserializer (für langsame FPGAs ohne LVDS buffer)&lt;br /&gt;
* DVI-Buffer&lt;br /&gt;
&lt;br /&gt;
Für Analoge Daten benötigt man selbstredend noch Video-ADCs / Video-DACs, die überhaupt erst ein digitales Signal erzeugen.&lt;br /&gt;
&lt;br /&gt;
==== Gigabit-Ethernet ====&lt;br /&gt;
Für die Umsetzung auf den (praktisch analogen) [[Ethernet]]-Standard braucht es immer einen sogenannten [[Glossar#p|PHY]], also einen physikalischen Zusatzchip. Dieser vollzieht die [[Glossar#p|5PAM]]-Modulation und die Codierung im 10/8-Format. Die Ankopplung an den FPGA erfolgt direkt.&lt;br /&gt;
&lt;br /&gt;
Während althergebrachte 100MBit-Verbindungen dabei oft noch mit UCs und softcores zu bedienen waren, können 1GBit-Netzwerke nur noch mit FPGAs sinnvoll angesteuert werden. Umgekehrt ist das Gigabit-Netzwerk eine gute Lösung, um Daten effektiv und billig in einen PC zu transportieren, da moderne PCs alle eine GBit-Karte besitzen und die Datenrate bei schnellen CPUs auch weitgehend ausgenutzt werden kann. Typische Bandbreiten bewegen sich für Linux mit unmodifizierten Treibern bei 700MBit-800MBit.&lt;br /&gt;
&lt;br /&gt;
Der [[Glossar#m|MAC]], bzw MAC-ähnliche Funktionen, sind im FPGA direkt implementierbar (z.B. mit IP-Cores) und können mit einfachen [[Glossar#f|FSM]]s angesteuert werden. Für die Verwendung von C-Software ist es notwendig, einen hardcore zu verwenden, da mit softcores die Bandbreite kaum erreicht werden kann. Besonders das Verpacken der Daten, die Abarbeitung des Protokolls sowie die Bildung der Ethernet-header mit Checksummen, CRC und zusätzlichen Prüf- und Steuerinformationen sind in VHDL sehr einfach und entspannt zu erzeugen, weil parallel gearbeitet werden kann.&lt;br /&gt;
&lt;br /&gt;
Die Bandbreite einer typischen [[Glossar#g|GMII]]-Verbindung mit [[Glossar#d|DDR]] beträgt 2x150MHz x 8 Bit, was mit mittleren FPGAs gut zu machen ist. Die interne Bandbreite ohne header beträgt dann typisch etwa 800MBit, z.B. 50MHz x 16 Bit für die Daten. Ab diesem Punkt ist dann wieder ein schneller softcore einsetzbar.&lt;br /&gt;
&lt;br /&gt;
==== High-Speed-USB ====&lt;br /&gt;
Für die Übersetzung auf den immer schnelleren USB-Bus (inzwischen bis 5Gb Bandbreite!) stehen Chips zur Verfügung, die sich in vergleichsweise einfacher Weise ansteuern lassen. Eine passende Sende- und Empfangsarchtiktur ist in FPGAs relativ rasch zu implementieren.&lt;br /&gt;
&lt;br /&gt;
=== Implementierung von Steuerfunktionen ===&lt;br /&gt;
In den meisten FPGA-Applikationen sind mehr oder weniger komplizierte Abläufe zu integrieren, die den Datenfluss steuern und die einzelnen Komponenten so mit einenander verschalten, dass sie wunschgemäss aufeinander reagieren.&lt;br /&gt;
&lt;br /&gt;
Mit nativem VHDL sind einfache sequenzielle Abläufe mit überschaubaren Verschachtelungstiefen und Schleifen direkt in Form von Zählersteuerungen oder abstrakten State Machines realisierbar. Dazu kann auf die automatische Codegeneration aus state machine designern heraus oder die halbautomatische Erzeugung von Code mit z.B. Excel zurückgreifen, die die Enumeration von states, die Abfragen und die Sprünge zu den nächsten states automatisch vollzieht. Dies hat aber seine Grenzen, weil dies früher oder später unübersichtlich wird und nicht mehr so gut pflegbar ist. Zudem kann sich der Code stark aufblähen und die Zusammenfassung etwaiger Redundanz durch die Synthese zu hohen Synthesezeiten führen.&lt;br /&gt;
&lt;br /&gt;
Applikationen, die nicht ganz so zeitkritisch sind, sollten lieber mit einer flexiblen, verschachtelten Struktur von 2 state machines abgearbeitet werden, bei denen der Ablauf von der Generation des Timings für die Hardware getrennt ist. In reinen Ablaufsteuerung stehen dann wie in einem Befehlsspeicher abstrakte Codes hintereinander und werden mittels einer intelligenten Struktur sequenziell abgearbeitet werden. Diese agiert wie ein Befehlsinterpreter und  stösst eine untergeordnete state machine an. Damit wird zwar mehr Zeit für die Verwaltung benötigt, es führt aber letztlich zu quantitav weniger Steuer-Code. Die Befehlsfolgen lassen sich z.B. günstig in einem ROM realisieren. Die gesamte Steuerung wird intelligenter und insgesamt kleiner.&lt;br /&gt;
&lt;br /&gt;
Eine deartige Steuerlogik lässt sich soweit ausbauen, dass untergeordnete state machines wie Unterprogramme ablaufen und durch ein flexibles Hauptprogramm gesteuert werden, womit sie sich immer mehr einer Prozessorarchitektur annähert.&lt;br /&gt;
&lt;br /&gt;
Wenn die Komplexität viele &amp;quot;Befehle&amp;quot; erfordert, gfs noch gerechnet und viel entschieden werden muss, lohnt der Rückgriff auf einen vorgefertigen Softcore. Dies hat den Vorteil, dass eine Standardstruktur verwendet wird, für die es erweiterte Entwicklungs- und Debugging-Software gibt. Spätestens, wenn man mit virtuellen Datenstrukturen und rekursiven Funktionen arbeitet, oder z.B. Zeichenkettenverarbeitung braucht, ist ein Softcore unerlässlich, &lt;br /&gt;
weil dann alle Methoden-, Variablen und sonstige Aspekte der jeweiligen Hochsprache verwendet werden können.&lt;br /&gt;
&lt;br /&gt;
=== Beispiele von VHDL Code ===&lt;br /&gt;
Siehe [[VHDL_Softwarepool]]&lt;br /&gt;
&lt;br /&gt;
== Einsatz in elektronischen Schaltungen ==&lt;br /&gt;
Der Einsatz von modernen FPGAs erfordert neben dem grundsätzlichen Wissen im Bezug auf den design flow und den für FPGAs optimierten Schaltungs- und Rechenstrukturen auch grosses Knowhow im Bereich der analogen Schaltungstechnik sowie auch der effektiven Vorgehensweise beim Design. &lt;br /&gt;
&lt;br /&gt;
=== FPGA aus analoger Sicht ===&lt;br /&gt;
FPGAs bedürfen heute eines perfekten Layouts, um mit RAMs und externen Chips zusammenarbeiten zu können, da sowohl die internen, als auch externen Taktfrequenzen rapide angestiegen sind. Ferner ist grosses Augenmerk auf die Spannungsversorgungen zu legen.&lt;br /&gt;
&lt;br /&gt;
=== Integration ins PCB ===&lt;br /&gt;
Weiter ist es heute kaum noch möglich, FPGA-Design vom board-Design funktionell zu trennen, wie man es mit Blick auf den scheinbar rein logischen Schaltungsentwurf glauben könnte und früher auch der Fall war. Da FPGAs heute stark dedizierte Funktionen enthalten, die nicht in jeder IO-Zelle zur Verfügung stehen oder spezielle Bank-Konfigurationen erforden, muss der Schaltungsentwurf und das Layouten des FPGAs und des Boards einhergehen.&lt;br /&gt;
&lt;br /&gt;
=== Entwicklungsboards und Starter-Kits ===&lt;br /&gt;
Von mehreren Seiten gibt es im Markt eine ganze Palette von sogenannten Entwicklungs- und Evaluierungsboards. Diese eignen sich nicht nur zum Kennenlernen des Chips, bez. zur Validierung der Lösung (ob die Schaltung wie gebaut auch im konkreten Ziel-FPGAs arbeitet) sondern werden immer öfter auch in bestehenden Systemen verbaut, weil aufgrund einer geringen Stückzahl die Selbstentwicklung nicht lohnt.&lt;br /&gt;
&lt;br /&gt;
Siehe [[Liste von FPGA Eval boards]]&lt;br /&gt;
&lt;br /&gt;
=== FPGA als Ersatz von alten digitalen ICs und Prozessoren ===&lt;br /&gt;
Es gibt vielfach den Wunsch, ICs, die nicht mehr direkt zu beschaffen sind, durch FPGAs (oder wenn möglich CPLDs) zu ersetzen. Gerade ältere Schaltungen&lt;br /&gt;
basieren aber durchaus noch auf 5V TTL und CMOS Logik. Oft sind die Systeme nicht ohne sehr hohen Aufwand und Verlust der Wirtschaftlichkeit zu ersetzen (wie ältere, produktive Industrieanalagen oder komplexe Rechensysteme - aber auch wenn es um die Erhaltung alter Hardware bei &amp;quot;retro-computing&amp;quot; geht).&lt;br /&gt;
&lt;br /&gt;
Nun bieten heute erhältliche (und günstige) FPGAs - aufgrund ihrer verwendeten Technologie - keine direkte 5V Kompatibilität mehr. FPGAs wie die Spartan II (nicht IIe), erlauben zumindest noch &amp;quot;5V Toleranz&amp;quot; auf den I/O-Pins. Das heißt: das FPGA wird zwar mit 3.3V versorgt und kann daher nur 3.3V am Ausgang treiben, erlaubt aber 5V von externen Bausteinen am Pin - dies ist nach wie vor TTL kompatibel, aber auch viele CMOS-Schaltungen können so durchaus noch betrieben werden.&lt;br /&gt;
&lt;br /&gt;
Für neueste 3.3V (oder weniger) FPGAs kann man Levelshifter-Schaltungen verwenden, die entweder bidirektional ausgeführt sind und ein &amp;quot;open-drain-artiges&amp;quot; Verhalten zeigen (also beide Seiten können die Leitung nur auf Lowpegel treiben, der Highpegel wird durch pull-up Widerstände erreicht) oder die unidirektional (mit optionaler Richtungsumkehr und/oder Treiberdeaktivierung über Kontrolleingänge) gebaut sind. Verwendung von Spannungsteilern, Zenerdioden-Schaltungen oder Ausnutzung von Diodenlimitierungen der I/O Treiber des FPGAs (und Verwendung eines Serienwiderstands zur Stromlimitierung) sind zumeist nur für niedrige Schaltfrequenzen gut geeignet und sorgen für eine erhöhte Stromaufnahme.&lt;br /&gt;
&lt;br /&gt;
Siehe auch: [[Pegelwandler]]&lt;br /&gt;
&lt;br /&gt;
== Debugging-Hilfen ==&lt;br /&gt;
=== Soft-Debugging ===&lt;br /&gt;
&lt;br /&gt;
=== Logikanalysatoren ===&lt;br /&gt;
Gerade beim [[Debugging]] größerer FPGA-Designs ist es oft notwendig, auf interne Signale und Busse zuzugreifen, die aus routing- oder Platzgründen nicht an Pins des FPGAs gelegt - und mit konventionellen Analysatoren beobachtet werden können. Nebst den einschlägigen Tools der Hersteller, welche Signal probing über JTAG gestatten (z.&amp;amp;nbsp;B. ChipsScope und SignalTap), werden in FPGAs oft mehr oder weniger komplexe [[Logic Analyzer]] integriert, welche die internen Signale in vielfältiger Weise aufzeichnen. Diese werden in Block-RAMs oder FIFOs gespeichert und durch externe Master ausgelesen. Hier kommen auf der Platine befindliche MCUs oder fremd zugreifende FPGAs / CPUs in Betracht, welche über unterschiedliche Kommunikationsverbindungen (seriell, parallel, LVDS) angeschlossen sind. Dazu werden in die FPGAs entsprechende Cores und state machines instanziiert und mit Software auf PC-Seite ausgelesen.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend einige Beispiele:&lt;br /&gt;
&lt;br /&gt;
==== Automatisch instanziierte Logic Analyzer ====&lt;br /&gt;
Praktisch alle FPGA-Hersteller bieten die Möglichkeit, mit einem internen Tool ein script zu erzeugen, welches der Synthese übergeben wird, welche dann anhand von Signallisten und diversen Randbedingungen einen LA automatisiert aufbaut und verdrahtet. SampleZeit und -Takt sind dabei genauso einstellbar, wie RAM-Tiefe und -Breite. Die so generierten Datenpakete können dann mittels JTAG ausgelesen werden. Im Continous-Betrieb können so sogar permanente Datenausgaben wie bei einem Oszilloskop vorgenommen werden.&lt;br /&gt;
&lt;br /&gt;
==== Proprietärer serieller Logic Analyzer ====&lt;br /&gt;
&lt;br /&gt;
Die einfachste Möglichkeit ist die direkte Instanziierung eines Blockrams als FIFO mit &amp;quot;breitem&amp;quot; Busanschluss: Linksseitig besitzt das FIFO eine Breite von z.&amp;amp;nbsp;B. 256 Bit (Xilinx-Rams lassen sich ohne weitere Umbeschaltung über den Wizzard mit bis zu 1024 Bits deklarieren und nutzen). Rechtsseitig einen 16- oder 32 Bit breiten Busanschluss für einen Prozessor bzw Parallelinterface oder einen 1 Bit breiten Anschluss für ein serielles streaming interface. Mit einem FiFo-enable können die zu sampelnden Zeiten (Busphasen) festgelegt werden, z.&amp;amp;nbsp;B. anhand eines Kriteriums wie die Erfüllung einer bestimmten mathematischen Bedingung, die man in VHDL formuliert, oder es wird einfach ein Trigger gesetzt. Solange das FiFo nicht voll ist, kann geschrieben werden, was durch die interne FiFo-Verwaltung selbst bereits komplett geregelt wird.&lt;br /&gt;
&lt;br /&gt;
Beim einfachen seriellen Logic Analyzer benötigt man nur noch einen kleinen Core, der permanent das FiFo liest, und den seriellen Overhead (Startbit, Stoppbit, Parity und gfs CRC) hinzufügt. Mit einem einfach Pegelwandler kann so ein PC direkt angeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
Auch denkbar ist die Anbindung an ein fremdes FPGA-board mit viel Speicher über (LV-)DS-Kommunikation. In komplexeren Systemen wird ein CAN- oder USB-Core eingesetzt.&lt;br /&gt;
&lt;br /&gt;
Wenn mittels des Kriteriums nur ganz bestimmte kritische Phasen herausgesampelt werden (z.&amp;amp;nbsp;B. das Auftauchen eines bestimmten Rechenfehlers im FPGA) und so das Datenaufkommen je Zeiteinheit über längere Zeit betrachtet eher gering ist, kann bei geeignetem Datendurchsatz in Echtzeit dauerhaft mitprotokolliert werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== BusProbe ====&lt;br /&gt;
Mit der BusProbe, dem Debugging Core von abaxor engineering, kann der Entwickler den Signalfluss im FPGA-Design auch über einen längeren Zeitraum überwachen und am PC aufzeichnen. Der Core verarbeitet an jedem Eingang einen kompletten Bus. &lt;br /&gt;
&lt;br /&gt;
Die Daten werden gemultiplext zum PC geschickt und dort per Software demultiplext. Im PC erfolgt auch die Auswertung mit beliebigen Analyse-Tools.&lt;br /&gt;
&lt;br /&gt;
Gegenüber dem Betriebssystem verhält sich die BusProbe wie eine Festplatte, von der die Daten mit gewöhnlichen Zugriffen gelesen werden können.&lt;br /&gt;
&lt;br /&gt;
* Streaming der Daten zum PC mit mehr als 20 MByte/s&lt;br /&gt;
* keine Treiber im PC da Nutzung von Standardschnittstellen (USB oder IDE)&lt;br /&gt;
* Hot-Plugging&lt;br /&gt;
* Visualisierung mit beliebigen Programmen&lt;br /&gt;
* geringer Logikaufwand&lt;br /&gt;
&lt;br /&gt;
==== open source Logikanalysator ====&lt;br /&gt;
===== sump.org =====&lt;br /&gt;
Ein einfacher, übersichtlicher Logikanalysator findet sich auf sump.org. Er liegt im Quelltext vor wird mit ins Design einsynthetisiert. Als Speicher dient wahlweise SRAM oder internes RAM. Es können 32 Kanäle mit 100 MHz (oder weniger) gesampelt werden. Die Bediensoftware läuft platformunabhängig unter Java und benötigt eine serielle Schnittstelle (auch über USB-seriell Wandler) zum Core.&lt;br /&gt;
&lt;br /&gt;
[http://de.sump.org/projects/analyzer/ sump.org-Webseite]&lt;br /&gt;
&lt;br /&gt;
===== Weitere =====&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/articles/Logic_Analyzer&lt;br /&gt;
&lt;br /&gt;
== FPGA-Design aus Projektsicht ==&lt;br /&gt;
Vielfach wird die Auffassung vertreten, die FPGA-Entwicklung gehöre allein zur Hardwareentwicklung, da es sich um ein elektronisches Bauteil handle, welches lediglich konfiguriert werde. Man spricht bei der FPGA-Entwicklung oft auch ausdrücklich nicht vom &amp;quot;Programmieren&amp;quot; sondern &amp;quot;Beschreiben&amp;quot; der Hardware. Beides ist aus folgenden Gründen unrichtig:&lt;br /&gt;
&lt;br /&gt;
* Die Vorgehensweise, die Struktur einer Schaltung durch virtuelle Konstrukte wie Logikgatter, Multiplexer und Schalter zu definieren, die in der Praxis so gar nicht exisiteren, sondern später in Form von LUTs realisiert wird, ist zwar formell eine Beschreibung einer Struktur, jedoch ist es eine sehr abstrahierte Form, da äquivalente Funktionen definiert werden. Die Sollhardware wird demnach in weicher Form beschrieben.&lt;br /&gt;
&lt;br /&gt;
* Der output des Designers besteht aus Grafiken, Skripten, Anweisungen, Einstellungen der Synthesesoftware und Strukturvorgaben, die nicht selbst Hardware sind, sondern Anweisungen an eine Erzeugersoftware und stellen damit ein Programm (lat. &amp;quot;Vorschrift&amp;quot;) dar.&lt;br /&gt;
&lt;br /&gt;
* Neben den allein schon durch die Nutzung bestimmter Funktionen wie RAMs, MCBs und Soft-Cores implizit vorgegebenen Abläufen im FPGA, werden fast immer auch noch weitere, explizite Handlungsabläufe mit Reaktionen auf äussere Einflüsse implementiert, die als klassische Software aufzufassen sind.&lt;br /&gt;
&lt;br /&gt;
* Der erzeugte Code der Erzeugersoftware wiederum ist selbst ein Programm und wird zusammen wie die Quellinformation des Designers archiviert, versioniert und wie übliche Software gehandhabt.&lt;br /&gt;
&lt;br /&gt;
Damit erfüllt die FPGA-Entwicklung formell mehrere Bedingungen, die als Softwareentwicklung aufgefasst und eingruppiert zu werden. Andererseits ergeben sich durch die weiter oben erwähnten, sehr ausgeprägten Themen im Bereich der Elektronik (z.B. der Nachrichten- und HF-Technik) sowie der Physik eine Vielzahl von harten Anforderungen, der klassischen Hardwareentwicklung.&lt;br /&gt;
&lt;br /&gt;
Zusammengefasst kann man daher 2 grundlegende Aspekte des FPGA-Designs konstatieren, die je nach Anwendungsfall als mehr oder weniger unabhängig von einander gesehen werden können.&lt;br /&gt;
&lt;br /&gt;
=== Logikdesign ===&lt;br /&gt;
Das funktionslogische Design besteht aus dem Entwurf des Systems, der benötigten Abläufe und der zu realisierenden Protokolle und Berechnungsverfahren. Hierbei sind Kenntnisse im Systementwurf, gfs. von SOPC-Systemen, der üblichen Bussysteme und der Software generell nötig. Hinzu treten Kenntnisse in der elementaren und/oder der komplexen abstrakten Mathematik und der Signalverarbeitung sowie der theoretischen Nachrichtentechnik. Ferner sind Methoden des Script- und Softwareentwurfes, sowie Handhabung von Software nötig.&lt;br /&gt;
&lt;br /&gt;
Dies alles stellt den Anteil dar, der klassischerweise als Softwareentwicklung aufgefasst wird. Es ist die Schnittstelle zur Funktionsschicht, also der grundsätzlichen Funktion eines Gerätes.&lt;br /&gt;
&lt;br /&gt;
=== Schaltungsdesign ===&lt;br /&gt;
Das praktische, hardwaretechnische Anteil des Designens erstreckt sich zudem über die physikalischen Themen der Temperatur- und Betriebsstabilität, der Strahlungs- und Störsicherheit, der Produzier- und Herstellbarkeit, des Wirkens und der Fehleranfälligkeit interner Schaltungsstrukturen, der Art und Weise der Ressourcennutzung bei unterschiedlichen Realisationsformen - besonders, wenn es auch Kostenoptimierung ankommt, des Analogverhalten der IOs und internen Strukturen im Bezug auf Frequenz und Pegel, der Signalintegrität der FPGAs und der Leiterbahnen sowie alle Anfordernisse im Umfeld der anzubindenen Chips.&lt;br /&gt;
&lt;br /&gt;
Dies ist der Anteil der gerne als Hardwareentwicklung eingestuft wird. Er stellt die Schnittstelle zur Physik und der Fertigung dar.&lt;br /&gt;
&lt;br /&gt;
=== Fazit ===&lt;br /&gt;
Die Verwendung von FPGAs ist heute komplexer denn je und erfordert in aller Regel starke Kenntnisse in beiden Feldern. FPGA-Entwicklung kann praktisch wie die Einbindung eines komplexen Evaluierungsboards oder einer programierbaren Steuerplatine mit festgelegten Funktionen aufgefasst werden.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Hardwarebeschreibungssprachen]]&lt;br /&gt;
* [[Reset für FPGA/CPLD]]&lt;br /&gt;
* [[Taktung FPGA/CPLD]]&lt;br /&gt;
* Projekt [[Audio-DSP mit Spartan 3-FPGA]]&lt;br /&gt;
* Projekt [[FPGA Lab]]&lt;br /&gt;
&lt;br /&gt;
== Forumlinks ==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/274159 Tonleiter im PLD] - Beispiel einer einfachen Musikapplikation&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/326462?goto=3564346#3564346 Kopierschutz] für FPGAs und programmierbare ICs&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/392278 Verfikationsumgebung] Verfikation beim FPGA-Design&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/381136 FPGA-Standards] bezüglich Codierung&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/382356#4357686 Inferred True Dual Port RAM für Xilinx und Altera]&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/252255#2595360 Dual Port Block RAM - Gleichzeitiges lesen und schreiben]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.fpga4fun.com/index.html FPGA4Fun] - FPGA-Projekte, größtenteils mit Altera und Verilog&lt;br /&gt;
* [http://marcowuen.wordpress.com/2014/09/08/overview-cheap-fpga-development-boards/ Übersicht Development Boards] - Zusammenstellung günstiger FPGA Boards unter 100$&lt;br /&gt;
* [http://video.google.com/videoplay?docid=-4969729965240981475 Ein Vortrag, auf Englisch: General Purpose, Low Power Supercomputing Using Reconfiguration Logic]&lt;br /&gt;
* http://www.opencores.org - FPGA-Projekte, Opensource, jeder kann seine Eigenen einstellen und an anderen mitarbeiten. U.a. gibt es verschiedene CPUs für FPGAs.&lt;br /&gt;
* [http://pin4.at/pro_misc.php#fdil Projekt &amp;quot;FDIL v2&amp;quot;]: 5V DIL-Ersatz mit 100kGates Spartan II FPGA (Englisch)&lt;br /&gt;
* [http://members.optushome.com.au/jekent/FPGA.htm John&#039;s FPGA Page]&lt;br /&gt;
* [http://www.embedded.com/columns/whatsnew/197003073 More about designing with embedded FPGAs] by Bernard Cole, Embedded.com&lt;br /&gt;
* [http://chaosradio.ccc.de/cre117.html Chaosradio Express - FPGA]&lt;br /&gt;
* [http://www.pin4.at/pro_custom.php Custom IC replacements] - DIL / TTL-Replacements mit FPGA (Englisch)&lt;br /&gt;
&lt;br /&gt;
[[Category:FPGA und Co|Grundlagen|Bauteile]]&lt;/div&gt;</summary>
		<author><name>87.178.104.168</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=FPGA&amp;diff=96967</id>
		<title>FPGA</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=FPGA&amp;diff=96967"/>
		<updated>2017-08-10T12:28:36Z</updated>

		<summary type="html">&lt;p&gt;87.178.104.168: /* Design Flow */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FPGA ist die Abkürzung für &amp;quot;&#039;&#039;&#039;F&#039;&#039;&#039;ield &#039;&#039;&#039;P&#039;&#039;&#039;rogrammable &#039;&#039;&#039;G&#039;&#039;&#039;ate &#039;&#039;&#039;A&#039;&#039;&#039;rray&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Es handelt es sich dabei um programmierbare digitale Bausteine mit denen eine Vielzahl von Schaltungen realisiert werden können.&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
&lt;br /&gt;
=== Grundelemente  ===&lt;br /&gt;
&lt;br /&gt;
Ein FPGA besteht, ähnlich wie ein [[CPLD]], aus vielen Logikelementen, hauptsächlich [[FlipFlop]]s (FF) und davor gelagerten kombinatorischen Logikschaltungen. Diese sind entweder Verknüpfungen verschiedener Logikgatter (FPGAs der Firma Actel), die über elektronische &amp;quot;Schalter&amp;quot; entsprechend der vom Entwickler gewünschten Funktion miteinander verknüpft werden können oder es handelt sich um sogenannte LUTs (Look-Up-Table), mit denen die Logikfunktion explizit realisiert wird.&lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;&#039;LUT&#039;&#039;&#039; kann eine beliebige kombinatorische Funktion (NAND, XOR, AND, Multiplexer etc.) aus den Eingangssignalen realisieren. Die Anzahl der Eingangssignale pro LUT ist vom FPGA abhängig und liegt meist zwischen 4 und 6. Für Funktionen die mehr Eingänge erfordern als eine einzige LUT besitzt (hohes Fan-In), werden mehrere LUTs direkt miteinander verschaltet. Die [[FlipFlop]]s dienen dazu, Signalwerte zwischenzuspeichern, um sie im nächsten Takt weiterverarbeiten zu können. Das Verhältnis zwischen der Anzahl der LUTs und der Anzahl der Flip-Flops ist meist 1:1. Aktuelle FPGAs bestehen aus bis zu einigen zehntausend Logikelementen.&lt;br /&gt;
&lt;br /&gt;
Die logischen Schalter und Speicher sind in den meisten FPGAs durch [[Speicher#SRAM | SRAM]]-Speicherzellen realisiert, welche beim Bootprozess passend geladen werden. Das Laden dieser Konfigurationsdaten bzw. Verknüpfungsregeln geschieht dabei in der Regel aus einem speziellen [[Speicher#Flash | Flash-ROM]]-Baustein heraus. Es kann aber auch ein Mikrocontroller benutzt werden. Die meisten FPGAs bieten daher für diesen Konfigurationsvorgang mehrere Modi an (seriell, parallel, Master/Slave). Da die SRAM-Zellen ihren Inhalt beim Abschalten der Versorgungsspannung verlieren, muss ein SRAM-basierter FPGA bei jedem Einschalten neu konfiguriert werden. Daher benötigt ein solcher FPGA einige Millisekunden bis zu einigen Sekunden, bevor er voll betriebsbereit ist.&lt;br /&gt;
&lt;br /&gt;
Eine FPGA-Familie beinhaltet Typen mit unterschiedlicher Anzahl und Komplexität von Logikzellen. So enthält ein Spartan3-1000 ca. 2,5 mal so viel Logik (FF, LUTs) wie ein Spartan3-400.  &lt;br /&gt;
&lt;br /&gt;
FPGAs mit nichtflüchtigem Speicher basieren auf [[Speicher#EEPROM | EEPROM]]-, [[Speicher#Flash | Flash]]-Speicher (einige Familien von Lattice und Actel) oder AntiFuse- Technologie (Actel). Die sogenannten AntiFuse FPGAs sind nur einmalig programmierbar.&lt;br /&gt;
&lt;br /&gt;
=== I/O Anschlüsse ===&lt;br /&gt;
&lt;br /&gt;
FPGAs unterstützen als universal einsetzbare Digital-ICs eine Vielzahl von Signalstandards, um mit den unterschiedlichen Digitalbausteinen im Markt kommunizieren zu können.&lt;br /&gt;
&lt;br /&gt;
==== Pegelstandards ====&lt;br /&gt;
Es existieren je nach FPGA-Familie verschiedene TTL-Pegel (5V, 3,3V, 2,5V), differentielle Signalstandards (LVDS, GTL, GTP) und im Hochpreisbereich serielle Hochgeschwindigkeitsstandards mit bis zu 28 Gbit/s. Oftmals sind weitere Eigenschaften wie Treiberstärke und Flankensteilheit für jeden benutzerdefinierbaren Anschluss (User-IO) einstellbar. Meist sind die Pins zu Bänken mit gleichem I/O Standard zusammengefasst. Innerhalb einer solchen Bank arbeiten alle Pins im gleichen I/O Standard und mit der selben I/O Spannung. Für hohe Taktraten wird sowohl für Daten als auch die Takte der LVDS IO-Standard verwendet. Hier sind zwei komplementäre Buffer in unmittelbarer Nachbarschaft angeordnet.&lt;br /&gt;
&lt;br /&gt;
==== Signalrichtung ====&lt;br /&gt;
Innerhalb eines FPGAs gibt es nur eine Datenrichtung, d.h. der Ausgang eines Elementes kann nur mit Eingängen verbunden werden, da die FPGA-typischen Optimierungen nur so sinnvoll anwendbar sind. Rückwärtspfade zwischen internen Modulen müssen daher parallel und ausdrücklich aufgebaut werden. Bei den Ports hingegen kann zwischen den Optionen Eingang, Ausgang und Hochohmig gewählt werden. Die dazu benötigten &lt;br /&gt;
[[Ausgangsstufen Logik-ICs | Tristatebuffer]] werden implizit über VHDL definiert, indem einem Ausgang zeitabhängig der Zustand &amp;quot;Z&amp;quot; zugewiesen wird. Alternativ kann er explizit als Element eingefügt werden. Bei komplexeren FPGAs sind die Ein- und Ausgänge mit Verzögerungsgliedern versehen, die ein Anpassen des Timings bei Bussen wie z.B. schnellen Speichern ermöglichen.&lt;br /&gt;
&lt;br /&gt;
==== Terminierung ====&lt;br /&gt;
Ebenso können je nach Hersteller und Typ interne Pull-Up und Pull-Down-Widerstände sowie Terminationswiderstände zugeschaltet werden, [[Wellenwiderstand | Terminierung]] wird ebenfalls unterstützt.&lt;br /&gt;
&lt;br /&gt;
==== Test und Inbetriebnahme ====&lt;br /&gt;
Einige Pins übernehmen besondere Funktionen und sind somit vom Anwender nicht uneingeschränkt oder z.T. auch gar nicht nutzbar. Dazu zählen neben der [[JTAG]]-Schnittstelle z.&amp;amp;nbsp;B. die Pins zum Einlesen der Konfigurationsdaten. Zudem befinden sich hinter vielen IO-Pads sog. [[Boundary_scan| Boundary Scan]] Zellen.&lt;br /&gt;
&lt;br /&gt;
==== Takteingänge ====&lt;br /&gt;
Einige wenige Pins (2 - 8) sind zum Einspeisen des Taktes für das Design vorgesehen. Für schnelle Schaltungen sollten diese reservierten Pins benutzt werden. Sie enthalten kein Eingangs-FF und wirken über instanziierbare Buffer direkt auf Taktnetze / PLLs. Bei leistungsfähigen großen Applikationen mit mehreren Takten müssen diese genutzt werden, da nur eine begrenzte Zahl von DCMs (Digital Clock Manager) zur Verfügung steht und benachbarte IO-Pins genutzt werden müssen. Für hohe Taktraten werden LVDS-Eingänge verwendet.&lt;br /&gt;
&lt;br /&gt;
==== Verwendung ====&lt;br /&gt;
Das I/O Verhalten wird zusammen mit vielen anderen Parametern in einer Datei festgelegt (Xilinx *.ucf, Altera *.acf, Lattice *.lpf). Alternativ können diese auch als Syntheseoption im Kommentarfeld des [[Verilog]]/[[VHDL]] Codes mit angegeben werden. Die Hersteller bieten FPGAs mit gleicher Anzahl von Logikelementen in unterschiedlichen Gehäusen an. So kann der FPGA mit der passenden Anzahl von Pins eingesetzt werden. Das obere Ende markieren Chips mit über 1500 I/Os, die kleinsten bieten ca. 50 User-I/O. Oft werden nur [[IC-Geh%C3%A4useformen#BGA|BGA]] und [[IC-Geh%C3%A4useformen#QFP|QFP]] Gehäuse (bis ca. 240 Pins) angeboten. Umgekehrt kann innerhalb einer Gehäusefamilie hochmigriert werden, d.h. bei gleichbleibendem Pinout, kann ein komplexerer FPGA eingesetzt werden. Das Layout muss dann nicht verändert werden, um eine Schaltung mit mehr Funktionen auszustatten.&lt;br /&gt;
&lt;br /&gt;
=== Besondere Funktionsblöcke ===&lt;br /&gt;
Neben den LUTs und den FlipFlops beinhalten FPGAs komplexe Routing- und Speicherkonfigurationsoptionen innerhalb und außerhalb der logischen Elemente, die es überhaupt erst gestatten, komplexe Schalt- und Rechenstrukturen aufzubauen. Aufgrund der gestiegenen Anforderungen geht man immer mehr dazu über, häufig benötigte Schaltungsteile fast in Hardware zu integrieren.&lt;br /&gt;
&lt;br /&gt;
==== DSP-Elemente ====&lt;br /&gt;
Für rechenintensive Designs, z.&amp;amp;nbsp;B. in der Signalverarbeitung, enthalten inzwischen praktisch alle FPGAs dedizierte &#039;&#039;&#039;Multiplizierer&#039;&#039;&#039; auf dem Chip, die in sehr kurzer Zeit, z.B. auch einem einzigen Taktzyklus, breite Multiplikationen durchführen können. Diese müssen daher nicht mehr in Logik aufgebaut werden. Aktuelle MUL-Elemente können z.B. 18x25 Bit in einem Schritt multiplizieren. Außerdem treten noch Carry-Chains, Akkumulatoren und Speicher-FFs hinzu, um direkt lokal schnelle Summierer und Zähler realisieren zu können.&lt;br /&gt;
&lt;br /&gt;
==== Block-RAMs ====&lt;br /&gt;
Ferner haben FPGAs oft einen von den LEs getrennt verfügbaren &#039;&#039;&#039;RAM&#039;&#039;&#039;-Bereich integriert, der sich in vielfältiger Weise ansprechen lässt. So können damit Single- oder Dualport-RAMs mit variabler Bitbreite erzeugt werden. Üblich sind mehrere (4 - 30) kleinere Dualport [[Speicher#BRAM | RAM-Blöcke]] von 4 - 16 kbit. Einige Familien besitzen einen größeren internen RAM, andere spezielle FIFO-Blöcke.&lt;br /&gt;
==== Taktgeneratoren ====&lt;br /&gt;
Zur Erzeugung der internen Takte sind &#039;&#039;&#039;PLL&#039;&#039;&#039;s (Phase Locked Loop) auf dem FPGA integriert. Einige Hersteller setzen eine Kombination aus statischen Taktmultiplizierer &#039;&#039;&#039;DLL&#039;&#039;&#039;s (Delay Locked Loop) ein. Mittels dieser Blöcke können aus einem Taktsignal weitere Takte abgeleitet werden. Typisch sind Taktverdopplung oder -vervielfachung. Ebenso kann der Takt bei gleicher Frequenz um eine einstellbare Phase verschoben erzeugt werden. Typische Anwendungen sind die Kompensation von Eingangsbufferverzögerungen, die Ansteuerung von [[Speicher#DDR-RAM | DDR-RAMs]] oder die Kompensation von Laufzeitunterschieden zwischen Takt und mit diesem getakteten Steuersignalen. Meist sind 2 - 8 Taktnetzwerke und PLL/DLLs gleicher Anzahl integriert. Siehe auch [[Taktung FPGA/CPLD]].&lt;br /&gt;
&lt;br /&gt;
=== CPU im FPGA ===&lt;br /&gt;
&lt;br /&gt;
Programmierbare Prozessoren sind auch in FPGA-Designs immer häufiger anzutreffen. CPUs sind zwar im Allgemeinen langsamer und weniger effizient, als eine vollständige Implementation aus Logik-Primitiven - aber bei komplexen Abläufen auch deutlich einfacher und zielführender zu programmieren, da die Strukturen festgelegt und damit bekannt sind. Insbesondere bei sequentiellen Aufgaben (Benutzerinterface, komplexe Steueraufgaben etc.) wird man gerne auf eine klassische CPU zurückgreifen. Die CPUs sind teilweise kompatibel zu etablierten Prozessorarchitekturen (MIPS, SPARC, AVR), zum Teil aber auch auf die FPGAs einzelner Hersteller hin optimiert.&lt;br /&gt;
&lt;br /&gt;
Als Programmspeicher werden die FPGA-internen [[Speicher#BRAM | RAM-Blöcke]] oder externe [[Speicher]] (SDRAM, SRAM) genutzt. Für einige Prozessorkerne stehen Hochsprachen wie C, C++ etc. zur Verfügung, andere werden in Assembler programmiert.&lt;br /&gt;
&lt;br /&gt;
==== Hardcores ====&lt;br /&gt;
Manche FPGAs haben dazu einen oder mehrere Prozessorkerne (z. B. [[AVR]] bei Atmels FPSLIC, PowerPC bei Xilinx&#039; Virtex bzw Dual ARM A9 bei Xilinx&#039; Zynq oder ARM Cortex-M3 bei Actel (Microsemi) SmartFusion ) als &#039;&#039;HardCores&#039;&#039; physikalisch auf dem Chip integriert, entweder als Chipstruktur auf dem FPGA-kern selbst oder als gebondeter Chip im selben Gehäuse.&lt;br /&gt;
&lt;br /&gt;
==== Softcores ====&lt;br /&gt;
Auf der anderen Seite gibt es auch [[FPGA Soft Core | SoftCores]] (z. B. ARM-Cortex-M1 bei IGLOO-FPGA von [http://www.actel.com ACTEL]), Prozessorkerne die als Quelltext oder als vorsynthetisierte Netzliste vorliegen. In Abhängigkeit von den zur Verfügung stehenden Ressourcen können diese &#039;&#039;SoftCores&#039;&#039; beliebig instanziiert werden. Es gibt eine Vielzahl verschiedener &#039;&#039;SoftCores&#039;&#039;. Einige sind sehr klein und platzsparend realisiert, damit kann man auch auf vergleichsweise kleinen aktuellen FPGAs problemlos eine 32bit-RISC-CPU integrieren.&lt;br /&gt;
&lt;br /&gt;
== Eigenschaften ==&lt;br /&gt;
&lt;br /&gt;
=== Chipausnutzung ===&lt;br /&gt;
Aufgrund des Umstandes, dass FPGAs eine Reihe von spezialisierten Funktionsblöcken, wie BRAMs, Multiplier und Transceiver beinhalten, die naturgemäß nicht in allen Designs genutzt werden können, bleibt ein Teil der Chipfläche des FPGAs immer ungenutzt. Auch die Beschränkung der routing-Resourcen führt aufgrund der Lage von IOs und spezialisierten Blöcken dazu, dass zur Erreichung der Wunschtaktfrequenz zusätzliche FlipFlops eingesetzt werden müssen, die dann nicht mehr zur Verfügung stehen. Schließlich sind die universellen routing-Resourcen selbst ein Erfordernis, welches Chipfläche kostet. Im Vergleich zu einem full custom asic gleicher Funktion benötigt ein FPGA daher erheblich mehr Chipfläche.&lt;br /&gt;
&lt;br /&gt;
=== Taktgeschwindigkeit ===&lt;br /&gt;
Die maximale „Geschwindigkeit“, eines FPGAs ist von der verwendeten Halbleitertechnologie (Prozess, Strukturgrößen), der internen Schaltungstopologie (Komplexität der LEs), dem Vorhandensein von harten Strukturen und vor allem vom Design abhängig. Dabei sind der sogenannte Datendurchsatz und die rein maximale Systemtaktfrequenz zu unterscheiden. Die erreichbare Taktfrequenz lässt sich ohne detaillierte Kenntnis des Designs nicht abschätzen; möglich sind je nach »Speed Grade« des ICs typischerweise Taktfrequenzen von 300-800 MHz für die Schaltgeschwindigkeit der reinen Logikelemente. Je nach der Anzahl und Komplexität der pro Takt durchzuführenden Operationen ergeben sich dann reale Systemtaktfrequenzen von meist 10-200 MHz für global operierende Einheiten und bis zu 400 MHz für schnelle lokale Module. Maßgeblich ist, in wieweit das Design auf Fläche bzw. Geschwindigkeit hin optimiert- und vom Tool synthetisiert wurde: Durch das Einbringen von zusätzlichen Registerstufen lassen sich z.&amp;amp;nbsp;B. zeitkritische Pfade (Pipelines) entschärfen, sodass die Frequenz des Chips angehoben werden kann und somit der effektive Datendurchsatz erhöht wird, mit dem Nachteil der gesteigerten Latenz durch das Mehr an Takten. Der Datendurchsatz insgesamt lässt sich wiederum durch die Nutzung paralleler Architekturen erhöhen.&lt;br /&gt;
&lt;br /&gt;
Die Systemfrequenz kann, muss aber nicht der Frequenz entsprechen, mit der Daten zyklisch eingetaktet und verarbeitet werden; zudem sind Schaltungsteile mit unterschiedlichen Taktfrequenzen zu unterscheiden: Mit einem Systemtakt von 20 MHz lassen sich z.&amp;amp;nbsp;B. 18-Bit AD-Wandler auslesen, die so z.&amp;amp;nbsp;B. alle 1 µs neue Daten liefern, die verarbeitet werden müssen. Bei der Nutzung von 5 solchen Wandlern, die sequentiell verarbeitet werden, lägen 5 MHz Datenfrequenz vor. Für andere Schaltungsteile, die z.&amp;amp;nbsp;B. asynchron an die Peripherie andocken, sowie reine »state machines« können Schaltungsteile auf der 2-4 fachen Frequenz betrieben werden.&lt;br /&gt;
&lt;br /&gt;
Generell sind Fläche und Geschwindigkeit konkurrierende Größen, zwischen denen ein Optimum gefunden werden muss. Für die preiswerten FPGA-Serien wie Spartan (Xilinx) und Cyclone (Altera) sind aufgrund technologischer Randbedingungen bei gleichem Design etwa 10-30% weniger Taktgeschwindigkeit zu erwarten, als bei den großen Brüdern der Virtex- (Xilinx) bzw. Stratix-Familie (Altera). Es muss mit mehr Verbrauch an Logikelementen und Taktzyklen gerechnet werden (weniger Routingreserven, geringere Zahl von LUT-Eingängen, langsamere Logikelemente). Dafür sind sie sehr preiswerter.&lt;br /&gt;
&lt;br /&gt;
Funktionstechnisch identische Chips werden oft in mehrere Geschwindigkeitsklassen (speed grades) angeboten, die sich meist durch Bauteilselektion bei der Produktion ergeben. Grob kann man ca. 5%-15% höhere Taktung zwischen zwei speed grades erwarten. Teilweise werden durch produktionstechnische Maßnahmen wie veränderte Dotierung auch gezielt schnellere, bzw stromsparende Typen generiert, entsprechend klassifiziert und  angeboten.&lt;br /&gt;
&lt;br /&gt;
== Herstellung ==&lt;br /&gt;
&lt;br /&gt;
FPGAs heutiger Bauart sind hochkomplexe Strukturen, da sie einerseits sehr hochgetaktet werden müssen, umfangreiche Funktionen bewerkstelligen sollen und damit genügend Resourcen haben müssen, andererseits aber preisgünstig und flexibel sein sollen, was umfangreiche Umschaltmöglichkeiten erfordert. Damit sind FPGAs als universelles Bauteil vergleichsweise teuer. Umso problematischer ist deren Fertigung:&lt;br /&gt;
&lt;br /&gt;
=== Herstellungsprozess ===&lt;br /&gt;
FPGAs werden letztlich als Analogschaltkreis unter Verwendung von sogenannten Standardbibliotheken entwickelt, indem fertige, mehrfach simulierte und getestete Blöcke zusammengeschaltet werden, die ihre Funktion mehrfach in Silizium bewiesen haben. Dies betrifft hauptsächlich die IO-Zellen, Schaltmatritzen und vor allem Controller, RAM-Blöcke und andere hard cores.&lt;br /&gt;
&lt;br /&gt;
Deren Funktion wird zunächst in einer Logiksimulation im Zusammenwirken geprüft und anschließend mit einer Analogsimulation ausgewählter Baugruppen untermauert. Besonders die kritischen Bauteile PLLs, IO-Treiber und Taktleitungen werden dabei untersucht. Fertige FPGA-Prototypen werden dann mit unterschiedlichen Stress-Schaltungen auf ihr Leistungsvermögen hin geprüft.&lt;br /&gt;
&lt;br /&gt;
Die auszuliefernden Exemplare für Kunden, werden mit dem boundary scan Verfahren getestet und mit einem Testdesign beladen.&lt;br /&gt;
&lt;br /&gt;
=== Prozessqualifizierung ===&lt;br /&gt;
Das Entwickeln, fertigen und Testen der FPGAs führt zu einer Regelschleife, die es gestattet, ständige Verbesserungen vorzunehmen. Für den Anwender ist bedeutsam, dass im Zuge der Informationsgewinnung bezüglich Taktraten und Strombedarf für alle FPGAs und Fertigungsprozesse kontinuierlich Modelle entwickelt werden, welche sukzessive in die Entwicklungswerkzeuge einfließen. Im Laufe des Lebenszyklus eines Chips werden diese Modelle immer präziser und gestatten ein engeres Timing und eine exaktere Voraussage hinsichtlich des Leistungsbedarfs. Zu Beginn ist es daher oft so, dass die Modellierung eher konservativ erfolgt, was dazu führt, dass neue Chips bei der Simulation der Taktgeschwindigkeiten zunächst ihre realen Reserven nicht ausschöpfen können. Oftmals sind daher FPGA-Designs, welche das Timing gerade nicht getroffen haben, dennoch voll leistungsfähig. Umgekehrt gibt es immer wieder einzelne Exemplare, die das eigentlich simulierte Taktziel in Tests verfehlen.&lt;br /&gt;
&lt;br /&gt;
=== Hersteller ===&lt;br /&gt;
&lt;br /&gt;
Die größten Hersteller von FPGAs sind [http://www.altera.com Altera] und [http://www.xilinx.com Xilinx]. Weitere Hersteller sind [http://www.latticesemi.com/ Lattice], [http://www.actel.com Actel] und [http://www.atmel.com Atmel].&lt;br /&gt;
&lt;br /&gt;
Einige  Hersteller wie Altera verfügen über keine eigene Fabrik (-&amp;gt; &amp;quot;fabless&amp;quot;), sondern lassen ihre entwickelten FPGAs und ASICs bei wechselnden Halbleiterherstellern fertigen. Dies führt zu jeweils günstigen Produktionskosten, allerdings auch zu Qualitätsschwankungen. Auch Liefergarantien sind schwerer zu erhalten, besonders, wenn man darauf angewiesen ist, dass ein Chip auch in 25 Jahren noch zu bekommen ist.&lt;br /&gt;
&lt;br /&gt;
== Anwendung und Programmierung ==&lt;br /&gt;
=== Erstellung der FPGA firmware===&lt;br /&gt;
&lt;br /&gt;
==== Design Flow ====&lt;br /&gt;
Die Erstellung des Programmier-Datenstroms für den FPGA, um die oft komplizierten Funktionen heutiger Applikationen zu erreichen, wird inzwischen ausschließlich durch automatische Routing- und Synthesewerkzeuge erledigt, welche mit einer funktionellen- bzw strukturellen Beschreibung der gewünschten Architektur in einer sogenannten Hardwarebeschreibungssprache wie z.B. [[VHDL]] oder [[Verilog]] &amp;quot;gefüttert&amp;quot; werden. Die Hardwarebeschreibung gelingt ihrerseits entweder ausdrücklich durch Texteditoren indem Logikstrukturen, hardwarenahe Strukturen, Ablaufdiagramme und Zustandsautomaten formuliert werden, oder mit Code-generierenden Werkzeugen. Mit deren Hilfe sind komplexe IO-Interfaces, mathematische Funktionen wie Regelalgorithmen und ganze Rechnerarchitakturen formulierbar.&lt;br /&gt;
&lt;br /&gt;
Während und nach der Erstellung der Schaltungsteile, wird die Korrektheit der Funktion einzelner Blöcke sowie der gesamten Schaltung mit Simulationswerkzeugen theoretisch geprüft und gfs im Rahmen der Qualitätsmanagementprozesse auch formell nachgewiesen und geeignet dokumentiert. Danach folgt eine Integration und ein praktischer Schaltungstest Generell unterscheidet man folgende formelle Schritte während des Entwicklungsprozesses:&lt;br /&gt;
&lt;br /&gt;
Validierung: Die gewünschte Funktion der Schaltung wird theoretisch geprüft. Dies betrifft im Wesentlichen die komplizierten Funktionsblöcke wie state machines, CPU-Firmware und Rechenpipelines / Algorithmen und Codierungen wie CRC und AES. Hierbei wird untersucht, ob die Funktion grundsätzlich richtig ist. Das Prüfen erfolgt meist theoretisch mit MATLAB, EXCEL oder einer Programm-analyse-Software. Ziel ist der Nachweis der Richtigkeit des Konzeptes.&lt;br /&gt;
&lt;br /&gt;
Verifikation: Hierbei wird die konkrete Art der Umsetzung geprüft. Dies betrifft alle Schaltungsteile die einer bestimmten Funktion zuzuordnen sind. Praktisch wird die gesamte Schaltung blockweise dahingehend simuliert, ob alle Funktionen berücksichtigt wurden und das Verhalten in allen erdenklichen Situationen stimmig ist. Dazu werden Testfälle generiert und in die Schaltung eingespeist. Hierbei wird auch auf das logische Timing infolge des synchronen Designs Rücksicht genommen. In einigen besonderen Fällen wird auch das platizerte Design, so wie es letztlich im FPGA realisiert ist, zurückgelesen und das timing näher unterucht, um bestimmte Nachweise in Grenzsituationen zu führen.&lt;br /&gt;
&lt;br /&gt;
Test: Das fertig programmierte FPGA wird real in der Hardware getestet. Dazu können Testszenarien und -mittel aus der Validierungs- und Verfikationssphase herangezogen werden und/oder ein Testplan abgearbeitet werden. Hierbei ist in aller Regel umgebende Peripherie beteiligt, weil der FPGA alleine schlecht testbar ist. Bei diesem Schritt kommt dann auch die Elektronik mit ins Spiel, d.h. das Verhalten des Ladevorgangs, Probleme mit Spannungsstabilität, Pegeln, Leitungen etc. Da so ein konkretes Exemplar des Chips zur Anwendung kommt, wird ein solcher Test meist mit mehreren Baugruppen durchgeführt. In aller Regel sind Normabweichungen hier aber nicht durch den FPGA- sondern durch das Layout des PCB bestimmt. Diese Tests offenbaren demgemäß, dass ein und dasselbe Programmierfile in einem FPGA-System funktinoniert und aufgrund geringer Unterschiede der Elektronik in einem anderen gfs nicht.&lt;br /&gt;
&lt;br /&gt;
==== Wiederverwendbarkeit ====&lt;br /&gt;
Durch die Standardisierung der Architektur einerseits und die Entkopplung von applikationsorientierter Beschreibung sowie Chip- und Hersteller-spezifischer Synthese andererseits, wird die Hardware quasi als Software gebaut. Dies wiederum schafft alle Optionen der Wiederverwendung und Austausch von &amp;quot;Hardwareteilen&amp;quot;. So stehen inzwischen komplett nutzbare Schaltungen wie serielle Bausteine, RAM-Controller und vieles mehr zur Verfügung - teilweise sogar in Form von Open Source Projekten.&lt;br /&gt;
&lt;br /&gt;
Andererseits ist eine Tendenz erkennbar, dass Hersteller ihre Software und die damit erstellbare VHDL, speziell bei IP-Cores, immer stärker schützen und abkapseln. Diese produzieren kaum noch allgemeine VHDL, sondern nur noch herstellerspezifische Scripte. Zudem führen immer grösser werdende Unterschiede in den Chipstrukturen und Resourcen in modernen FPGAs dazu, dass die Portierbarkeit weiter eingeschränkt wird. Dies ist besonders bezüglich der Integration von Peripherie-Controllern oder ganzer Mikrocontroller der Fall. Bei SOPC-Systemen sind die generierten Strukturen praktisch überhaupt nicht mehr von einem FPGA-Hersteller zum anderen zu portieren und oftmals nicht einmal mehr zwischen FPGA-Familien desselben Herstellers kompatibel.&lt;br /&gt;
&lt;br /&gt;
=== Anbindung an Mikrocontroller ===&lt;br /&gt;
Es gibt unterschiedliche Arten, wie ein FPGA mit einem Controller verbunden sein kann. In der Regel ist der Controller der Master und arbeitet auf den FPGA. Dabei ist zwischen direkten impulsiven Zugriffen auf den FPGA nach Massgabe des internen Ablaufs im Prozessor, die jederzeit und wortweise an irgendeine Adresse erfolgen können und blockweisem Schreiben, also permanentem Datenfluss ohne Adressierung zu unterscheiden.&lt;br /&gt;
&lt;br /&gt;
Das wortweise Schreiben und Lesen erfolgt in Form eines klassischen Speicherinterfaces durch aktiven Zugriff auf den FPGA oder den FPGA hindurch auf einen RAM-Bereich, in den der FPGA seinen Speicher einblendet.&lt;br /&gt;
&lt;br /&gt;
==== Memory Mapped ====&lt;br /&gt;
Hierunter versteht man den Zugriff des Mikrocontrollers auf das FPGA in Form eines Speichers. Dabei muss der FPGA ein klassisches Speicherinterface zur Verfügung stellen. In einzelnen Fällen reicht es auch, wenn dieser ein internes Blockram im dual ported Modus an die Ports des Mikrocontrollers heranführt.&lt;br /&gt;
&lt;br /&gt;
==== Streaming IO ====&lt;br /&gt;
Liefert ein Mikrocontroller häufig grosse Datenmengen an einen FPGA, ist es mitunter sinnvoll auf einen aktiven Zugriff mit Wortadressierung zu verzichten und einen pipeline-Zugriff zu implementieren. Der FPGA &amp;quot;hört&amp;quot; dazu den Datenbus des Mikrocontroller ab und erkennt anhand z.B. der Aktivierung nur einer Schreibleitung den Beginn des Sendens und empfängt dann mit jedem Takt ein Wort. Was die Daten zu bedeuten haben und wohin sie zu schreiben sind, muss dann in den Daten codiert werden. Auch ist es denkbar den FPGA so zu konfigurieren, dass beim Schreiben auf eine ganz bestimmte Adresse ein grösserer Datenblock übergeben wird. &lt;br /&gt;
&lt;br /&gt;
In beiden Fällen wird im FPGA ein FIFO eingesetzt, der synchron mit dem Mikroprozessortakt beschrieben wird. Auf der Seite des FPGAs muss eine FSM überwachen, ob Daten ankommen und diese geeignet verarbeiten.&lt;br /&gt;
&lt;br /&gt;
==== Indirekte Busverbindung ====&lt;br /&gt;
Oftmals sind FPGAs und MCUs in grösseren Systemen über Busse verschaltet. So kann der FPGA an einem klassischen Daten-Adress-Bus parallel zu einem RAM und anderen Bausteinen über Adressdekodierung und Chip-Select betrieben werden, oder er wird über ein logisches Interface wie SPI angebunden.&lt;br /&gt;
&lt;br /&gt;
=== Anbindung an RAMs und ROMs ===&lt;br /&gt;
&lt;br /&gt;
==== DDR2 / DDR3 - RAM ====&lt;br /&gt;
Während die Ansteuerung eines normalen SRAMS mittels eines klassischen memory mapped interface recht einfach ist, bedürfen DRAMS- speziell mit DDR-Funktion einer aufwändigeren Schaltung, welche die komplizierte Kommandostruktur der DDR-Ansteuerung versteht, pipelining und gfs caching praktiziert und das RAM entsprechend bedient. Dabei sind RAM-spezifische Randbedingungen (refresh / self refresh) zu beachten. Für FPGAs existieren hier eine Reihe von konfigurierbaren IP-Cores. &lt;br /&gt;
&lt;br /&gt;
In jüngster Zeit beobachtet man hier einen Umstieg auf prozessorähnliche Funktionen und Stukturen, d.h. die RAMs werden nicht mehr nativ sondern über eine Prozessorinterface angesteuert. Die Firma Xilinx z.B. bietet keine nativen Mehrportlösungen mehr an. DDR-Controller mit den in FPGAs meistens benötigten Multiportfunktionen, also Zugriffen durch mehrere Module, sind damit praktisch nur noch über AXI-Interface zu realisieren.&lt;br /&gt;
&lt;br /&gt;
==== SPI-Flash ====&lt;br /&gt;
Die Anbindung über SPI erfolgt meist über serielle Verbindungen wie I2C, da nur wenig Bandbreite benötigt wird. In selteneren Fällen werden FPGAs parallel mit einem Flash verbunden, z.B. bei grossen FPGAs mit umfangreichem image, welches aus einem Flash schnell geladen werden soll.&lt;br /&gt;
&lt;br /&gt;
=== Anbindung an Peripherie ===&lt;br /&gt;
Typische Anwendungen für FPGAs sind die breitbandige (grosse Busbreite und/oder hohe Taktfrequenz) Gewinnung und Verarbeitung von Daten, bei denen DSPs oder MCUs nicht mehr (effektiv) eingesetzt werden können. Typische Beispiele dafür sind:&lt;br /&gt;
&lt;br /&gt;
==== Videotechnik ====&lt;br /&gt;
[[Bildsensor]]en produzieren traditionell die grössten Datenmengen je Zeiteinheit und sind ohne FPGAs praktisch nicht mit der Aussenwelt in Kontakt zu bringen. FPGAs arbeiten hier entweder auf der Kunden- oder auch der Herstellerseite, um die komplexen Datenströme anzunehmen, vorzuverarbeiten und in eine reduziertes, praktikableres Datenformat umzusetzen. Auch die Annahme eines Videoformates ist praktisch nur mit FPGAs möglich.&lt;br /&gt;
&lt;br /&gt;
Die benötigten Datenschnittstellen können mit Hilfe von Transceiver-Ports / LVDS manuell realisiert werden, oder es werden Umsetzer-Chips verwendet. Beispiele:&lt;br /&gt;
&lt;br /&gt;
* HDMI-Transceiver für FPGAs ohne Gigabit-Transceiver&lt;br /&gt;
* SERDES-Transceiver für mittelpreise FPGAs ohne SERDES / sehr hohe Frequenzen&lt;br /&gt;
* Camera-Link-Deserializer (für langsame FPGAs)&lt;br /&gt;
* LVDS-Buffer-Deserializer (für langsame FPGAs ohne LVDS buffer)&lt;br /&gt;
* DVI-Buffer&lt;br /&gt;
&lt;br /&gt;
Für Analoge Daten benötigt man selbstredend noch Video-ADCs / Video-DACs, die überhaupt erst ein digitales Signal erzeugen.&lt;br /&gt;
&lt;br /&gt;
==== Gigabit-Ethernet ====&lt;br /&gt;
Für die Umsetzung auf den (praktisch analogen) [[Ethernet]]-Standard braucht es immer einen sogenannten [[Glossar#p|PHY]], also einen physikalischen Zusatzchip. Dieser vollzieht die [[Glossar#p|5PAM]]-Modulation und die Codierung im 10/8-Format. Die Ankopplung an den FPGA erfolgt direkt.&lt;br /&gt;
&lt;br /&gt;
Während althergebrachte 100MBit-Verbindungen dabei oft noch mit UCs und softcores zu bedienen waren, können 1GBit-Netzwerke nur noch mit FPGAs sinnvoll angesteuert werden. Umgekehrt ist das Gigabit-Netzwerk eine gute Lösung, um Daten effektiv und billig in einen PC zu transportieren, da moderne PCs alle eine GBit-Karte besitzen und die Datenrate bei schnellen CPUs auch weitgehend ausgenutzt werden kann. Typische Bandbreiten bewegen sich für Linux mit unmodifizierten Treibern bei 700MBit-800MBit.&lt;br /&gt;
&lt;br /&gt;
Der [[Glossar#m|MAC]], bzw MAC-ähnliche Funktionen, sind im FPGA direkt implementierbar (z.B. mit IP-Cores) und können mit einfachen [[Glossar#f|FSM]]s angesteuert werden. Für die Verwendung von C-Software ist es notwendig, einen hardcore zu verwenden, da mit softcores die Bandbreite kaum erreicht werden kann. Besonders das Verpacken der Daten, die Abarbeitung des Protokolls sowie die Bildung der Ethernet-header mit Checksummen, CRC und zusätzlichen Prüf- und Steuerinformationen sind in VHDL sehr einfach und entspannt zu erzeugen, weil parallel gearbeitet werden kann.&lt;br /&gt;
&lt;br /&gt;
Die Bandbreite einer typischen [[Glossar#g|GMII]]-Verbindung mit [[Glossar#d|DDR]] beträgt 2x150MHz x 8 Bit, was mit mittleren FPGAs gut zu machen ist. Die interne Bandbreite ohne header beträgt dann typisch etwa 800MBit, z.B. 50MHz x 16 Bit für die Daten. Ab diesem Punkt ist dann wieder ein schneller softcore einsetzbar.&lt;br /&gt;
&lt;br /&gt;
==== High-Speed-USB ====&lt;br /&gt;
Für die Übersetzung auf den immer schnelleren USB-Bus (inzwischen bis 5Gb Bandbreite!) stehen Chips zur Verfügung, die sich in vergleichsweise einfacher Weise ansteuern lassen. Eine passende Sende- und Empfangsarchtiktur ist in FPGAs relativ rasch zu implementieren.&lt;br /&gt;
&lt;br /&gt;
=== Implementierung von Steuerfunktionen ===&lt;br /&gt;
In den meisten FPGA-Applikationen sind mehr oder weniger komplizierte Abläufe zu integrieren, die den Datenfluss steuern und die einzelnen Komponenten so mit einenander verschalten, dass sie wunschgemäss aufeinander reagieren.&lt;br /&gt;
&lt;br /&gt;
Mit nativem VHDL sind einfache sequenzielle Abläufe mit überschaubaren Verschachtelungstiefen und Schleifen direkt in Form von Zählersteuerungen oder abstrakten State Machines realisierbar. Dazu kann auf die automatische Codegeneration aus state machine designern heraus oder die halbautomatische Erzeugung von Code mit z.B. Excel zurückgreifen, die die Enumeration von states, die Abfragen und die Sprünge zu den nächsten states automatisch vollzieht. Dies hat aber seine Grenzen, weil dies früher oder später unübersichtlich wird und nicht mehr so gut pflegbar ist. Zudem kann sich der Code stark aufblähen und die Zusammenfassung etwaiger Redundanz durch die Synthese zu hohen Synthesezeiten führen.&lt;br /&gt;
&lt;br /&gt;
Applikationen, die nicht ganz so zeitkritisch sind, sollten lieber mit einer flexiblen, verschachtelten Struktur von 2 state machines abgearbeitet werden, bei denen der Ablauf von der Generation des Timings für die Hardware getrennt ist. In reinen Ablaufsteuerung stehen dann wie in einem Befehlsspeicher abstrakte Codes hintereinander und werden mittels einer intelligenten Struktur sequenziell abgearbeitet werden. Diese agiert wie ein Befehlsinterpreter und  stösst eine untergeordnete state machine an. Damit wird zwar mehr Zeit für die Verwaltung benötigt, es führt aber letztlich zu quantitav weniger Steuer-Code. Die Befehlsfolgen lassen sich z.B. günstig in einem ROM realisieren. Die gesamte Steuerung wird intelligenter und insgesamt kleiner.&lt;br /&gt;
&lt;br /&gt;
Eine deartige Steuerlogik lässt sich soweit ausbauen, dass untergeordnete state machines wie Unterprogramme ablaufen und durch ein flexibles Hauptprogramm gesteuert werden, womit sie sich immer mehr einer Prozessorarchitektur annähert.&lt;br /&gt;
&lt;br /&gt;
Wenn die Komplexität viele &amp;quot;Befehle&amp;quot; erfordert, gfs noch gerechnet und viel entschieden werden muss, lohnt der Rückgriff auf einen vorgefertigen Softcore. Dies hat den Vorteil, dass eine Standardstruktur verwendet wird, für die es erweiterte Entwicklungs- und Debugging-Software gibt. Spätestens, wenn man mit virtuellen Datenstrukturen und rekursiven Funktionen arbeitet, oder z.B. Zeichenkettenverarbeitung braucht, ist ein Softcore unerlässlich, &lt;br /&gt;
weil dann alle Methoden-, Variablen und sonstige Aspekte der jeweiligen Hochsprache verwendet werden können.&lt;br /&gt;
&lt;br /&gt;
=== Beispiele von VHDL Code ===&lt;br /&gt;
Siehe [[VHDL_Softwarepool]]&lt;br /&gt;
&lt;br /&gt;
== Einsatz in elektronischen Schaltungen ==&lt;br /&gt;
Der Einsatz von modernen FPGAs erfordert neben dem grundsätzlichen Wissen im Bezug auf den design flow und den für FPGAs optimierten Schaltungs- und Rechenstrukturen auch grosses Knowhow im Bereich der analogen Schaltungstechnik sowie auch der effektiven Vorgehensweise beim Design. &lt;br /&gt;
&lt;br /&gt;
=== FPGA aus analoger Sicht ===&lt;br /&gt;
FPGAs bedürfen heute eines perfekten Layouts, um mit RAMs und externen Chips zusammenarbeiten zu können, da sowohl die internen, als auch externen Taktfrequenzen rapide angestiegen sind. Ferner ist grosses Augenmerk auf die Spannungsversorgungen zu legen.&lt;br /&gt;
&lt;br /&gt;
=== Integration ins PCB ===&lt;br /&gt;
Weiter ist es heute kaum noch möglich, FPGA-Design vom board-Design funktionell zu trennen, wie man es mit Blick auf den scheinbar rein logischen Schaltungsentwurf glauben könnte und früher auch der Fall war. Da FPGAs heute stark dedizierte Funktionen enthalten, die nicht in jeder IO-Zelle zur Verfügung stehen oder spezielle Bank-Konfigurationen erforden, muss der Schaltungsentwurf und das Layouten des FPGAs und des Boards einhergehen.&lt;br /&gt;
&lt;br /&gt;
=== Entwicklungsboards und Starter-Kits ===&lt;br /&gt;
Von mehreren Seiten gibt es im Markt eine ganze Palette von sogenannten Entwicklungs- und Evaluierungsboards. Diese eignen sich nicht nur zum Kennenlernen des Chips, bez. zur Validierung der Lösung (ob die Schaltung wie gebaut auch im konkreten Ziel-FPGAs arbeitet) sondern werden immer öfter auch in bestehenden Systemen verbaut, weil aufgrund einer geringen Stückzahl die Selbstentwicklung nicht lohnt.&lt;br /&gt;
&lt;br /&gt;
Siehe [[Liste von FPGA Eval boards]]&lt;br /&gt;
&lt;br /&gt;
=== FPGA als Ersatz von alten digitalen ICs und Prozessoren ===&lt;br /&gt;
Es gibt vielfach den Wunsch, ICs, die nicht mehr direkt zu beschaffen sind, durch FPGAs (oder wenn möglich CPLDs) zu ersetzen. Gerade ältere Schaltungen&lt;br /&gt;
basieren aber durchaus noch auf 5V TTL und CMOS Logik. Oft sind die Systeme nicht ohne sehr hohen Aufwand und Verlust der Wirtschaftlichkeit zu ersetzen (wie ältere, produktive Industrieanalagen oder komplexe Rechensysteme - aber auch wenn es um die Erhaltung alter Hardware bei &amp;quot;retro-computing&amp;quot; geht).&lt;br /&gt;
&lt;br /&gt;
Nun bieten heute erhältliche (und günstige) FPGAs - aufgrund ihrer verwendeten Technologie - keine direkte 5V Kompatibilität mehr. FPGAs wie die Spartan II (nicht IIe), erlauben zumindest noch &amp;quot;5V Toleranz&amp;quot; auf den I/O-Pins. Das heißt: das FPGA wird zwar mit 3.3V versorgt und kann daher nur 3.3V am Ausgang treiben, erlaubt aber 5V von externen Bausteinen am Pin - dies ist nach wie vor TTL kompatibel, aber auch viele CMOS-Schaltungen können so durchaus noch betrieben werden.&lt;br /&gt;
&lt;br /&gt;
Für neueste 3.3V (oder weniger) FPGAs kann man Levelshifter-Schaltungen verwenden, die entweder bidirektional ausgeführt sind und ein &amp;quot;open-drain-artiges&amp;quot; Verhalten zeigen (also beide Seiten können die Leitung nur auf Lowpegel treiben, der Highpegel wird durch pull-up Widerstände erreicht) oder die unidirektional (mit optionaler Richtungsumkehr und/oder Treiberdeaktivierung über Kontrolleingänge) gebaut sind. Verwendung von Spannungsteilern, Zenerdioden-Schaltungen oder Ausnutzung von Diodenlimitierungen der I/O Treiber des FPGAs (und Verwendung eines Serienwiderstands zur Stromlimitierung) sind zumeist nur für niedrige Schaltfrequenzen gut geeignet und sorgen für eine erhöhte Stromaufnahme.&lt;br /&gt;
&lt;br /&gt;
Siehe auch: [[Pegelwandler]]&lt;br /&gt;
&lt;br /&gt;
== Debugging-Hilfen ==&lt;br /&gt;
=== Soft-Debugging ===&lt;br /&gt;
&lt;br /&gt;
=== Logikanalysatoren ===&lt;br /&gt;
Gerade beim [[Debugging]] größerer FPGA-Designs ist es oft notwendig, auf interne Signale und Busse zuzugreifen, die aus routing- oder Platzgründen nicht an Pins des FPGAs gelegt - und mit konventionellen Analysatoren beobachtet werden können. Nebst den einschlägigen Tools der Hersteller, welche Signal probing über JTAG gestatten (z.&amp;amp;nbsp;B. ChipsScope und SignalTap), werden in FPGAs oft mehr oder weniger komplexe [[Logic Analyzer]] integriert, welche die internen Signale in vielfältiger Weise aufzeichnen. Diese werden in Block-RAMs oder FIFOs gespeichert und durch externe Master ausgelesen. Hier kommen auf der Platine befindliche MCUs oder fremd zugreifende FPGAs / CPUs in Betracht, welche über unterschiedliche Kommunikationsverbindungen (seriell, parallel, LVDS) angeschlossen sind. Dazu werden in die FPGAs entsprechende Cores und state machines instanziiert und mit Software auf PC-Seite ausgelesen.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend einige Beispiele:&lt;br /&gt;
&lt;br /&gt;
==== Automatisch instanziierte Logic Analyzer ====&lt;br /&gt;
Praktisch alle FPGA-Hersteller bieten die Möglichkeit, mit einem internen Tool ein script zu erzeugen, welches der Synthese übergeben wird, welche dann anhand von Signallisten und diversen Randbedingungen einen LA automatisiert aufbaut und verdrahtet. SampleZeit und -Takt sind dabei genauso einstellbar, wie RAM-Tiefe und -Breite. Die so generierten Datenpakete können dann mittels JTAG ausgelesen werden. Im Continous-Betrieb können so sogar permanente Datenausgaben wie bei einem Oszilloskop vorgenommen werden.&lt;br /&gt;
&lt;br /&gt;
==== Proprietärer serieller Logic Analyzer ====&lt;br /&gt;
&lt;br /&gt;
Die einfachste Möglichkeit ist die direkte Instanziierung eines Blockrams als FIFO mit &amp;quot;breitem&amp;quot; Busanschluss: Linksseitig besitzt das FIFO eine Breite von z.&amp;amp;nbsp;B. 256 Bit (Xilinx-Rams lassen sich ohne weitere Umbeschaltung über den Wizzard mit bis zu 1024 Bits deklarieren und nutzen). Rechtsseitig einen 16- oder 32 Bit breiten Busanschluss für einen Prozessor bzw Parallelinterface oder einen 1 Bit breiten Anschluss für ein serielles streaming interface. Mit einem FiFo-enable können die zu sampelnden Zeiten (Busphasen) festgelegt werden, z.&amp;amp;nbsp;B. anhand eines Kriteriums wie die Erfüllung einer bestimmten mathematischen Bedingung, die man in VHDL formuliert, oder es wird einfach ein Trigger gesetzt. Solange das FiFo nicht voll ist, kann geschrieben werden, was durch die interne FiFo-Verwaltung selbst bereits komplett geregelt wird.&lt;br /&gt;
&lt;br /&gt;
Beim einfachen seriellen Logic Analyzer benötigt man nur noch einen kleinen Core, der permanent das FiFo liest, und den seriellen Overhead (Startbit, Stoppbit, Parity und gfs CRC) hinzufügt. Mit einem einfach Pegelwandler kann so ein PC direkt angeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
Auch denkbar ist die Anbindung an ein fremdes FPGA-board mit viel Speicher über (LV-)DS-Kommunikation. In komplexeren Systemen wird ein CAN- oder USB-Core eingesetzt.&lt;br /&gt;
&lt;br /&gt;
Wenn mittels des Kriteriums nur ganz bestimmte kritische Phasen herausgesampelt werden (z.&amp;amp;nbsp;B. das Auftauchen eines bestimmten Rechenfehlers im FPGA) und so das Datenaufkommen je Zeiteinheit über längere Zeit betrachtet eher gering ist, kann bei geeignetem Datendurchsatz in Echtzeit dauerhaft mitprotokolliert werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== BusProbe ====&lt;br /&gt;
Mit der BusProbe, dem Debugging Core von abaxor engineering, kann der Entwickler den Signalfluss im FPGA-Design auch über einen längeren Zeitraum überwachen und am PC aufzeichnen. Der Core verarbeitet an jedem Eingang einen kompletten Bus. &lt;br /&gt;
&lt;br /&gt;
Die Daten werden gemultiplext zum PC geschickt und dort per Software demultiplext. Im PC erfolgt auch die Auswertung mit beliebigen Analyse-Tools.&lt;br /&gt;
&lt;br /&gt;
Gegenüber dem Betriebssystem verhält sich die BusProbe wie eine Festplatte, von der die Daten mit gewöhnlichen Zugriffen gelesen werden können.&lt;br /&gt;
&lt;br /&gt;
* Streaming der Daten zum PC mit mehr als 20 MByte/s&lt;br /&gt;
* keine Treiber im PC da Nutzung von Standardschnittstellen (USB oder IDE)&lt;br /&gt;
* Hot-Plugging&lt;br /&gt;
* Visualisierung mit beliebigen Programmen&lt;br /&gt;
* geringer Logikaufwand&lt;br /&gt;
&lt;br /&gt;
==== open source Logikanalysator ====&lt;br /&gt;
===== sump.org =====&lt;br /&gt;
Ein einfacher, übersichtlicher Logikanalysator findet sich auf sump.org. Er liegt im Quelltext vor wird mit ins Design einsynthetisiert. Als Speicher dient wahlweise SRAM oder internes RAM. Es können 32 Kanäle mit 100 MHz (oder weniger) gesampelt werden. Die Bediensoftware läuft platformunabhängig unter Java und benötigt eine serielle Schnittstelle (auch über USB-seriell Wandler) zum Core.&lt;br /&gt;
&lt;br /&gt;
[http://de.sump.org/projects/analyzer/ sump.org-Webseite]&lt;br /&gt;
&lt;br /&gt;
===== Weitere =====&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/articles/Logic_Analyzer&lt;br /&gt;
&lt;br /&gt;
== FPGA-Design aus Projektsicht ==&lt;br /&gt;
Vielfach wird die Auffassung vertreten, die FPGA-Entwicklung gehöre allein zur Hardwareentwicklung, da es sich um ein elektronisches Bauteil handle, welches lediglich konfiguriert werde. Man spricht bei der FPGA-Entwicklung oft auch ausdrücklich nicht vom &amp;quot;Programmieren&amp;quot; sondern &amp;quot;Beschreiben&amp;quot; der Hardware. Beides ist aus folgenden Gründen unrichtig:&lt;br /&gt;
&lt;br /&gt;
* Die Vorgehensweise, die Struktur einer Schaltung durch virtuelle Konstrukte wie Logikgatter, Multiplexer und Schalter zu definieren, die in der Praxis so gar nicht exisiteren, sondern später in Form von LUTs realisiert wird, ist zwar formell eine Beschreibung einer Struktur, jedoch ist es eine sehr abstrahierte Form, da äquivalente Funktionen definiert werden. Die Sollhardware wird demnach in weicher Form beschrieben.&lt;br /&gt;
&lt;br /&gt;
* Der output des Designers besteht aus Grafiken, Skripten, Anweisungen, Einstellungen der Synthesesoftware und Strukturvorgaben, die nicht selbst Hardware sind, sondern Anweisungen an eine Erzeugersoftware und stellen damit ein Programm (lat. &amp;quot;Vorschrift&amp;quot;) dar.&lt;br /&gt;
&lt;br /&gt;
* Neben den allein schon durch die Nutzung bestimmter Funktionen wie RAMs, MCBs und Soft-Cores implizit vorgegebenen Abläufen im FPGA, werden fast immer auch noch weitere, explizite Handlungsabläufe mit Reaktionen auf äussere Einflüsse implementiert, die als klassische Software aufzufassen sind.&lt;br /&gt;
&lt;br /&gt;
* Der erzeugte Code der Erzeugersoftware wiederum ist selbst ein Programm und wird zusammen wie die Quellinformation des Designers archiviert, versioniert und wie übliche Software gehandhabt.&lt;br /&gt;
&lt;br /&gt;
Damit erfüllt die FPGA-Entwicklung formell mehrere Bedingungen, die als Softwareentwicklung aufgefasst und eingruppiert zu werden. Andererseits ergeben sich durch die weiter oben erwähnten, sehr ausgeprägten Themen im Bereich der Elektronik (z.B. der Nachrichten- und HF-Technik) sowie der Physik eine Vielzahl von harten Anforderungen, der klassischen Hardwareentwicklung.&lt;br /&gt;
&lt;br /&gt;
Zusammengefasst kann man daher 2 grundlegende Aspekte des FPGA-Designs konstatieren, die je nach Anwendungsfall als mehr oder weniger unabhängig von einander gesehen werden können.&lt;br /&gt;
&lt;br /&gt;
=== Logikdesign ===&lt;br /&gt;
Das funktionslogische Design besteht aus dem Entwurf des Systems, der benötigten Abläufe und der zu realisierenden Protokolle und Berechnungsverfahren. Hierbei sind Kenntnisse im Systementwurf, gfs. von SOPC-Systemen, der üblichen Bussysteme und der Software generell nötig. Hinzu treten Kenntnisse in der elementaren und/oder der komplexen abstrakten Mathematik und der Signalverarbeitung sowie der theoretischen Nachrichtentechnik. Ferner sind Methoden des Script- und Softwareentwurfes, sowie Handhabung von Software nötig.&lt;br /&gt;
&lt;br /&gt;
Dies alles stellt den Anteil dar, der klassischerweise als Softwareentwicklung aufgefasst wird. Es ist die Schnittstelle zur Funktionsschicht, also der grundsätzlichen Funktion eines Gerätes.&lt;br /&gt;
&lt;br /&gt;
=== Schaltungsdesign ===&lt;br /&gt;
Das praktische, hardwaretechnische Anteil des Designens erstreckt sich zudem über die physikalischen Themen der Temperatur- und Betriebsstabilität, der Strahlungs- und Störsicherheit, der Produzier- und Herstellbarkeit, des Wirkens und der Fehleranfälligkeit interner Schaltungsstrukturen, der Art und Weise der Ressourcennutzung bei unterschiedlichen Realisationsformen - besonders, wenn es auch Kostenoptimierung ankommt, des Analogverhalten der IOs und internen Strukturen im Bezug auf Frequenz und Pegel, der Signalintegrität der FPGAs und der Leiterbahnen sowie alle Anfordernisse im Umfeld der anzubindenen Chips.&lt;br /&gt;
&lt;br /&gt;
Dies ist der Anteil der gerne als Hardwareentwicklung eingestuft wird. Er stellt die Schnittstelle zur Physik und der Fertigung dar.&lt;br /&gt;
&lt;br /&gt;
=== Fazit ===&lt;br /&gt;
Die Verwendung von FPGAs ist heute komplexer denn je und erfordert in aller Regel starke Kenntnisse in beiden Feldern. FPGA-Entwicklung kann praktisch wie die Einbindung eines komplexen Evaluierungsboards oder einer programierbaren Steuerplatine mit festgelegten Funktionen aufgefasst werden.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Hardwarebeschreibungssprachen]]&lt;br /&gt;
* [[Reset für FPGA/CPLD]]&lt;br /&gt;
* [[Taktung FPGA/CPLD]]&lt;br /&gt;
* Projekt [[Audio-DSP mit Spartan 3-FPGA]]&lt;br /&gt;
* Projekt [[FPGA Lab]]&lt;br /&gt;
&lt;br /&gt;
== Forumlinks ==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/274159 Tonleiter im PLD] - Beispiel einer einfachen Musikapplikation&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/326462?goto=3564346#3564346 Kopierschutz] für FPGAs und programmierbare ICs&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/392278 Verfikationsumgebung] Verfikation beim FPGA-Design&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/381136 FPGA-Standards] bezüglich Codierung&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/382356#4357686 Inferred True Dual Port RAM für Xilinx und Altera]&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/252255#2595360 Dual Port Block RAM - Gleichzeitiges lesen und schreiben]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.fpga4fun.com/index.html FPGA4Fun] - FPGA-Projekte, größtenteils mit Altera und Verilog&lt;br /&gt;
* [http://marcowuen.wordpress.com/2014/09/08/overview-cheap-fpga-development-boards/ Übersicht Development Boards] - Zusammenstellung günstiger FPGA Boards unter 100$&lt;br /&gt;
* [http://video.google.com/videoplay?docid=-4969729965240981475 Ein Vortrag, auf Englisch: General Purpose, Low Power Supercomputing Using Reconfiguration Logic]&lt;br /&gt;
* http://www.opencores.org - FPGA-Projekte, Opensource, jeder kann seine Eigenen einstellen und an anderen mitarbeiten. U.a. gibt es verschiedene CPUs für FPGAs.&lt;br /&gt;
* [http://pin4.at/pro_misc.php#fdil Projekt &amp;quot;FDIL v2&amp;quot;]: 5V DIL-Ersatz mit 100kGates Spartan II FPGA (Englisch)&lt;br /&gt;
* [http://members.optushome.com.au/jekent/FPGA.htm John&#039;s FPGA Page]&lt;br /&gt;
* [http://www.embedded.com/columns/whatsnew/197003073 More about designing with embedded FPGAs] by Bernard Cole, Embedded.com&lt;br /&gt;
* [http://chaosradio.ccc.de/cre117.html Chaosradio Express - FPGA]&lt;br /&gt;
* [http://www.pin4.at/pro_custom.php Custom IC replacements] - DIL / TTL-Replacements mit FPGA (Englisch)&lt;br /&gt;
&lt;br /&gt;
[[Category:FPGA und Co|Grundlagen|Bauteile]]&lt;/div&gt;</summary>
		<author><name>87.178.104.168</name></author>
	</entry>
</feed>