Hallo, ich will über VGA ein Bild ausgeben aus einem FPGA mit 3Bit je Farbe. Dafür habe ich die Widerstände LSB BIT0 : 1kOhm BIT1 : 0.5kOhm BIT2 : 0.25kOhm MSB genommen. Jetzt ist das aber so, dass wenn ich z. B. eine "011" ausgebe, der Ausgang also über 250 Ohm mit Masse verbunden ist weil das höchstwertige Bit eben eine '0' ist. Schön wäre es, wenn da eine 'Z' stünde. Gibt es da eine elegante Möglichkeit alle '0' in einem std_logic_vector zu 'Z' zu ändern? Vielen Dank!
Sie bringen in die vielschichtige Diskussion interessante neue Aspekte ein, die die Problematik von einer völlig neuen Seite beleuchten. Ihre Ausführungen zeugen von hoher Sachkenntnis und überzeugen auch im Detail. Besonders im Mittelteil transportieren sie eine Fülle hochwertiger Informationen, die dem Kreis der betroffenen Nutzer nicht vorenthalten werden dürfen. Aber trotz guter B-Note nur so mittel ...
Deine VGA-Farbansteuerung funktioniert ja per Spannungsteiler. Wenn Du da 'Z' ansteuerst, dann hast Du ja permanent VCC oder bei "000" GND. Machst also so wie in allen anderen Controllern.
Wenn du ein R-2R-Netzwerk nimmst, hast du das Problem nicht und noch dazu eine konstante Impedanz (was bei VGA nicht so verkehrt ist): https://de.wikipedia.org/wiki/R2R-Netzwerk Wenn du das nicht willst: Unelegant wäre ja das:
1 | vga_out(0)<='Z' when val(0)='0' else '1'; |
2 | vga_out(1)<='Z' when val(1)='0' else '1'; |
3 | vga_out(2)<='Z' when val(2)='0' else '1'; |
Eleganter und unabhängig von der Länge (als concurrent statement und hoffentlich ohne Syntaxfehler ;) )
1 | xloop: for i in val'range generate |
2 | vga_out(i)<='Z' when val(i)='0' else '1'; |
3 | end generate xloop; |
Sicher gibts noch mehr Tricks, lesbarer wirds aber wohl eher nicht.
Sigi schrieb: > Deine VGA-Farbansteuerung funktioniert ja > per Spannungsteiler. Wenn Du da 'Z' ansteuerst, > dann hast Du ja permanent VCC oder bei "000" > GND. Machst also so wie in allen anderen > Controllern. Wieso? Ich habe das jetzt vom Prinzip her wie hier https://reference.digilentinc.com/_media/basys3-vga_circuit_diagram.png Wenn ich da ein Bit '0' setze dann ziehe ich doch das Signal nach unten, ich müsste also 'Z' setzen. Georg A. schrieb: > Wenn du ein R-2R-Netzwerk nimmst, hast du das Problem nicht und noch > dazu eine konstante Impedanz (was bei VGA nicht so verkehrt ist): Hier mal ein Bildchen dazu wie das vom Prinzip her aussieht: http://kampis-elektroecke.de/wp-content/uploads/2014/08/VGA3.png Wenn ich da jetzt ein Bit auf '0' setze, dann zeiht das doch ebenfalls das Signal nach unten?! Oder wieso sollte das hier nicht so sein? Aber vielen Dank für Deine beiden Lösungen. Hatte nur gehofft es gäbe da irgendeine fertige Funktion in VHDL oder Einstellung/Constraint für den IO dass der entweder '1' oder 'Z' ist aber nie '0'.
:
Bearbeitet durch User
> Gibt es da eine elegante Möglichkeit alle '0' in einem std_logic_vector > zu 'Z' zu ändern? > Vielen Dank! Schreibe eine Funkion, für die Umwandlung. als Idee nimm diese Funktionen http://www.stefanvhdl.com/vhdl/vhdl/txt_util.vhd
Ich hab das jetzt schon mit einer Loop gelöst. Gefragt hatte ich weil ich doch eine Standardfunktion vermutet hatte.
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.