Forum: FPGA, VHDL & Co. Operator überladen


von Crouch (Gast)


Lesenswert?

Hallo,
ich habe von meinem Prof. folgende Aufgabenstellung bekommen:

"Erstellen Sie eine Funktion für die Addition zweier
std_ulogic_vector‐Zahlen, mit unbestimmter Vektorlänge."

Wie man den Operator überläd ist ja kein Problem. Ich verstehe nur nicht 
wie ich das mit der unbestimmten Vektorlänge hinbekommen soll. Ich wär 
für eure Hilfe sehr dankbar.

Gruß Crouch

von SeriousSam (Gast)


Lesenswert?

Es gibt doch das Attribut length für Vektoren. Dann musst du nur noch 
eine Schleife über alle Bits machen und sie addieren.

von Iulius (Gast)


Lesenswert?

warum so kompliziert ?

2 vektoren reingeben, die länge des ausgabevektors auf die des größen+1 
und dann simpel addieren per "+"

von freak (Gast)


Lesenswert?

kannste das ma quellcode mäßig darstellen?

von Iulius (Gast)


Lesenswert?

mal simpel :
1
process (in1,in2)
2
  
3
  function add(in1,in2 : std_ulogic_vector ) return std_ulogic_vector  is
4
    variable result1 : std_ulogic_vector(in1'length-1 downto 0);
5
    variable result2 : std_ulogic_vector(in2'length-1 downto 0);
6
  begin
7
8
    if in1'length>in2'length then
9
      result1 := std_ulogic_vector(unsigned(in1)+unsigned(in2));
10
      return result1;
11
    else
12
      result2 := std_ulogic_vector(unsigned(in1)+unsigned(in2));
13
      return result2;
14
    end if;
15
  end add;


den Fall des überlaufs hab ich jetzt nicht bedacht, aber ansonsten 
funktioniert das und ist synthesefähig.

Es wird halt je nach Situation zur Snythesezeit ein Addierer in bezug 
auf den größeren Summanden erzeugt.

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.