Forum: FPGA, VHDL & Co. Präprozessor in VHDL?


von Fabian S. (jacky2k)


Lesenswert?

Hallo,
ich habe ein kleines Problem mit VHDL. Der Code soll auf zwei 
verschiedenen Boards mit unterschiedlichen Takten laufen. Da ich eine 
Menge zeitkritischer Sachen mache, die mit Timern realisiert werden muss 
ich bei jedem Boardwechsel alle Zeiten austauschen.
Gibt es eine Möglichkeit dies zu automatisieren, dass die Timerwerte 
dynamisch bei der Syntetisierung erzeugt werden? So wie ich bei einem uC 
ein F_CPU habe.

von ich (Gast)


Lesenswert?

Welche Timer? In VHDL gibt es nix mit Timern. Zumindest nichts was 
synthetisiert wird

von Fabian S. (jacky2k)


Lesenswert?

Idh habe halt ein integer den ich hoch zähle und wenn er einen 
bestimmten wert erreicht hat soll etwas passieren. Es geht mir jettum 
diesen Wert, der abhängig von der Taktfrequenz erzeugt werden muss.

von DerDa (Gast)


Lesenswert?

Mit nem VHDL package kannst du "globale" Konstanten erzeugen. Die Werte 
müssen aber von hand an das board angepasst werden.

von Fabian S. (jacky2k)


Lesenswert?

Das bringt ja nichts, damit verlagere ich ja nur den Ort wo ich die 
Werte defeiniere.

von DerDa (Gast)


Lesenswert?

F_CPU musst du aber auch eintragen, der Compiler kann ja nicht wissen 
welches Quarz dran hängt

von Fabian S. (jacky2k)


Lesenswert?

Ja aber dann kann ich sagen: REGISTER=1000/F_CPU;
Wie mache ich das in VHDL?

von ich (Gast)


Lesenswert?

Kannst du anhand der Hardwareunterschiede feststellen auf welchem Board 
du dich befindest?

z.B. hast du 2 Eingänge, die je nach Boardvariante fest auf High oder 
Low liegen. Das könntest du einmalig einlesen und deinen Zählwert 
entsprechend laden.

von ich (Gast)


Lesenswert?

>Ja aber dann kann ich sagen: REGISTER=1000/F_CPU;

ja, schon, aber auch F_CPU musst du irgendwann mal eintragen. Und zwar 
VOR dem compilieren

von Fabian S. (jacky2k)


Lesenswert?

Nein, aber ich möchte an nur einer Stelle F_CPU verändern anstatt an 20 
Stellen die Timer Werte neu ausrechnen zu müssen.

von ich (Gast)


Lesenswert?

Schau dir mal das VHDL-Schlüsselwort "Generic" an.

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


Lesenswert?

Fabian S. schrieb:
> Nein, aber ich möchte an nur einer Stelle F_CPU verändern anstatt an 20
> Stellen die Timer Werte neu ausrechnen zu müssen.
Nimm ein Generic.

Fabian S. schrieb:
> Gibt es eine Möglichkeit dies zu automatisieren, dass die Timerwerte
> dynamisch bei der Syntetisierung erzeugt werden?
Bei der Synthese werden die Timerwerte statisch betrachtet.

Ich bin mir übrigens nicht ganz sicher, ob du weißt, was in diesem 
Zusammenhang hier statisch und dynamisch bedeutet...
Statisch bedeutet: zum Übersetzungszeitpunkt.
Dynamisch bedeutet: mit einem Schalter zur Laufzeit umschaltbar.

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


Lesenswert?

Fabian S. schrieb:
> Ja aber dann kann ich sagen: REGISTER=1000/F_CPU;
> Wie mache ich das in VHDL?
Sieh dir mal die SIO an:
http://www.lothar-miller.de/s9y/categories/42-RS232
Da wird auch einfach der Zählerendwert aus der Baudrate und der 
Taktfrequenz berechnet. Für eine andere Baudrate änderst du nur den 
entsprechenden Generic...

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.