来源:http://blog.sina.com.cn/s/blog_50fcca1e0100abze.html
Link for ModelSim介绍
MATLAB 和 ModelSim 经过一个快速的双向的联合仿真接口联系起来,完成二者之间的数据交互特点
连接ModelSim到MATLAB和Simulink上是双向的,可进行联合仿真,验证,可视化。 |
|
支持ModelSim的PE和SE版本。 |
|
支持MATLAB/Simulink和ModelSim之间的用户可选通信模式。 |
|
提供共享存储器获得更快的系统性能,同时提供TCP/IP套接字加强多样性。 |
|
提供联合仿真的Simulink模块的库文件。 |
|
可以把输出测试结果转成VCD(value change dump)文件格式。 |
|
支持多个并行的ModelSim实例以及支持在Simulink和MATLAB函数中的多个硬件描述实体。 |
|
提供在MATLAB环境下与硬件描述语言交互式或批处理模式来进行联合仿真、调试、测试、以及验证工作。 |
使用Link for ModelSim
典型应用
1 :可以在 MATLAB 或 Simulink 中针对 HDL 实体开发软件测试基准 (test bench) 。
2 :可以在 Simulink 中对包含在大规模系统模型的 HDL 模型进行开发和仿真。
3 :可以生成测试向量进行测试、调试,以及同 MATLAB/Simulink 下的规范原形进行 HDL 代码的验证。
4 :提供在 MATLAB/Simulink 下的对 HDL 行为级的建模能力。
5 :可以在 MATLAB/Simulink 下对 HDL 的实现进行验证、分析、可视化。
Link for ModelSim 中 MATLAB 与 ModelSim 接口和 Simulink 与 ModelSim 接口是独立的。这使得你可以单独使用一个接口或同时使用两个。
使用ModelSim和MATLAB的接口
使用ModelSim和Simulink的接口
Link for ModelSim 还提供一个模块来生成 VCD 的文件格式,可以用来:
1 :观察在 HDL 仿真环境下的 Simulink 仿真波形
2 :使用相同或不同的仿真环境来比较多个不同仿真运行的结果。
3 :提供到后仿真分析工具的输入端口。
关于滤波器在部分设计实现应用的联合仿真和软件测试基准的实例。相当于 VHDL 代码在 ModelSim 中的执行过程
支持Verilog语言
关于一个 Manchester 接收器的联合仿真和软件测试基准的实例。通过使用 Simulink , DSP Blockset 以及 Communicstions B lockset 来创建的一个系统。该接收机在 VHDL 中实现并在 ModelSim 中仿真。
Matlab与Modelsim设计流程:
2. 在MATLAB中配置ModelSim:在命令窗中敲入configuremodelsim,根据提示一步一步进行即可。
3. 创建一个目录用来准备存放ModelSim工程文件(路径最好遵循上面的经验),可以在MATLAB的命令窗中用如下命令完成:cd、mkdir
4. 拷贝如下文件到3准备的文件夹中:
MATLABROOT\toolbox\modelsim\modelsimdemos\modsimrand_plot.m
MATLABROOT\toolbox\modelsim\modelsimdemos\VHDL\modsimrand\modsimrand.vhd
可如下完成:在MATLAB中采用cd将当前路径转到目标文件夹,用pwd命令查看确保;然后用
copyfile([matlabroot,‘\toolbox\modelsim\modelsimdemos\modsimrand_plot.m’])
和
copyfile([matlabroot,‘\toolbox\modelsim\modelsimdemos\VHDL\modsimrand\modsimrand.vhd’])实现。
5. 在MATLAB命令窗中采用如下语句打开MATLAB的ModelSim服务器,为建立链接做好准备:
6. 在MATLAB的cmd中采用 vsim打开ModelSim,可见ModelSim自动转到MATLAB当前目录。在ModelSim的命令窗口中采用vlib work创建work库永远接受工作工程编译结果;在ModelSim的cmd中用 vmap work work进行设计库和当前工作库映射
7. 在ModelSim的cmd中用edit modsimrand.vhd在editor中打开vhdl文件,进行vhdl文件编写设计修改
8. 在ModelSim的cmd中用vcom modsimrand.vhd编译modsimrand.vhd
在ModelSim的cmd中用 vsimmatlab work.modsimrand 将modsimrand导入仿真器在ModelSim的cmd中用 matlabtb modsimrand -mfunc modsimrand_plot
用 force sim:/modsimrand/clk 0 0,1 5 ns -repeat 10 ns
进行仿真输入信号设置,具体含义请查阅modelSim的用户手册,当然这些信号(实际就是实体的in pin,可以从MATLAB的中获取,这是以后慢慢再学)
9. 在ModelSim的cmd中用 run 80000
Simulink与Modelsim设计流程
1.建立HDL模型。2. ModelSim> vlib work;ModelSim> vmap work work。3. ModelSim> vcom XXXXXX.vhd。4.对Simulik的工程进行配置。5. vsim('socketsimulink', 4449)。6. ModelSim> vsimulink work.XXXXXX。7.开始仿真。
在Matlab与Modelsim联调用到的命令:
Malab的命令:
configuremodelsim:对Modelsim的安装路径进行配置。
hdldaemon:hdldaemon (默认采用的是share memory的方式,也可以采用socket方式,参见help hdldaemon)可以用 hdldaemon(‘status’) 查看服务器状态;用 hdldaemon(‘kill’) 关闭服务器。
mvl2dec:将比特逻辑值转化成为十进制数。
vsim:从matlab调用Modelsim。
Modelsim的命令:
matlabcp:将Matlab函数与Modelsim中的VHDL的entity或者Verilog的module建立联系。例如:vsim> matlabcp u_osc_filter -mfunc oscfilter将Modelsim中的entity:u_osc_filter与Matlab中的函数oscfilter建立关系。其中-mfunc的作用是将不同名的实体或者函数建立关系,若是没有-mfunc则函数与实体的名要一样。
matlabtb:初始化与VHDL的entity或者Verilog的module相关联的Matlab测试平台。例如:matlabtb modsimrand -mfunc modsimrand_plot -rising /modsimrand/clk。
matlabtbeval:调用代表VHDL的entity或Verilog的module的Matlab函数。
nomatlabtb:终止matlab中测试平台的调用。
vsimmatlab:将VHDL的entity和Verilog的module导入仿真器。例如:vsimmatlab work.modsimrand将modsimrand导入仿真器
vsimulink:导入VHDL的entity或Verilog的module与Simulink联系起来。
wrapverilog:使用VHDL封装Verilog的module。在执行Verilog封装之前必须在Modelsim中编译装载,如下例所示:
vlib work
vmap work work
vlog myverilogmod.v
vsim myverilogmod
wrapverilog -nocompile myverilogmod
其中-nocompile禁止自动编译。封装的结果输出到myverilogmod_wrap.vhd里。
vlib work: vlib work创建work库永远接受工作工程编译结果。
vmap work work:进行设计库和当前工作库映射。
edit XXXX.vhd:在editor中打开vhdl文件,进行vhdl文件编写设计修改。
vcom XXXX.vhd:编译XXXX.vhd。
force:进行仿真输入信号设置,例如:
force sim:/modsimrand/clk 0 0,1 5 ns -repeat 10 ns
force sim:/modsimrand/clk_en 1
force sim:/modsimrand/reset 1 0,0 50 ns
run:仿真开始,例如:run 80000
matlab 与 modelsim联合仿真流程
1、安装所需软件,建议完全安装matlab7.01及以上版本,modelsim6.0及以上版本。另外matlab7.0不能在AMD机器上正常运行,需要安装matlab7.01及以上版本。从matlab R2006a以后,即Link for Modelsim 2.0以后才能完全支持verilog的联合仿真,之前仅支持VHDL,如需支持verilog,则需用modelsim命令wrapverilog进行VHDL打包,不幸的是我没有在modelsim 6.0e中找到该命令。另外建议所有软件安装在默认路径下面。
2、利用matlab命令configuremodelsim配置modelsim,其实就是建立一种连接关系。在matlab命令行中输入:
>>configuremodelsim
%matlab7.01 中setupmodelsim 对应于该命令。
出现如下提示:
Identify the ModelSim installation to be configured for MATLAB and Simulink
Select a ModelSim installation:
[1] C:\Program Files\Modeltech_6.0\win32
[0] None
Selected Modelsim installation:"
%如果modelsim的路径是正确的,输入1
Modelsim successfully configured for MATLAB and Simulink"
Configuration has finished.
3、通常此时matlab服务器(matlab server)已经启动。可以通过在matlab命令行输入:
>>hdldaemon('status')
进行检测,如果正常运行,则显示:
HDLDaemon shared memory server is running with 0 connections
如果没有启动,则显示:
HDLDaemon is NOT running
此时,可在matlab命令行中输入:
>>hdldaemon
进行启动。
4、通过在matlab命令行输入:
>>vsim
启动modelsim
5、在modelsim命令行下利用"cd"命令切换到工作目录下,通常是.v文件的存储目录下(通常.v和.m的文件名相同),同时执行如下命令:
ModelSim>vlib work
ModelSim>vmap work work
ModelSim>vlog prj.v
ModelSim>vsimmatlab prj
ModelSim>matlabtb prj -rising /prj/clk -mfunc prj_plot
//如果.v和.m文件名一致,则可以省略-mfunc 参数
VSIM n>force /prj/clk 0 0ns, 1 5ns -repeat 10ns
VSIM n>force /prj/reset 1 0ns, 0 50ns
VSIM n>run 80000
//仿真结束后,在modelsim中选择simulate->End Simulation结束modelsim仿真,在matlab命令行输入”hdldaemon('kill')“结束matlab服务器。
注意事项:
0、最好用force产生clk 及 reset信号!!!
1、如果采用force 产生外部时钟信号,各子模块最好去掉`timescale定义,否则很可能无法正常运行;
2、如果由于调用xilinx库文件,而且为了保持模块可移植性,从而不能改动Xilinx库中`timescale的定义,需按要求在各个模块上面增加相应的`timescale定义,并且在matlabtb命令中增加-rising选项,如:
3、如果采用iport传递clk信号及其他信号,可采用tnext或者在matlabtb中采用-repeat选项,但各子模块的`timescale定义必须去掉,否则在matlab 2006a 调用modelsim时产生死循环。