Forum: FPGA, VHDL & Co. Addieren/Multiplizieren in VHDL


von tb (Gast)


Lesenswert?

Guten Abend,

ich habe eine Frage bezüglich einer Multiplikation / Addition in VHDL. 
Wieviele Takte werden für folgende Addition / Multiplikation benötigt?
1
sum <= sum + unsigned(data_a) * unsigned((count sll 1)+1) + unsigned(data_b) * unsigned (((count sll 1) + 1)+1);


data_a und data_b sind 12-Bit STD_LOGIC_VECTOR Signale. Count ist vom 
Typ unsigned und ebenfalls 12 Bit groß. Liegt das Ergebis im Signal sum 
in einem clk-sensitiven Prozess einen Takt später an? Oder werden für 
die Multiplikation mehrere Takte benötigt?

Schönen Abend,

Gruß

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


Lesenswert?

tb schrieb:
> Wieviele Takte werden für folgende Addition / Multiplikation benötigt?
Keiner, und da ist ja auch gar kein Takt beschrieben.
Das Ganze ist ein rein kombinatorischer Vorgang, der lediglich eine 
Durchlaufzeit hat.

> Liegt das Ergebis im Signal sum in einem clk-sensitiven Prozess
> einen Takt später an?
Nein, denn da ist gar kein Takt beschrieben.

> Oder werden für die Multiplikation mehrere Takte benötigt?
Nein, da taucht kein Takt auf.

Was mich zur grundlegenden Frage bringt:
Was ist dein eigentliches Problem?

von tb (Gast)


Lesenswert?

Guten Morgen Lothar, die Berechnung ist wie folgt eingebunden:
1
process(clk)
2
begin
3
if rising_edge(clk) then
4
  if (valid = '1')  then
5
     sum <= sum + unsigned(data_a) * unsigned((count sll 1)+1) + unsigned(data_b) * unsigned (((count sll 1) + 1)+1);
6
  else    
7
     sum <= (others => '0');  
8
  end if;  
9
end if;  
10
end process;


Mit jedem Takt, während das valid-Signal '1' ist, ändern sich die 
Eingangssignale data_a und data_b. Und ich möchte nun die Berechnung für 
den Zeitraum valid '1' durchführen. Deshalb ist es wichtig zu wissen, ob 
im nächsten Takt jedes mal das Ergebnis vorliegt, denn data_a und data_b 
ändern sich Takt für Takt. In der Simulation/Testbench funktioniert es 
jedenfalls. Wie siehts mit der Realität aus?

von Bronco (Gast)


Lesenswert?

tb schrieb:
> Wie siehts mit der Realität aus?

Hängt von Deinem FPGA und der Taktfrequenz ab.
Wenn der FPGA schnell genug ist bzw. die Taktfrequenz niedrig genug, 
wird die Zeit zwischen zwei Takten ausreichen. Ansonsten eben nicht.
Aber das sollte Dir die Tool-Chain dann auch sagen.

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


Lesenswert?

tb schrieb:
> Guten Morgen Lothar, die Berechnung ist wie folgt eingebunden:
Es war mir schon klar, dass der erste Codeausschnitt nicht die ganze 
Wahrheit ist. Ich wollte nur in aller Deutlichkeit auf die 
Undeutlichkeit hinweisen...   ;-)

> Wie siehts mit der Realität aus?
Weil du es so beschrieben hat, müssen die Multiplikationen und die 
Addition in 1 Takt abgewickelt werden. Auf einem ganz anderen Blatt 
steht allerdings, wie hoch die Taktfrequenz sein darf...  :-o

Aber zur Beruhigung: in aktuellen FPGAs findest du dedizierte 
Multiplizierer, und ein Addierer im FPGA ist alltägliches Brot. Du 
kannst also je nach Wortbreite (die fehlt nämlich noch immer) und 
abhängig vom Ziel-FPGA ohne weiteres mit maximalen Taktfrequenzen 
zwischen 5 und 200MHz rechnen.
Du willst es genauer? Geht leider nicht, denn da fehlen noch 
grundlegende Angaben...

von Chris (Gast)


Lesenswert?

tb schrieb:
> Wie siehts mit der Realität aus?

Mach doch deine Taktrate deiner Toolchain bekannt. Die wird dir dann 
genau sagen, was in Realität möglich ist. Nach der Synthese, dem Mapping 
und PAR werden doch immer die maximal erreichbaren Geschwindigkeiten 
angezeigt.

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


Lesenswert?

Chris schrieb:
> Mach doch deine Taktrate deiner Toolchain bekannt.
Stichwort: Timing Constraints

von VHDLler (Gast)


Lesenswert?

Lothar Miller schrieb:
> Aber zur Beruhigung: in aktuellen FPGAs findest du dedizierte
> Multiplizierer, und ein Addierer im FPGA ist alltägliches Brot.

Wobei es noch einen Unterschied macht, ob der Added manuel in Logik 
aufgebaut ist, oder als fertiger AKU in einem DSP-element, am Besten 
hinter dem MUL, sitzt. Dann sind da Frequenzen bis 300 MHz drin, also 
MUL + Addition + Akumulation.

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.