ISE与MATLAB的联合使用
本节主要介绍MATLAB设计、ISE实现以及二者联合测试的FPGA开发流程,这是全书的核心思想之一,也是目前最流行的设计方法。
MATLAB软件是MathWorks公司的核心产品,具有用法简单、扩展性好、资源库丰富以及与其他软件接口方便的特点,已成为从事电子信息和信号处理 领域人员必备的工具软件之一。MATLAB和ISE的联合使用主要通过以下两个途径来实现:即MATLAB辅助ISE的方法,以及利用接口软件 System Generator的方法。本书主要围绕着第一种方法展开讨论,但System Generator作为一种新兴的设计模式,具有强大的发展势头,这里对其也作了简单介绍,关于System Generator的详细讨论将在第8章展开。
1. MATLAB辅助ISE完成FPGA
所谓辅助,就是利用MATLAB来加速浮点算法的实现和功能测试。即在进行FPGA设计之前,先用MATLAB实现浮点算法,分析出算法的瓶颈所在,将程 序的串行结构改造成并行结构,接着利用MATLAB完成定点仿真,得到满足性能需求的最小定点位宽以及中间步骤计算结果的截取范围,然后在ISE中完成设 计。最后再利用MATLAB的定点仿真结果对设计进行功能验证,整个流程如图4-106所示。
图4-106 MATLAB辅助ISE完成设计的流程图
关于怎样完成定点仿真以及模块输出结果截取的原理和方法将在第5章中展开详细关系讨论。此外,利用MATLAB对FPGA设计进行功能仿真是比较关键的,下面介绍如何将MATLAB和ModelSim结合起来使用。
首先,在MATLAB中产生仿真所需的输入信号,以十六进制的形式存放在数据文件中,通常放在后缀为.txt的文本文件中;其次在ModelSim中用 Verilog编写仿真测试文件,并通过系统函数$readmemh将上述仿真数据文件中的测试向量读入,在ModelSim中做功能仿真和时序仿真,并 调用$fopen函数打开另外一个数据文件,用$fdisplay函数将仿真结果写入;再次,在MATLAB中将ModelSim仿真输出数据文件中的数 据读入一个数组中,可以作图分析或者利用统计手段来分析。此外,还可以将ModelSim的仿真输出与MATLAB的浮点性能作对比,来验证设计的性能。 这样比利用其他方式要方便、直观,并且具有更高的正确性。
下面举例介绍Verilog语言中文件输入/输出函数的使用方法。
1)系统函数$fopen用于打开一个文件,并返回一个整数的文件指针。然后,$fdisplay就可以使用这个文件指针在文件中写入信息。写完后,用$fclose关闭文件。
其语法格式为:
integer <file_desc>;
<file_desc> = $fopen("<file_name>", "<file_mode>");
$fwrite(<file_desc>, "<string>", variables);
$fclose(<file_desc>);
例如:integer W_file; //定义文件指针
W_file = $fopen("W_file.txt");
$fdisplay (W_file, "@%h\n%h", a, b);
$fclose (W_file);
以上语句将“a”和“b”分别显示在“@%h\n%h”中的两个%h位置,并写入Write_out_file指针所指的文件W_file.txt中。
2)读文件操作通过$readmemh和$readmemb来完成,分别对应的数据文件为16进制和二进制。其语法格式为:
reg [<memory_width>] <reg_name> [<memory_depth>];
$readmemh ("<file_name>", <reg_name>);
例如:reg [15:0] c [0:15];
$readmemh (“R_file.txt”, c);
上例就是将R_file中的数据读入数组c中,然后就可以直接使用这些数据了。其中数据文件的格式为:
@2c
45
其中,@2c表示地址,为16进制数,45表示该地址的数据。
|