验证HDL模块,带MATLAB试验台

教程概述

本教程将指导您完成使用MATLAB设置HDL Verifier™应用程序的基本步骤®验证一个简单的HDL设计。在本教程中,你开发,模拟和验证基于斐波那契序列的伪随机数生成器的模型。该模型在VHDL编码®

请注意

本教程演示如何使用ModelSim创建和运行测试工作台®6.5 SE。如果您不使用此版本,ModelSim中的消息和屏幕图像可能与本教程中的不完全一样。

本教程需要MATLAB, HDL验证软件,和ModelSim HDL模拟器。

在本教程中,您将执行以下步骤:

设置教程文件

为了帮助其他人访问教程文件的副本,为您自己的教程工作建立一个文件夹:

  1. 您的MATLAB安装文件夹在其中您可以复制教程文件范围之内创建一个文件夹。该文件夹必须是可写的。本教程假设您创建一个命名的文件夹MyPlayArea

  2. 将以下文件复制到您刚才创建的文件夹:

    matlabroot\ \工具箱\ edalink \扩展modelsim \ modelsimdemos \ modsimrand_plot.m

    matlabroot\工具箱\ edalink \分机\的ModelSim \ modelsimdemos \ VHDL \ modsimrand \ modsimrand.vhd

启动MATLAB服务器

本节介绍如何使用共享内存或TCP/IP套接字模式启动MATLAB、设置完成教程所需的当前文件夹、启动MATLAB服务器组件以及检查客户机连接。这些说明假设您熟悉MATLAB用户界面。

执行以下步骤:

  1. 运行MATLAB。

  2. 将MATLAB当前文件夹设置为在其中创建的文件夹设置教程文件

  3. 通过调用函数验证MATLAB服务器是否在运行hdldaemon'状态'在MATLAB命令窗口选项,如下所示:

    hdldaemon(的状态)

    如果服务器没有运行,功能显示器

    HDLDaemon未运行

    如果服务器的TCP / IP套接字模式下运行,该消息的内容

    HDLDaemon插槽服务器上运行的端口端口编号为0的连接

    如果服务器在共享存储器模式下运行,该消息中读取

    HDLDaemon共享存储器服务器与0连接运行

    如果服务器当前没有运行,请跳到step5

  4. 通过输入关闭服务器

    hdldaemon(“杀死”)

    你会看到下面的消息,确认该服务器被关闭。

    HDLDaemon服务器被关闭
  5. 通过调用启动TCP / IP套接字模式下的服务器hdldaemon使用属性名称/属性值对“套接字”0。值0指定操作系统指定服务器的TCP / IP套接字端口可用您的系统上。例如

    hdldaemon(“套接字”,0)

    服务器通过显示以下消息来通知您它已经启动。的端口编号将特定于您的系统:

    HDLDaemon插槽服务器上运行的端口端口编号为0的连接

    记下端口编号因为您在发布时需要它matlabtb命令在负载模拟

    您也可以指定MATLAB服务器使用共享内存通信而不是TCP/IP套接字通信;但是,在本教程中,我们将使用套接字通信来演示这种类型的连接。有关如何指定各种选项的详细信息,请参见hdldaemon

开始的ModelSim模拟器和设置的协同仿真

本节介绍了启动的ModelSim软件和设置的ModelSim设计库的基本步骤。这些说明假定您熟悉的ModelSim用户界面。

执行以下步骤:

  1. 通过调用函数从MATLAB环境下启动的ModelSimvsim在MATLAB命令窗口。

    vsim

    这个功能启动和配置ModelSim使用与HDL验证软件。ModelSim的第一个文件夹与MATLAB当前文件夹匹配。

  2. 验证当前的ModelSim文件夹。您可以验证当前的ModelSim文件夹通过输入的MATLAB当前文件夹匹配ls在ModelSim命令窗口中的命令。

    该命令应列出文件modsimrand.vhd,modsimrand_plot.m,抄本,compile_and_launch.tcl

    如果没有,将ModelSim文件夹更改为当前MATLAB文件夹。您可以通过查看当前文件夹浏览器或查看当前文件夹导航栏来找到当前MATLAB文件夹。在ModelSim中,您可以通过发出命令来更改工作文件夹

    cd目录

    在哪里目录是您想要工作的文件夹。或者您也可以通过选择来更改目录文件>更改目录...

  3. 创建一个设计库来保存你的编译结果。创建库和所需_info文件,输入VLIBvmap命令如下:

    的ModelSim> VLIB工作的ModelSim> VMAP工作工作

    请注意

    您必须使用的ModelSim文件菜单或VLIB命令创建库文件夹,使所需的_info创建文件。不要用操作系统命令创建库。

发展VHDL

建立一个设计库后,通常你会使用的ModelSim编辑器创建和修改HDL代码。在本教程中,你不需要自己创建的VHDL代码。相反,打开和检查现有的文件modsimrand.vhd。这部分代码的亮点地区modsimrand.vhd这是对的ModelSim和MATLAB测试平台的兴趣。

如果您选择不检查此时的HDL代码,跳到编译VHDL代码

您可以打开modsimrand.vhd与编辑窗口编辑命令,如下所示:

的ModelSim>编辑modsimrand.vhd

ModelSim打开它编辑窗口并显示与VHDL代码modsimrand.vhd

当您查看文件时,请注意以下事项:

  • 该生产线实体modsimrand包含VHDL实体的定义modsimrand:

    ENTITY modsimrand IS PORT(CLK:IN STD_LOGIC; CLK_EN:IN STD_LOGIC;复位:IN STD_LOGIC; DOUT:OUT std_logic_vector(31 DOWNTO 0); END modsimrand;

    这是将在MATLAB环境下的教程中进行验证的实体。注意以下几点:

    • 默认情况下,MATLAB服务器假定在MATLAB环境中验证实体的MATLAB函数的名称与实体名称相同。您可以选择明确地命名MATLAB函数。但是,如果您没有指定名称,服务器期望函数名称与实体名称匹配。在本例中,MATLAB函数名为modsimrand_plot和不匹配。

    • 实体必须与定义港口包含至少一个端口定义的子句。每个端口定义必须指定一个端口模式(,OUT, 要么进出由该HDL验证软件支持)和VHDL数据类型。万博1manbetx

      实体modsimrand在这个例子中有三个输入端口定义clk,CLK_EN,重启类型的STD_LOGIC和输出端口dout类型的STD_LOGIC_VECTOR。输出端口将仿真输出数据传递到MATLAB函数进行验证。可选的输入端口从函数接收时钟和复位信号。或者,输入端口可以接收来自ModelSim的信号命令。

      有关用MATLAB编写端口实体的更多信息,请参见用MATLAB编写HDL模块进行验证

  • 以下代码的其余部分modsimrand.vhd为。定义行为架构modsimrand写入一个随机生成的斐波纳契数列于当时钟经历上升沿输出寄存器。

当您检查完文件后,关闭ModelSim编辑窗口。

编译VHDL

创建或编辑VHDL源文件后,编译它们。作为本教程的一部分,编译modsimrand.vhd。编译文件的一种方法是在项目工作区单击文件名并选择编译>编译所有。另一种方法是指定modsimrand.vhd威科姆公司命令,如下所示:

的ModelSim> VCOM modsimrand.vhd

如果编译成功,命令窗口中将出现消息,编译器将使用编译结果填充工作库。

发展MATLAB函数

MATLAB中的HDL验证软件验证HDL硬件的功能。通常情况下,在这一点上,你会创建或编辑符合HDL验证需求的MATLAB功能。在本教程中,你不需要自己开发的MATLAB测试工作台功能。相反,打开和检查现有的文件modsimrand_plot.m

如果您选择不检查此时的HDL代码,跳到负载模拟

请注意

modsimrand_plot.m是MATLAB随机数发生器例子的较低级别的组件。内绘制代码modsimrand_plot.m在接下来的部分不进行讨论。本教程只关注那些零件modsimrand_plot.m所需要的MATLAB来验证VHDL模型。

您可以打开modsimrand_plot.m在MATLAB编辑器中。例如:

编辑modsimrand_plot.m

当您查看文件时,请注意以下事项:

  • 在1号线,你会发现连同其所需的参数指定的MATLAB函数名称:

    函数[iport,tnext] = modsimrand_plot(oport,tnow,portinfo)

    这个函数定义很重要,因为它代表了MATLAB和ModelSim之间的通信通道。注意:

    • 当编码的功能,你必须用两个输出参数定义的功能,iportT下一页和三个输入参数,oport,TNOW,portinfo。看到MATLAB函数语法和函数参数定义

    • 您可以使用iport参数来驱动输入信号,而不是使用其他信号源,如ModelSim命令。根据您的应用程序,您可以使用输入源的任何组合。但是,如果多个信号源驱动一个信号iport,您将需要一个分辨率函数来处理信号冲突。

  • 在第22和23行,你会发现一些参数初始化:

    tnext = [];iport =结构();

    在这种情况下,函数输出iportT下一页初始化为空值。

  • 当编码与HDL验证使用MATLAB功能,你需要知道类型的测试平台功能从接收和需要返回的ModelSim和数据的HDL验证如何处理这个数据;看到万博1manbetx支持的数据类型。该功能包括以下端口数据类型定义和转换:

    • 为本教程定义的实体由三个类型的输入端口组成STD_LOGIC和类型的输出端口STD_LOGIC_VECTOR

    • 数据的类型STD_LOGIC_VECTOR由字符的列向量组成,每个字符有一位。

    • 接口转换类型的标量数据STD_LOGIC到与对应枚举类型的字符文字匹配的字符。

    在线路62上,包含的代码行oport.dout演示了MATLAB函数从ModelSim接收到的数据在MATLAB环境中需要如何转换:

    ud.buffer(本体)= mvl2dec (oport.dout)

    在这种情况下,函数接收STD_LOGIC_VECTOR上的数据oport。这个函数mvl2dec转换的比特向量,以能够在算术计算中使用的十进制值。万博1manbetx支持的数据类型提供的数据类型转换的总结编码自己的MATLAB功能时要考虑的。

  • 请随意浏览其余部分modsimrand_plot.m。当你完成后,去负载模拟

负载模拟

编译了VHDL源文件之后,就可以加载模型进行仿真了。本节解释如何加载实体的实例modsimrand仿真:

  1. 加载的实例modsimrand验证。要加载的情况下,指定vsimmatlab命令如下:

    的ModelSim> vsimmatlab modsimrand

    vsimmatlab命令启动ModelSim模拟器,vsim,特别是用于MATLAB。的ModelSim显示一系列在命令窗口消息,因为它加载实体的封装和架构。

  2. 初始化验证模拟器modsimrand与MATLAB。您可以通过使用HDL验证初始化的ModelSimmatlabtb命令。该命令定义了一个MATLAB功能的通信链路和回调代表的ModelSim在MATLAB执行。除此之外matlabtb命令可以指定参数,控制MATLAB函数何时执行。

    在本教程中,输入以下matlabtb命令:

    > matlabtb modsimrand -mfunc modsimrand_plot -rising / modsimrand / CLK -socket端口编号

    在命令行参数指定下述条件:

    • modsimrand-指定要协同模拟的VHDL模块。

    • -mfunc modsimrand_plot-连接实体的实例modsimrand该功能的MATLABmodsimrand_plot.m。该参数是必需的,因为实体名称与测试平台函数名称不相同。

    • -rising / modsimrand / CLK-指定测试工作台函数在有信号时被调用/ modsimrand clk体验上升的优势。

    • -插座端口编号-指定调用发出或返回的端口号hdldaemon启动MATLAB服务器

  3. 初始化时钟和重置输入信号。您可以使用多种机制驱动模拟输入信号,包括ModelSim命令和一个iport参数(请参阅一个测试平台函数的语法)。现在,输入以下命令:

    >力/modsimrand/clk 0 0 ns, 1 5 ns -重复10 ns >力/modsimrand/clk_en 1 >力/modsimrand/reset 1 0,0 50 ns

    第一个命令部队clk信号到值0在0纳秒和到1在5纳秒。在10纳秒之后,循环开始每10纳秒重复一次。第二和第三命令集CLK_EN1,重启0纳秒到1 50纳秒到0。

ModelSim环境已经准备好运行模拟了。现在,你需要建立MATLAB函数。

运行仿真

本节介绍了如何启动和监控该模拟,并重新运行它,如果你的愿望。当你完成了如所需的许多模拟运行,在下一节中所述关闭模拟。

对于运行首次模拟

运行模拟首次之前,您必须验证客户端连接。您可能还需要设置断点进行调试。

执行以下步骤:

  1. 打开ModelSim和MATLAB窗口。

  2. 在MATLAB中,验证通过调用客户端的连接hdldaemon'状态'选项:

    hdldaemon(的状态)

    这个函数返回一条消息,表示存在一个连接:

    HDLDaemon套接字服务器在4795端口上运行,有一个连接

    要么

    HDLDaemon共享存储器服务器与1个连接运行

    请注意

    如果您尝试在启动之前运行模拟hdldaemon在MATLAB中,您会收到以下警告:

    #ML警告- MATLAB服务器不可用(目前),实体'modsimrand'将不活动
  3. 打开modsimrand_plot.m在MATLAB编辑器中。

  4. 搜索oport.dout并通过单击旁边的行数设置在该行断点。一个红色的断点标记将出现。

  5. 返回的ModelSim,然后在命令窗口中下面的命令:

    >跑了80000

    这个命令指示ModelSim将模拟推进80,000个时间步长(使用默认的时间步长周期为80,000纳秒)。因为您之前在modsimrand_plot.m但是,模拟在MATLAB运行,直到它到达断点。

    ModelSim现在是被阻塞的,并且一直处于阻塞状态,直到您显式地解除阻塞为止。当模拟被阻塞时,请注意,MATLAB会显示ModelSim在工作区窗口。

    在的ModelSim,打开一个空的数字窗口。您可以使用此窗口来绘制由模拟生成的数据。

  6. 检查oport,portinfo,TNOW将鼠标悬停在MATLAB编辑器内部的这些论点。观察TNOW,则将当前模拟时间设置为0。还请注意,由于模拟在第一次调用时达到了断点modsimrand_plot,portinfo理由是在MATLAB工作区中看到。

  7. 请点击继续在MATLAB编辑器中。下一次到达断点,请注意portinfo不再出现在MATLAB工作区中。的portinfo函数不显示,因为它只在第一次函数调用时传入。还要注意的值TNOW从0升级到5e-009。

  8. 通过单击红色断点标记清除断点。

  9. 解除封锁的ModelSim,并继续通过点击模拟继续在MATLAB编辑器中。

    模拟运行完成。由于仿真过程中,它绘制在图形窗口中产生的数据。当模拟完成,出现的图窗口,如下所示。

仿真在MATLAB运行,直到达到您刚才设置的断点。根据需要继续进行模拟/调试会话。

重新运行仿真

如果您想再次运行模拟,您必须在ModelSim中重新启动模拟,重新初始化时钟,并重置输入信号。这样做:

  1. 关闭图形窗口。

  2. 使用以下命令重新启动模拟:

    >重启

    重新启动对话框出现了。保留所有选项,然后单击重新启动

    请注意

    重新启动按钮清除由建立的模拟上下文matlabtb命令。因此,重新启动的ModelSim后,必须重新发出上一个命令或发出新的指令。

  3. 补发matlabtb指令在HDL模拟器。

    > matlabtb modsimrand -mfunc modsimrand_plot -rising / modsimrand / CLK -socket端口编号

  4. 打开modsimrand_plot.m在MATLAB编辑器中。

  5. 设置在同一行断点在以前的运行。

  6. 返回的ModelSim并重新输入以下命令以重新初始化时钟和输入信号:

    >力/ modsimrand / CLK 0 0,1 5纳秒-repeat 10纳秒>力/ modsimrand / CLK_EN 1>力/ modsimrand /复位1 0,0 50ns的

  7. 输入命令开始模拟,例如:

    >跑了80000

关闭模拟

本节将介绍如何有序关闭模拟。

在ModelSim中,执行以下步骤:

  1. 停止通过选择客户端的模拟模拟>结束仿真或进入退出命令。

  2. ModelSim辞职。

在MATLAB中,你可以退出应用程序,这将关闭模拟和也接近MATLAB。

要在不关闭MATLAB的情况下关闭服务器,您可以选择调用hdldaemon“杀”选项:

hdldaemon(“杀死”)

将出现以下消息,确认服务器已关闭:

HDLDaemon服务器被关闭