|
|
Reset für FPGA/CPLDWie viele digitale Schaltungen mit FFs benötigt auch ein FPGA-Design oft einen definierten Anfangszustand, in den es per Reset zurückgesetzt werden soll. Je nach Art, Verteilung und Auslöser kann beim Reset unterschieden werden zwischen:
[Bearbeiten] Implementierung von FlipFlops/Registern mit verschiedenen Resetmöglichkeiten[Bearbeiten] Kein ResetNach dem Laden befindet sich der FPGA immer in einem definierten Zustand, alle Speicherelemente (FF, Schiebeketten, RAM) sind fest geladen. Es bedarf also keiner zusätzlichen Resetschaltung. Die Resetwerte bei Xilinx (VHDL, XST) werden durch den Initwert bei der Signal-Deklaration festgelegt.
Manche Logikelemente (bei Xilinx: shift register SR16E) sind nicht mit einem Reset einsetzbar, die Synthese muss also mehr Aufwand betreiben (siehe Beitrag im Forum). Der Resetwert für Speicher kann in VHDL, im ucf oder durch Konfigurationsfiles (Coregen, EDK) definiert werden. [Bearbeiten] Asynchroner ResetTraditionell am meisten eingesetzt wird der asynchrone Reset:
Bei ASICs ist er i.d.R. unverzichtbar, da diese nicht standardmäßig mit einem Initialwert geladen werden. Bei FPGA-Design wird er nur benötigt, wenn diese in einen ASIC überführt werden wollen. Bei reinen FPGA-Designs wird er meistens nicht verwendet. Er kann sogar zu Problemen führen, wenn die fallenden Flanke des Resetsignals zu einem ungünstigen Zeitpunkt kommt (Siehe Witepaper 272 bei Xilinx). Je nach Logikdesign und der dadurch bedingten Auswirkung der Resetrücknahme, ist damit u.U. eine Verlängerung des Resetsignales so durchzuführen, daß das Löschen des Signals in jedem Falle ausserhalb des Bereiches möglicher Flankenwechsel des Systemtaktes erfolgen. Im Regelfall geschieht dies durch eine externe Synchronisation, z.B. einen Prozessor oder einen anderen FPGA, der auf derselben Frequenz bzw. einer Frequenz mit stets bekannter Phase läuft. Für FPGAs und PLDs ist es daher oftmals sinnvoller, einen synchronen Reset zu benutzen. Dabei ist darauf zu achten, daß das synchrone Resetsignal eine genügend lange Periode besitzt, um erfasst zu werden. [Bearbeiten] Synchroner Reset
Die Verwendung eines synchronen Resets erfordert u.U. mehr Resourcen. In Einzelfällen können die sich ergebenden Strukturen jedoch auch druch die Synthese mit anderen Schaltungsteilen und Anforderungen zusammengefasst werden. [Bearbeiten] ResetgenerierungFolgend ein Beispiel einer internen Resetschaltung (auch wenn dergleichen heute im FPGA-Bereich kaum noch nötig ist), die einen 16 Takte langen Reset-Impuls erzeugt:
[Bearbeiten] Logische ResetsNeben dem physikalischen Reset, der meist alle FFs gleichzeitig in einen Startzustand versetzt, benötigen viele Applikationen einen logisch neutralen Zustand mit z. B. inaktiven Ausgängen, wodurch teilweise weitere Resetzustände definiert werden müssen. Meist wird hier eine Art Warmstart-Zustand definiert. Auch ist es oft wünschenswert, dass nur Schaltungsteile neu gestartet werden, wenn Fehlfunktionen detektiert wurden, oder die Schaltung in Bereitschaft gesetzt werden soll, während andere essenzielle Funktionen aufrechterhalten werden sollen. Pipelines, algorithmische Rechenblöcke und untergeordnete state machines sind z. B. solche Schaltungsteile. [Bearbeiten] Siehe auchhttp://www.mikrocontroller.net/articles/VHDL#Synchroner_oder_asynchroner_Reset
|