Hallo, wenn ich durch eine Potenz von 2 teile, welche Schreibweise eignet sich in VHDL da besser: 1. Shift-Operator 2. Division-Operator Der Divisions-Operator ist sicherlich schöner, allerdings macht man sich ja auch davon abhängig, dass der Compiler das richtig erkennt. Bei XST sicherlich kein Ding, aber in Hinblick auf die Anforderung "Portierbarkeit" (und für Doku in Form von Blockschaltbildern für Diplomarbeit): Wäre es vielleicht doch besser/sicherer, da den Shift-Operator explizit zu verwenden? Oder spielt das wirklich an dieser Stelle keine Rolle? Danke, Mike (nur mal so nach eurer Einschätzung fragend)
> Der Divisions-Operator ist sicherlich schöner und besser lesbar und garantiert genauso portabel wie der Shift-Operator. > der Compiler das richtig erkennt Der Synthesizer muß auch beim Shift-Operator erkennen, dass nicht wirklich ein Shift gemeint ist, sondern ein Multiplexer. > Wäre es vielleicht doch besser/sicherer, da den > Shift-Operator explizit zu verwenden? Nein. > Oder spielt das wirklich an dieser Stelle keine Rolle? Spielt es nicht. Wenn du von der Funktion her durch 2, 4, 8... teilen mußt, dann zeichne eine Teilerstufe in die Doku. Wenn du funktionell schieben mußt, dann einen Shift. Nur so kommt die eigentliche Idee klar heraus. Dass eine Division durch eine 2er Potenz mit einen Multiplexer oder einen Shift substituierbar ist, gehört für den, der das realisieren muß/soll/darf zum Allgemeinwissen. ;-)
Hallo Mike, du machst dir hier an der falschen Stelle Gedanken. Wenn ein Compiler/Syntheser das nicht erkennt wäre es schlimm. Dann erhälst du aber sofort eine Fehlermeldung, weil die Division nicht synthetisierbar wäre. Versuche dasselbe mal mit einer 3. Immer voraus gesetzt, dein Dividend ist ein veränderliches Signal. Tom
Nur so nebenbei. Falls man mit dem 2er Komplement negative Zahlen zulaesst muss man beim Teilen als Schieben das hoechstwertige Bit reinschieben und nicht einfach eine Null.
Jetzt habe ich einen Fall, wo XST bei der Synthese sehr unterschiedliche Taktfreqzenzen ausgibt: Mit Division:
1 | result_int32 <= (sum_abcd + center4)/128; |
Mit Shift:
1 | result_int32 <= shift_right(sum_abcd + center4, 7); |
XST sagt zu Fall 1: Timing constraint: Default period analysis for Clock 'clk' Clock period: 10.190ns (frequency: 98.140MHz) Total number of paths / destination ports: 187011 / 932 ------------------------------------------------------------------------ - Delay: 10.190ns (Levels of Logic = 40) Source: sum_abcd_0 (FF) Destination: result_int32_26 (FF) Source Clock: clk rising Destination Clock: clk rising ... un zu Fall 2: Timing constraint: Default period analysis for Clock 'clk' Clock period: 4.845ns (frequency: 206.398MHz) Total number of paths / destination ports: 7320 / 930 ------------------------------------------------------------------------ - Delay: 4.845ns (Levels of Logic = 33) Source: mult_a_inst/result32_0 (FF) Destination: sum_ab_31 (FF) Source Clock: clk rising Destination Clock: clk rising Das ist mit unerklärlich, da doch beide Ausdrücke äquivalent sind...
Hi, ich hab' ja keine Ahnung, was die Softies bei den Herstellern so alles programmieren, aber die Zeile: Source: mult_a_inst/result32_0 (FF) deuted ja darauf hin, dass sie dir einen Multiplier eingebaut haben. Falls ja, dann zeigt mir das mal wieder, dass man halt eine Vorstellung von HW haben muss um eine 'gute' HW zu bauen. Was bezweckst du eigentlich mit diesen Versuchen, was soll die Message sein? Dass oefters die von Hand gestrickte HW schneller ist als das was dir Xilinx, Altera, und andere... bieten koennen? Da kannst du von Release zu Release als mal heftige Ueberraschungen erleben...
Nee, nee, das ist schon richtig. mult_a_inst ist Teil meines Moduls an anderer Stelle. D. h. der kritische Pfad befindet sich genau an der Stelle, wo ich es erwarte (und nicht bei der Division durch 128 wie in Fall 1).
> Was bezweckst du eigentlich mit diesen Versuchen, was soll die Message
sein? Dass oefters die von Hand gestrickte HW schneller ist als das was
dir Xilinx, Altera, und andere... bieten koennen?
Ganz ehrlich: Ich würde schon erwarten, dass die Tools an solchen
Stellen das richtig umsetzen. Wenn ich mir den Synthesereport anschaue
und sehe was XST so alles erkennt und wegoptimiert, bin ich schon
positiv beeindruckt.
Was ich mit diesen Versuchen bezwecke? Ich will ein Gefühl dafür
bekommen, was wie in Hardware umgesetzt wird.
... um mir in Zukunft viel Arbeit durch unnötige Implementierung sparen zu können. ;-)
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.