主要内容

在MATLAB中测试一个过滤器组件

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

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

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

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

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

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

创建项目目录

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

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

启动MATLAB服务器

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

hdldaemon;

指定Tcl命令

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

  • 切换到工作目录

  • 编译verilog过滤器

  • 详细说明筛选器并打开对端口的读写访问

  • 通过调用hdlsimmatlab启动带有MATLAB测试台支持的xms金宝appim,其余命令在xmsim中执行

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

  • 开启时钟

  • 22ns后复位模块

  • 驱动一个10 ns时钟

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

TCLCMD = {[“cd”, projdir],...'exec xmvlog -64bit 'srcfile),...'exec xmelab -64bit -access +wc lowpass_filter'...-gui lowpass_filter...' -input "{@matlabtb lowpass_filter 10ns -repeat 10ns -mfunc filter_tb_incve}"'...' -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}”...]};

启动Xcelium®模拟器

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

nclaunch (“tclstart”, tclcmd);

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

这个例子到此结束。

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