Hallo zusammen -
ich habe folgendes Problem: ich sollte Dateien des Formates pgm in meine
Test-Bench einlesen.
Dabei sieht das Format folgendes vor:
P2
3024 8000
65535
42475 37951 33138 29601 30202 29312 27748 25894
19164 17195 15368 15411 16074 16438 16752 16892
16850 16851 17046 17064 16672 16394 16321 16192
P2 gibt an das es sich um ein portable greymap handelt
3924 gibt die bildbreite an
8000 gibt die bildhöhe an
65535 gibt die pixeltiefe an: 16 bit
die folgenden zahlen sind die bilddaten, die die graustufe in
dezimalzahl angeben
Das einlesen eines files kapier ich ja noch.
Aber: wie kann ich in vhdl die ersten 3 zeilen einlesen, auswerten, und
anschliessend die bilddaten einlesen? gibt es ne möglichkeit die zeilen
zu zählen die man gelesen hat?
Hallo Kest -
Danke erst mal.
Dennoch stehe ich mächtig auf dem Schlauch. Ich weiss praktisch nicht wo
und mit was ich anfangen soll.
Irgendwelche Ratschläge?
Du liest einfach die erste Zeile, wertest sie aus. Dann liest Du die
anderen und wertest sie auch sofort aus. Dann weist Du ja, wie lange Du
lesen musst -- also entweder mit einem Zähler oder solange Du nicht am
Ende der Datei angekommen bist.
Als erstes würde ich eine Funktion schreiben, um eine Zeile in 5er
Grupper zu unterteilen und dise dann nach Hex/Dec oder wie auch immer zu
wandeln. Und dann ist es nur Fleißarbeit ;-)
Grüße,
Kest
Hallo Kest -
genau das ist mein Problem:
ich habe bereits eine Funktion, die pattern im Format
00000000000011000000000000111111
einliest..
Wie kann ich Leerzeichen zwischen den Dezimalzahlen "filtern" ?
Ich finde nirgends ein Beispiel, Tutorial, etc. wie man ein solches
File:
P2
3024 8000
65535
42475 37951 33138 29601 30202 29312 27748 25894
19164 17195 15368 15411 16074 16438 16752 16892
16850 16851 0 17064 0 16394 16321 16192
Zeile für Zeile einliest, geschweige denn die 8 5-stelligen
Dezimalzahlen ausliest.
Wäre über Hilfestellung sehr dankbar.
Grüße,
Rainer
Hallo -
hier mein erster Ansatz..
Allerdings: wenn es mal mehr als 8 5-stellige Dezimalzahlen sind..
könnte man das "test1 - test8" mit einer Schleife machen?
Wie setzt man da dann die Schleifenindikatoren?
Bekomme dann immer die Fehlermeldung:
Target type ieee.std_logic_1164.std_ulogic in variable assignment is
different from expression type ieee.std_logic_1164.std_logic_vector.
Ich komme mit den casts etc. einfach nicht klar!!
Hallo zusammen -
folgende Prozedur funktioniert bis zur Ausgabe der Daten am Ende..
Da wird KEIN einziger Wert von DVLIN oder DATAIN übernommen..
Kann mir da Jemand weiterhelfen?
Grüße,
Rainer
1
procedurerwstimuli(FileNameIn:instring;
2
signalRESETN:instd_logic;
3
signalCLK:instd_logic;
4
signalDVLIN:inoutstd_logic;
5
signalDATAIN:inoutstd_logic_vector(15downto0)
6
)is
7
8
filepgmfile:textopenread_modeisFileNameIn;
9
10
variablereadGood:boolean:=true;
11
variableindicator:character;
12
variablecolumn:natural;
13
variablerow:natural;
14
variablepixd:natural;
15
variabletmp3:natural;
16
variableZ,S:natural;
17
variableL:line;
18
variableimage:mem_array;
19
variablenext_pixel:std_logic_vector(15downto0);
20
21
begin
22
23
readline(pgmfile,L);
24
read(L,indicator,readGood);
25
assertreadGoodreport"Could not read File Indicator"severityfailure;
26
27
readline(pgmfile,L);
28
read(L,column,readGood);
29
assertreadGoodreport"Could not read column size"severityfailure;
30
read(L,row,readGood);
31
assertreadGoodreport"Could not read row size"severityfailure;
32
33
readline(pgmfile,L);
34
read(L,indicator,readGood);
35
assertreadGoodreport"Could not read grey maximum value"severityfailure;
36
37
readline(pgmfile,L);
38
39
report"Read Image";
40
41
forZin0torow-1loop
42
IF(NOTENDFILE(pgmfile))THEN
43
report"Row"&integer'image(Z+1);
44
45
forSin0tocolumn-1loop
46
if(notendfile(pgmfile))then
47
--report "Column" & integer'image(S+1);
48
49
read(L,tmp3,readGood);
50
51
ifreadGood=falsethen
52
readline(pgmfile,L);
53
read(L,tmp3,readGood);
54
endif;
55
56
image(Z)(S):=conv_std_logic_vector(tmp3,16);
57
else
58
exit;
59
endif;
60
endloop;
61
ifreadGood=falsethen
62
if(Z/=row-1)then
63
if(notendfile(pgmfile))then
64
readline(pgmfile,L);
65
else
66
exit;
67
endif;
68
endif;
69
endif;
70
else
71
exit;
72
endif;
73
endloop;
74
75
assertendfile(pgmfile)report"read not all contend";