在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模拟器,因为每次运行该示例时,都会启动一个新的模拟器会话。还要记住,这个例子在一个临时目录中创建了一些临时文件。