Forum: FPGA, VHDL & Co. RS-Flipflog mit NAND in VHDL


von Andi (Gast)


Angehängte Dateien:

Lesenswert?

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ß

von Falk B. (falk)


Lesenswert?

@ 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.

von Christoph Z. (christophz)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

Ich würde es mal mit einem kombinatorischen Prozess versuchen, 
Sensitivity Liste nicht vergessen.

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

Ahhhh, inout ist natürlich Unsinn. So gehts mit ISIM. Siehe Anhang.

von Fpgakuechle K. (Gast)


Lesenswert?

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,

von Falk B. (falk)


Lesenswert?

@ 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.

von Christoph Z. (christophz)


Angehängte Dateien:

Lesenswert?

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'.

von Fpgakuechle K. (Gast)


Lesenswert?

>>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,

von Fpgakuechle K. (Gast)


Lesenswert?

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)

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


Angehängte Dateien:

Lesenswert?

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
Noch kein Account? Hier anmelden.