Forum: FPGA, VHDL & Co. Xilinx HLS Dividierer


von Combinator (Gast)


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.
1
#include "systemc.h"
2
3
SC_MODULE(tempc) {
4
  sc_in< sc_uint <32> > a,b;
5
  sc_out< sc_uint <32> > y;
6
7
  SC_CTOR(tempc) {
8
    SC_METHOD(func);
9
  sensitive <<a <<b;
10
    }
11
12
void func() {
13
        y = a.read() / b.read();
14
}
15
};

von Duke Scarring (Gast)


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. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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)


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)


Lesenswert?

Bitte entschuldigt den Doppel-Post. Eine 4 Bit Version ist ebenfalls 
getaktet.

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


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)


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)


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)



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:
1
library ieee;
2
use ieee.std_logic_1164.all;
3
use ieee.numeric_std.all;
4
5
entity div32 is
6
  port
7
  (
8
    dividend : in unsigned( 31 downto 0);
9
    divisor  : in unsigned( 31 downto 0);
10
    --
11
    quotient : out unsigned( 31 downto 0)
12
  );
13
end entity div32;
14
15
architecture bhv of div32 is
16
begin
17
18
  quotient <= dividend / divisor;
19
20
end architecture bhv;

Dafür werden ca. 2000 LUT4 benötigt und der Chip ist zu einem Drittel 
voll:
1
   Number of registers:      0 out of  7209 (0%)
2
      PFU registers:            0 out of  6864 (0%)
3
      PIO registers:            0 out of   345 (0%)
4
   Number of SLICEs:      1095 out of  3432 (32%)
5
      SLICEs as Logic/ROM:   1095 out of  3432 (32%)
6
      SLICEs as RAM:            0 out of  2574 (0%)
7
      SLICEs as Carry:        593 out of  3432 (17%)
8
   Number of LUT4s:        2189 out of  6864 (32%)
9
      Number used as logic LUTs:        1003
10
      Number used as distributed RAM:     0
11
      Number used as ripple logic:      1186
12
      Number used as shift registers:     0
13
   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)


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)


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

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.