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.
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(
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
Hm, und c einmal abtakten damit die daten zueinander wieder richtig stehen. könnte klappen. probiere ich mal. mal sehen was die ISE sagt
<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
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.
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 ?
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.
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?
Auch die redundante Logik muss verwaltet werden - zumindest gemuxet - macht eben mindestens einen Takt.
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....
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.