Forum: FPGA, VHDL & Co. Zugriff auf das N-te Bit eines jeden Vector eines Arrays (VHDL)


von Viktor B. (coldlogic)


Angehängte Dateien:

Lesenswert?

Hi Leute,
Sorry, dass ich noch mal eine neue Diskussion erstellen muss, aber ich 
komme gerade nicht weiter. Und zwar hab ich das Problem, das ich ein 
Array mit Breite A der Vektoren mit der Breite B deklariere.
1
type CxD is array (channel_count+1 downto 0)--A of std_logic_vector (data_bus_width-1 downto 0)--B;
2
signal demux_to_counter: CxD;
Beim Versuch, auf jedes n-te Bit (n liegt in B) aller A Vectoren 
zuzugreifen, was ich mit der Zeile
1
data_out => demux_to_counter(channel_count+1 downto 0)--A(j)--n,
mache, kommt ein Fehler raus
1
Index value <n> is not in Range of array <demux_to_counter<A:0>>
Könnte mir jemand einen Anstoß geben, damit ich vom Schlauch weg trete?

Falls es jemanden interessiert, der komplette Code ist angehängt.

MfG

von P. K. (pek)


Lesenswert?

Ich nehme an, das data_out vom Typ std_logc ist (diese Info fehlt in 
Deinem Thread).

Du hast bei Deinem Zugriff nur eine Dimension angegeben, das Tool nimmt 
also an, dass Du den ganzen std_logic_vector zuweisen willst, und nicht 
Element n. Versuchs mal so:
1
data_out <= demux_to_counter(SelectedVector)(n);

von Viktor B. (coldlogic)


Lesenswert?

P. K. schrieb:
> Ich nehme an, das data_out vom Typ std_logc ist

data_out ist vom Typ std_logic_vector mit der Breite A.

Und ein SelectedVector gibt es nicht. Der Zugriff muss auf alle Vektoren 
gleichzeitig passieren.

von P. K. (pek)


Lesenswert?

Viktor B. schrieb:
> Und ein SelectedVector gibt es nicht. Der Zugriff muss auf alle Vektoren
> gleichzeitig passieren.

Ich denke dass dies nicht direkt in einem Aufwisch geht. Vielleicht aber 
so:
1
   for SelectedVector in 0 to A-1 loop
2
     data_out(SelectedVector) <= demux_to_counter(SelectedVector)(n);
3
   end loop;

Du musst Dir natürlich bewusst sein, dass Du damit gleich A Selektoren 
der Breite channel_count generierst.

von Vancouver (Gast)


Lesenswert?

Du definierst  einen zweiten Typ, mit vertauschten Zeilen und Spalten, 
Einem Signal dieses Typs weist Du dann das demux_to_counter-Signal 
bitweise zu. Dazu brauchst Du zwei verschachtelte GENERATE-loops. Das 
ist etwas Schreibarbeit, erzeugt aber keine zusätzliche Hardware.
Anschließend kannst Du auf die einzelnen Spaltenvektoren über den 
passenden Index zugreifen.

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.