这个例子展示了如何使用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服务器hdldaemon,以便它使用共享内存通信。
hdldaemon;
HDLDaemon共享内存服务器以0连接运行
接下来,我们指定要在运行模拟之前在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}”,...]};
现在我们通过nclaunch命令启动HDL模拟器。的“tclstart”
属性导致在启动时运行指定的Tcl命令。启动HDL模拟器后,使用。中的run命令开始模拟ncsim
控制台,指定适当的模拟时间。例如类型跑了100000
.
nclaunch (“tclstart”, tclcmd);
此时,带有两个子图的MATLAB图形将打开。上面的图显示了输入信号的频谱。下面的图显示了HDL滤波器输出的频谱与MATLAB滤波器输出的频谱重叠。你必须放大才能看到输出光谱之间的差别。图中还显示了在时域内绝对误差的运行平均值和最大值。这个数字将每1024个样本更新一次。
这个例子到此结束。
在完成这个示例之后,请确保退出HDL模拟器,因为每次运行这个示例时,都会启动一个新的模拟器会话。还要记住,本示例在临时目录中创建了一些临时文件。