总体思想是现在 MATLAB 中产生仿真所需要的输入信号,以十六进制形式存放在数据文件中,在
modelsim 中用 vhdl 语言编写测试文件,做时序仿真,最后将结果存入另外一个数据文件,最后在 matlab
中将 modelsim 的仿真输出文件读入一个数组中,以便可以作图分心,进一步做误差分析。
虽然 Modelsim 的功能非常强大,仿真的波形可以以多种形式进行显示,但是当涉及到数字信号处理
的算法的仿真验证的时候,则显得有点不足。而进行数字信号处理是Matlab 的强项,不但有大量的关于数
字信号处理的函数,而且图形显示功能也很强大,所以在做数字信号处理算法的 FPGA 验证的时候借助
Matlab 会大大加快算法验证的速度。
关于 Matlab和 Modelsim联合仿真,我从网上看到两种方法,一种是通过 Link for Modelsim建立 Matlab
和 Modelsim 的联合仿真接口;另一种就是通过文件读写的方式实现 Matlab 和 Modelsim 的联合仿真。我
没有仔细研究过第一种方法,我大概看了一下,感觉过程比较复杂,不过功能肯定也很强大,网上有一篇
关于 Link for Modelsim 的文章
http://space.ednchina.com/upload/2009/11/16/9e8d0364-20ed-4583-a85e-4d1fc50783a7.rar"
target=_blank>,有兴趣的朋友可以去看一看。关于第二种方法,只是通过几个文件读写函数就可以实现
了,而且基本可以满足当前仿真的要求,所以这里主要讨论一下我所使用的这种方法,希望能够抛砖引玉
吧,因为我也只能算个初学者而已。
1. Matlab 产生数据用作 Modelsim 仿真
在 FPGA 进行算法验证的时候,经常需要输入仿真数据,这些数据可以用FPGA 产生,但是如果数据
产生过程很复杂的话,需要耗费很大的精力,并且产生的数据的准确性也不能保证。例如,如果要验证一
个通信接收机的相关算法,那么我们就需要先产生发送数据,也就是说得先做一个发射机,如果这个过程
也由 FPGA 实现的话,也是一个很复杂的过程。这时候我们就可以借助 Matlab,利用 Matlab 内部自带的
各种函数,产生需要的信号,再经过定点化,就作为 FPGA 接收模块的输入信号了。这样做无疑会节约很
多时间和精力。
下面用一个简单的例子说明如何用 Matlab 产生的数据用作 Modelsim 仿真。
首先利用 matlab 产生一个周期 256 点 8bit 的正弦波数据,然后以 16 进制形式写入 sin.txt 文件
x = fix(128 + (2^7 - 1) * sin(2*pi*n/N));
fid = fopen('sin.txt','wt');
fprintf(fid,'%x',x);
fclose(fid);