当前位置:首页 >> 信息与通信 >>

MATLAB,Simulink与Modelsim联合仿真步骤及实例[1]


目录

1:什么是 link for modelsim 2:link for modelsim 的安装与设置 3:使用 link for modelsim 仿真的实例

什么是 link for modelsim
Link for modelsim 是一个联合仿真的接口,它将 MathWorks 工具整合到 EDA 工作环境 中

,使其应用于 FPGA 和 ASIC 的开发。这个接口在 HDL 仿真器 ModelSim SE/PE 于 MathWorks 的产品 Matlab 和 SimuLink 间提供了一个双向连接,以指导硬件的设计验证 和联合仿真。这种整合可以分别充分发挥 Matlab/SimuLink 和 ModelSim 各自的优势。 1. 联合仿真环境 Link for ModelSim 是一个客户/服务器的车是平台和联合仿真应用,ModelSim 在这个仿 真环境中所起的作用取决于 ModelSim 与 Matlab 还是 SimuLink 连接,本说明只讲 ModelSim 与 Matlab 的连接。 a. ModelSim 与 Matlab 连接 当与 Matlab 相连接时,ModelSim 作为客户端,如下图所示:

在这个模式中,Matlab 服务器等到 ModelSim 客户端发出的服务请求,当接收到一个请 求时,Matlab 建立一个通信连接,而且调用一个指定的 Matlab 函数,这个函数封装了 用于计算数据以验证或者使当前在 ModelSim 中仿真的 HDL 模型的可视化。 下图显示了在一个测试平台环境中 Matlab 函数如何与 ModelSim 进行通信

Matlab 服务器可以用于多个 HDL 实体之间的联合仿真,但是你必须为多个 HDL 实体 指定一个通信方式使他们可以相互通信,下图显示了两个ModelSim 客户端如何连接到 服务器的 TCP/IP 的 4449 端口:

回到目录

2. 通信模式 在 ModelSim 和 Matlab 之间的通信模式有共享内存和网络两种,当你的 ModelSim 和 MatLab 运行与同一个系统的时候,可以指定为共享内存方式和网络方式,但共享内存 方式更加合适,其也是默认的方式。 网络方式的应用范围更加广泛,它可以应用于单系统和网络环境,对于有增长潜力的系 统它更加适合。

使用 link for modelsim 的过程
1. 安装和设置 a. 确定应用环境要求 b. 对配置作出决定 c. 如为网络环境,则识别出服务器 d. 选择 TCP/IP 端口 e. 检查产品要求 f. 安装相关应用软件 g. 安装 Link for modelsim h. 设置 modelsim

Link for modelsim 的安装与设置
当所有要求的软件都已经安装好了以后,你就可以安装 modelsim,使它可以与 Matlab 或 simulink 一起工作, 你可以立即完成或者稍后在完成这份工作。 为配置 ModelSim 使它可 以 与 Link for ModelSim 一 起 工 作 , 作 为 安 装 的 以 部 分 , 可 以 使 用 Matlab 函 数 setupmodelsim.setupmodelsim 函数为 Modelsim 仿真器注册一个新的 Matlab 和 Simulink 相关 的 Tcl 令, 通过在 Modelsim 安装目录中创建文件...\tcl\ModelSimTclFunctionsForMATLAB.tcl。 注意,setupmodelsim 并不选择所配置的 Modelsim 为使用 vsim 命令时的默认仿真器。 你可以使用 setupmodelsim 命令用交互式或者命令行的方式,交互式的方式显示小心和 提示。命令行的方式在教本方式下可以使用,以下为如何使用交互式方式: 1. 在 matlab 命令提示符或键入: Setupmodelsim 又或者你可以指定属性名称和属性值‘action’‘install’ , 安装教本提示你确认你相为 Link for modelsim 安装的 Modelsim 的版本

Identify the ModelSim installation to be configured for MATLAB and Simulink Do you want setupmodelsim to locate installed ModelSim executables [y]/n? n
2. 指定一个已经安装的 modelsim 版本,如果你想明确指定已经安装的 modelsim 的路径的 话,可以键入 n,命令提示符提示你输入一个明确的路径 Please enter the path to your ModelSim executable file (modelsim.exe or vsim.exe): 回到目录

如果你希望 setupmodelsim 定位和显示所有已经安装的 modelsim 的版本, 键入 y 或者直接按 enter 键,函数将搜索已经安装的 modelsim 版本而且显示如下: Select a ModelSim installation: [1] d:\Modeltech_6.1b\win32 [0] None ModelSim SE 6.1b

Selected Modelsim installation: 3. 根据第 2 步得到得信息,键入完整得 Modelsim 或者 vsim 可执行文件得路径,或者从列 表中选择一个已经搜索到得版本,键入 1。函数将修改已经安装的文件,并显示如下: Previous MATLAB startup file found in this installation of ModelSim: d:\Modeltech_6.1b\win32\..\tcl\ModelSimTclFunctionsForMATLAB.tcl Do you want to replace this file [y]/n? y 是否替代已经安装得文件?y 是,n 否。 Modelsim successfully configured for MATLAB and Simulink

仿真实例
一:加法器的仿真 本实例假设已经安装了 link for modelsim 和相关的软件。 1. 加法器的 verilog 代码入下: module add8(sum,cout,a,b,cin); output[7:0] sum; output cout; input[7:0] a,b; input cin; assign {cout,sum}=a+b+cin; endmodule 2.在使用 link for modelsim 仿真时,你必须建立一个满足仿真要求的 Matlab 函数,在此例 中,函数的代码如下: function [iport,tnext] = add8(oport, tnow, portinfo) persistent odata? persistent inc? tnext=[]? iport=struct()? if isempty(odata) inc=0? end tnext=tnow+1e?8?%下次 modelsim 调用 matlab 函数的时间,距开始的时间,以秒为单位 a=int8(10+40*rand(1))?%tnow 为这次 mdoelsim 调用 matlab 函数的时间 b=int8(10+40*rand(1))? cin=randint(1)? iport.a=dec2bin(a,8)? 回到目录

iport.b=dec2bin(b,8)? iport.cin=dec2bin(cin,1)? odata.a(inc+1)=a?odata.b(inc+1)=b?odata.cin(inc+1)=cin? odata.dout(inc+1)=mvl2dec(oport.sum)? odata.cout(inc+1)=mvl2dec(oport.cout)? if(inc==50) for i=1:50 x=[odata.a(i),odata.b(i),odata.cin(i)?odata.dout(i),odata.cout(i),0]? disp(i)? disp(x)? end end inc=inc+1? 函数说明: a. function [iport,tnext] = add8(oport, tnow, portinfo), 指定函数名和相关的参数。 这个函 数定义了 matlab 与 modelsim 相互通信的通道,当定义函数时应考虑以下几点: (1).默认情况下,link for modelsim 假设 matlab 函数名与 VHDL 实体名相同,你也可以 明确指定与当前仿真相关的 matlab 函数名。 (2).函数必须包括 2 个输出参数,iport,tnext,3 个输入参数 oport,tnow,portinfo。注意参 数的名字可以不同。以下简要说明各个参数的意义: Iport:指定 VHDL 实体的输入端口,并可以对其赋值。如上例中 iport.a=dec2bin(a,8)?指定 Verilog 实体中的 a 赋值为随机数 a 转化为的 8 位二进制数 iport.b=dec2bin(b,8)?指定 verilog 实体中的 b 赋值为随机数 b 转化为的 8 位二进制数 iport.cin=dec2bin(cin,1)?指定 verilog 实体中的进位 cin 为随机数 cin 转化为的 1 位二进制。 Tnext:指定下次回调 matlab 函数的时间(距仿真开始时) ,默认单位位秒,如 tnext=tnow+1e?8?指定下次回调 matlab 函数的时间为距这次调用 matlab 函数 1e?8 秒。 Oport:接收 VHDL 实体的输出端口的输出值,如: odata.dout(inc+1)=mvl2dec(oport.sum);dout 等于输出端口 sum 的输出值 odata.cout(inc+1)=mvl2dec(oport.cout)?cout 等于输出端口 cout 的输出值 tnow:此次回调 matlab 函数的时间 portinfo:第一次调用 matlab 函数时返回端口的信息。 (3):注意,输出参数,iport,tnext 必须被初始化为空值。 tnext=[]? iport=struct()? 因为每次都重新开始调用函数,所以一定要用 persistent 或者 global 变量类型保存每次 所获得的值。 (4):注意,为 VHDL 实体定义的数据端口的类型,由 matlab 输入的数据必须转化为 HDL 模 型可以接收的数据,如:iport.a=dec2bin(a,8)?将 a 转化为 8 位二进制。 从 HDL 模型中得到的输出也必须转换位 matlab 中可以比较的数据,以便于输出,比较。如 回到目录

odata.dout(inc+1)=mvl2dec(oport.sum)?将 sum 端口的输出值转化为十进制。详细资料可以参 考 matlab 帮助文档。 (5):显示输出结果,便于分析模型的正确性。 3. 将以上两个文件一道一个有写权限的文件夹。 此例中将他们移到D:\simulate\MyPlayerArea 4.启动 matlab 程序,改变当前工作目录为刚才所建立的目录 5.建立连接:在 matlab 命令窗口中输入 hdldaemon 命令,建立连接。 (a).hdldaemon(‘status’)显示当前连接的情况,如: 没有连接的情况 hdldaemon('status') HDLDaemon is NOT running b: 建立连接,默认为共享内存方式 >> hdldaemon HDLDaemon shared memory server is running with 0 connections >> hdldaemon('status') HDLDaemon shared memory server is running with 0 connections c: 建立连接,以网络模式进行通信,端口好为 4999。 >> hdldaemon('socket','4999') HDLDaemon socket server is running on port 4999 with 0 connections >> hdldaemon('status') HDLDaemon socket server is running on port 4999 with 0 connections >> 6.启动 modelsim. 在命令窗口中输入 vsim vsim('PropertyName', 'PropertyValue'...) vsim 的参数名和参数值: 当你使用这个命令启动 modelsim 仿真器以后,你可以使用 modelsim 命令行的方式, 加载将要使用 matlab 或者 simulink 仿真的 VHDL 实体; 使用 wrapverilog 命令封装 verilog 代码。和编译 vhdl 实体(详见 wrapverilog 和 vcom) propertyName 和 propertyvalue 允许你自定义 tcl 命令以启动 modelsim,如使用哪个 vsim 可 执行文件,存储开始时执行命令的 DO 文件的路径和名字,和对于 simulink,具体的通信模 式。所用属性名和属性值对:

'tclstart', 'tcl_commands' 指定一个或者多个 tcl 命令,在 modelsim 启动后执行。 'vsimdir', 'pathname' 指定所使用 modelsim 程序的版本和其路径。 'startupfile', 'pathname' 指定 DO 文件的路径和名称 例如: vsim('tclstart','vsimmatlab work.parse; matlabtb parse 10 ns -socket 4449')
7.启动 modelsim 后,建立一个新的新的工程,vlib work,建立一个新的工程名位 work,显示 如下。 回到目录

8.编译 verilog 代码 vlog add8.v 编译 add8.v verilog 文件,显示如上。 9.将 add8 verilog 模块封装为 vhdl 实体。

使用 wrapverilog –nocompile add8 命令将上步得到的 add8 模块封装为 vhdl 实体, ?nocompile 参数指明在封装的时候不进行编译,此命令得到 add8_wrap.vhd 文件 9.编译 add8_wrap.vhd 文件。 vcom –performdefaultbinding add8_wrap.vhd,运行此命令后显示如上。 10.加载需要仿真的 VHDL 实体 vsimmatlab add8_wrap 11.初始化测试平台,为当前的仿真。 matlabtb add8_wrap ?mfunc add8,初始化测试平台,指定回调的 matlab 函数为 add8. 12.初始化时钟信号和其它信号,在此例中不用,详见 matlab 帮助文档。 13.启动仿真 run 10000 回到目录

此命令指示 modelsim 仿真 10000 个时间单元(10000ns,使用默认的时间周期)

14.分析结果。 在 matlab 中得到的显示为

由以上可以看到,此加法器的逻辑时正确的,输出的结果比输入延时一个时钟周期。 回到目录


相关文章:
联合仿真过程
联合仿真过程_兵器/核科学_工程科技_专业资料。Adams 与 Simulink 联合仿真过程...Simulink 联合仿真,下 面是具体步骤: 1.定义输入和输出变量 Adams 与 MATLAB ...
Matlab与Simplore联合仿真步骤
二 Simplore Matlab联合仿真实例 matlab_simplore 文件夹为联合仿真例子...matlab_4_SIMULINK仿真 ... 19页 1下载券 第四章 MATLAB与过程控制... 49...
matlAB,SIMULINK联合仿真经典的例子
matlAB,SIMULINK联合仿真经典的例子_机械/仪表_工程科技_专业资料。PHOTOSHOP经典速学例子 数控螺旋面钻头尖刃磨机的机构仿真一、原理 图 1 二并联杆数控螺旋面钻头...
AMESim与Simulink联合仿真设置步骤与实例
AMESim与Simulink联合仿真设置步骤与实例_计算机软件及应用_IT/计算机_专业资料。...1. 联合仿真环境设置:软件环境:AMESimR10 VC++6.0 MATLAB/Simulink2010a 1.将...
ADAMS与Matlab联合仿真例子
为例,讲解 ADAMS 与 MA TLAB联合仿真过程。...MATLAB 控制模型 1、导出 ADAMS 模型在 MA TLAB ...2、建立控制方案 在 MA TLAB/Simulink 选择窗口中,...
Quartus与ModelSim联合仿真流程文档
Quartus与ModelSim联合仿真流程文档_互联网_IT/计算机...Matlab/Simulink 相结合,可以方便地实现各种 DSP ...以半加器为例,具 体的时序仿真步骤如下: 1. ...
psim与simulink联合仿真步骤
psim与simulink联合仿真步骤_电子/电路_工程科技_专业资料。(1) 在 PSIM 安装...函数的形式嵌入 MATLAB/Simulink,以实现两种软件之间的数据交换,达到联合仿真的目...
adams与matlab联合仿真例子(正确没商量)
cba1aa911da00.html 1、知识储备 以上两个例子都...13、建立控制方案 在 MATLAB/Simulink 选择窗口中,...在计算过程中会自动启动 ADAMS/View,以便观察仿真...
Simulink_modelsim联合仿真
XX 学生的师傅 2016 年 5 月 13 日 Simulink/Modelsim 联合仿真操作步骤本人使用的 matlab 版本为:matlab R2014a ; modelsim 版本为:Modelsim SE-64 10.1c。...
AMESim与Simulink联合仿真设置步骤与仿真实例
AMESim与Simulink联合仿真设置步骤与仿真实例_信息与通信_工程科技_专业资料。1. ...以 Simulink 为关键词进行搜索,即可找到 AMESim 与 Matlab 联合仿真的介绍,这里...
更多相关标签:
modelsim单独仿真步骤 | modelsim仿真实例 | modelsim仿真步骤 | simulink仿真实例 | simulink电机仿真实例 | simulink电路仿真实例 | simulink仿真实例视频 | simulink pid仿真实例 |