Forum: FPGA, VHDL & Co. #define in VHDL


von Thomas B. (thomas1)


Lesenswert?

Guten Tag

Ich bin ein VHDL Anfänger, der noch lernen muss, beim VHDL-programmieren 
nicht in C zu denken.
Und nun meine Frage: Gibt es in VHDL eine äquivalente Anweisung zu 
#define in C? Eigentlich möchte ich lediglich einen String möglichst 
einfach ersetzen können:

P1: process(CLK_50M)
begin
   if rising_edge(CLK_50M) then
...
end P1

Im .ucf vom Evalboard für den Spartan3AN ist der Eingang vom 50MHz Clock 
definiert. Das Signal heisst dann CLK_50M. Weil ich aber später vom 
Evalboard auf eine selbergemachte Hardware wechseln werde, habe ich 
sicher keinen 50MHz Clock mehr (weil batteriebetriebenes Gerät => 
möglichst geringer Energieverbrauch => tieferer Clock), und folglich 
werde ich das Signal nicht mehr so nennen. Ich werde also im gesamten 
Code dieses CLK_50M umbenennen müssen.

Am elegantesten wäre das in C wohl so:

#define System_Clock CLK_50M

...
...

P1: process(System_Clock)
begin
   if rising_edge(System_Clock) then
...
end P1

Aber nun in VHDL?

Danke für die Hilfe

Mit freundlichen Grüssen
Thomas Bader

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


Lesenswert?

Was du suchst ist ein Alias
1
alias  System_Clock : std_logic is CLK_50M;

Aber warum benennst du den Pin nicht einfach im ucf-File um?
Oder legst im Top-Level-Modul ein Signal System_Clock an, auf das dann 
der CLK_50M zugeweisen wird?

von Thomas B. (thomas1)


Lesenswert?

Danke für die Antwort

Wie ist das genau mit dem Alias? Ist das wie eine Definition eines neuen 
Typs, oder ist das eine Art Variable (wegen std_logic)?

Ja, eigentlich könnte ich das Signal auch schon im .ucf umbenennen. 
(Nach dem Prinzip: Warum einfach, wenn es kompliziert auch geht...).

Was ist das Top-Level_Modul?

Vielleicht habe ich dumme Fragen gestellt, aber ich habe halt weder 
Erfahrung noch besonders grosses Wissen (im Moment).

Gruss
Thomas

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


Lesenswert?

> Wie ist das genau mit dem Alias? Ist das wie eine Definition eines neuen
> Typs, oder ist das eine Art Variable (wegen std_logic)?
Hier eine anwendung des Alias:
http://www.lothar-miller.de/s9y/archives/38-DDFS-mit-Distributed-ROM.html
Dort wird bei der Vorzeichenabfrage dann statt  Accum(Accum'high) der 
Alias Sign definiert und verwendet.

> Ja, eigentlich könnte ich das Signal auch schon im .ucf umbenennen.
Langfristig ist das der bessere Weg. KISS: Keep it simple and stupid.
> (Nach dem Prinzip: Warum einfach, wenn es kompliziert auch geht...).
Das mit dem UCF scheint dir nur kompliziert. Es ist allemal besser, als 
irgendwelche Signale unnnötig umzubenennen. Und letztlich wird dir 
sowieso nichts anderes bleiben, denn wie du sagst, gibt es im fertigen 
Design den 50MHz Takt nicht mehr.

> Was ist das Top-Level_Modul?
Das, in dem das Signal hardwaremäßig als Pin in das Design hereinkommt. 
Und damit genau das, das letztlich ins FPGA kommt.

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.