Forum: FPGA, VHDL & Co. Negativer Reset, wieso?


von oli-karch (Gast)


Lesenswert?

Hallo Zusammen,
ich frage mich, wieso immer noch vorherrschend mit negativen Resets bei 
internen Modulen gearbeitet wird. Ich finde die Negierung des Resets 
beim Lesen von Code mehr als verwirrend, und frage mich bei Cores von 
bspw. opencores, wieso man nicht nicht-invertierte Resets verwendet.

Es geht mir nicht um den Reset, der vom GPIO kommt - bei diesem macht es 
ja Sinn, den Reset-Zustand bei '0' zu sehen, aber intern?

von Sebastian R. (sebastian_r569)


Lesenswert?

oli-karch schrieb:
> Es geht mir nicht um den Reset, der vom GPIO kommt - bei diesem macht es
> ja Sinn, den Reset-Zustand bei '0' zu sehen, aber intern?

Damit es innen und außen identisch ist und jemand, der Active Low Resets 
gewohnt ist, nicht wochenlang einen Fehler sucht, nur, weil der Core 
ständig im Reset ist, weil er ihn aus Gewohnheit auf High gezogen hat.

von Joachim B. (jar)


Lesenswert?

der Vorteil von !reset ist die Möglichkeit der wired or Verknüpfung für 
mehrere Resetquellen.
https://de.wikipedia.org/wiki/Wired-OR

von Gu. F. (mitleser)


Lesenswert?

Wenn die Betriebsspannung wegfällt (oder einbricht) wird der Reset 
aktiv.
Das erscheint mir logisch.
Die einfachste Resetschaltung wäre dann ein Pull-up evtl. mit C.

von Hans (Gast)


Lesenswert?

Hallo,
wenn du z.B. beim CycloneV FPGA das interne Logic Element anschaust 
siehst du einen Low aktiven Reset des "Programmable Registers" 
(Hardware-Zelle). Im Grunde macht es meiner Meinung nach schon Sinn 
diese Reset Polarität auch in den übergeordneten VHDL Files zu 
verwenden.

von A. S. (Gast)


Lesenswert?

Bezeichne das Signal doch einfach als RUN oder GO oder OK.

Und wenn es außen 0-aktiv ist (einfach weil 0 einfacher definiert ist 
als VCC- irgendwas), warum dann intern umdrehen?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

oli-karch schrieb:
> ich frage mich, wieso immer noch vorherrschend mit negativen Resets bei
> internen Modulen gearbeitet wird.
Dass ein Reset low-active ist, ist dann sinnvoll, wenn man aus mehreren 
Quellen per simplen Open-Collector einfach nur den Pin auf Masse ziehen 
kann. Das bringt was, wenn man nicht nur eine einzige 
Versorgungsspannung hat, sondern wenn z.B. 5V, 3,3V und 2,5V im Design 
sind. Die einzige "Spannung" die dann alle drei Versorgungsebenen 
gemeinsam haben, ist GND. Dann kann ganz ohne weiteres aus der 2,5V Ecke 
ein Reset am 5V-Controller ausgelöst werden.

Low-active Signale sind übrigens auch sonst recht üblich. So ist z.B. 
der SS# beim SPI oder auch andere Steuersignale z.B. bei 
Speicherbausteinen low-active.

: Bearbeitet durch Moderator
von Kurz & Knapp (Gast)


Lesenswert?

Bei PowerUp und Brownout kriegt die elektronik automatisch einen 
Neustart aka Re-Initialisierung verpasst.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Kurz & Knapp schrieb:
> Bei PowerUp ... kriegt die elektronik automatisch einen
> Neustart aka Re-Initialisierung verpasst.
Das stimmt so ohne weiteres Nachdenken und zusätzliche Bauteile nicht 
allgemein. Nötig ist z.B. mindestens ein Kondensator, der dafür sorgt, 
dass die Versorgungsspannung schneller in einen gültigen Bereich geht, 
als die Schaltschwelle zum "inaktiv werden" des Resets erreicht wird.

Insofern würde ich auch bei einem low-aktiven Reset nie davon ausgehen, 
dass man den Pin einfach unbeschaltet lassen kann.

> und Brownout
Das ist ein ganz anderes Thema und braucht zusätzliche Elektronik, die 
auch dann noch funktioniert, wenn die spezifizierte minimale 
Versorgungsspannung "von oben her" unterschritten wird. Und demnach auch 
funktioniert, wenn sie "von unten her" erreicht wird.

: Bearbeitet durch Moderator
von nachtmix (Gast)


Lesenswert?

Lothar M. schrieb:
> Nötig ist z.B. mindestens ein Kondensator, der dafür sorgt,
> dass die Versorgungsspannung schneller in einen gültigen Bereich geht,
> als die Schaltschwelle zum "inaktiv werden" des Resets erreicht wird.

...und eine Diode, die den Kondensator bei nur kurzen Ausfällen der 
Versorgung schnell entlädt.

von oli-karch (Gast)


Lesenswert?

Danke für die Antworten. Ich sehe jedoch immer noch nicht einen echten 
Vorteil eines negativen Resets innerhalb des FPGAs. Fast alle 
Kommentare bezogen sich auf die externe Beschaltung, jedoch nicht auf 
die interne Logik. Ich finde es sehr praktisch, nicht-negierte Signale 
im Simulator zu sehen, und wenn ich die Komponente dann im Design 
instanziiere, brauche ich nur eine LUT, um das Signal auf der Top-Level 
zu negieren.

Hans schrieb:
> Hallo,
> wenn du z.B. beim CycloneV FPGA das interne Logic Element anschaust
> siehst du einen Low aktiven Reset des "Programmable Registers"
> (Hardware-Zelle). Im Grunde macht es meiner Meinung nach schon Sinn
> diese Reset Polarität auch in den übergeordneten VHDL Files zu
> verwenden.

Ich habe ein paar Tests mit der neueren Cyclone 10 GX Serie gemacht, und 
mir ist nicht aufgefallen, dass im Technology Mapping zusätzliche 
Negierer beim Reset verwendet werden - vielleicht kann die C10GX-Serie 
das besser?

von Martin S. (strubi)


Lesenswert?

oli-karch schrieb:
> Danke für die Antworten. Ich sehe jedoch immer noch nicht einen echten
> Vorteil eines negativen Resets innerhalb des FPGAs. Fast alle
> Kommentare bezogen sich auf die externe Beschaltung, jedoch nicht auf
> die interne Logik. Ich finde es sehr praktisch, nicht-negierte Signale
> im Simulator zu sehen, und wenn ich die Komponente dann im Design
> instanziiere, brauche ich nur eine LUT, um das Signal auf der Top-Level
> zu negieren.

Die Toolchain optimiert sowieso alles, wie sie will, deswegen ist das eh 
alles ad absurdum für interne Signale.
Aber der Lesbarkeit wegen -- und wenn man ein high bzw. Bit '1' als 
Äquivalent zum booleschen "True" sieht, sollte man logischerweise ein 
invertiertes Reset wenigstens mit einem '_n' o.ä. dekorieren.
Oder es in 'enable' umbenennen, wobei auch da wieder alte Gewohnheiten 
der 74xx-Hacker zuschlagen können, denn der "/CE" ist eben auch L-aktiv.

von Markus F. (mfro)


Lesenswert?

oli-karch schrieb:
> Ich habe ein paar Tests mit der neueren Cyclone 10 GX Serie gemacht, und
> mir ist nicht aufgefallen, dass im Technology Mapping zusätzliche
> Negierer beim Reset verwendet werden - vielleicht kann die C10GX-Serie
> das besser?

soweit ich das verstehe, haben alle Altera/Intel Devices den DEV_CLRn 
Pin, der (low-aktiv) unabhängig von der Konfiguration alle Register 
auf '0' setzt.

Wenn man den als Reset nutzen will (was sich ja irgendwie anbietet), ist 
man auf den low-aktiven Reset festgelegt. Wenn nicht, kann man machen, 
was man will (braucht dafür aber mehr Resourcen).

von Erfahrener Entwickler (Gast)


Lesenswert?

oli-karch schrieb:
> Ich sehe jedoch immer noch nicht einen echten
> Vorteil eines negativen Resets innerhalb des FPGAs.

Du bist genau richtig. Diese negativen Signale in internen Dingen sind 
eine alte, schlechte Gewohnheit.

Es ist schon lange nachgewiesen, dass Entwickler deutlich weniger Fehler 
machen, wenn ausschließlich positive Logik verwendet wird. Das 
menschliche Gehirn arbeitet nun mal so. Darum ist es klug, sich von 
dieser alten Gewohnheit zu verabschieden.

von Joachim B. (jar)


Lesenswert?

Erfahrener Entwickler schrieb:
> Es ist schon lange nachgewiesen, dass Entwickler deutlich weniger Fehler
> machen, wenn ausschließlich positive Logik verwendet wird. Das
> menschliche Gehirn arbeitet nun mal so.

sind die Entwickler so wenig belastbar?
können die nicht im Kopf negieren?

> Darum ist es klug, sich von dieser alten Gewohnheit zu verabschieden.
bei mixed voltage Systeme ist OC nach GND immer noch besser.

Noch haben wir 5V und 3,3V reichlich hier.

von Erfahrener Entwickler (Gast)


Lesenswert?

Joachim B. schrieb:
> sind die Entwickler so wenig belastbar?

Offenbar, wie man bei Dir sieht:

> bei mixed voltage Systeme ist OC nach GND immer noch besser.

Die Frage im Eingangsposting war (Hervorhebung von mir):

oli-karch schrieb:
> ich frage mich, wieso immer noch vorherrschend mit negativen Resets bei
> internen Modulen gearbeitet wird.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

oli-karch schrieb:
> aber intern?
Gewohnheit.
Oder eben einfach, weil extern auch low-aktiv gearbeitet wird. Denn noch 
verwirrender als ein low-aktiver Reset ist einer, der an jeder Ecke 
seinen aktiven Pegel wechselt.

von Christian R. (supachris)


Lesenswert?

Aus technischer Sicht ist das intern sinnlos. Da ist es Gewohnheit des 
Entwicklers. Mich nervt das auch, weil ich intern alles High aktiv 
beschreibe, aber z.B. die AXI Cores low aktiven Reset haben. Wenn das 
wenigstens per _n oder so dran stehen würde....grrrr...

: Bearbeitet durch User
von Zero V. (Firma: Freelancer) (gnd)


Lesenswert?

Beim Wishbone Bus ist RESET high aktiv und synchron zum Takt.

von J. S. (engineer) Benutzerseite


Lesenswert?

oli-karch schrieb:
> Hallo Zusammen,
> ich frage mich, wieso immer noch vorherrschend mit negativen Resets bei

Weil VHDL nicht zwischen physikalischer Beschreibung und Logik trennt 
und leider sehr Viele fehlerhafterweise Signalpegel (Low und Hi) ins 
Logikdesign hineinschleppen, wo er nichts zu suchen hat.

Der Aspekt "Reset" ist entweder ein Vorgang oder ein Trigger, der 
stattfindet oder nicht und nichts mit Signalpegeln / Spannungen zu tun 
hat.
Bezüglich negierter und nichtnegierter Logik, sollten man tunlichst 
logisch positiv formulieren. In der Praxis betrachte ich ja auch 
vornehmlich das Vorhandensein einer Information und formuliere nicht 
primär mit dem Nichtvorhandensein.

Das Problem dabei ist, dass die Negation von Signalpegeln (hi/low) mit 
der von Signalzuständen (1/0) kollidiert, wenn man die 
funktionstechnische Bedeutung (True / False) betrachtet.
Diese 3 Ebenen schaffen es Viele nicht auseinanderzuhalten - trotz 
klarer Definition in der Literatur.

Pegel, wie sie ausserhalb der FPGA-Logik exisitieren, sollten am Eingang 
abgefangen werden, da solche Dinge wie "low-aktiv" Eigenschaften von 
Ports sind und nicht etwa logischen Signalen.


Christian R. schrieb:
> aber z.B. die AXI Cores low aktiven Reset haben. Wenn das
> wenigstens per _n oder so dran stehen würde....grrrr...

Das ist das typische bachelor-Xilinx- Chaos. Es gibt sogar Cores, da 
sind beide Polaritäten vorhanden und obendrein noch für dasselbe Signal.

In Trainings frage ich die Entwickler immer, ob sie auch einen Termin 
für ein design start anberaumen und gleichzeitig nochmal die 
Nichtanberaumung zurücknehmen, also doppelte Kommandos senden. Macht 
aber keiner. Auch einen design start dadurch durchführen, dass sie einen 
Nichtstart verneinen, wird allgemein als unnütz eingestuft. Die Frage, 
warum sie dann massenweise nicht-aktive low-resets und deren Inversionen 
im design haben, konnte mir aber keiner schlüssig beantworten. Meistens 
haben sie es deshalb drin, weil es die anderen auch so machen.

Solche unnützen und oft unlogischen Konstrukte sind nach wie vor die 
Haupt-Fehlerquelle für Fehlfunktionen in designs.

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.