Volevo chiedervi gentilmente una mano per capire come funziona il package texio, in particolare per la scrittura di dati su file e la chiusura del file a fine simulazione.
Espongo il mio problema:
Sto scrivendo un codice che stampa su un file csv dei segnali. inserisco una parte di codice per farvi capire meglio:
Codice: Seleziona tutto
LIBRARY IEEE,STD;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_TEXTIO.ALL;
USE STD.TEXTIO.ALL;
ENTITY write_stimuli IS
END write_stimuli;
ARCHITECTURE RTL OF write_stimuli IS
SIGNAL simCLK : STD_LOGIC; -- segnale che uso per campionare la scrittura
SIGNAL simENA : STD_LOGIC; -- segnale che mi avvia la simulazione sul TB (esterno)
SIGNAL myD : STD_LOGIC; -- segnale da scrivere
textwrite_process: PROCESS -- questo process mi scrive la prima riga di testo del csv con il nome dei segnali
FILE stimulus : TEXT OPEN WRITE_MODE IS ("Stimoli.csv");
VARIABLE lo : LINE;
VARIABLE tab : CHARACTER := ';';
BEGIN
WRITE(lo, string'("#simENA"));
WRITE(lo, tab);
WRITE(lo, string'("myD"));
WRITELINE(stimulus, lo);
WAIT;
END PROCESS;
write_process: PROCESS -- questo è il processo di scrittura vero e proprio che riempie il csv
FILE stimulus : TEXT OPEN WRITE_MODE IS ("Stimoli.csv");
VARIABLE lo : LINE;
VARIABLE tab : CHARACTER := ';';
BEGIN
WAIT UNTIL simCLK <= '1';
WRITE(lo, simENA);
WRITE(lo, tab);
WRITE(lo, myD);
WRITELINE(stimulus, lo);
END PROCESS;
-- inizio processi dei segnali
simENA_process: PROCESS
BEGIN
simENA <= '0';
WAIT FOR 10 ns;
simENA <= '1';
WAIT;
END PROCESS;
D_process: PROCESS
BEGIN
myD <= '0';
WAIT FOR 40 ns;
myD <= '1';
WAIT FOR 80 ns;
WAIT;
END PROCESS;
-- clk per la scrittura
simCLK_process: PROCESS
BEGIN
simCLK <= '1';
WAIT FOR 10 ns;
simCLK <= '0';
WAIT FOR 10 ns;
END PROCESS;
END RTL;Prima cosa vorrei capire come avviene la scrittura e il ritorno a capo. Da quello che ho capito con WRITE vado a "salvare" (non mi viene un termine più adatto al momento) sulla linea di riferimento lo il dato myD e con WRITELINE vado a scrive la linea lo sul file stimulus.
Quindi dentro al process di scrittura fino a quando non termina la simulazione lui scrive una nuova linea. Giusto?
Vorrei capire meglio come funziona questa cosa perché volevo scrivere la prima linea di testo e il segnale utilizzando un unico process (se è possibile) però non so come gestire le righe. Non so come dirgli "dopo che hai scritto la riga di testo scrivi i segnali".
Seconda cosa: come chiudo il file a termine della simulazione? Il problema è questo: io non so quante linee di file verranno scritte perché dipende dai segnali che scrivo nei vari processi. Una simulazione può terminare dopo 100 ns come dopo 1000 ns. Vorrei un consiglio su come impostare un loop per fare la scrittura e quando termina la simulazione il file venga chiuso.
Metto in allegato come viene l'output su file per darvi un idea.
Grazie in anticipo per l'aiuto

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)