Forum: FPGA, VHDL & Co. Xilinx HLS Dividierer


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Combinator (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo, da ich RTL nicht mehr sehen kann, habe mal Xilinx HLS angeworfen.
Es scheint mir als würde der aber einfach keinen kombinatorischen 
Dividierer einbauen wollen. Mit Multiplizierern klappt es wunderbar.
Braucht man dafür irgendwie irgendwo eine IP Lizenz?
Alternativ sollte ich mir den Divisionsalgorithmus ja auch als 
kombinatorische C++ Funktion zusammenbasteln können. Allerdings möchte 
ich möglichst high level bleiben.
#include "systemc.h"

SC_MODULE(tempc) {
  sc_in< sc_uint <32> > a,b;
  sc_out< sc_uint <32> > y;

  SC_CTOR(tempc) {
    SC_METHOD(func);
  sensitive <<a <<b;
    }

void func() {
        y = a.read() / b.read();
}
};

von Duke Scarring (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Combinator schrieb:
> Hallo, da ich RTL nicht mehr sehen kann, habe mal Xilinx HLS angeworfen.
> Es scheint mir als würde der aber einfach keinen kombinatorischen
> Dividierer einbauen wollen.
32 Bit / 32 Bit?
Hast Du Dir mal überlegt, wie groß die Logik wird?
Kannst ja mal mit 4 Bit / 4 Bit testen.

Ich dividiere i.d.R. mit einer FSM, ähnlich der von Lothar:
http://www.lothar-miller.de/s9y/archives/29-Division-in-VHDL.html

> Braucht man dafür irgendwie irgendwo eine IP Lizenz?
Nimm es mir nicht übel, Du brauchst eine Lizenz für die Grundlagen.
HLS ist nicht das Allheilmittel...

Duke

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Combinator schrieb:
> Es scheint mir als würde der aber einfach keinen kombinatorischen
> Dividierer einbauen wollen.
Und was meint er zum Thema? Was macht er stattdessen? Und wie stellst du 
das fest?

Duke Scarring schrieb:
> 32 Bit / 32 Bit?
> Hast Du Dir mal überlegt, wie groß die Logik wird?
Und langsam erst...

von Combinator (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Lothar M. schrieb:
> Und was meint er zum Thema? Was macht er stattdessen? Und wie stellst du
> das fest?

stattdessen wird eine getaktete Logik erzeugt. Die Synthese baut selber 
einen Clock und Reset Pin ein. Diese sieht man im Top-Level und bei 
einer (Behavioral) Simulation werden Taktzyklus gebraucht.

Addition, Subtraktion und Multiplikation können rein kombinatorisch 
erzeugt werden. Seltsam, dass sich die Software bei der Division quer 
stellt.

Grüße

von Combinator (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Bitte entschuldigt den Doppel-Post. Eine 4 Bit Version ist ebenfalls 
getaktet.

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Combinator schrieb:
> Seltsam, dass sich die Software bei der Division quer stellt
Sagt der Laie...
Was steht denn zum Kapitel "Division" im Handbuch des Compilers?

Aber wenn das dein ganzer Code ist und irgendwer da einen Takt rein 
bastelt, dann bin ich froh, dass ich VHDL mache  😉

von Schlumpf (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Lothar M. schrieb:
> Aber wenn das dein ganzer Code ist und irgendwer da einen Takt rein
> bastelt, dann bin ich froh, dass ich VHDL mache  😉

Ich auch... :-)

von Weltbester FPGA-Pongo (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Schlumpf schrieb:
> Ich auch... :-)

Und ich auch!

Ich behaupte mal, alle sind froh, wenn wir uns nicht mit HLS rumplagen 
müssen und solange es nicht um die Übersetzung von komplexen 
C-Strukturen geht, wird das auch mehrheitlich so bleiben.

Die Frage das TE bleibt aber!

Bei Altera kann ich mich an einen LPM-Devider erinnern, der das konnte:

Duke Scarring schrieb:
> 32 Bit / 32 Bit?
> Hast Du Dir mal überlegt, wie groß die Logik wird?
Die blieb erstaunlich klein.

Lothar M. schrieb:
> Duke Scarring schrieb:
>> 32 Bit / 32 Bit?
>> Hast Du Dir mal überlegt, wie groß die Logik wird?
> Und langsam erst...
Ein Takt pro Bit. Voll als pipeline.

Das Ding haben sie aus dem Qurstus wieder rausgenommen.

@TE:

1) Was wäre denn mit CORDIC? Der kann auch dividieren.

2) Wozu wird HLS verwendet? Welche Dinge habt ihr in C, die sich mit 
VHDL nicht direkt machen lassen?

von Duke Scarring (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du Schlafprobleme oder bist Du im Ausland unterwegs ;-) ?

Weltbester FPGA-Pongo schrieb im Beitrag #5867703:
> Lothar M. schrieb:
>> Duke Scarring schrieb:
>>> 32 Bit / 32 Bit?
>>> Hast Du Dir mal überlegt, wie groß die Logik wird?
>> Und langsam erst...
> Ein Takt pro Bit. Voll als pipeline.
Ja seriell. Ich meinte eigentlich parallel.

Ich habe den folgenden Code mal im Lattice Diamond durchnudeln lassen:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity div32 is
  port
  (
    dividend : in unsigned( 31 downto 0);
    divisor  : in unsigned( 31 downto 0);
    --
    quotient : out unsigned( 31 downto 0)
  );
end entity div32;

architecture bhv of div32 is
begin

  quotient <= dividend / divisor;

end architecture bhv;

Dafür werden ca. 2000 LUT4 benötigt und der Chip ist zu einem Drittel 
voll:
   Number of registers:      0 out of  7209 (0%)
      PFU registers:            0 out of  6864 (0%)
      PIO registers:            0 out of   345 (0%)
   Number of SLICEs:      1095 out of  3432 (32%)
      SLICEs as Logic/ROM:   1095 out of  3432 (32%)
      SLICEs as RAM:            0 out of  2574 (0%)
      SLICEs as Carry:        593 out of  3432 (17%)
   Number of LUT4s:        2189 out of  6864 (32%)
      Number used as logic LUTs:        1003
      Number used as distributed RAM:     0
      Number used as ripple logic:      1186
      Number used as shift registers:     0
   Number of PIO sites used: 96 + 4(JTAG) out of 115 (87%)

Ich fürchte HLS macht ohne spezielles Pragma auch eine parallele Lösung 
draus.

Duke

von Weltbester FPGA-Pongo (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Duke Scarring schrieb:
> Hast Du Schlafprobleme oder bist Du im Ausland unterwegs ;-) ?

Umgeschaltet auf Nachtarbeit, da Urlaub und sehr heiß tagsüber. Ein 
Auslandsaufenthalt und Zeitverzögerung spielte auch mit. Jo!

von Markus F. (mfro)


Bewertung
0 lesenswert
nicht lesenswert
Weltbester FPGA-Pongo schrieb im Beitrag #5867703:
> Das Ding haben sie aus dem Qurstus wieder rausgenommen.

LPM_DIVIDE?

Ich wüsste nicht, dass da etwas rausgenommen worden wäre: 
https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/ug/ug_lpm_alt_mfug.pdf

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.