Shift oder Division?

Gast #1416987
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)
Moderator (Firma: Titel) Persönliche Seite #1417017
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.  ;-)
(Firma: abaxor engineering) #1417026
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
Gast #1418802
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...
Gast #1418806
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...
Gast #1418807
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).
Gast #1418810
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren