Falsches Ergebnis bei Multiplikationen

Gast #4901222
Lesenswert?

Hallo Leute :)

ich habe ein Problem und zwar war es meine Idee, einen 3x3 Bit 
Multiplizierer zu entwerfen. Eigentlich ganz einfach, nur das mir beim 
Simulieren vor allem bei höheren Zahlen ein Schwachsinn rauskommt. 
Irgendwie "vergisst" mir der Simulator die "höheren" Bits auf ein '1' zu 
schalten. Im Anhang befindet sich ein Screenshot von der Simulation. Ich 
hoffe Ihr könntet mir da weiterhelfen.

Lg
1
library IEEE;
2
use IEEE.std_logic_1164.all;
3
use IEEE.numeric_std.all;
4

5
entity mult is 
6
  generic (BITS : natural := 2);
7
  port (a_i : in  signed(BITS downto 0);
8
      b_i : in  signed(BITS downto 0);
9
      q_o : out signed(5 downto 0));
10
end entity mult;
11

12
architecture rtl of mult is
13
begin
14
  q_o <= a_i * b_i;
15
end architecture rtl;
Angehängte Dateien:
Moderator (Firma: Titel) Persönliche Seite #4901305
Lesenswert?

Johannes H. schrieb:
> Kann man den Thread irgendwie löschen, das ist mir zu peinlich :D
Lass mal. Es ist nichts so schlecht, dass es nicht noch als schlechtes 
Beispeil taugen könnte... ;-)

Z.B. ist deine Definition von BITS extrem irreführend (und du selber 
hast dann auch ein Problem damit). Denn tatsächlich haben die Vektoren 3 
Bits. Und mit dieser Zahl wirds dann gleich ganz einfach generisch:
1
  generic (BITS : natural := 3);
2
  port (a_i : in  unsigned(  BITS-1 downto 0);
3
        b_i : in  unsigned(  BITS-1 downto 0);
4
        q_o : out unsigned(2*BITS-1 downto 0));
Gast #4901323
Lesenswert?

Gustl B. schrieb:
> Ich verwende für die Ausgänge und Eingänge immer std_logic_vector und in
> der Komponente dann das was ich brauche also Integer, Unsigned oder
> Signed.
Kann man machen, hat dann aber u.U. den Spaß, daß man in jede Komponente 
erst reinschauen muß, ob der slv jetzt signed oder unsigned ist.
Bei Signalen, die das FPGA nicht verlassen, verwende ich gleich den 
richtigen Typ in der Portdefinition.

Duke
#4901419
Lesenswert?

OK, ja stimmt, bei Generics verwende ich auch Integer/Natural. Irgendwo 
habe ich das her mit den slv an den Schnittstellen, vielleicht weil 
Xilinx das so macht? Aber stimmt, einen sinnvollen Grund gibt es da 
nicht.

Ich betrachte jede Komponente dann als abgeschlossen und dokumentiere 
für mich die Schnittstelle, da muss ich dann nicht mehr reingucken 
sondern direkt bei der Schnittstellendefinition steht da was das ist.

Hat das irgendwelche nachteile gleich Interger zu nehmen oder eben was 
anderes als slv? Weil dann mache ich das ab jetzt auch so ...

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