Forum: FPGA, VHDL & Co. Fragen zur FPGA-Initialisierung und Reset


von Frank Ungermann (Gast)


Lesenswert?

Ich bin Neuling bei den FPGAs und habe nur die grundlegenden 
Digitaltechnikkenntnisse aus dem Studium und dem ASIC-Sektor. Es geht 
mir um die grundsätzliche Beschaltung der FFs, wie sie von der Synthese 
anhand des Codes bewerkstelligt wird.

Wie wirkt z.B. ein logischer Reset? wie wikren Initalwerte etc.
Im VHDL schreibe ich z.B. folgendes (Ich habe das jetzt mal Allgemein 
gemacht) :
1
process xyz (reset, powersave, clock)
2
3
if (reset = '1') then
4
    register <= reset_value;
5
elsif (powersave ='1') then
6
    -- nothing
7
elsif rising_edge (clock) then
8
   if (init = '1') then
9
        regsiter <= init_value;
10
   else
11
       register <= input;
12
   end if;
13
end if;


Das heisst, ich möchte das Register (und auch alle anderen vectoren 
z.B.) bei einem Reset in einem Urzustand bringen, bei einem logischen 
Reset (init) in einen Startzustand (das brauchen einige Schaltungen) und 
im normalen Modus soll das register vom input gespeist werden, während 
bei power save das Schaltwerk steht!

power save, reset und clock müssen dazu in die liste, nicht aber init, 
da synchron,

Stimmt das soweit?

Nun die Frage: Was geschieht mit den FPGA-Registern bei einem 
physikalischen device_reset ?  Das ist ja nicht automatisch der Reset 
von oben, oder ?

Was haben dann die Register für Werte ?  Stehen dann da die Werte drin, 
die ich bei der Signalgeneration signal : std_logic_vector (7 downto 0) 
:= "01101110" z.B?

Wann werden diese Initialwerte überhaupt geladen? Schon beim 
Hardwarereset, oder erstnachdem das FPGA aus dem Flash gealden wurde?
Ich dachte bisher, daß diese Initwerte genauso wie die RAMs im Initfile 
des FPGAs stecken, das FPGA also keine definierten Werte hat, solange es 
nicht geladen ist.

Jetzt zurück zur Schaltung: Abgesehen von dieser Initproblematik ist es 
ja wohl so, daß ich in jedem Fall irgend einen Pin brauche, den ich als 
Reset benutze. Wo und wann wirkt der ?  Wirkt der auf den asynch clr der 
Register?  Wie wird das dann gemacht, wenn ich ein FF per reset auf Null 
resetten will? Wird dann die Schaltung vom Tool negiert, so wie man das 
beim ASIC machen würde (also überall ein "Not" hin?) - clr geht ja nur 
auf Null,oder ?

Oder wirkt der über einen synchronen Eingang? Da der Reset von Aussen 
kommt, muss man ihn ja oftmals (mehrfach) einsynchronisieren, da die 
Schaltungen sonst nicht 100% gesynched sein können. Macht es dann 
überhaupt Sinn, den als asynch-eingang zu deklarieren, zu betrachten?

Wie macht das das Tool? Geht es z.B. über der Register-Load Pin? MAchen 
das alle Tools gleich?

Meinen logischen Init von oben müsste das tool jedenfalls über einen 
load oder preset-Eingang verarbeiten können. Wie erfährt man in Xlinx 
ISE, wie das real angeschlossen wurde? Ist das voll deterministisch, 
oder passiert es, daß das toll bei FPGA Überfüllung Sachen anders baut, 
um Register zu sparen, oder was auch immer ?

Kann ich am VHDL etwas verbessern, um das noch zielorientierter zu 
machen, oder anders, kann ich etwas weglassen, um dem tool mehr 
Freitheitsgrade zu geben und trotzdem dasselbe erhalten ?
Fragen über Fragen ...

von Roger S. (edge)


Lesenswert?

Reset ist ein Relikt von den ASICs und Aufbauten mit digital ICs.
Bei SRAM basierten FPGAs brauchts den nur in den seltesten Faellen 
wirklich.
Die Register erhalten ihre Startwerte mit der Konfiguration, zudem ist 
es meist besser den FPGA zuerueck in den config mode zu zwingen, z.B. in 
verbindung mit einem supply voltage supervisor.

Es gibt bei manchen FPGAs die device clear pins, ist aber eher fuer 
legacy designs gedacht, ausserdem, wie der Name schon sagt, werden die 
Register zurueckgesetzt, also nichts mit inital werten.

Zu Xilinx und SRAM FPGAs generell, schau dir dieses Dokument an:
http://www.xilinx.com/support/documentation/white_papers/wp272.pdf

Wenn du wirklich resets brauchst, dann mach die wen moeglich synchron, 
auch dein powersave ist problematisch und spart nicht wirklich strom.

Cheers, Roger

von Frank Ungermann (Gast)


Lesenswert?

Also irgendeinen Reset / Init braucht man je in jedem Fall. Wenn ich 
dich richtig lesen, plädierst Du für ein Weglassen des Resets nach 
obigem Muster sondern für die Nutzung eines synchronen Resets gemäß 
meines Konstrukts mit dem Init. Damit erübrigt sich die Frage mach der 
Auswirkung des Resets. Wobei: Ich hätte schon gerne mal gewusst, wie das 
FPGA FF genau realisiert wird.

Offen ist weiterhin auch noch die Frage nach den im VHDL eingebetteten 
init-Werten, die ja für eine Simulation auch sehr vorteilhaft sind: Wann 
genau wirken diese init-Werte?

von Roger S. (edge)


Lesenswert?

Frank Ungermann wrote:
> Also irgendeinen Reset / Init braucht man je in jedem Fall.

wie gesagt, SRAM FPGAs haben einen impliziten reset/init durch die 
Konfiguration.

> Wenn ich
> dich richtig lesen, plädierst Du für ein Weglassen des Resets nach
> obigem Muster sondern für die Nutzung eines synchronen Resets gemäß
> meines Konstrukts mit dem Init.

Ich plaediere fuer ein Design welches ohne Reset auskommt.

> Offen ist weiterhin auch noch die Frage nach den im VHDL eingebetteten
> init-Werten, die ja für eine Simulation auch sehr vorteilhaft sind: Wann
> genau wirken diese init-Werte?

Die Init Werte sind nach der Konfiguration gesetzt, um das geht es ja.

Cheers, Roger

von Frank Ungermann (Gast)


Lesenswert?

Ok, laut doc von Xilinx ist es auch so, daß ohne Reset gearbeitet wird. 
Für meine state machines sollte es also reichen, den impliziten 
init-Wert auf den Startzustand zu stellen, damit alles anläuft. Einen 
logischen Reset braucht ich aber in jedem Fall, da meine CPU auf dem 
board das FPGA neu starten können müss. Das ist eine Forderung aus dem 
LH und ich habe viele FMS.

von A. F. (chefdesigner)


Lesenswert?

>Ok, laut doc von Xilinx ist es auch so, daß ohne Reset gearbeitet wird.
Gilt das auch für die Alteraschiene?

Wie baut man das denn nun am Besten? Ein synchrones Signal zum Reset?

von Roger S. (edge)


Lesenswert?

Andreas Fischer wrote:
>>Ok, laut doc von Xilinx ist es auch so, daß ohne Reset gearbeitet wird.
> Gilt das auch für die Alteraschiene?

Ja.

> Wie baut man das denn nun am Besten? Ein synchrones Signal zum Reset?

Initialwerte den Signalen zuweisen.

Cheers, Roger

von A. F. (chefdesigner)


Lesenswert?

Aber die werden doch nur einmal zu Beginn gesetzt?

von Roger S. (edge)


Lesenswert?

Andreas Fischer wrote:
> Aber die werden doch nur einmal zu Beginn gesetzt?

ja, und? Ueberlege mal wieviele deiner Schaltungen im Betrieb wirklich 
einen Reset brauchen. Anstatt einem globalen Reset kann man auch das 
FPGA in den Konfigurations-Modus zwingen und hat beim loslassen wieder 
die Initialisierung beim startup.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.