mikrocontroller.net

Forum: FPGA, VHDL & Co. std_logic_vector nach character konvertieren/umwandeln


Autor: Andreas D. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Via Google kann ich leider nichts finden, aber vielleicht kann mir ja 
hier jemand den entscheidenden Tipp geben.

Bisher habe ich std_logic_vector immer wie folgt in charecter 
konvertiert:
RX_char := character'val(to_integer(unsigned(RX_data)));

Mit den Actel Tools ging das auch immer ohne Probleme. Nun muss ich aber 
ein Projekt auf Xilinx umstellen und das Xilinx ISE 9.2.04i spuckt mir 
beim Synthetisieren immer folgenden Fehler aus:

ERROR:Xst:772 - " ... /debug_UART_processor.vhd" line 109: Attribute is 
not authorized : 'val'.

Vielleicht kann mir ja jemand auf die Sprünge helfen wie ich die 
Konvertierung auch mit Xilinx hin bekomme. Die Forums-Suche hat mich 
leider auch nicht weiter gebracht.

Vielen Dank im Voraus

Andreas

Autor: Duke Scarring (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Laut XST User Guide ist 'val nicht unterstützt (leider).
Das wäre mal wieder ein Grund einen Webcase zu eröffnen.

Du kannst Dir aber ungefähr so helfen:
function slv_to_char( slv: std_logic_vector) return character is
  variable tmp: natural;
begin
  tmp := to_integer( unsigned( slv));
  case tmp is
    -- ...
    when 32 => return( character'(' '));
    -- ...
    when 64 => return( character'('@'));
    when 65 => return( character'('A'));
    when 66 => return( character'('B'));
    -- ...
  end case;
end;

Duke

Autor: Andreas D. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
:-(

nicht sonderlich praktisch.

Gibt es denn keine einfachere Lösung für die Konvertierung?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas D. schrieb:
> Gibt es denn keine einfachere Lösung für die Konvertierung?
Blöderweise geht auch 'succ' nicht und auch keines der anderen 
brauchbaren Attribute...
XST V12.4
VHDL Specifications 
• Attribute
Supported for some predefined attributes only:
– HIGH
– LOW
– LEFT
– RIGHT
– RANGE
– REVERSE_RANGE
– LENGTH
– POS
– ASCENDING
– EVENT
– LAST_VALUE

Andreas D. schrieb:
> Bisher habe ich std_logic_vector immer wie folgt in charecter
> konvertiert:
Wofür brauchst du das eigentlich?

Autor: Andreas D. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na ja empfange halt ein ASCII-Zeichen via UART und muss dann abhängig 
vom empfangenem Zeichen reagieren. Klar kann ich das auch mit dem ROM 
lösen oder einfache die Überprüfung in den entsprechenden Hex-Wert des 
ASCII-Zeichen ändern, aber mit meinem oben genannten Ansatz ist es halt 
einfach viel lesbarer und übersichtlicher. Bei Actel klappt das auch 
alles wunderbar.

Autor: René D. (Firma: www.dossmatik.de) (dose)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also von character to unsigned have ich eine einfach Lösung. Kann man 
auch zustd_logic_vector weiter casten.

--when not endfile(in_file) loop
if  wr_en='0' then 
  --wr<='0';
  elsif clk'event and clk='1' then
    if not endfile (in_file) then
      read(in_file,a);
    end if;
    data_in<=to_unsigned(character'pos(a),8);--very tricky the conversation
  --  wr<='1';
   
end if;
end process;


Gibt es nicht so ein Cast in die andere Richtung?
Wie vom Autor ursprünglich gesucht?
Ich will auch nur es für die Testbench nutzen und in ein File schreiben.
Lesen kann ich die Bytes schon.

Autor: René D. (Firma: www.dossmatik.de) (dose)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar hat es schon beantwortet.
Danke Lothar, von deinen Posts wird die Nachwelt noch profitieren. Auch 
wenn sie unvollständig sind. Der Startpunkt für die Idee hatte mir nur 
gefehlt.

char_buff<=character'val(to_integer(unsigned(data_in)));

Autor: Rick Dangerus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
René D. schrieb:
> Ich will auch nur es für die Testbench nutzen und in ein File schreiben.
Jupp, da funktioniert 'val auch. Der Simulator kann mehr, als der 
Synthesizer. Vielleicht schaut mal jemand, ob Vivado schon zu den 
Actel-Tools aufgeschloassen hat?

Rick

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.