
第讲基本输入输出函数.ppt
37页第九讲第九讲 基本的输入和输出基本的输入和输出 提纲提纲l基本input/output文件l测试程序(Testbenches)lASSERT语句文件对象文件对象lVHDL的对象包括–信号–变量–常量–文件l通过引入文件类型,使得我们可以定义和使用文件对象文件定义文件定义l文件可以通过它所存储的内容来进行区分–type text 是字符串文件;–type IntegerFileType 是整数型文件;lVHDL 1987中的文件定义–file infile: text is in “inputdata.txt”;–file outfile: text is out “outputdata.txt”;lVHDL 1993中的文件定义–file infile: text open read_mode is “inputdata.txt”;–file outfile: text open write_mode is “outputdata.txt”;文件定义:二进制文件定义:二进制I/O文件(文件(VHDL 1993))文件定义:二进制文件定义:二进制I/O文件(文件(VHDL 1993))lVHDL支持read(f,value), write(f, value)和 endfile(f)操作;lVHDL 93支持File_Open()和File_Close()操作;l直接和间接的文件打开操作;文件定义:二进制文件定义:二进制I/O文件(文件(VHDL 1987))文件定义:二进制文件定义:二进制I/O文件(文件(VHDL 1987))lVHDL1987支持read(f,value), write(f, value)和 endfile(f)操作;l通过文件声明来间接地进行文件打开操作;文件定义:文件定义:TEXTIO包包文件定义:文件定义:TEXTIO包包l文件是按行(lines)来组织的;lRead()和write()子程序对line数据结构进行操作;lReadline()和writeline()子程序和文件进行数据交换;l基于Text的 I/O操作;l在STD 库的TEXTIO包中封装了全部的操作子程序–从行( lines )中读取和写入预定义类型数据的子程序;–针对std_input and std_output的预定义访问操作;–子程序名的重载(Overloaded);文件定义:文件定义:TEXTIO包的使用包的使用文件定义:文件定义:TEXTIO包的使用包的使用文件定义:文件定义:TEXTIO包的使用包的使用文件定义:扩展文件定义:扩展TEXTIO支持支持其他数据类型其他数据类型l对用户隐藏TEXTIO的ASCII格式;l针对所希望的数据类型的读和写,如, std_logic_vector ,提供类型转换子程序;l将子程序封装在包中;l将包( package)安装在库( library)中,然后通过use 子句使库中的内容可见;代码示例:类型转换代码示例:类型转换代码示例:类型转换代码示例:类型转换代码示例:(代码示例:(Bhasker95))l输出格式定义:write (buf, “This is the header”);writeline (outfile,buf);write (buf, “Clk =”);write (buf, clk);write (buf, “, N1 =”);write (buf, N1);l输出结果:This is the headerClk = 0, N1 = 01001011代码示例:(代码示例:(Bhasker95))l读入的格式化输入行:代码示例:(代码示例:(Bhasker95))l读入该格式化输入行的程序:代码示例:文件名的处理代码示例:文件名的处理代码示例:文件名的处理代码示例:文件名的处理l在上面的代码中假定“input”映射到模拟器的控制台–通常“input”和 “output”分别映射到标准输入和标准输出代码示例:测试模块代码示例:测试模块代码示例:测试模块代码示例:测试模块代码示例:测试程序(代码示例:测试程序(Testbenches)• 测试程序具有一定的通用性• 基本策略是:施加测试激励,测量和记录响应矢量代码示例:测试程序(代码示例:测试程序(Testbenches)•测试程序产生周期性的时钟信号并施加测矢量代码示例:测试程序(代码示例:测试程序(Testbenches)代码示例:结构化测试模块代码示例:结构化测试模块测试激励的生成测试激励的生成l定义功能测试所需的激励矢量和参考矢量l激励源–局部常数阵列–I/O文件l时钟和复位信号的生成–通常与激励矢量相隔离–实现周期性的激励测试激励的生成:示例(测试激励的生成:示例(Smith96))测试激励的生成:示例(测试激励的生成:示例(Smith96))测试结果的确认(测试结果的确认(Validation))l将测试响应矢量与参考矢量相比较,并在外部文件中记录其中不匹配的部分(出错点);l同时需要记录出错点所对应的仿真时间点;l可能需要记录仿真状态。
断言(断言(ASSERT))l将测试响应矢量与参考矢量相比较,并在外部文件中记录其中不匹配的部分(出错点);l同时需要记录出错点所对应的仿真时间点;l可能需要记录仿真状态断言(断言(ASSERT))assert Q = check(1) and Qbar = check(0)report “Test Vector Failed”severity error;仿真器控制台输出示例仿真器控制台输出示例 Selected Top-Level: srbench (behavioral) : ERROR : Test Vector Failed : Time: 20 ns, Iteration: 0, Instance: /T1. : ERROR : Test Vector Failed : Time: 100 ns, Iteration: 0, Instance: /T1.断言(断言(ASSERT))assert Q = check(1) and Qbar = check(0)report “Test Vector Failed”severity error;仿真器控制台输出示例仿真器控制台输出示例 Selected Top-Level: srbench (behavioral) : ERROR : Test Vector Failed : Time: 20 ns, Iteration: 0, Instance: /T1. : ERROR : Test Vector Failed : Time: 100 ns, Iteration: 0, Instance: /T1.断言(断言(ASSERT))l设计者可以在预定义的级别上报告出错情况:NOTE,WARNING, ERROR and FAILURE (枚举类型)l报告的参数是一个字符串,该字符串会写到仿真输出l断言所对应的操作是仿真器相关的l并行 vs. 串行断言语句l在不中断仿真的情况下TEXTIO比 ASSERT快断言(断言(ASSERT):示例():示例(Bhaskar 95))larchitecture check_times of DFF islconstant hold_time: time:=5 ns;lconstant setup_time : time:= 2 ns;lbeginlprocesslvariable lastevent: time;lbeginlif d’event thenlassert NOW = 0 ns or (NOW - lastevent) >=hold_timelreport “Hold time too short”lseverity FAILURE;llastevent := NOW;lend if;l-- check setup timel-- D flip flop behavioral modellend process;lend architecture check_times总结总结l基本input/output–ASCII I/O和 TEXTIO package–binary I/O–VHDL 87 vs. VHDL 93l测试程序(Testbenches)lASSERT语句。
