Textanalyse mit VHDL?!

OP #1710378
Hallo,

ich muss aus einer Textdatei Werte auslesen, die ich anschließend in 
einem VHDL Projekt Signalen zuweise. Soweit kein Problem.

Jetzt sollen aber in unregelmäßigen Abständen in der Textdatei andere 
Signalzuweisungen stehen. Diese würde ich gerne mit irgendeinem Zeichen 
(im folgenden Beispiel eine #) am Anfang einer Zeile kenntlich machen. 
Gibt es in VHDL die Möglichkeit, ähnlich wie bei "Regular Expression" zb 
unter Perl, eine Zeile zu analysieren?

Die Textdatei sieht etwa wie folgt aus:
0 1 0 1 1 1
1 0 1 1 0 0
0 1 1 0 1 1
# 20
0 1 1 1 0 0
# 10
0 1 1 0 1 0
Und hier ein Ausschnitt aus meinem bestehenden Programm:
1
     while not (endfile(IN_DATA)) loop
2
           readline(IN_DATA,LINE);
3
           read (LINE, SATZ); 
4
           stimuli <= SATZ;
5
           wait for 100 us;
6
     end loop;
das Signal stimuli ist ein Vektor...

Meine Idee war, dass ich gucke, ob am Anfang einer Zeile eine # steht 
und dieses in einer IF-Schleife abfrage. Also sollte es nachher etwa so 
aussehen.
1
     while not (endfile(IN_DATA)) loop
2
           readline(IN_DATA,LINE);
3
--     if LINE .... " wenn die Zeile mit einer Raute anfängt soll der folgende Wert dem Signal "neuerWert zugewiesen werden"
4
--         read ( LINE, SATZZWEI);
5
--         neuerWert <= SATZZWEI;
6
       else            
7
           read (LINE, SATZ); 
8
           stimuli <= SATZ;
9
           wait for 100 us;
10
       endif;
11
     end loop;
Ist sowas überhaupt in VHDL möglich?? Oder hat jemand eine 
andere/bessere Idee?
Vielen Dank für die Mühe im Vorraus
Gast
Ja, sowas geht. Mach doch Deine Textdatei ungefähr so:
S 0 1 0 1 1 1
S 1 0 1 1 0 0
S 0 1 1 0 1 1
# 20
S 0 1 1 1 0 0
# 10
S 0 1 1 0 1 0

Damit wird das Auswerten etwas einfacher:
1
-- untested
2
     variable marker: char;
3
...
4
...
5
     while not (endfile(IN_DATA)) loop
6

7
           readline(IN_DATA,LINE);
8
           read(LINE, marker);
9
    
10
           case marker is
11
             when 'S' =>
12
               read (LINE, SATZ);
13
               stimuli <= SATZ;
14
             when '#' =>
15
               -- process comment
16
             when others =>
17
               null;
18
           end case; 
19

20
           wait for 100 us;
21
     end loop;

Rick
Ich habe mir dazu sogar mal eine Art Befehlsinterpreter geschrieben. 
Dazu habe ich mir folgende Restriktionen auferlegt: Jede Zeile muss mit 
einem Befehl beginnen. Im obigen Beispiel wäre das "#" oder "S". Es 
können aber Leerzeilen und Kommentare enthalten sein. Kommentare 
beginnend mit "--". Weiterhin können auch Makros geschrieben werden. 
Diese beginnen mit "macro" und dem Makronamen und Enden mit "endmacro". 
Mit "call" und Makroname können die dann aufgerufen werden.

Damit lässt sich wunderbare Testpattern schreiben. Vor allem wenn sich 
innerhalb der Testpattern ganze Passagen wiederholen, kann man dann 
problemlos diese mit den Makros aufrufen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.