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.