为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

link_for_modelsim_的简易用法

2017-09-19 4页 doc 46KB 17阅读

用户头像

is_337177

暂无简介

举报
link_for_modelsim_的简易用法  本内容涉及到一些matlab与modelsim连接的方法。首先说说我对于link for modelsim 的理解。首先matlab对于数据处理的方面有无可比拟的优越性,而modelsim应用于verilog语言和VHDL语言的仿真。有时候会遇到这样一些情况:我们仿真的输入数据很是复杂,比如是一个加入了杂散的高频的信号,我们用Verilog语言编写test bench 的话则很是复杂,但是用matlab产生的话就相对简单了许多。基于这种想法我在matlab帮助文件中输入link for modelsim,得到了一些启示。在...
link_for_modelsim_的简易用法
  本内容涉及到一些matlab与modelsim连接的方法。首先说说我对于link for modelsim 的理解。首先matlab对于数据处理的方面有无可比拟的优越性,而modelsim应用于verilog语言和VHDL语言的仿真。有时候会遇到这样一些情况:我们仿真的输入数据很是复杂,比如是一个加入了杂散的高频的信号,我们用Verilog语言编写test bench 的话则很是复杂,但是用matlab产生的话就相对简单了许多。基于这种想法我在matlab帮助文件中输入link for modelsim,得到了一些启示。在这里与大家分享一下 1、 软件的下载于匹配   下载好的完整的matlab中有link for modelsim的功能的。对于匹配问题,开始我的matlab是2010a,modelsim是modelsim SE 6.4。结果运行的时候出现版本不匹配的错误。我又按照要求下载了modelsim SE 6.5结果可以用的。怎么确定你的matlab对应的modelsim版本,首先你在你的matlab中输入,demo然后在搜索框中输入link for modelsim。有这样的一个NOTE.。 如果modelsim不匹配的话建议在官网上下载一个,然后找一个破解文件就可以了。 2、 新建一个文件夹用来存放matlab函数和modelsim工程。文件夹的目录中不要有汉字。把写好的matlab函数保存到已经建立的文件夹中,在这里我写的一个小程序,函数名为add1.m。 3、 建立一个连接端口。首先打开你的matlab软件,输入hdldaemon('status'),因为连接点还没有建立,matlab显示HDLDaemon is NOT running。我们用hdldaemon('socket', 0),这个命令来建立一个连接。运行后显示HDLDaemon socket server is running on port 2325 with 0 connections。表示连接点已经建立端口号为2325,但是还没有和modelsim连接。要记住2325这个数字,后面的命令中还要用到的。 4、 在modelsim中输入vsim命令来打开你的modelsim。建立你的modelsim工程并保存在步骤2中的文件夹中。在这里我的verilog程序为add1.v。 5、 建立matlab和modelsim的连接。在modelsim的命令行中输入vsimmatlab modsimrand,其中modsimrand为你要仿真的块,在此实验中为add1,此时modelsim命令行窗口中会显示如下的信息。   接着输入以下的命令: matlabtb add1 -mfunc add1 -rising /add1/clk -socket 2325 这里的 第一个add1 表示你的modelsim文件的实体名上面说过了,我的函数名为add1 -mfunc add1 表示matlab函数的名为add1 我的matlab函数名同样为add1 -rising/add1/clk 那么这个又是表示什么意思呢,这个表示在modelsim的实体的clk信号为上升沿的时候来调用我的matlab函数。 -socket 2325 这个表示连接到我们在第三步中建立的端口。 此时你在matlab中输入hdldaemon('status'),就会显示已经连接。 6、 设置verilog文件中的clk,rst   在modelsim中输入命令   force /add1/clk 0 0,1 5 ns -repeat 10 ns 表示零刻度出clk的值为0,一刻度出的值为5ns,每10ns重复   force /add1/rst 1 0, 0 50 ns同上   view wave 显示波形   add wave *加入输入输出   run 10000ns运行程序 此时你就会在你的modelsim的窗口中看到图形了。 下面介绍一下matlab及modelsim的文件的编写。 function [iport,tnext] = add1(oport, tnow, portinfo) %UNTITLED Summary of this function goes here %  Detailed explanation goes here tnext=[]; iport = struct(); persistent x; if isempty(x)     x=0; else     x=x+0.01; end %y=sin(x); y=round(sin(x)*100); iport.addin=dec2mvl(y,16); end 这个函数的功能是将每隔0.01rad的sin的值输出作为verliog模块的输入。 第一行的函数定义比较有讲究 function [iport,tnext] = add1(oport, tnow, portinfo) oprt对应modelsim模块的输出。 tnow这一时刻调用函数的时间。 Portinfo第一次函数调用时传达的参数 Tnext下一次调用matlab函数的时间 Iport对应modelsim模块的输入 如果做一些简单的函数调用的话用不到tnow和tnext,我们可以用modelsim中 -rising/add1/clk这部分的设置来进行matlab函数调用。其中portinfo也很少用,看看matlab中的link for modelsim文件。 tnext=[]; iport = struct(); 对输出的两个参数进行初始化,大家应该注意到初始化iport的时候用的是 struct()这个类似于C中的结构体。比如,你的verilog模块中有很多的输入 iport.addin就表示名为addin的输入。这样就可以对你单个的输入进行控制。 persistent x;要把x定义为静态变量,因为你要很多次调用函数。对于静态变量的初始化使用 if isempty(x)     x=0; else     x=x+0.01; end 不晓得能看明白不 iport.addin=dec2mvl(y,16); 这个也很重要,涉及到数据类型的转换,我们要把数据按一定的位数输出。这里我们把y作为16位输出的。 下面看一下verilog函数 module add1(clk,rst,addin,addout);   input clk,rst;   input [15:0] addin;   output[15:0] addout;   reg [15:0]add1;   always@(posedge clk)   begin     if(rst)       begin         add1=0;       end     else       begin         add1=addin+1;       end   end   assign addout=add1; endmodule 这个模块是把输入的addin+1,作为输出。简单的模块。 好了,以上是简单的介绍,基于输入很复杂的小应用。如果想更深的研究的话建议看 Matlab帮助,很详细的。 Demo  link for matlab,全是英文看了三四天了,才有点收获。
/
本文档为【link_for_modelsim_的简易用法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索