mikrocontroller.net

Forum: FPGA, VHDL & Co. Alle '0'en in std_logic_vector in 'Z' ändern.


Autor: Gustl Buheitel (-gb-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Tasg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jo

Autor: Gustl Buheitel (-gb-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ...

Autor: Sigi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Georg A. (georga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
vga_out(0)<='Z' when val(0)='0' else '1';
vga_out(1)<='Z' when val(1)='0' else '1';
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 ;) )
xloop: for i in val'range generate
         vga_out(i)<='Z' when val(i)='0' else '1';
       end generate xloop;

Sicher gibts noch mehr Tricks, lesbarer wirds aber wohl eher nicht.

Autor: Gustl Buheitel (-gb-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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-vg...
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/20...
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
Autor: René D. (Firma: www.dossmatik.de) (dose)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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

Autor: Gustl Buheitel (-gb-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab das jetzt schon mit einer Loop gelöst. Gefragt hatte ich weil 
ich doch eine Standardfunktion vermutet hatte.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.