Forum: FPGA, VHDL & Co. Xilinx und seine speed grades


von JBB (Gast)


Lesenswert?

Folgendes Testergebnis:

Kombinatorische Verzögerung bei einem Design beträgt

speed grade "-2" : 43.2 ns
speed grade "-3" : 34.5 ns
speed grade "-4" : 34.5 ns

2x getestet! Warum liefert der speed grade 4 dasselbe Ergebnis?

von abc (Gast)


Lesenswert?

Wenn du kein Timing angibst oder beides im Rahmen liegt, warum sollte 
sich der Router abmühen den -4er schneller zu bekommen?

Ansonsten kannst du aber auch einfach Pech haben und der Durchlauf mit 
dem -4er ist per Zufall schlecht geworden.

Eine Differenz von 20-30% nach minimalen Änderungen (=Zufall des 
Routers) ist bei den aktuellen Xilinx Tools völlig normal.


Kuck dir doch einfach die Pfade vom Timing Report an und schau ob es die 
gleichen sind und gleiche Verzögerungen beinhalten.

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


Lesenswert?

JBB schrieb:
> 2x getestet!
Gemessen oder wie?

> Warum liefert der speed grade 4 dasselbe Ergebnis?
Was hast du von ihm VERLANGT (in den Timing Constraints)?

von JBB (Gast)


Lesenswert?

Wenn man einen schnelleren Chip nimmt, müsste der Zeitbedarf für die 
Kombinatorik doch sinken. Dies ist von 2 auf 3 ja auch der Fall - ganz 
ohne Constraints.

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


Lesenswert?

JBB schrieb:
> müsste der Zeitbedarf für die Kombinatorik doch sinken.
Müsste, hätte, wäre, sollte, dürfte...
Ich liebe den Konunktiv... ;-)

Wenn du der Toolchain nichts VORSCHREIBST (Constraints vergibst), dann 
darf die machen, was sie will.

Lothar Miller schrieb:
> JBB schrieb:
>> 2x getestet!
> Gemessen oder wie?
Sollte heißen: woher hast du diese Zahlen? Vom Synthesizer?
Dann ist das nicht mehr, als eine schriftliche Absichtserklärung...

von Hannes (Gast)


Lesenswert?

Die Zeiten, die der Synthesizer ausgibt, kommen ja irgendwo her. Er 
nutzt dazu die statischen Verögerungen, wie sie modellhaft hinterlegt 
sind. Kann sein, dass der speed grade 4 der aktuellen ISE noch nicht 
geläufig ist.

Beim Xilinx stimmt ja so einiges nicht.

Beispiel RAM: Man baut ein RAM mit Breiten, die der Synthesizer nicht 
kann, weil es sie nicht gibt. Trozdem hat der Coregen die Kombi 
vorgegeben und ermöglicht.

Wer freiwillig Xilinx nutzt, ist selber Schuld,

von W.S. (Gast)


Lesenswert?

Hannes schrieb:
> Wer freiwillig Xilinx nutzt, ist selber Schuld

Ach ja?

Hast du was Besseres?
Immerhin hat Xilinx etwas, das sonst keiner hat: ne freie Toolchain.

W.S.

von Georg A. (georga)


Lesenswert?

> Kann sein, dass der speed grade 4 der aktuellen ISE noch nicht
> geläufig ist.

Dann gibts einen Fehler...

> Beispiel RAM: Man baut ein RAM mit Breiten, die der Synthesizer nicht
> kann, weil es sie nicht gibt. Trozdem hat der Coregen die Kombi
> vorgegeben und ermöglicht.

Bitte mal konkrete Werte... Sowas könnte evtl. passieren, wenn man im 
Coregen den FPGA-Typ falsch eingestellt hat. Coregen weiss selbst 
nämlich schon genau, welche BRAMs die Zielarchitektur hat...

von Marius W. (mw1987)


Lesenswert?

W.S. schrieb:
> Immerhin hat Xilinx etwas, das sonst keiner hat: ne freie Toolchain.

Auch Altera und soweit ich weiß Lattice haben eine freie Toolchain. 
Jeder sollte sich die Entwicklungsumgebung und den FPGA suchen, mit dem 
er am besten klar kommt.

MfG
Marius

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


Lesenswert?

Hannes schrieb:
> Beispiel RAM: Man baut ein RAM mit Breiten, die der Synthesizer nicht
> kann, weil es sie nicht gibt.
Zeig das doch mal an einem Beispiel...

Ich als Synthesizer würde bei einem 13 Bit breiten RAM einfach ein paar 
Datenleitungen nicht anschließen...

von Hannes (Gast)


Lesenswert?

W.S. schrieb:
> Hannes schrieb:
>
>> Wer freiwillig Xilinx nutzt, ist selber Schuld
> Ach ja?

Ja. Doku mangelhaft, Beispiele nicht funktionsfähig, Support lustlos - 
ich habe da so meine Erfahrungen gemacht.

Xilinx ist in vielen Dingen einfach immer eine Spur ungenauer, als 
Mitbewerber. Monopolistenverhalten eben.

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


Lesenswert?

Hannes schrieb:
> ich habe da so meine Erfahrungen gemacht.
Aber du teilst sie uns nicht mit?

Lothar Miller schrieb:
> Hannes schrieb:
>> Beispiel RAM: Man baut ein RAM mit Breiten, die der Synthesizer nicht
>> kann, weil es sie nicht gibt.
> Zeig das doch mal an einem Beispiel...

Georg A. schrieb:
>> Beispiel RAM: Man baut ein RAM mit Breiten, die der Synthesizer nicht
>> kann, weil es sie nicht gibt. Trozdem hat der Coregen die Kombi
>> vorgegeben und ermöglicht.
> Bitte mal konkrete Werte...

Weil da nichts kommt, hier mal ein Konterbeispiel:
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.NUMERIC_STD.ALL;
4
5
entity RAM is
6
    Port ( diA : in  STD_LOGIC_VECTOR (26 downto 0);
7
           doA : out STD_LOGIC_VECTOR (26 downto 0);
8
           diB : in  STD_LOGIC_VECTOR (37 downto 1);
9
           doB : out STD_LOGIC_VECTOR (37 downto 1);
10
           clk : in  STD_LOGIC);
11
end RAM;
12
13
architecture Behavioral of RAM is
14
   signal idxAw : unsigned (6 downto 0) := (others=>'0'); 
15
   signal idxAr : unsigned (6 downto 0) := (2=>'1',others=>'0'); 
16
   type Ram32x27 is array (0 to 127) of std_logic_vector (26 downto 0); 
17
   signal RamA : Ram32x27 := (others=>(others=>'0'));
18
   
19
   signal idxBw : integer range 0 to 7777 := 55; 
20
   signal idxBr : integer range 0 to 7777 := 0; 
21
   type Ram7778x37 is array (0 to 7777) of std_logic_vector (37 downto 1); 
22
   signal RamB : Ram7778x37 := (others=>(others=>'0'));
23
begin
24
   process begin
25
      wait until rising_edge(clk);
26
      idxAw <= idxAw+1;
27
      idxAr <= idxAr+1;
28
      if (idxBr/=7777) then  idxBr <= idxBr+1;
29
      else                   idxBr <= 0;
30
      end if;
31
      if (idxBw/=7777) then  idxBw <= idxBw+1;
32
      else                   idxBw <= 0;
33
      end if;
34
   end process;
35
36
   process begin
37
      wait until rising_edge(clk);
38
      RamA(to_integer(idxAw)) <= diA;
39
      RamB(idxBw) <= diB;
40
   end process;
41
      
42
   process begin
43
      wait until rising_edge(clk);
44
      doA <= RamA(to_integer(idxAr));
45
      doB <= RamB(idxBr);
46
   end process;
47
48
end Behavioral;
Daraus macht der Synthesizer:
1
# RAMs                                                 : 2
2
 128x27-bit dual-port block RAM                        : 1
3
 7778x37-bit dual-port block RAM                       : 1
4
# Counters                                             : 4
5
 13-bit up counter                                     : 2
6
 7-bit up counter                                      : 2
Und  braucht dafür:
1
Selected Device : 3s1400anfgg484-5 
2
 Number of BRAMs:                        20  out of     32    62%

von JBB (Gast)


Lesenswert?

ist ja nett, nur was was die RAM-Synthesesache eigens mit der 
Fragestellung nach den speeds zu tun?

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


Lesenswert?

JBB schrieb:
> ist ja nett, nur was was die RAM-Synthesesache eigens mit der
> Fragestellung nach den speeds zu tun?
Naja, wenn von dir keine Antwort kommt ...
> Lothar Miller schrieb:
>> JBB schrieb:
>>> 2x getestet!
>> Gemessen oder wie?
> Sollte heißen: woher hast du diese Zahlen? Vom Synthesizer?
... und Hannes irgendwelche Behautptungen in die Luft setzt, was soll 
man da tun?

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.