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.
der Vorteil von !reset ist die Möglichkeit der wired or Verknüpfung für mehrere Resetquellen. https://de.wikipedia.org/wiki/Wired-OR
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.
Bei PowerUp und Brownout kriegt die elektronik automatisch einen Neustart aka Re-Initialisierung verpasst.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.