Forum: FPGA, VHDL & Co. VHDL: 1bit Subtrahierer


von Joe (Gast)


Lesenswert?

Ich habe folgenden VHDL Code vorliegen, der mir Probleme bereitet:
1
LIBRARY ieee;
2
USE ieee.std_logic_1164.ALL;
3
USE ieee.std_logic_signed.ALL;
4
USE ieee.std_logic_arith.ALL;
5
6
7
ENTITY sub_1bit IS
8
   PORT(
9
      i1, i2, ic    : IN BIT;
10
      o1, oc        : OUT BIT;
11
      en            : IN BIT
12
   );
13
END sub_1bit;
14
15
ARCHITECTURE a_sub_1bit OF sub_1bit IS
16
BEGIN
17
18
   PROCESS 
19
   BEGIN
20
      IF (en = '1') THEN
21
         o1 <= TRANSPORT (i1 XOR i2) XOR ic AFTER 1.0 ns;
22
         oc <= TRANSPORT (NOT i1 AND i2) OR (NOT i1 AND ic) OR (i2 AND ic) AFTER 1.00 ns;
23
      ELSE
24
         o1 <= '0';
25
         oc <= '0';
26
      END IF;
27
      WAIT ON i1, i2, ic, en;
28
   END PROCESS;
29
END a_sub_1bit;

Ich habe zunächst versucht eine Wahrheitstabelle zu erstellen. 
EIngangswerte sind i1, i2 und ic. Ausgänge sind o1 und oc. Bei der 
Erstellung der Wahrheitstabelle habe ich so meine zweifel ob dies so 
richtig ist.

i1 i2 ic o1 oc
0  0  0  0  0
0  0  1  1  1
0  1  0  1  1
0  1  1  1  0
1  0  0  1  0
1  0  1  0  0
1  1  0  0  0
1  1  1  1  1

Wenn ich nun das KV Diagramm verwende, komme ich nicht of die obigen 
Gleichungen. Was mache ich falsch ? Vielleicht ist die Wahrheitstabelle 
von mir auch falsch.

Für jeden Rat bin ich sehr dankbar.

Bye

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


Lesenswert?

Joe schrieb:
> Vielleicht ist die Wahrheitstabelle von mir auch falsch.
Wenn der Code vorgegeben ist, warum machst du dann nicht einfach mal die 
Tabelle aus dem Code...
i1 i2 ic o1 oc
0  0  0  0  0
0  0  1  1  1
0  1  0  1  1
0  1  1  0  1  <<-- Unterschied zu deiner Tabelle!
1  0  0  1  0
1  0  1  0  0
1  1  0  0  0
1  1  1  1  1

von Joe (Gast)


Lesenswert?

Danke Lothar,

ja aber welche nun ist korrekt ?

von Joe (Gast)


Lesenswert?

Ich habe nun nochmals meine Wahrheitstabelle kontrolliert. Diese müsste 
so stimmen oder ?

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


Lesenswert?

Joe schrieb:
> ja aber welche nun ist korrekt ?
Meine Tabelle ist aus dem VHDL-Code hergeleitet und wird wieder zum 
selben VHDL-Code führen...  ;-)

Deine muss falsch sein, denn das kann ja nicht das selbe ergeben:
i1 i2 ic   o1 oc
0  1  1    1  0
1  0  0    1  0

von Joe (Gast)


Lesenswert?

Was passirt eigentlich in diesem Fall:

i1 - i2 - ic = 0 - 1 - 1 = ?

Dieser Fall bereitet mir Probleme. Welchen Wert nimmt o1 und oc an ?

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


Lesenswert?

Joe schrieb:
> Welchen Wert nimmt o1 und oc an ?
Hmmmm...  :-/
Lebst du in einem Paralleluniversum?
Liest du meine Posts nicht?
Denkst du nicht mit?


i1 i2 ic       o1 oc
0  0  0    0   0  0
0  0  1   -1   1  1
0  1  0   -1   1  1
0  1  1   -2   ?  ?  <<--  nur hier gibts die -2
1  0  0    1   1  0
1  0  1    0   0  0
1  1  0    0   0  0
1  1  1   -1   1  1

Weil die -2 NUR einmal auftaucht, MUSS die -2 die Bitkombination 
bekommen, die sonst nicht verwendet wird. Und die anderen Kombinationen 
sind alle schon verwendet...
Was muss ? ? demnach sein?

von Joe (Gast)


Lesenswert?

So ganz kann ich dich nicht verstehen. Ich komme mit deiner Aussage: 
nicht klar:
>Weil die -2 NUR einmal auftaucht, MUSS die -2 die Bitkombination
>bekommen, die sonst nicht verwendet wird. Und die anderen Kombinationen
>sind alle schon verwendet...
>Was muss ? ? demnach sein?

Meine Lösung: i1 - i2 = 0 - 1 = 11 (oc = 1; o1 = 1) --> 11 - ic = ? (oc 
= ?; o1 = ?)

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


Lesenswert?

Hast du die neue Spalte in der Tabelle gesehen, in der die Dezimalwerte 
eingetragen sind? Da taucht nur ein einziges Mal die -2 auf. Und die 
anderen Fälle sind ja soweit klar.
Also hier eine neue Tabelle mit den möglichen Werten für das Ergebnis o1 
und oc:
  dez   o1 oc
    1    1  0
    0    0  0
   -1    1  1
   -2    ?  ?  welche Kombination wurde bisher nicht verwendet?
         0  1  Richtig:  o1 = 0  und  oc = 1

von Joe (Gast)


Lesenswert?

Hallo Lothar,

dies bedeutet man kommt rechnerisch nicht auf das Ergebnis. Man muss 
hier also diese Kombination wählen, weil diese noch nicht vorkommen tut.

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


Lesenswert?

Joe schrieb:
> dies bedeutet man kommt rechnerisch nicht auf das Ergebnis.
Nach welcher Rechnung?
Es ist doch letztlich alles nur eine Frage der Definition.

Und das ist klar:
1-0-0 = 1 Unterlauf 0
1-1-0 = 0 Unterlauf 0
0-1-0 = -1 = alle Bits gesetzt (so sind "übliche" signed-Zahlen 
definiert)

Bleibt nur noch:
0-1-1 = 0 Unterlauf 1

> Man muss hier also diese Kombination wählen,
> weil diese noch nicht vorkommen tut.
Ja.
Und wenn noch eine weitere Kombination nötig wäre, weil z.B. -3 auch 
rauskommen könnte, dann kann das nicht mehr auf 2 Bits abgebildet 
werden.

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.