Forum: FPGA, VHDL & Co. WinCUPL, WinSim, SR-FlipFlop


von Falk S. (smoothcriminal)


Angehängte Dateien:

Lesenswert?

Hallo!
Ich habe in WinCUPL ein SR-FlipFlop für einen GAL16V8 erstellt.
Das möchte ich auch gern simulieren, aber es klappt nicht richtig, da 
(wie ich denke) dem Simulator der Startwert für Q nicht bekannt ist.
Fehlermeldung: [0020sa] unstable output
Gibt es da eine Möglichkeit die ich übersehe?
Vielen Dank!

von Logi Ker (Gast)


Lesenswert?

Versuchs mal mit

Q.d = S # (Q & !R);

Bedingung beim RS-FlipFlop ist immer dass nur einer von
beiden Eingängen aktiv sein darf. Das kann man natürlich
in die Eingangsbedingungen mit hineinverknüpfen.

In diesem Fall ist die Polarität der Eingänge aktiv high.

Klammern helfen dabei die Rangfolge der Operatoren nicht zu
übersehen oder zu fehlinterpretieren.

von U.G. L. (dlchnr)


Lesenswert?

Logi Ker schrieb:
> Q.d = S # (Q & !R);

"Q.d" bedeutet Verwendung eines Registers - um ein RS-Flip-Flop 
nachzubilden, benöigt man aber kein Register, sondern zwei Nand oder 
zwei NOR!

So, z.B. wird's ein RS-Flip-Flop:
1
/** Inputs **/
2
3
PIN 2 = S;
4
PIN 3 = R;
5
6
/** Outputs  **/
7
8
PIN 18 = Q;
9
PIN 19 = N;
10
11
/** Program **/
12
13
Q  = !(R # N);
14
N  = !(S # Q);

von U.G. L. (dlchnr)


Lesenswert?

ein SR-Flip-Flop:
1
/** Inputs **/
2
3
PIN 2 = S;
4
PIN 3 = R;
5
6
/** Outputs  **/
7
8
PIN 18 = Q;
9
PIN 19 = N;
10
11
/** Program **/
12
13
Q = !(!S & N)
14
N = !(!R & Q)

: Bearbeitet durch User
von U.G. L. (dlchnr)


Lesenswert?

Falk S. schrieb:
> Fehlermeldung: [0020sa] unstable output

Die Fehlermeldung wundert übrigens nicht,
der linke Teil ("Q = !Q & S") führt sicherlich zu einem "instabilen" 
Simulationsergebnis, sowie S gleich "1" wird, denn !0 & 1 => 1 und !1 & 
1 => 0.

U.U. würde die Simulation noch funktionieren, wenn auf der rechten Seite 
der Gleichung "Q.io" statt "Q" steht - um ein Verhalten ähnlich einem 
SR-Flip-Flop unter Verwendung von nur einem Ausgang zu erzielen, wird 
man aber besser schreiben (ist dann aber natürlich kein SR-Flip-Flop 
mehr):
1
/** Inputs **/
2
3
PIN 2 = S;
4
PIN 3 = R;
5
6
/** Outputs  **/
7
8
PIN 18 = Q;
9
10
/** Program **/
11
12
Q = S           /* setzen */
13
  # Q.io & !R;  /* halten */

von U.G. L. (dlchnr)


Lesenswert?

U.G. L. schrieb:
> (ist dann aber natürlich kein SR-Flip-Flop
> mehr):

eigentlich müsste man sagen - ist dann kein "klassisches" (kreuzweise 
Nand oer NOR und so...) SR-Flip-Flop mehr, also eines, wie Du es 
vermutlich im Sinn hattest - denn es ist SR-Flip-Flop!

von Falk S. (smoothcriminal)


Lesenswert?

Die Lösung war, dass man bei der Simulation im ersten Vector die 
Startwerte festlegen und erst im zweiten Vector den Output Enable 
schalten muss.
Dann kommt ein sinnvolles Simulationsergebnis heraus.

Vielen Dank für die hilfreichen Antworten!
1
/** Inputs **/
2
3
PIN 2 = S;
4
PIN 3 = R;
5
6
PIN 11 = ENA;
7
8
/** Outputs  **/
9
10
PIN 18 = Q;
11
12
/** Program **/
13
14
Q = ( !Q & S & !R ) # ( Q & !R ); 
15
Q.OE = ENA;

Simulation:
1
ORDER: S, R, ENA, Q; 
2
VECTORS:
3
0000
4
001L
5
101H
6
001H
7
011L
8
001L
9
101H
10
111L
11
111L
12
101H
13
101H
14
001H
15
001H
16
001H

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.