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...
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...
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.
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?
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; |
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.
Stefan R. schrieb: > Welchen Geschwindigkeitscode hat dein Cyclone II? Wo kann ich den denn erfahren?
Auf der allerletzten Seite im Data Sheet steht der Schlüssel, welchen Cyclone 2 du genau hast.
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)...
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.