[英]How to create a list of Tcl commands in a text file and then run it in ISim?
[英]Copying ISim results as strings/text
您可以在测试平台(顶层)中使用VHDL的文件I / O功能,将来自DUT的信号转换为人类可读的字符串,并将其写入STDOUT或文件中。
文件I / O的粗略概述。
VHDL具有用于文件I / O和字符串操作的多个程序包和过程/功能。
std.textio
VHDL为string
定义了一种称为line
的访问类型(指针),为文本文件定义了一种基本文件类型的text
。
用法:
use std.textio.all;
来自std.textio
声明:
-- types type line is access string; type text is file of string; -- STD files file input : text open read_mode is "STD_INPUT"; file output : text open write_mode is "STD_OUTPUT"; -- procedures (some with overloads) read (<lineVar>, <vhdlObji [,<status>]); readline (<fileObj>, <lineVari); write (<lineVar>, <vhdlObj> [,right|left, <width>]); write (<lineVar>, <realObj> [,right|left, <width>, <digits>]); write (<lineVar>, <timeObj> [,right|left, <width>, <unit>]); writeline (<fileObj>, <lineVar>); -- functions endfile (<fileObj>) : boolean
ieee.std_logic_textio
该软件包声明了更多的过程来格式化std_logic
值。
用法:
library ieee; use std.textio.all; use ieee.std_logic_1164.all; use ieee.std_logic_textio.all;
来自ieee.std_logic_textio
声明:
read (<lineVar>, <vhdlObj> [,<status>]); -- binary hread (<lineVar>, <vhdlObj> [,<status>]); -- hexadecimal oread (<lineVar>, <vhdlObj> [,<status>]); -- octal write (<lineVar>, <vhdlObj> [,right|left, <width>]); -- binary hwrite (<lineVar>, <vhdlObj> [,right|left, <width>]); -- hexadecimal owrite (<lineVar>, <vhdlObj> [,right|left, <width>]); -- octal
资料来源: VHDL Kompakt (汉堡大学的德语VHDL书)
使用范例
以下示例将mySignal
的值写入日志文件并报告时间。
signal mySignal : STD_LOGIC_VECTOR(7 downto 0);
-- ....
process
file LogFile : TEXT open WRITE_MODE is "logfile.log";
variable LineBuffer : LINE;
begin
write(LineBuffer, ( STRING'("========================================")));
write(LineBuffer, (CR & STRING'("TESTBENCH REPORT")));
write(LineBuffer, (CR & STRING'("========================================")));
writeline(LogFile, LineBuffer);
wait until mySignal /= x"00";
wait until rising_edge(Clock);
for i in 0 to 7 loop
wait until rising_edge(Clock);
write(LineBuffer, "Time " & to_string(now, 1) & " Value 0x" & raw_format_slv_hex(mySignal));
writeline(LogFile, LineBuffer);
end loop;
end process;
now
是一个内置函数,代表当前的模拟时间。 它由to_string
格式化,需要时间和精度。 信号mySignal
由raw_format_slv_hex
格式化。 此函数将任意大小的STD_LOGIC_VECTOR
格式化为十六进制字符串。
该文件应具有以下内容:
========================================
TESTBENCH REPORT
========================================
Time 50 ns Value 0x08
Time 60 ns Value 0x09
Time 70 ns Value 0x0A
Time 80 ns Value 0x0B
Time 90 ns Value 0x0C
....
最后提示
write
过程会将数据附加到LineBuffer
字符串中。 当您调用writeline时,缓冲区将被写入文件,并且该操作后LineBuffer
为空。
最后,这是一个有关如何读取RAM / ROM初始化文件并将其转换为通用内存表示形式的示例片段 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.