第九讲 基本的输入和输出

37
第第第 第第第第第第第第

Upload: korene

Post on 16-Mar-2016

59 views

Category:

Documents


2 download

DESCRIPTION

第九讲 基本的输入和输出. 提纲. 基本 input/output 文件 测试程序( Testbenches ) ASSERT 语句. 文件对象. VHDL 的对象包括 信号 变量 常量 文件 通过引入文件类型,使得我们可以定义和使用文件对象. 文件定义. 文件可以通过它所存储的内容来进行区分 type text 是字符串文件; type IntegerFileType 是整数型文件; VHDL 1987 中的文件定义 file infile: text is in “inputdata.txt” ; - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第九讲  基本的输入和输出

第九讲 基本的输入和输出

Page 2: 第九讲  基本的输入和输出

提纲 基本 input/output 文件 测试程序( Testbenches ) ASSERT 语句

Page 3: 第九讲  基本的输入和输出

文件对象 VHDL 的对象包括

– 信号– 变量– 常量– 文件

通过引入文件类型,使得我们可以定义和使用文件对象

Page 4: 第九讲  基本的输入和输出

文件定义 文件可以通过它所存储的内容来进行区分

– type text 是字符串文件;– type IntegerFileType 是整数型文件;

VHDL 1987 中的文件定义– file infile: text is in “inputdata.txt” ;– file outfile: text is out “outputdata.txt” ;

VHDL 1993 中的文件定义– file infile: text open read_mode is “inputdata.txt”;– file outfile: text open write_mode is “outputdata.txt”;

Page 5: 第九讲  基本的输入和输出

文件定义:二进制 I/O 文件( VHDL 1993 )

Page 6: 第九讲  基本的输入和输出

文件定义:二进制 I/O 文件( VHDL 1993 ) VHDL 支持 read ( f,value ) , write ( f, value )和 endfile ( f )操作; VHDL 93 支持 File_Open ()和 File_Close ()操作; 直接和间接的文件打开操作;

Page 7: 第九讲  基本的输入和输出

文件定义:二进制 I/O 文件( VHDL 1987 )

Page 8: 第九讲  基本的输入和输出

文件定义:二进制 I/O 文件( VHDL 1987 ) VHDL1987 支持 read ( f,value ) , write ( f, value )和 endfile ( f )操作; 通过文件声明来间接地进行文件打开操作;

Page 9: 第九讲  基本的输入和输出

文件定义: TEXTIO 包

Page 10: 第九讲  基本的输入和输出

文件定义: TEXTIO 包 文件是按行( lines )来组织的; Read ()和 write ()子程序对 line 数据结构进行操作; Readline ()和 writeline ()子程序和文件进行数据交换; 基于 Text 的 I/O 操作; 在 STD 库的 TEXTIO 包中封装了全部的操作子程序

– 从行( lines )中读取和写入预定义类型数据的子程序;– 针对 std_input and std_output 的预定义访问操作;– 子程序名的重载( Overloaded );

Page 11: 第九讲  基本的输入和输出

文件定义: TEXTIO 包的使用

Page 12: 第九讲  基本的输入和输出

文件定义: TEXTIO 包的使用

Page 13: 第九讲  基本的输入和输出

文件定义: TEXTIO 包的使用

Page 14: 第九讲  基本的输入和输出

文件定义:扩展 TEXTIO 支持其他数据类型 对用户隐藏 TEXTIO 的 ASCII 格式; 针对所希望的数据类型的读和写,如, std_logic_vector ,提供类型转换子程序; 将子程序封装在包中; 将包( package )安装在库( library )中,然后通过 use 子句使库中的内容可见;

Page 15: 第九讲  基本的输入和输出

代码示例:类型转换

Page 16: 第九讲  基本的输入和输出

代码示例:类型转换

Page 17: 第九讲  基本的输入和输出

代码示例:( Bhasker95 ) 输出格式定义:

write (buf, “This is the header”);writeline (outfile,buf);write (buf, “Clk =”);write (buf, clk);write (buf, “, N1 =”);write (buf, N1);

输出结果:This is the headerClk = 0, N1 = 01001011

Page 18: 第九讲  基本的输入和输出

代码示例:( Bhasker95 ) 读入的格式化输入行:

Page 19: 第九讲  基本的输入和输出

代码示例:( Bhasker95 ) 读入该格式化输入行的程序:

Page 20: 第九讲  基本的输入和输出

代码示例:文件名的处理

Page 21: 第九讲  基本的输入和输出

代码示例:文件名的处理 在上面的代码中假定“ input” 映射到模拟器的控制台

– 通常“ input” 和 “ output” 分别映射到标准输入和标准输出

Page 22: 第九讲  基本的输入和输出

代码示例:测试模块

Page 23: 第九讲  基本的输入和输出

代码示例:测试模块

Page 24: 第九讲  基本的输入和输出

代码示例:测试程序( Testbenches )

• 测试程序具有一定的通用性• 基本策略是:施加测试激励,测量和记录响应矢量

Page 25: 第九讲  基本的输入和输出

代码示例:测试程序( Testbenches )• 测试程序产生周期性的时钟信号并施加测矢量

Page 26: 第九讲  基本的输入和输出

代码示例:测试程序( Testbenches )

Page 27: 第九讲  基本的输入和输出

代码示例:结构化测试模块

Page 28: 第九讲  基本的输入和输出

测试激励的生成 定义功能测试所需的激励矢量和参考矢量 激励源

– 局部常数阵列– I/O 文件

时钟和复位信号的生成– 通常与激励矢量相隔离– 实现周期性的激励

Page 29: 第九讲  基本的输入和输出

测试激励的生成:示例( Smith96 )

Page 30: 第九讲  基本的输入和输出

测试激励的生成:示例( Smith96 )

Page 31: 第九讲  基本的输入和输出

测试结果的确认( Validation ) 将测试响应矢量与参考矢量相比较,并在外部文件中记录其中不匹配的部分(出错点); 同时需要记录出错点所对应的仿真时间点; 可能需要记录仿真状态。

Page 32: 第九讲  基本的输入和输出

断言( ASSERT ) 将测试响应矢量与参考矢量相比较,并在外部文件中记录其中不匹配的部分(出错点); 同时需要记录出错点所对应的仿真时间点; 可能需要记录仿真状态。

Page 33: 第九讲  基本的输入和输出

断言( 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.

Page 34: 第九讲  基本的输入和输出

断言( 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.

Page 35: 第九讲  基本的输入和输出

断言( ASSERT ) 设计者可以在预定义的级别上报告出错情况: NOTE,WARNING, ERR

OR and FAILURE (枚举类型) 报告的参数是一个字符串,该字符串会写到仿真输出 断言所对应的操作是仿真器相关的 并行 vs. 串行断言语句 在不中断仿真的情况下 TEXTIO 比 ASSERT 快

Page 36: 第九讲  基本的输入和输出

断言( ASSERT ):示例( Bhaskar 95 )

architecture check_times of DFF is constant hold_time: time:=5 ns; constant setup_time : time:= 2 ns; begin process variable lastevent: time; begin if d’event then assert NOW = 0 ns or (NOW - lastevent) >=hold_time report “Hold time too short” severity FAILURE; lastevent := NOW; end if; -- check setup time -- D flip flop behavioral model end process; end architecture check_times

Page 37: 第九讲  基本的输入和输出

总结 基本 input/output

– ASCII I/O 和 TEXTIO package– binary I/O– VHDL 87 vs. VHDL 93

测试程序( Testbenches ) ASSERT 语句