Wieder mal ein seltsames Xilinx-Verhalten: Ich möchte diesen hier genannten Halbbandfilter bauen und habe zum Testen ein 64 wort Array mit 64 festen Koeffizienten statisch multipliziert. Erg01 = Wert01 * Koeff01 Erg02 = Wert02 * Koeff02 ... Erg64 = Wert64 * Koeff64 Beim Summieren kann ich freilich nicht alle 64 Ausgänge in einem Schlag abarbeiten, daher habe ich es in einem binären Baum mit jeweils 4 Additionen versucht: Summe01_04 = Erg01 + Erg02 + Erg03 + Erg04; Summe05_08 = Erg05 + Erg06 + Erg07 + Erg08; ... Summe61_64 = Erg61 + Erg62 + Erg63 + Erg64; Das ganze dann nochmals um dann am Ende eine Summe zu bekommen. Das will Xilinx nicht mappen, weil es angeblich nicht in die DSP48-Elemente passt. (die Summation lag auf der Top-Ebene ohne Prozess) Komisch: Wenn ich denselben Code in einen Prozess packe, wodurch der die einzelnen Stufen pipelinen muss, und es nicht mehr selber verteilen kann, routet er das Design ohne Kommentar und ohne Probleme. Im Gegenteil: "Grüner" geht es gar nixcht mehr! Woran kann das liegen? Irgendwie scheint er zu versuchen, einen Teil der Summation in den Adder des DSP-Elements zu schieben. ?
Du kannst die Verwendung der DSP48 Blöcke deaktivieren, dann gehts vielleicht auch rein kombinatorisch. Normal steht das meines Wissens auf "Auto".
Ich will sie je nehmen, aber "er" nicht :-)
Ich denke, wenn du einen getakteten Prozess draus machst, klappts und er nimmt die DSP48 Einheiten? Ein DSP48 kann ja nur 2 Summanden verarbeiten, vielleicht solltest du das umschreiben, dass immer nur 2 pro Stufe verarbeitet werden.
Ich denke, das Problem ist, dass du ohne den Prozess deinen kompletten Addiererbaum in einem Takt abgearbeitet haben möchtest (kombinatorisch). Der kombinatorische Pfad wird sehr lang, bei in Filtern üblichen Datenbreiten erst recht. Deine Additionen mit 4 Koeffizienten werden von xst auch noch einmal zu bäumen aus binären addieren synthetisiert. Ohne Pipelining wird es nicht gehen. Wenn du keine DSP48 verwenden möchtest und auf Virtex5/6 oder Spartan6 arbeitest könnte das hier für dich interessant sein: http://myfpgablog.blogspot.com/2011/10/ternary-adder-in-lut62.html
Simon schrieb: > Deine Additionen mit 4 Koeffizienten werden von xst auch noch einmal zu > > bäumen aus binären addieren synthetisiert. Das hat aber nichts damit zu tun, dass er es nicht mappen kann. Ich tippe eher darauf, dass Du keine eindeutige Strategie festgelegt hast bez Area / Speed. Üblicherweise steht das defaultmässig auf balanced, was dazu führt, dass er bei einer kleinen Designänderung schon mal schnell an die Chipgrenzen kommt. Wenn da mehr getaktet wird, dann stellt er gfs mehr auf timing orientiert und kann irgendwas später nicht mehr reduzieren.
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.