一种用于FPGA逻辑仿真的数据读写方法
2016-05-30吴斌刘夏青车炯晖张旭洲
吴斌 刘夏青 车炯晖 张旭洲
摘 要:针对FPGA逻辑设计仿真,提出一种TEXTIO数据读写方法。当测试激励比较大且复杂时,可以用MATLAB仿真产生,测试结果也可以在MATLAB中进行分析,本文给出仿真实例,证明该方法可行精确,为逻辑设计提供极大的方便。
关键词:FPGA;TEXTIO;仿真;MATLAB
近年来,电子设计领域所涉及的算法越来越复杂,导致对FPGA实现的设计要求越来越高,作为逻辑开发的重要环节,仿真能及时发现设计错误,加快设计进度,提高设计可靠性。
本文针对最基本的行为仿真,提出一种仿真信号由TEXTIO文件读写形式的方法,用于复杂系统测试矢量数目较大的逻辑设计。
1 基于TEXTIO的交互仿真方法
在测试矢量非常大时可以用TEXTIO的方法来进行仿真。TEXTIO是VHDL标准库STD中的一个程序包(Package),它提供了VHDL与磁盘文件直接访问的桥梁,可以利用它来读取或写入仿真数据到文件中,TEXTIO的使用是通过testbench来进行的,即在testbench中可以调用TEXTIO进行仿真[ 1 ]。
TEXTIO对文本文件是按行来处理的,TEXTIO程序包中有专门的过程可以读一行或写一行字符串,并且有一个函数检查文件是否结束。
类型LINE是TEXTIO程序包中的基本单元,用于保持将要写到文件的一行字符串或保持从一个文件读取字符串[ 2 ]。一般情况下,该方法用到的过程和函数为readline,read,writeline,write和endfile等。
2 仿真实例
本文将针对欧拉公式这一数学理论进行逻辑设计以及功能仿真验证。
输入信号利用MATLAB仿真产生,假设两信号sig1和sig2频率分别为10MHz和20MHz,取两信号实部和虚部,并将其量化成与逻辑设计输入信号位数相同的二进制BIT量,分别存入4个.txt文本文件中。
在编写testbench过程中,读输入信号的和将写输出信号是本文提出方法的关键。
定义4个文件类型作为输入文件目标,并定义4个变量用来保持从文件读取的行,4个BIT_VECTOR类型的变量用来保持从行读取的值。因为读取的值是BIT_VECTOR,还需要转换为STD_LOGIC_VECTOR类型,可以使用函数TO_STDLOGICVECTOR来实现。
以其中一个变量为例,读输入信号文件部分关键程序为:
FILE in_file1:TEXT IS IN"E:/signal/data1_I.txt";
VARIABLE in_line1:LINE;
VARIABLE int_val1:BIT_VECTOR(13 downto 0);
while not(endfile(in_file1))loop
readline(in_file1,in_line1);
read(in_line1,int_val1);
io_i<=to_stdlogicvector(int_val1);
写文件过程也类似,仿真过程中将输出信号输出到2个.txt文件中,部分程序样例为:
FILE out_file1:TEXT IS OUT"E: /signal/sig_I_new.txt";
VARIABLE out_line1:LINE;
write(out_line1,to_bitvector(out_i));
writeline(out_file1,out_line1);
在MATLAB中画出两信号sig1和sig2以及两信号复乘后的频谱,与ISE中复乘逻辑仿真后的频谱结果进行对比分析,仿真图如图1所示。
仿真结果标明,输入信号为10MHz和20MHz的两个复信号在MATLAB中复乘的结果为30MHz的复信号,逻辑设计中复乘后产生的信号也为30MHz的复信号,与预期结果相同。
3 结论
在FPGA逻辑设计中,可以采用TEXTIO方法进行读取测试激励,这些激励也能够在MATLAB中的生成,在测试结束之后我们还能够利用MATLAB进行分析测试结果,从而实现功能验证,为逻辑设计提供极大的方便。
参考文献:
[1] 汤琦,蒋军敏.Xilinx FPGA高级设计及应用[M].北京:电子工业出版社,2012.
[2] 江思敏.VHDL数字电路及系统设计[M].北京:机械工业出版社,2006.
作者简介:吴斌(1984-),男,蒙古族,内蒙古宁城人,硕士,工程师,主要研究方向:机载计算机技术。