Forum: FPGA, VHDL & Co. Shift oder Division?


von Mike (Gast)


Lesenswert?

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)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> 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.  ;-)

von Thomas R. (Firma: abaxor engineering) (abaxor)


Lesenswert?

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

von Aehh (Gast)


Lesenswert?

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.

von Mike (Gast)


Lesenswert?

Danke für die Infos.

von Mike (Gast)


Lesenswert?

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...

von berndl (Gast)


Lesenswert?

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...

von Mike (Gast)


Lesenswert?

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).

von Mike (Gast)


Lesenswert?

> 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.

von Mike (Gast)


Lesenswert?

... 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
Noch kein Account? Hier anmelden.