mikrocontroller.net

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


Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.  ;-)

Autor: Thomas Reinemann (Firma: abaxor engineering) (abaxor)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Aehh (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Infos.

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt habe ich einen Fall, wo XST bei der Synthese sehr unterschiedliche 
Taktfreqzenzen ausgibt:

Mit Division:
result_int32 <= (sum_abcd + center4)/128;

Mit Shift:
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...

Autor: berndl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... um mir in Zukunft viel Arbeit durch unnötige Implementierung sparen 
zu können. ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.