Hallo, ich bin gerade dabei zum Einstieg in VHDL ein RS-Flipflop mit NAND-Gatter mit Modelsim zu simulieren. Dabei möchte ich besonders den Delta-Delay-Mechanismus untersuchen. Zu diesem Zweck sollen anfangs die Signale folgende Zustände haben: set=1, reset=1, Q=0, Q_not=1 Zum Zeitpunkt t=10ns soll set von 1 auf 0 gehen, wodurch dieses Event dazu führt, dass Q schließlich auf 1 und Q_not auf 0 geht. Die Signale habe ich mit einem Do-File erzeugt. Den VHDL-Code und das Do-File ist im Anhang. Leider ist es bisher so, dass beim Zeitpunkt t=10ns das set-Signal zwar auf 0 geht, dies aber keinen Effekt auf die Signale Q und Q_not hat, weshalb diese unverändert auf ihren Ausgangszuständen bleiben (siehe Screenshot Wave-Fenster). Wer kann mir sagen was ich falsch gemacht habe? Gruß
@ Andi (Gast) >Hallo, ich bin gerade dabei zum Einstieg in VHDL ein RS-Flipflop mit >NAND-Gatter mit Modelsim zu simulieren. Kann man machen, wenn gleich sowas in der Praxis sehr selten verwendet wird. Die meisten FlipFlops in FPGAs sind D-FlipFLops, ein RS wird dann annähern damit emuliert. >Wer kann mir sagen was ich falsch gemacht habe? Ich weiß nicht genau, aber ich könnte mir vorstellen, dass der Simulator sich hier verablert vorkommt, denn ein RS-FlipFlop ist eher eine Trickschaltung denn ein normales Konstrukt im Sinne der synchronen Schaltungstechnik.
Aus Neugier habe ich deinen Code mal mit dem Active-HDL simuliert. Der findet das nicht so lustig:
1 | # KERNEL: stopped at delta: 5000 at time 0 ps. |
2 | # KERNEL: Error: KERNEL_0160 Delta count overflow. Increase the iteration limit using -i argument for asim or the matching entry in simulation preferences. |
3 | # Error: Fatal error occurred during simulation. |
Das erhöhen des Limits von 5000 auf 10000 hat erwartungsgemäss nichts gebracht.
Ich würde es mal mit einem kombinatorischen Prozess versuchen, Sensitivity Liste nicht vergessen.
Ahhhh, inout ist natürlich Unsinn. So gehts mit ISIM. Siehe Anhang.
Falk Brunner schrieb: > @ Andi (Gast) > >>Hallo, ich bin gerade dabei zum Einstieg in VHDL ein RS-Flipflop mit >>NAND-Gatter mit Modelsim zu simulieren. > > Kann man machen, wenn gleich sowas in der Praxis sehr selten verwendet > wird. Die meisten FlipFlops in FPGAs sind D-FlipFLops, ein RS wird dann > annähern damit emuliert. FPGA's kennen sehr wohl FF von Typ RS, bspw. Xilinx Spartan-3A FDRSE Sollte sogar der Grundtyp sein. Wahrscheinlich liegt hier eine Verwechslung vor, Xilinx bezeichnet als RS-FF FF mit synchronen RESET und SET, während der Poster hier wohl asynchrones SET und RESET meint. Auch dafür gibt es passende FF im FPGA; bei xilinx heisst des FDCP (D-FF mit assynchronen Clear und Preset). Für beide FF Varianten gibt es passende Transistorschaltungen auf dem FPGA (wahrscheinlich nur eine die entsprechend konfiguriert wird). Früher sagte man wohl zu den hier beschriebenen (Xilinx) RS-FF wohl JK-FF. und genau genohmen meint der Poster hier zustandsgesteuerte RS-FF, im Unterschied zu flankengesteuerten RS-FF. alle FF typen kann man in VHDL synthesegerecht beschreiben, sollte ein process statement sein. Ein zustandgesteuertes RS-FF wie der Poster hier wohl haben möchte, findet sich bei Xilinx als Latch mit asynchronen Clear und preset (LDCPE). Diese Ausführungen in die Zoologie von Digitaltechnik-Grundschaltung mag jetzt öde und schulmeisterlich klingen, aber ohne ein Grundverständniss von digitaler schaltung kann man per VHDL nur murks verzapfen. Nimm dir die zeit und les mal die beschreibung der Grundelemente bspw. f. Xilinx durch: spartan_3a_ndl.pdf -> http://www.xilinx.com/itp/xilinx10/books/docs/spartan3a_hdl/spartan3a_hdl.pdf Was gelinde gesagt "ungewöhnlich" ist, ware ein asynchrones FF - Verhalten als rückgekoppelten NAND-Gattern zu beschreiben und zu erwarten das da ein entsprechendes FF implementiert wird. IMHO sollte man FF aus Gattern da lassen wo sie sind: auf dem Friedhof der Digitaltechnik. Selbst als Lehrbeispiel richten sie m.E. mehr Schaden an als das sie in der Lehre nutzen. MfG,
@ Fpga Kuechle (fpgakuechle) Benutzerseite >FPGA's kennen sehr wohl FF von Typ RS, bspw. Xilinx Spartan-3A FDRSE >Sollte sogar der Grundtyp sein. ??? >Wahrscheinlich liegt hier eine Verwechslung vor, Xilinx bezeichnet als >RS-FF FF mit synchronen RESET und SET, während der Poster hier wohl >asynchrones SET und RESET meint. Naja, es ist (mal wieder) ein sprachliches Problem. Ein FlipFlop mit SYNCHRONEN Set/Reset ist für MICH nur eine Variante eines D-FlipFlops. Jaja, schaltungstechnischn gibt es da noch ein paar feine Unterschiede, FUNKTIONAL jedoch nicht. >Auch dafür gibt es passende FF im FPGA; bei xilinx heisst des FDCP (D-FF >mit assynchronen Clear und Preset). DAS ist für mich ein echtes RS-FlipFlop. Und klar, man kann wie in der TTL-Welt ein 7474 nehmen und nur Set und Reset nutzen (welche dort asynchron sind). So ähnlich wird es wohl auch bei Xilinx laufen. >Früher sagte man wohl zu den hier beschriebenen (Xilinx) RS-FF wohl >JK-FF. Nanana, ein JK-FF ist was ganz anderes! Es ist taktgesteuert und hat ZWEI SYNCHRONE Eingänge. Ganz andere Baustelle! >und genau genohmen meint der Poster hier zustandsgesteuerte RS-FF, im Soweit mir bekannt, ist ein RS-FlipFlop IMMER zustandsgesteuert. >Unterschied zu flankengesteuerten RS-FF. Das würde ich eher als ein D-FlipFlop mit Logik ansehen. Ein flankengesteuertes RS-FlipFlop ist mir in der Literatur und Ausbildung nie untergekommen. >Was gelinde gesagt "ungewöhnlich" ist, ware ein asynchrones FF - >Verhalten als rückgekoppelten NAND-Gattern zu beschreiben >und zu erwarten das da ein entsprechendes FF implementiert wird. Naja, der OP will erstmal nur simulieren und was über das Thema Delta-Zyklus lernen. Aber wie macht man es synthesegerecht? Instanziieren ist einfach. So geht es nicht, da macht Xilinx ein Latch draus.
1 | process(set, reset, q_int, qn_int) |
2 | begin
|
3 | if set ='0' then |
4 | q_int <= '1'; |
5 | elsif reset='0' then |
6 | q_int <= '0'; |
7 | end if; |
8 | end process; |
>IMHO sollte man FF aus Gattern da lassen wo sie sind: auf dem Friedhof >der Digitaltechnik. Selbst als Lehrbeispiel richten sie m.E. mehr >Schaden an als das sie in der Lehre nutzen. So hart würde ich das nicht formulieren. Wo liegt das Problem? In der Grundlagenausbildung schaut man sich doch das Innenleben der Grundschaltung schon mal genau an, auch beim RS-FlipFlop.
Falk Brunner schrieb: > Ahhhh, inout ist natürlich Unsinn. So gehts mit ISIM. Siehe Anhang. Den Code von Falk kann Active-HDL auch korrekt simulieren. Das ändern des Originalcodes von inout auf out mit internen Signalen reichte aber nicht. Ich musst auch von bit auf std_logic umstellen, sonst bleiben einfach beide Ausgänge auf '1'.
>>IMHO sollte man FF aus Gattern da lassen wo sie sind: auf dem Friedhof >>der Digitaltechnik. Selbst als Lehrbeispiel richten sie m.E. mehr >>Schaden an als das sie in der Lehre nutzen. > > So hart würde ich das nicht formulieren. Wo liegt das Problem? In der > Grundlagenausbildung schaut man sich doch das Innenleben der > Grundschaltung schon mal genau an, auch beim RS-FlipFlop. Ich bezweifele das Latches aus rückgekoppelten NAND-Gattern aufgebaut sind. Meines Erachtens ist das (heutzutage) ein reines Erklärungs- resp. Herleitungsmodell eben Ersatzschaltbild, aber kein Bild der realen Schaltung. Ist zwar schon ne Weile her das ich mir die Transitorebene von FF angeschaut habe, aber da war nix mit rückgekoppelten CMOS-NAND-Gattern, da waren Transfergates "verbaut". Auch beim ASIC-entwurf bastelt sich keiner seine Latches aus NAND's zusammen, der nimmt das Latch layout-makro aus der Bibliothek. Es ist eben ein Erklärungsmodell aber keine "Bauanleitung. Ich seh das wie beim Ersatzschaltbild einer Batterie. Da wird zur Erklärung von Spannungseinbrüchen ein Innenwiderstand gezeichnet, der aber nicht "eingebaut" ist. Zumindet ist mir beim Zersägen nie einer in die Hand gefallen ;-) MfG,
Falk Brunner schrieb: >>Unterschied zu flankengesteuerten RS-FF. > > Das würde ich eher als ein D-FlipFlop mit Logik ansehen. Ein > flankengesteuertes RS-FlipFlop ist mir in der Literatur und Ausbildung > nie untergekommen. Bei xilinx heist es, wenns synchron ist Reset und Set also RS und wenns asynchron ist Clear/preset also CP. Alles was (takt-)flankengesetert ist heisst FF, ist es (takt-)zustandgeseteuert heisst es latch. m.e ist das was in der WP als taktzustandsgesetuertes FF bezeichnet wird kein FF sondern ein Latch. (http://de.wikipedia.org/wiki/Flipflop#RS-Flipflop), wie die WP an anderer Stelle auch eingesteht: (http://de.wikipedia.org/wiki/Flipflop#Taktzustands-_und_taktflankengesteuerte_Flipflops)
Andi schrieb: > Wer kann mir sagen was ich falsch gemacht habe? Ich würde das so machen, denn sonst kann der Simulator wie beobachtet keine Initialen Zustände berechnen:
1 | entity NAND_RSFF is |
2 | port( Q : inout bit := '0'; |
3 | Q_quer : inout bit := '1'; |
4 | set, reset: in bit); |
5 | end NAND_RSFF; |
6 | |
7 | architecture Behavioral of NAND_RSFF is |
8 | begin
|
9 | Q <= not(Q_quer and set); |
10 | Q_quer <= not(Q and reset); |
11 | end Behavioral; |
Und aufpassen: die Eingänge dieses Flipflops sind low-aktiv. Der Ruhepegel sollte also '1' sein...
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.