Xilinx HLS Dividierer

Gast #5834393
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
};
Gast #5834901
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
Gast #5835463
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
Gast #5867703
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?
Gast #5867858
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.