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?
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.
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)?
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.
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...
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,
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.
> 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...
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
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...
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.
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% |
ist ja nett, nur was was die RAM-Synthesesache eigens mit der Fragestellung nach den speeds zu tun?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.