Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Theoretische Informatik (http://www.informatikerboard.de/board/board.php?boardid=5)
--- 2x1-Bit Speicher (http://www.informatikerboard.de/board/thread.php?threadid=2716)


Geschrieben von Shizmo am 01.01.2016 um 19:36:

  2x1-Bit Speicher

Weiter gehts großes Grinsen

Also hier verwirrt mich die Angabe etwas:

Zitat:
Entwickeln Sie einen 2x1-Bit Speicher mit JK-Flipflops. Die Schaltung hat einen Adresseingang a, der eines der zwei Bits auswählt, einen Daten-Input i, dessen Zustand in das durch a ausgewählte JK-Flipflop übernommen wird, wenn der Read-Write Eingang w auf 1 ist. Der Ausgang o soll den Zustand des durch a ausgewählten Flipflops ausgeben.


Okay also ich weiß ich brauch 2 Flipflops, also habe ich auch 2 Bits [Ausgänge] (Q0 und Q1).

Wie setze ich die Werte der Tabelle? Ich hab 5 Variablen, w - a - i - q0 - q1 - Puh also das wären dann 32 Zeilen, da mich bei w aber nur die Werte mit 1 interessieren, kann ich es auf 16 reduzieren oder?

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
| w | a | i | q1 | q0 |
|---|---|---|----|----|
| 1 | 0 |   |    |    |
| 1 | 0 |   |    |    |
| 1 | 0 |   |    |    |
| 1 | 0 |   |    |    |
| 1 | 0 |   |    |    |
| 1 | 0 |   |    |    |
| 1 | 0 |   |    |    |
| 1 | 0 |   |    |    |
| 1 | 1 |   |    |    |
| 1 | 1 |   |    |    |
| 1 | 1 |   |    |    |
| 1 | 1 |   |    |    |
| 1 | 1 |   |    |    |
| 1 | 1 |   |    |    |
| 1 | 1 |   |    |    |
| 1 | 1 |   |    |    |


Ich versteh nicht ganz was i macht.

LG



Geschrieben von eulerscheZahl am 01.01.2016 um 20:41:

 

Ein Code sagt mehr als tausend Worte (hoffe ich zumindest).
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
static int q1 = 0;
static int q0 = 0;
static int takt(int w, int a, int i) {
	if (w == 0) { //lesen
		if (a == 0) { //schreibe in den einen Speicher
			q0 = i; //i wird geschrieben
		} else { //a = 1, also der andere Speicher
			q1 = i;
		}
		return 0; //wir wollen das sowieso nicht lesen
	} else {//w=1 entspricht schreiben
		//hier interessiert i nicht, da wir nichts schreiben wollen
		if (a == 0) {
			return q0;
		} else { //a = 1
			return q1;				
		}
	}
}



Geschrieben von Shizmo am 03.01.2016 um 13:48:

 

Vielen Dank für deine Antwort, kapiere es aber trotzdem nicht.

Habe gerade die Tabelle einer Musterlösung gesehen und die sieht so aus:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
w a i q1 q0 J1 K1 J0 K0
----------------------
0 X X X  X  0  0  0  0
1 0 0 X  0  0  0  0  X
1 0 0 X  1  0  0  X  1
1 0 1 X  0  0  0  1  X
1 0 1 X  1  0  0  X  0
1 1 0 0  X  0  X  0  0
1 1 0 1  X  X  1  0  0
1 1 1 0  X  1  X  0  0
1 1 1 1  X  X  0  0  0


Auch die kann ich nicht nachvollziehen... verwirrt



Geschrieben von eulerscheZahl am 03.01.2016 um 14:17:

 

Beim Lesen wird der Speicherinhalt nicht geändert, also werden die Flipflops weder gesetzt, noch rückgesetzt. Dabei ist es unerheblich, was an den anderen Eingängen ist.

In den folgenden 4 Zeilen entscheidet deine Lösung, was in den Speicher geschrieben werden soll und ob es schon drinsteht. Wenn schon eine 0 drin ist und eine 0 geschrieben werden soll, gibt es dafür zwei Möglichkeiten: den Zustand beibehalten oder zurücksetzen.
code:
1:
2:
3:
4:
5:
6:
w a i q1 q0 J1 K1 J0 K0
----------------------
1 0 0 X  0  0  0  0  X
1 0 0 X  1  0  0  X  1
1 0 1 X  0  0  0  1  X
1 0 1 X  1  0  0  X  0

Man könnte auch immer setzen bzw. rücksetzen:
code:
1:
2:
3:
4:
5:
w a i J1 K1 J0 K0
-----------------
0 X X 0  0  0  0
1 0 0 0  0  0  1
1 0 1 0  0  1  0

Es kann aber sein, dass die Schaltung dann größer wird.



Geschrieben von Shizmo am 03.01.2016 um 23:02:

 

Zitat:
Beim Lesen wird der Speicherinhalt nicht geändert, also werden die Flipflops weder gesetzt, noch rückgesetzt. Dabei ist es unerheblich, was an den anderen Eingängen ist.

Ja okay, deshalb ist Zeile 1 voller X
code:
1:
2:
3:
w a i q1 q0 J1 K1 J0 K0
----------------------
0 X X X  X  0  0  0  0


Zitat:
In den folgenden 4 Zeilen entscheidet deine Lösung, was in den Speicher geschrieben werden soll und ob es schon drinsteht. Wenn schon eine 0 drin ist und eine 0 geschrieben werden soll, gibt es dafür zwei Möglichkeiten: den Zustand beibehalten oder zurücksetzen.
[...]
Man könnte auch immer setzen bzw. rücksetzen:
[...]


Okay das ist mir auch klar, das verstehe ich alles soweit, mein Problem ist noch früher.
Wie weiß ich, dass die Tabelle 16 Zeilen hat (in der Musterlösung 9, weil ja die anderen 7 Fälle mit w=0 gleich wären) obwohl ich 5 "Variablen" habe, also sollten es ja schon mal 32 Zeilen sein, minus den 15 w=0 --> 17 Zeilen.
Mein Hauptproblem ist, glaub ich, immer noch, dass ich immer noch nicht ganz verstehe, was das i macht und daraus kann ich dann auch q0 und q1 folgern.
w und a sind klar.



Geschrieben von eulerscheZahl am 04.01.2016 um 07:33:

 

Du hast ja schon erkannt, dass mehrere Zeilen zu einer zusammengefasst sind. Dabei kommt es auf die Zahl der 'X' bei den Eingängen an, Für jedes 'X' verdoppelt sich die Zahl der Zeilen, da es ja für 0 oder 1 stehen kann. Also Zeilen = [latex]2^{\hbox{Anzahl X}}[/latex]
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
w a i q1 q0 J1 K1 J0 K0
----------------------
0 X X X  X  0  0  0  0 //16 zeilen
1 0 0 X  0  0  0  0  X //2 zeilen
1 0 0 X  1  0  0  X  1 //2 zeilen
1 0 1 X  0  0  0  1  X //2 zeilen
1 0 1 X  1  0  0  X  0 //2 zeilen
1 1 0 0  X  0  X  0  0 //2 zeilen
1 1 0 1  X  X  1  0  0 //2 zeilen
1 1 1 0  X  1  X  0  0 //2 zeilen
1 1 1 1  X  X  0  0  0 //2 zeilen

Macht in Summe 32



Geschrieben von Shizmo am 04.01.2016 um 10:56:

 

Achso Zunge raus Zunge raus

Haha super vielen Dank!!

Und jetzt einfach wieder KV-Diagramme machen und eine Schaltung zeichnen oder? Und am Schluss noch den Ausgang o dazuzeichnen...



Geschrieben von eulerscheZahl am 04.01.2016 um 11:00:

 

Genau.
Für den Ausgang am besten einen Multiplexer nehmen.

Beachte, dass es 5 Variablen sind, du brauchst also 2 KV Diagramme übereinander, die auch in der 3. Dimension verbunden sind.



Geschrieben von Shizmo am 04.01.2016 um 11:42:

 

Okay noch eine Frage:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
w a i q1 q0 J1 K1 J0 K0
----------------------
0 X X X  X  0  0  0  0
1 0 0 X  0  0  0  0  X
1 0 0 X  1  0  0  X  1
1 0 1 X  0  0  0  1  X
1 0 1 X  1  0  0  X  0
1 1 0 0  X  0  X  0  0
1 1 0 1  X  X  1  0  0
1 1 1 0  X  1  X  0  0
1 1 1 1  X  X  0  0  0


Jetzt bei den FF-Eingägen, egal ob J1K1 oder J0K0, wenn ich von irgendwas (X) auf irgendwas (X,0,1) folgt, dann ist in dieser Tabelle immer 0 0. Kann ich das nicht mit X X schreiben, dann kann ich später bei den KV-Diagrammen viel mehr minimieren, als wie wenn ich alles Nullen habe.

UND:
Die 2te und 3te Zeile bei q0 - also von 0 auf 1, warum hat er bei J0-K0 in der Zeile 2: 0 X (0 X würde ja bedeuten von 0 auf 0, wir bräuchten aber ein 1 X) oder übersehe ich da was?



Geschrieben von eulerscheZahl am 04.01.2016 um 11:49:

 

Versuchst du gerade, die Zustandsübergänge zwischen den Zeilen zu machen? Das ist falsch.

code:
1:
2:
3:
w a i q1 q0 J1 K1 J0 K0
----------------------
1 0 0 X  0  0  0  0  X

qo ist offensichtlich 0. Da i=0, wollen wir eine 0 reinschreiben. Das geht, indem wir nichts machen oder das Flipflop rücksetzen, also 0X für J0K0.
Gleichzeitig soll der Inhalt von q1 erhalten bleiben. Deshalb J1K1 = 00, alles andere könnte den Inhalt überschreiben.



Geschrieben von Shizmo am 04.01.2016 um 12:39:

 

Ich hab einfach von Anfang an komplett falsch gedacht, jetzt macht das alles Sinn. Danke!

Komme mit den Diagrammen auf:
J0 = [latex]w \overline a i[/latex]
K0 = [latex]w \overline a \, \overline i[/latex]

J1 = [latex]w a i[/latex]
K1 = [latex]w a \overline i[/latex]

Schaut doch schonmal ganz gut aus.

Zitat:
Der Ausgang o soll den Zustand des durch a ausgewählten Flipflops ausgeben.


Also könnte o auch so sein oder?:
[latex]\overline a q0 \vee a q1[/latex]



Geschrieben von eulerscheZahl am 04.01.2016 um 13:13:

 

Kein Einwände Daumen hoch



Geschrieben von Shizmo am 04.01.2016 um 15:28:

 

Wunderbar, vielen Dank für die Hilfe!!! smile smile


Forensoftware: Burning Board, entwickelt von WoltLab GmbH