Forum: FPGA, VHDL & Co. Abarbeitung eines Prozesses


von Brutus (Gast)


Lesenswert?

Hi @ all

Ich arbeite eigendlich schon länger mit FPGA´s mehr oder weniger
erfolgreich :-). allerdings sind da bei mir noch 3 Fragezeichen offen.
Evtl könnt ihr sie ja erlöschen.

1 Frage:
In einem Prozess werden die enthaltenen befehle ja sequenziell
abgehandelt. Mein problem liegt in der Abarbeitungsgeschwindigkeit.
Wenn ich zum Beispiel eine Statemachine gebastelt hab und da steht in
dem einen Status:
A := a + 1;
B := C & D;
Wie lange ist dann die verzögerung bei der abarbeitung der
Befehlsschritte? Das gleiche gilt auch für eine Funktion. Wie lange ist
da ein Taktzyclus oder unter was findet man diese Angabe im Datenblatt?

2. Frage:
Ich habe mitlerweile schon mitbekommen, das man in den Properties sehr
viel an seinem Code "Tunen" kann. allerdings stehe ich noch vor den
einstellungen wie "Ochs vorm Berge". Gibt es ein gutes Buch in dem
auch  auf solche sachen eingegangen wird? VHDL Bücher gibt es ja viele,
aber zu den Properties... oder bleibt mir da nur der Blick in das manual
von Xilinx?

3. Frage:
Ich habe vor kurzen hier gesehen, das jemand bei der übergabe der
Signale von der Komponente in das Toplevelmodell nicht genug Signale
zur verfügung hat. Warum gibt es da eine begrenzung? Eigendlich werden
doch eh die Komponenteneinteilungen nur für die User zur
verständlichkeit verwendet. Im Mapping geht die Komponentenaufteilung
doch eh verloren oder?


Sory das es so viele Fragen geworden sind, aber das sind die stellen,
an denen es noch gewaltig bei mir zwickt :-)

Ansonsten noch einen schönen Tag...

Brutus

von Ines (Gast)


Lesenswert?

Zu Deiner ersten Frage: Das mit dem sequentiellen Abarbeiten hat nichts
mit irgendwelchen Durchlaufzeiten o.ä. auf der Hardware zu tun. Es
bezieht sich nur auf die logische Zuweisung der Signale. Dein Beispiel
ist dafür nicht ganz geeignet, deshalb:

process (in)
begin
  a <= in;
  b <= a;
end process;

Würden die Zuweisungen in einer paralleln Umgebung stehen (ohne den
Prozess drumzu), könnte man dafür auch gleich
b <= in;
schreiben. In einer sequentiellen heißt das aber, das "in" erst beim
zweiten Prozessdurchlauf (also wenn sich "in" zum 2. Mal ändert)
"b" zugewiesen wird.

Bei Dir gibt es real überhaupt keine Verzögerung, zumal Du mit
Variablen arbeitest. Hätte ich mein Beispiel mit Variablen aufgebaut,
würde sich auch wieder "b <= in" ergeben.

Ich hoffe, ich konnte Dir helfen und habe Dich nicht noch mehr
verwirrt!

Ines

von Brutus (Gast)


Lesenswert?

Hi Ines... ok ich denke Frage 1 kann gestrichen werden :-) Da bin ich
schon mal um einiges schlauer :-)
Danke dir...

von Sven Johannes (Gast)


Lesenswert?

Moin...

zu 2.
Bevor man anfängt zu "tunen" sollte man sauberen Code produzieren.
Welche Properties meinst du jetzt konkret?

zu 3.
Einen Engpass bei den Signalen kann es so eigenlicht nicht geben. Die
abstrakte Logik wird beim Mapping sowieso auf die Primtives
plattgehauen und dann in den Chip per Map übertragen. Alte Versionen
von Xilinx Schematic hatten das Problem nicht über die Grenzen ihrer
Blöcke hinaus zu optimierern. Irgendwann hat man schlicht nicht mehr
genug Routings im Chip und dann ist Schicht. Auf abstrakter VHDL Ebene
ist das komplett egal.

--
 Sven Johannes

von Brutus (Gast)


Angehängte Dateien:

Lesenswert?

So da bin ich wieder :-)

@ Sven
zu 2:
Ich meine Speziell die Properties des Mappings. Hier soll man ja sehr
viele Einstellungen zur Reduzierung des Platzbedarfs vornehmen können.
Oder ist das alleine mit Properties nicht zu machen?

zu 3:
Ich lege mal in den anhand das Summary (erzeugt mit Webpack 7.1.03) in
den Anhang.
Unter "Number of bonded IOBs:" stehen mit maximal 173 zur Verfügung.
Das ist aber genau die Anzahl der IO Pins meines Spartan 3 (glaube
ich). Eigendlich dürfte er also nur "error"-melden, wenn ich diese
Entity auch wirklich für IO´s nutze. In meinem Fall soll es aber nur
zur internen Datenkommunikation dienen. Kannst du dir das erklären?
Warum zählt er die Ein und ausgänge zu den IO´s obwohl es als
Komponente verwendet wird?

von Sven Johannes (Gast)


Lesenswert?

Moin...

2.
Bei den Mapping Optionen kannst du festlegen ob und wie er die Logik
abbildet. Also Zeit oder Platzoptimiert. Wenn du auf Zeit gehst kann es
sein das er Logik doppelt oder n-fach anlegt um Routings zu sparen. Oder
er haut Logik richtig platt statt sie in mehreren Schriten
abzuarebeiten, die Optionen sind da sehr vielfältig, man legt aber eher
die grundlegende Struktur fest. Wenn die Optimierung auf Area steht
macht er das schon so klein "wie möglich". Die meisten Optimierungen
laufen eher auf die Geschwindigkeit hinaus, die langsamsten Strukture
sind auch fast immer die kleinsten.

3.
Da sehe ich jetzt kein Problem? Wenn du eine Entity baust die mehr als
173 Ports hat kannst du die nicht als Top-Hierachie synthetisieren, und
das wars. Die Xilinx Software hüpft gerne mal in der Navigation von File
zu File und vor dem Klicken muss man drauf achten was gerade angewählt
ist. Oder habe ich das Problem jetzt nicht erfasst?

--
 Sven Johannes

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.