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?
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.
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.
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.
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?
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.
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.
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.
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?
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.
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).
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.
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.
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.
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.
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...
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.