Forum: FPGA, VHDL & Co. Globlaes constanten array


von Slin (Gast)


Lesenswert?

Hallo,

ich muss an verschiedenen Stellen in meinem Design einen Sinus bzw. 
Cosinus generieren. Dazu benutze ich numerical controlled oscillators an 
diesen Stellen. Nun möchte ich aber nicht, dass jedes Mal eine Kopie der 
(recht großen) Look-Up-Table (ein Array aus std_logic_vetcor-Konstanten) 
gespeichert wird. Gibt es eine Möglichkeit eine solche Tabelle global zu 
definieren, so dass jeder NCO darauf zugreifen kann?

Vielen Dank im Voraus

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


Lesenswert?

Slin schrieb:
> Gibt es eine Möglichkeit eine solche Tabelle global zu
> definieren, so dass jeder NCO darauf zugreifen kann?
Definier dafür ein Package...

Slin schrieb:
> Nun möchte ich aber nicht, dass jedes Mal eine Kopie der (recht großen)
> Look-Up-Table (ein Array aus std_logic_vetcor-Konstanten) gespeichert
> wird.
Wo soll die nicht gespeichert werden? Auf dem FPGA?
Aha, ein C-Programmierer...
Wenn du diese (Software-)Denkweise hast, dann solltest du dir mal 
vergegenwärtigen, dass auf dem FPGA nur LUTs und FFs und bestenfalls 
noch RAMs existieren, die diese Aufgabe übernehmen müssen.
Und wie willst du auf ein RAM, das diese Werte gespeichert hat, von 
mehreren Hardware-Stellen aus zugreifen? Du wirst einen Multiplexer 
brauchen...

von Christian R. (supachris)


Lesenswert?

...wenn dann noch unterschiedliche Frequenzen und/oder Phasenlagen ins 
Spiel kommen, wirds ganz eng, denn bei einen Speicher kann zeitgleich 
nur von genau einer Adresse gelesen werden. Sinnvollerweise wird das ja 
in die dedizierten RAMs eines FPGA gepackt, da musst du schauen, wieviel 
davon verfügbar ist.

von Jannulis T. (tembridis)


Lesenswert?

Oder man hängt das ganze als einen Slave an einen Bus und die 
entsprechenden Einheiten holen sich ihre Werte von dort.

wild spekulier

von Duke Scarring (Gast)


Lesenswert?

Jannulis Tembridis schrieb:
> Oder man hängt das ganze als einen Slave an einen Bus und die
> entsprechenden Einheiten holen sich ihre Werte von dort.
Damit verlagerst Du das Problem auf die Busarbitrierung.

> wild spekulier
Genau.


Duke

von Jannulis T. (tembridis)


Lesenswert?

> Damit verlagerst Du das Problem auf die Busarbitrierung.

Jo, aber wenigstens wird dann die Einheit nur einmal gebraucht.

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


Lesenswert?

Jannulis Tembridis schrieb:
> Jo, aber wenigstens wird dann die Einheit nur einmal gebraucht.
Das hilft aber nichts, wenn zwei Komponenten gleichzeitig im Sinne von 
zum selben Zeitpunkt darauf zugreifen wollen...

von Duke Scarring (Gast)


Lesenswert?

Lothar Miller schrieb:
> zwei Komponenten gleichzeitig

Nur für den Fall, das es nur zwei Komponenten sind, die Zugriff brauchen 
bietet sich bei Xilinx z.B. der dual port ram an. Andere Hersteller 
bieten sicher was ähnliches.

Duke

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


Lesenswert?

Duke Scarring schrieb:
> Nur für den Fall, das es nur zwei Komponenten sind
Ich hatte diesen Speizalfall durchaus im Hinterkopf, aber gleichzietig 
auch die Forderung:
>>> ich muss an verschiedenen Stellen in meinem Design einen Sinus bzw.
>>> Cosinus generieren.
Und das implizierte bei mir: Stellen > 2

Aber eigentlich geht es hier nicht um Details, sondern um die falsche 
Denkweise zum Thema "globale Konstanten in VHDL"...
>>> Gibt es eine Möglichkeit eine solche Tabelle global zu definieren
... denn allein mit einer Definition ist hier nichts zu erreichen.

von Duke Scarring (Gast)


Lesenswert?

Lothar Miller schrieb:
> Aber eigentlich geht es hier nicht um Details, sondern um die falsche
> Denkweise zum Thema "globale Konstanten in VHDL"...

Jepp ;-)

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.