2013-08-23 16 views

Odpowiedz

10

Czas symulacji jest dostępny za pośrednictwem funkcji now, która zwraca wartość jako typ time. Atrybutu image typu time można użyć do przekonwertowania tego ciągu na ciąg znaków za pomocą time'image(now). Więc można wydrukować czas symulacji w swoim komunikacie z:

report "This is the time: " & time'image(now); 

Dodatek: Jeśli potrzebna jest dodatkowa manipulacja ciąg, ciąg czas symulacji mogą być reprezentowane w zmiennej z kodem jak:

process is 
    variable sim_time_str_v : string(1 to 30); -- 30 chars should be enough 
    variable sim_time_len_v : natural; 
begin 
    ... 
    sim_time_len_v := time'image(now)'length; 
    sim_time_str_v := (others => ' '); 
    sim_time_str_v(1 to sim_time_len_v) := time'image(now); 
    report "Sim time string length: " & integer'image(sim_time_len_v); 
    report "Sim time string.......:'" & sim_time_str_v & "'"; 
    ... 

Jednak VHDL jest uciążliwy, jeśli chodzi o manipulację ciągiem tekstowym, ponieważ przechowywanie wyniku jakiejś manipulacji wymaga, aby długość była znana. W przypadku bardziej zaawansowanych operacji na ciągach można w symulacji zastosować typ access w połączeniu z funkcjami.

+0

Witaj Morten: świetnie! Dzięki!! – bFig8

+0

VHDL-2008 obsługuje również to_string: –

0

Przeczytaj pierwszy post @MortenZdk. To długi komentarz z formatowaniem.

Zamiast używać "obrazu, polecam funkcję VHDL-2008 to_string. Można to wykorzystać w połączeniu z wbudowanych operacji zapisu do pliku:

write(OUTPUT, "This is the time: " & to_string(now) & LF) ; 

Alternatywnie, można również używać go z textio i będzie disambiguate dosłowną wartość ciągu. Na przykład, nie typ kwalifikatora jest wymagane w następujących przypadkach:

write(write_buf, "The time is:" & to_string(now)) ; 
writeline(OUTPUT, write_buf) ; 

Jeśli naprawdę nienawidzę textio można używać konkatenacji i to_string tak jak byś użyć „” w instrukcji print w innych językach. Nie zapomnij o znaku LF na końcu, aby zakończyć linię. Możesz również dodawać znaki LF w innych miejscach, aby wydrukować wiele linii.

write(OUTPUT, "%%ERROR: RX value does not match expected value" & 
       "Received Value: " & to_hstring(RxVal) & 
       " Expected Value: " & to_hstring(ExpectedVal) & 
       " at time: " & to_string(now) & LF) ; 

to_string obsługuje nadzbiór tego, co obsługuje obraz. Najbardziej godne uwagi są wartości tablicowe (takie jak std_logic_vector). Jest przeciążalny, ale jest już obsługiwany dla wszystkich typów obsługiwanych przez textio w VHDL-2008. Obsługuje również przeciążanie heksadecymalne i ósemkowe w postaci to_hstring i to_ostring (podobnie jak hwrite i owrite). Zauważ, że VHDL-2008 usunął problemy z hwrite, owrite, hread i oread.

Jako alternatywa dla typów dostępu, VHDL-2008 zawiera również ciąg znaków, który zwraca zarówno wartość, jak i długość. Pomija białe spacje, a następnie odczytuje znaki (do długości zmiennej łańcuchowej), aż znajdzie biały odstęp. W poniższym przykładzie znacznik ciągu może mieć maksymalnie 80 znaków.

variable ReadVal : string(1 to 80) ; 
variable ReadLen : integer ; 
... 
sread(ReadBuf, ReadVal, ReadLen) ; 
Powiązane problemy