入门基于MATLAB的SystemVerilog DPI组件生成

这个示例向您展示了如何为用MATLAB编写的可编程方波发生器生成SystemVerilog DPI组件,并将其导出到HDL模拟器。

为了便于演示,本示例使用64位Windows 7中的Modelsim 10.3c。然而,同样的过程可以很容易地复制到其他系统和模拟器中。

需求和先决条件

下载188bet金宝搏本例所需的产品:

  • MATLAB编码器®

  • 模拟器:Mentor Graphics®ModelSim®/QuestaSim®或Cadence®Incisive

  • 支持的C编译器之一:M金宝appicrosoft®Visual c++,或GNU GCC

MATLAB设计

本例中使用的MATLAB代码演示了一个简单的可编程方波发生器。这个例子还提供了一个MATLAB测试平台来进行设计。

下图展示了在这个例子中生成的DPI组件:

  • 'On_time'和'Off_time'控制输出信号占空比。

例如,如果On_time=1和Off_time=1,所生成的方波将有50%的占空比。

建立示例文件

要设置设计示例文件,请在MATLAB命令提示符中输入以下代码。

MKDIR( 'svdpi_ProgSWGen');CD( 'svdpi_ProgSWGen');的CopyFile(完整文件(matlabroot, '工具箱', 'hdlverifier', 'hdlverifier_examples', 'svdpi_ProgSWGenerator', '*'),PWD);

这些命令创建一个临时文件夹,“svdpi_ProgSWGenerator”,并复制设计文件“ProgSWGenerator.m”和相应的测试平台“ProgSWGenerator_tb.m”到这个文件夹中。

使用提供的MATLAB测试台进行仿真设计

为了确保没有运行时错误,并且设计满足需求,在代码生成之前使用提供的testbench来模拟设计。在MATLAB中输入以下命令:

ProgSWGenerator_tb

它应该绘制如下图:

请注意,该图显示,被编程的行为如下输出信号:

  • 时钟周期< 100:= 1 = 1

  • 250:100 <时钟周期< = 2,= 1

  • 250 <时钟周期:= 1 = 2

使用DPIGEN命令生成DPI组件

使用DPIGEN,生成DPI组件。

在MATLAB中执行DPIGEN命令如下:

dpigen -testbench ProgSWGenerator_tb ProgSWGenerator -args {0,0}

将生成以下的目录结构:

dpi_tb:文件夹,所有的测试平台相关的文件。

ProgSWGenerator_dpi。sv:生成DPI组件。

ProgSWGenerator_dpi_pkg。生成的SystemVerilog包。

libProgSWGenerator_dpi。dll:包含所有导入函数定义的库。

注意:DPIGEN将自动尝试编译库。为了在不编译的情况下生成文件,应该使用-c选项。例如:

dpigen -c -testbench ProgSWGenerator_tb ProgSWGenerator -args {0,0}

在HDL模拟器中运行生成的测试台

对于ModelSim/QuestaSim,执行以下步骤:

  • 在GUI模式下启动ModelSim/QuestaSim。

  • 在HDL模拟器中,在代码生成目录下将当前目录更改为“dpi_tb”。

  • 输入以下命令来启动模拟

做run_tb_mq.do

例如:

生成如下波形:

请注意,输出波形(底部的那个)的行为与MATLAB测试台中绘制的信号完全相同。

对于Incisive和VCS模拟器:

  • 启动终端外壳

  • 将代码生成目录下的当前目录更改为“dpi_tb”

  • 在shell中输入以下命令。

sh run_tb_incisive.sh
  • 对于VCS,在您的shell中输入以下命令。

sh run_tb_vcs.sh
  • 当模拟完成后,你应该看到以下文字打印在您的控制台:

* * * * * * * * * * * * * *测试完成(通过)* * * * * * * * * * * * * *

这结束了入门基于MATLAB的SystemVerilog DPI组件生成的例子。