mikrocontroller.net

Forum: FPGA, VHDL & Co. Sehr schneller Addierer


Autor: Dschan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Alle zusammen,

könnt ihr bitte Vorschläge zu folgenden Problem machen.

Ich möchte auf einen Virtex-5 einen Addierer erstellen der 4 39bit 
Zahlen addiert.

Problem dabei ist, dass der Addierer zwischen Eingang und Ausgang max 
ein Takt haben darf! besser wenn die Addition in einem Takt abläuft.

Hier ein kleines Übersichtbild


         |------|
39-------| +    |
         |      |
39-------| +    |
         |      |---|-----
39-------| +    |   |
         |      |   |
    |----| +    |   |
    |    |------|   |
    |               |
    |--41 => 39  ---|

als kleiner Anreitz das Ding muß mit 300 MHz laufen!!!!

Ich habe versucht es mit DSP´s zu lösen aber die schaffen gerade mal 
250MHz
dabei dachte ich immer die sind soooo schnell. kann es sein, dass ich 
bei den DSP´s die Anschlüsse für die Kaskadierung nutzen muß um die 
DSP´s SCHNELL hintereinander zu schalten?  Wenn ja kann mir jemand das 
kurz  skizzieren / erläutern?

Oder gibt es noch bessere Ansätze muß nicht mit DSP´s passieren.

Autor: add (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was für eine Art Addierer verwendest du denn bis jetzt?

Autor: Dschan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einen IP Core und zwar unter "FPGA Features and Design" -"XtremeDSP 
Slices" - "Adder / Subtracter"

und da A:B and C und dann glaube ich muß ich mit PCOUT weiter zum 
nächsten Addierer! aber wie ich die Eingänge von der nächsten Stufe 
wählen muß weiß ich nicht :o(

Autor: Kest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stichwort: Pipeline!

Es dauert zwar mehrere Takte, bis das erste Resultat fertig ist, ab da 
aber bekommst Du mit jedem Takt eins!

Zum Beispiel in zwei Takten:

1. a1 <= a(38 downto 0) +  b(38 downto 0);
2. ba <= c(38 downto 0) + a1(38 downto 0);


Ich kenne mich mit Virtexen nicht aus, aber ich denke 300 MHz sind 
machbar. Je länger die Pipeline, desto schneller.


Grüße,

Kest

Autor: Dschan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm,

und c einmal abtakten damit die daten zueinander wieder richtig stehen. 
könnte klappen. probiere ich mal.

mal sehen was die ISE sagt

Autor: chipschmied (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
<Zum Beispiel in zwei Takten:
<
<1. a1 <= a(38 downto 0) +  b(38 downto 0);
<2. ba <= c(38 downto 0) + a1(38 downto 0);
                              ^^ --übertrag verpasst, 39 ist richtig

Autor: chipschmied (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das carry über 40 bit zu führen ist das Problem, das zeit kostet. Du 
musst die Summanden teilen, in Hälften oder eher in Gruppen zu 4 bits 
(geschätzt).
diese gruppen kannst du dann addieren, bei den 6 LUT's des V5 alle 4 
summanden und die 2 carry bits gemeinsam. Da sind aber viele 
teilergebnisse zwischenzuspeichern. und es braucht etliche takte bis zum 
ersten ergebniss. Statt den LUT's kanns du auch BRAMS verwenden (ob die 
300 MHZ schaffen ?). aber dann kannst du mit einer "BRAM_LUT am Ausgang 
gleichzeitig summe und carries ermitteln. (sonst braucht es 3 LUTS pro 
bit). allerdings kannst du mit einem BRAM nur 4 bit verarbeiten.

Aber was soll das Handgestricke, ich les grad die DSP-BLöcke im V5 
schaffen 550 MHz und addieren 2x48 bit.

Autor: Jürgen S. (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja,ja, aber die 550Mhz gelten für das Schalten ohne Routen und 
Datentranssport. Zudem sind es nur 2 Additionen und er braucht vier.

Ist es wirklich nötig, alle 4 Additionen regelmäßig unter den 1/300 MGhz 
zu schaffen ?

Autor: add (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder wenn es unbedingt unverzögert in einem Takt sein muss und 
Ressourcen keine Rolle spielen, mal einen eigenen schnellen adder 
basteln.
Carry look-ahead adder oder Carry select adder etwa. Am besten noch auf 
die Virtex-LUTs angepasst.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
300MGHz? Wow, das ist mal schnell :)

Autor: Jürgen S. (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
MGHz  = "M"e "G"a Hz :-)

Autor: damicha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn es unbedingt 300 MHz sein sollen und ein Taktzyklus für die 
Berechnung zur Verfügung steht, wäre dann redundante Logik eine Option?

Autor: Schargel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auch die redundante Logik muss verwaltet werden - zumindest gemuxet - 
macht eben mindestens einen Takt.

Autor: 5. semester (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jo ich glaub mit einer takt, da hilft nur nen carry look ahead mit
entsprechender parallel verarbeitender carry logic.
letzten endes sind da aber auch einige gatter in serie,  und die latezen
dieser addieren sich natrülich auch.
und kompackt ist das auch nicht bei 4 summanden a 39 bit....

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.