Forum: FPGA, VHDL & Co. Bits in Vektor in Abh. eines Vektorwertes setzen


von Frager (Gast)


Lesenswert?

Ich habe einen Vektor "schalterausgang (63 downto 0)" und bekomme 
sequenzielle Befehle, um diese zu setzen. Die Nummer steht im Vektor 
"Schalternummer (5 downto 0)". Ich möchte also beim Code 001111 den 
Ausgang (15) setzen. Wie kann ich das generisch formulieren, ohne 64 
cases schreiben zu müssen?

von greg (Gast)


Lesenswert?

Na ganz einfach:
1
schalterausgang(to_integer(unsigned(schalternummer))) <= '1';

von Frager (Gast)


Lesenswert?

Wie baut er das? Die Schalternummer ist ja nur zur Laufzeit bekannt und 
vorkommen können alle (?)  Zieht er mir dann diesen breiten 
case-Konstrukt selber auf?  In der realen Schaltung muss ja jedes der 16 
Ausgangs-FF mit einem enable versehen sein, welches aus dem 
Decoder/Vergleicher kommt.

von greg (Gast)


Lesenswert?

Die Synthese erzeugt daraus passende kombinatorische Logik. Wie genau, 
das ist doch gar nicht so wichtig. Man kann davon ausgehen, dass in 
solch einfachen Fällen effiziente Hardware generiert wird. Im 
Zweifelsfall einfach mal die Netzliste anschauen.

Der Vorteil von Design auf RTL-Ebene ist doch gerade, dass man sich um 
diese Details meistens gar keine großen Gedanken machen muss. So lange 
man ein Gefühl dafür hat, was die Hardware kann und wie man bestimmte 
Problemarten effizient beschreibt, reicht das in der Regel.

von Frager (Gast)


Lesenswert?

>egal...
Absolut richtig, allerdings war ich einfach der Ansicht, dass dieser 
doch sehr naheliegende Konstrukt nicht ausreicht. Ich werde es 
probieren.

von Georg A. (georga)


Lesenswert?

Die Frage ist schon berechtigt, was da rauskommt. Allerdings hängt das 
mit dem nicht erwähnten Kontext zusammen. So "allein" wird das zu einem 
normalen Dekoder. Also je nach FPGA ein paar LUTs pro Ausgang.

Wenn man aber dann anfängt, da eine Art RAM drauszumachen, potentiell 
mit mehreren solcher indizierten Schreib/Lesezugriffen in einem Takt, 
dann kann das schon recht gross werden.

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.