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.
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
ifset='0'then
4
q_int<='1';
5
elsifreset='0'then
6
q_int<='0';
7
endif;
8
endprocess;
>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
entityNAND_RSFFis
2
port(Q:inoutbit:='0';
3
Q_quer:inoutbit:='1';
4
set,reset:inbit);
5
endNAND_RSFF;
6
7
architectureBehavioralofNAND_RSFFis
8
begin
9
Q<=not(Q_querandset);
10
Q_quer<=not(Qandreset);
11
endBehavioral;
Und aufpassen: die Eingänge dieses Flipflops sind low-aktiv. Der
Ruhepegel sollte also '1' sein...