Xilinx und seine speed grades

Gast #2442461
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.
Moderator (Firma: Titel) Persönliche Seite #2443116
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...
Gast #2443135
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,
#2443159
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...
Gast #2445579
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.
Moderator (Firma: Titel) Persönliche Seite #2445766
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%
Moderator (Firma: Titel) Persönliche Seite #2445820
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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren