VHDL: 1bit Subtrahierer

Gast #2133565
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
Moderator (Firma: Titel) Persönliche Seite #2134074
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?
Gast #2134086
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 = ?)
Moderator (Firma: Titel) Persönliche Seite #2134145
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
Moderator (Firma: Titel) Persönliche Seite #2134638
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren