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?
Na ganz einfach:
1 | schalterausgang(to_integer(unsigned(schalternummer))) <= '1'; |
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.
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.
>egal...
Absolut richtig, allerdings war ich einfach der Ansicht, dass dieser
doch sehr naheliegende Konstrukt nicht ausreicht. Ich werde es
probieren.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.