主要内容

在MATLAB®中测试一个滤波器组件

这个例子展示了如何使用MATLAB®作为一个HDL组件的测试平台。我们编写了一个HDL低通滤波器,并使用matlabtb进行了测试。

一个临时目录用于编译和详细的HDL文件。一旦快照准备好,我们开始Cadence®Incisive®模拟器会话。(您必须在您的PATH上有Incisive模拟器可执行文件。)我们在MATLAB和HDL模拟器之间使用共享内存连接,所以两者必须在同一台计算机上。

在这个例子中,使用MathWorks™filter Design HDL Coder™产品设计并生成了一个Verilog低通滤波器,我们的工作是通过将它与MATLAB滤波器进行比较来测试它。在本例中,我们将不运行筛选器设计器。该滤波器的采样时间为10纳秒(采样率为100 MHz),通带Fpass = 20 MHz,阻带Fstop = 25 MHz。Verilog滤波器有两个样本的延迟。

该文件lowpass_filter.v包含由filter Design HDL编码器生成的低通滤波器。

该文件filter_tb_incisive.m包含MATLAB测试台。

srcfile = fullfile (matlabroot,“工具箱”“edalink”“扩展”“尖锐”“incisivedemos”“过滤”“lowpass_filter.v”);

创建项目目录

我们创建了一个临时工作目录,项目将在其中编译。

projdir = tempname;warnstatus =警告(“关闭”MATLAB: MKDIR: DirectoryExists);mkdir (projdir);警告(warnstatus);

启动MATLAB服务器

我们启动MATLAB服务器hdldaemon,以便它使用共享内存通信。

hdldaemon;
HDLDaemon共享内存服务器以0连接运行

指定Tcl命令

接下来,我们指定要在运行模拟之前在HDL模拟器中执行的Tcl命令。下面的命令列表将在Tcl shell中执行。这些命令将编译和详细阐述项目,然后通过hdlsimmatlab Tcl命令启动ncsim。所有以-input开头的命令都传递给ncsim,并在ncsim Tcl shell中执行。这些命令将:

  • 切换到工作目录

  • 编译verilog过滤器

  • 精心设计过滤器并打开对端口的读写访问

  • 通过调用hdlsimmatlab启动支持MATLAB测试台的ncsim万博1manbetx,其余命令在ncsim中执行

  • 调度MATLAB函数filter_tb_incisive每10 ns被调用一次

  • 使时钟

  • 22秒后复位模块

  • 驱动10ns时钟

  • 将筛选器输入初始化为0

TCLCMD = {“cd”, projdir],...'exec ncvlog -64bit 'srcfile),...'exec ncelab -64bit -access +wc lowpass_filter'...` hdlsimmatlab -gui lowpass_filter `...' -input "{@matlabtb lowpass_filter 10ns -repeat 10ns -mfunc filter_tb_incisive}"'...' -input "{@force lowpass_filter。Clk_enable 1 -after 0ns}"'...' -input "{@force lowpass_filter。Reset 1 -after 0ns 0 -after 22ns}"'...' -input "{@force lowpass_filter。CLK 1 -after 0ns 0 -after 5ns -repeat 10ns}"'...' -input "{@存款lowpass_filter。filter_in 0}”...]};

启动Incisive®模拟器

现在我们通过nclaunch命令启动HDL模拟器。的“tclstart”属性导致在启动时运行指定的Tcl命令。启动HDL模拟器后,使用。中的run命令开始模拟ncsim控制台,指定适当的模拟时间。例如类型跑了100000

nclaunch (“tclstart”, tclcmd);

此时,带有两个子图的MATLAB图形将打开。上面的图显示了输入信号的频谱。下面的图显示了HDL滤波器输出的频谱与MATLAB滤波器输出的频谱重叠。你必须放大才能看到输出光谱之间的差别。图中还显示了在时域内绝对误差的运行平均值和最大值。这个数字将每1024个样本更新一次。

这个例子到此结束。

在完成这个示例之后,请确保退出HDL模拟器,因为每次运行这个示例时,都会启动一个新的模拟器会话。还要记住,本示例在临时目录中创建了一些临时文件。