Forum: FPGA, VHDL & Co. Erhaltung von Gattern im FPGA erzwingen


von Hasso (Gast)


Lesenswert?

Ich möchte die Laufzeit und Schaltzeiten in FPGAs vermessen und dazu 
einzelne Inverter hintereinanderschalten. Das Problem ist, daß alle bis 
auf einen für den ungeraden Zweig und sämtliche für den gerade Zweig 
weggenomen werden, wenn man das wie üblich deklariert.

Wie baue ich eine echte Registerarchitektur, die nicht verändert wird ?

Geht das mit den Altera Primitiven ?

von Stephan (Gast)


Lesenswert?

Fuer was brauchst du denn die Schalt und Laufzeiten zu messen? Ist es 
nicht einfacher diese im Datenblatt nachzuschauen, oder eine 
Post-Implementation Simulation zu machen?

von Valerij M. (fpga-dev)


Lesenswert?

Hast du schon überlegt was du tatsächlich messen würdest? Auch wenn ein 
einzelner Inverter mit Hilfe eines FPGAs implementiert wurde, so liegen 
zwischen dem Eingangs- und Ausgangspin des FPGAs mehr als dutzende 
programmierbare Schalter, die das Signal weiterleiten. Und die 
Verzögerung der Verdrahtungselemente macht ca. 70-80% der 
Gesamtverzägerung aus. Wenn dann der Inverter eine Schaltzeit von 2ns 
aufweist, dann entfallen ca. 200ps auf die LUT, die den Inverter 
implementiert. Und je nach dem welcher Eingang der LUT verwendet wird, 
hast du auch bis zu zweifache Variation...

In dem Sinne,

Messen heisst Mist messen!

von Rick Dangerus (Gast)


Lesenswert?

Du kannst jeden Zwischenwert auf ein Pin geben. Ob das realitätsnahe 
Ergebnisse bringt, wage ich zu bezweifeln.

Rick

von Löscher (Gast)


Lesenswert?

Das mit dem "auf den Pin geben" reicht aber noch nicht, weil es - egeal 
wieivel Inverter es weren - nur zwei Sorten Ausgänge gibt: "IN" und "not 
IN."

von Rick Dangerus (Gast)


Lesenswert?

Ok. Bei Xilinx hilft Dir vielleicht folgendes:

[Xilinx Constraint Guide]
VHDL Syntax Example
   Declare the VHDL constraint as follows:
       attribute keep : string;
   Specify the VHDL constraint as follows:
       attribute keep of signal_name: signal is “true”;
   For more information on basic VHDL syntax, see “VHDL” in Chapter 3.


Bei Deinem Synthesetool gibt es sichr was ähnliches.

Rick

von Hasso (Gast)


Lesenswert?

Xilinx hilft mir (im Moment) nicht weiter. Ich will auch garnicht den 
Sinn der Schaltung(-smessung) diskutieren. Ich möchte nur einfach eine 
solche Inverterkette aufbauen und sicherstellen, daß ich die dadurch 
verzögerten Signale messbar habe.

In einem Fall werden die parallel abgesampelt, sodaß dann je nach Flanke 
und Vrrzögerung einigen Registern noch der alte Wert - in einigen 
anderen Registern bereits der neue Wert steht. Das soll u.a. ein 
Messsignal sein und angezeigt werden.

von guest (Gast)


Lesenswert?

Dafür gibt es Constraints. Das "Wegoptimieren" von Komponenten kannst du 
durch Signaldeklarationen im VHDL-Code verhindern. Wie das geht steht in 
der Literatur deines Synthesetools (ich nehme an Altera Quartus). Lesen 
must du schon selber.

von Hasso (Gast)


Angehängte Dateien:

Lesenswert?

Wie "constraine" ich das? Habe diverses probiert, aber Quartus erzeugt 
erwartungsgemäß immer nur 2 Pfade mit einem Inverter für alle 
theoretischen 8 sequenziellen Verzweigungen. Das einzigste, was ich 
geschafft habe ist, daß er die Register nicht wegoptimiert, obwohl wegen 
der wegoptmierten Kombinatorik in jeweils 4 davon dasselbe steht.

von Morin (Gast)


Lesenswert?

Was du vorhast ist, wenn ich es richtig verstanden habe, schon im Ansatz 
zum Scheitern verurteilt. Du kannst die Verzögerungszeiten einer 
Inverterkette nicht messen weil es auf dem FPGA keine Inverterkette 
gibt, egal wie du ihn konfigurierst. Was du konfigurieren kannst ist 
z.B. eine LUT-Kette, aber es gibt auch nicht "die" LUT-Kette, weil die 
Verzögerungszeiten von der Platzierung (Entfernung auf dem Chip) und dem 
Routing (z.B. Long Lines vs. kurzer Verbindung) abhängen. Soll heißen: 
Kleine Änderungen an völlig anderen Teilen einer Konfiguration können 
andere PAR-Ergebnisse und damit andere Verzögerungszeiten als Ergebnis 
haben.

Was du machen kannst ist:
- Die Verzögerungen einzelner CLBs im Datenblatt nachschlagen. Da sind 
dann natürlich keine Routing-Laufzeiten drin, aber dafür hast du sofort 
einen konkreten Wert vor dir. Beispiel: Verzögerungszeit zwischen 
F-LUT-Input und X-Output eines CLB auf einem Spartan-3 mit Speed Grade 
-4: 0.21 - 0.61 ns.
- Das Timing einer fertigen Schaltung messen. Macht man typischerweise 
in der letzten Phase der Optimierung und mit Hilfe spzieller 
Timing-Tools (da kenne ich mich leider noch nicht aus).
- Eine gute Abschätzung, indem du die LUT-Kette samt Platzierung 
vorgibst (soweit ich weiß kann das Routing nicht vorgegeben werden. 
Dadurch ist die Abschätzung dann auch nicht exakt, weil andere Teile die 
später dazukommen dieselben Routing-Ressourcen benutzen "wollen"). Das 
geht indem du LUT-Primitive im VHDL-/Verilog-Code instanziierst und per 
constraints deren Lage vorgibst. Hab ich leider auch noch nicht gemacht.

von Stephan (Gast)


Lesenswert?

Aufgepasst jetzt könnt ihr was lernen:

Wenn der Hasso das unbedingt will dann soll er doch (vielleicht braucht 
er es ja für was anderes). Es gibt durchaus sinnvolle Anwendungszwecke, 
DDR-SDRAM Controller zum Beispiel.
Der Morin hat recht, nach einem einzelnen Inverter kann man in einem 
FPGA lange suchen. Die Logik versteckt sich in den LUT (Look Up Table) 
die sich in sogeneannten CLBs verstecken.
Also die Lösung ist:
1.) Im Manual nach diesen LUT's suchen, diese direkt in VHDL mit Port 
Map
    einbinden.
2.) Im Constraint's file festlegen das nichts weggekürzt wird.
    Den Platzierungsort ebenfalls in einem Constraints File festlegen
3.) Synthesize, PnR...

Zu den Constraints files kann ich dir leider keine genauen Angaben 
machen weil ich aus der HDL-Designer/Precision/Xilinx-Ecke komme. Da 
musst du wohl oder übel selber nachschauen, oder hier irgendjemanden 
finden der mit Altera arbeitet und zusätzlich noch ein bisschen 
drauskommt.

Bitte.

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.