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.
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.
Mit nem VHDL package kannst du "globale" Konstanten erzeugen. Die Werte müssen aber von hand an das board angepasst werden.
Das bringt ja nichts, damit verlagere ich ja nur den Ort wo ich die Werte defeiniere.
F_CPU musst du aber auch eintragen, der Compiler kann ja nicht wissen welches Quarz dran hängt
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.
>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
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.