Forum: FPGA, VHDL & Co. Altera Cyclone II Takt erhöhen


von erwin86 (Gast)


Lesenswert?

Hallo,

ich habe mehrere 32 Bit Addierer auf einem Altera Cyclone II Baustein in 
Betrieb. Leider ist es nach Synthese usw. nicht möglich den Takt höher 
als 50 MHz einzustellen, da die maximale Taktrate mit 63MHz angegeben 
wird.

Gibt es eine Möglichkeit eine Optimierung der Schaltung durchzuführen, 
um die Schaltung z. B. mit 100 MHz oder mehr durchzuführen? Oder kann 
die Taktrate einfach höher eingestellt werden? Ich vermute allerdings, 
dass es dabei zu Hasards kommen könnte.

Vielen Dank für eure Hilfe...

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


Lesenswert?

erwin86 schrieb:
> Gibt es eine Möglichkeit eine Optimierung der Schaltung durchzuführen,
> um die Schaltung z. B. mit 100 MHz oder mehr durchzuführen?
Dazu ist so ohne weiteres keine Aussage möglich, weil die Aufgabe und 
deren Umsetzung nicht bekannt ist.

> Gibt es eine Möglichkeit eine Optimierung der Schaltung durchzuführen,
> um die Schaltung z. B. mit 100 MHz oder mehr durchzuführen?
Pipelining wäre ein Stichwort.
Es kommt allerdings darauf an, ob du deine Rechenoperationen alle in 
einem Takt abgeschlossen haben mußt...

von erwin86 (Gast)


Lesenswert?

Lothar Miller schrieb:
> Es kommt allerdings darauf an, ob du deine Rechenoperationen alle in
> einem Takt abgeschlossen haben mußt...

Es handelt sich um rückgekoppelte Addierer, also wird das erste Ergebnis 
einer Addition mit dem nächsten Wert der am Addierer anliegt wieder 
addiert. Dadurch liegt ein korrektes Ergebnis frühstens nach 2 Takten 
an.

Ich würde halt gerne diesen Bereich mit einer höheren Taktfrequenz 
betreiben.

von erwin86 (Gast)


Lesenswert?

erwin86 schrieb:
> .

Wie ist es denn möglich Pipelinig im FPGA durchzuführen. Ich kenne das 
nur aus dem Bereich µC, das halt mehrere Befehle parallel abgearbeitet 
werden können.

Beim FPGA wird das doch sowieso schon gemacht, oder?

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


Lesenswert?

erwin86 schrieb:
> Beim FPGA wird das doch sowieso schon gemacht, oder?
In deinem Design offenbar schon, denn du schreibst ja:
erwin86 schrieb:
> Es handelt sich um rückgekoppelte Addierer

Hast du da noch irgendwelche Multiplexer drin, weil ein Addierer allein 
(und seien es 32 Bit) sollte schon noch schneller sein...

Bei einem langsamen Spartan3 komme ich damit auf 200MHz:
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.NUMERIC_STD.ALL;
4
5
entity adder23bit is
6
    Port ( clk : in  STD_LOGIC;
7
           a : in  STD_LOGIC_VECTOR (31 downto 0);
8
           r : out  STD_LOGIC_VECTOR (31 downto 0));
9
end adder23bit;
10
11
architecture Behavioral of adder23bit is
12
signal l : unsigned(31 downto 0) := (others=>'0');
13
14
begin
15
  process begin
16
    wait until rising_edge(clk);
17
    l <= l + unsigned(a);
18
  end process;
19
  r <= std_logic_vector(l);
20
end Behavioral;

von Stefan R. (stefripp)


Lesenswert?

Welchen Geschwindigkeitscode hat dein Cyclone II?

von erwin86 (Gast)


Lesenswert?

Lothar Miller schrieb:
> Hast du da noch irgendwelche Multiplexer drin, weil ein Addierer allein
> (und seien es 32 Bit) sollte schon noch schneller sein...


Okay, es gibt noch andere Komponenten in der Schaltung wie einfache 
Verzögerungen und Zähler, hatte aber als zeitkritische Komponente die 
Addierer vermutet, da alle anderen Vektoren nicht so breit sind. Werde 
dann mal die Zähler auf die Geschwindigkeit hin überprüfung und die 
Addierer auch noch mal.

Vielen Dank erst mal.

von erwin86 (Gast)


Lesenswert?

Stefan R. schrieb:
> Welchen Geschwindigkeitscode hat dein Cyclone II?

Wo kann ich den denn erfahren?

von Stefan R. (stefripp)


Lesenswert?

Auf der allerletzten Seite im Data Sheet steht der Schlüssel, welchen 
Cyclone 2 du genau hast.

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


Lesenswert?

erwin86 schrieb:
> hatte aber als zeitkritische Komponente die Addierer vermutet,
Da mußt du nichts vermuten.
Sieh dir mal die statische Timinganalyse an, dort werden die kritischen 
Pfade aufgeführt (zumindest bei Xilinx, aber ich denke, da kochen alle 
mit dem selben Wasser)...

von Sym (Gast)


Lesenswert?

Am Addierer selbst kanns nicht liegen, der müsste über 200 MHz schaffen, 
selbst im langsamsten Cyclone II.
Schau mal im Classic Timing Analyzer oder Timequest nach, wo genau der 
kritische Pfad liegt.

von Tilo (Gast)


Lesenswert?

und dann versuchen den kritischen Pfad, eventuell mit Pipelining zu 
verkürzen.
Ich hab schon knapp 350MHz aus nem Cyclone II rausholen können, das 
wurde aber schon sehr eng.

von Stefan R. (stefripp)


Lesenswert?

Ich hatte kürzlich auch Probleme mit der eigentlich unkritischen 
Frequenz von 27MHz aus dem Videowandler. Durch eine entsprechende 
Einstellung im Fitter ließ es sich aber schnell beheben.

Assignments - Settings - Fitter Settings -> Optimize Hold Time auf All 
Paths und  Fitter Effort auf Standart Fit

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.