主要内容

验证手写和生成的HDL代码的组合

本例使用HDL联合仿真和fpga在环(FIL)仿真来验证由生成的和遗留的HDL代码组成的HDL设计。术语“遗留”在这里是用来表示那些可能是手写的、从第三方购买的或为另一个项目生成的并保存在本设计中以供重用的代码。

该示例中的遗留代码实现了一个有限状态机(FSM),其是用于在无线通信系统中用于无线通信系统的多输入多输出(MIMO)解码器的子模块。大多数MIMO解码器已经在Simulink中开发,HDL代码将由HDL编码器生成。金宝appFSM属于Simulink设计内部。金宝appFSM的遗留代码将与Simulink模型集成,并通过代码生成过程并入FPGA实现。金宝app

该示例将展示设计者或验证工程师如何使用HDL验证程序Cosimulation向导将传统FSM与Simulink模型集成并验证。金宝appHDL Cosimulation提供完整的可见性和控制,从而启用代码的调试和验证。

在成功集成了遗留FSM之后,当从Simulink模型生成HDL代码时,协同仿真模块自动集成了遗留代码,从而形成了一个完整的MIMO解码器的FPGA实现。金宝app最后,利用FPGA in-the- loop在实际FPGA上对整个设计进行了验证。

概述的例子

  1. 使用CISimulation向导将传统的HDL代码导入Simulink模型金宝app

  2. 通过将其视为验证遗留HDL代码并将结果与​​行为模型进行比较

  3. 使用Blackbox中的协同仿真块为整个MIMO解码器生成HDL代码

  4. 使用FPGA-IN--in--in--in--in--in循环验证MIMO解码器

要求和先决条件

对于联合仿真和fpga在环,您将需要以下软件和硬件:

  • 其中一个支持的HDL模金宝app拟器。对于支持金宝app的模拟器看到Cosimulation需求

  • FPGA设计软件

  • 其中一个支持的FPGA金宝app开发板。对于支持金宝app的硬件,请参阅金宝app支持FPGA用于FPGA验证的FPGA设备

  • 使用以太网连接:主机上安装的千兆以太网适配器、千兆以太网交叉网线

  • 使用JTAG连接:Intel FPGA板的USB Blaster I或II电缆和驱动器。用于Xilinx FPGA板的Digilent®JTAG电缆和驱动器。

MATLAB®和FPGA设计软件可以本地安装在您的计算机上或在网络可访问的设备上。如果使用来自网络的软件,则需要在计算机中安装第二个网络适配器,以便为FPGA开发板提供专用网络。请参阅计算机的硬件和网络指南,了解如何安装网络适配器。

注意:该示例包括代码生成。如果您无权访问HDL编码器软件,则可以跳过此示例中的代码生成步骤,并使用为您提供的HDL文件与FIL向导一起使用FPGA-In--in--in--in--in--in.

为有限状态机创建参考模型

参考模型是实现的行为的模拟模型。它通常在HDL验证中使用,通过将其与RTL实现实例化,为两者提供相同的输入并进行比较它们的输出。验证中的参考模型的优点是它们可以独立于实现(通常由不同的人)开发,提供了对预期行为的独立验证,它们比实际实现更容易(不需要合成或实际设备时序))它们通常在模拟中快速运行。

在此示例中验证传统HDL代码的第一步是为该部分的设计创建参考模型。已经为FSM完成了。打开行为_mimo.slx模型。双击MIMO解码器子系统,您将看到FSM子系统包含一个实现FSM行为的MATLAB功能块。此参考模型将用于验证FSM的传统HDL代码。

1.使用Cosimulation向导进口遗留HDL代码

通过在matlab命令提示符下键入以下内容,调用Cosimulation向导:

cosimWizard

使用Simulink和您的首选HDL模拟器从下拉列表中选择金宝appHDL Cosimulation。如果HDL模拟器不在系统路径上,请提供路径,然后单击“下一步”。

添加fsmsubsystem.vhd,fsmsubsystem_pkg.vhd和embedded_controller.vhd文件(位于“verify_legacy_hdlsrc”文件夹中)使用cosimwizard的添加按钮并重新排序列表以在列表顶部的底部和fsmsubsystem_pkg.vhd放置fsmsubsystem.vhd,正确编译订购。然后单击“下一步”。

单击以下2面板上的“下一步”以接受默认值并到达输入/输出端口面板。在输入端口列表中,从前3个端口的下拉列表中选择以下端口类型值:

clk: Port Type = clock reset: Port Type = reset clk_enable: Port Type = reset

这种端口类型的识别导致协同仿真块在HDL模拟器中强制执行这些信号,而不是要求它们在Simulink图中驱动。金宝app在本例中,我们将clk_enable端口视为协同仿真的另一个重置。在继续下一步之前,类似地为ce_out选择“unused”,使它从联合仿真块中被省略,因为它在Simulink中是不需要的。金宝app

Cyimulation向导会自动识别HDL代码中的输入和输出,并根据其在那里找到的端口创建Simulink的Cosimulation块。金宝app有关它无法从HDL代码中学习的输出端口有些细节。在HDL代码中,输出只是具有的位数,而无需指示如何在Simulink中解释这些位。金宝app您必须告诉Cosimulation向导是否希望这些位被视为签名或无符号值,并且如果要被解释为固定点数,则将其放在其中。

在Output Port Details面板中为每个输出细化数据类型。在这种设计的情况下,输出端口的解释如下。注意,向量端口的HDL代码中有多个标量端口(out_1, out_6, out_9, out_10, out_11, out_12):

OUT_1:签名,分数长= 0(4个标量)OUT_2:unsigned,分数长度= 0 OUT_3:unsigned,分数长度= 0 OUT_4:unsigned,分数长度= 0 out_5:签名,分数长度= 10 out_6:签名,分数长度= 10(3个标量)OUT_7:签名,分数长度= 2 OUT_8:未签名,分数长度= 0 OUT_9:签名,分数长度= 0(4个标量端口)OUT_10:签名,分数长度= 0(4个标量)OUT_11:签名,分数长度= 10(4个标量)OUT_12:签名,分数长度= 10(4个标量)OUT_13:无符号,分数长度= 0 OUT_14:签名,分数长度= 0

在时钟/复位详细信息面板中设置以下值:

CLK周期= 10 ns,主动边缘=上升复位初始值= 1,持续时间= 27 ns clk_enable初始值= 0,持续时间= 37 ns

单击“下一步”,进入起始时间对齐面板,并将“HDL启动协同仿真时间(ns)”设置为40。

继续执行最后一步并取消选中“自动确定在仿真开始时自动确定时间尺度”复选框。对于此示例,我们知道Cosimulation的时间尺度应该是1秒,在Simulink中对应于HDL模拟器中的10 ns。金宝app有关使用其他设计的自动时间尺度设置功能的信息,请参阅HDL验证程序文档。设置上述时间刻度,然后单击“完成”。

将生成cosimulation块以将传统的HDL代码导入Simulink模型。金宝app您可以将新生成的Cosimulation块和2便利命令块拖放到Simulink模型中,在FSMSubSystem块内部连接到FSMSubSystem的输出端口。金宝app为此示例提供了一种与MIMO解码器子系统内部的比较器和断声块的辅助模型。已添加比较器和断言块以提醒您在嵌入式控制器的参考模型的输出和传统HDL实现之间的输出之间的任何不匹配。

使用以下命令来调整生成的协同仿真块的大小,使其更容易插入到协同仿真模型中:

set_param('untitled / fsmsubsystem''位置',[0 0 165 852]);

打开cosim_mimo。基金模式。将cosimWizard创建的新块和便利命令块拖到协同仿真模型中,替换MIMODecoder子系统中的占位符子系统。

2. Cosimulate验证旧版HDL代码

在您的协同仿真模型中,双击“Launch HDL Simulator”块来启动您所选择的HDL模拟器。在Simulink中单击Play按钮,启动协同仿真金宝app,观察MATLAB窗口中会显示警告消息。这些是由于参考FSM模型和HDL实现之间的差异而导致的输出信号的不匹配。

现在,您可以使用Simulink金宝app和HDL模拟器调试功能隔离问题并修复错误。在这种情况下,错误出现错误,因为在HDL实现中错过了状态转换弧。在HDL模拟器的波形显示中通知FSM状态在模拟中很快被卡住。

修复手写的HDL代码并重新运行cosimulation

已为此示例提供更正的HDL代码。使用以下命令将新代码复制到您的工作目录,覆盖嵌入式的坏版本_controller.vhd:

拷贝文件(fullfile ('verical_legacy_hdlsrc''fixed_hdl''embedded_controller.vhd'),'verical_legacy_hdlsrc'“f”);

通过双击“编译HDL Design”块重新编译传统HDL代码。退出HDL模拟器如果在上次执行Cosimulation并重新启动HDL模拟器后仍然打开,则重新播放Cosimulation。这次你应该观察不匹配。

既然您调试并验证了嵌入式控制器的遗留HDL代码,您可以继续使用FPGA-In--in-Loop验证整个MimoDecoder。

设置FPGA设计软件环境

在使用FPGA循环之前,请确保正确设置系统环境以访问FPGA设计软件。您可以使用该功能hdl setuptoolpath.将FPGA设计软件添加到当前MATLAB会话的系统路径中。

为HDL代码生成准备模型

要为包含传统HDL代码的FPGA-in-in循环编写模型,并为MIMO解码器的其余部分生成新的HDL代码,您需要执行2件事以完成FPGA实现:

  1. 编辑联合仿真模型以删除FSM参考设计

  2. 使用HDL编码器BlackBox将传统HDL合并到模型中进行代码生成

如果要遵循使用HDL Blackbox准备HDL代码生成模型的所有步骤,请使用不同的名称保存Cosimulation模型,并继续如下更改模型准备:

1.编辑联合仿真模型以删除FSM参考设计

  • 在MIMO解码器子系统内部删除嵌入式_Controller功能块

  • 删除驱动Embedded_Controller输入的"from"块,除了enablecoder输入

  • 删除输出上的比较器和断言块

  • 重新连接Cosimulation块输出到DelaysubSystem1的输入

2.使用HDL编码器BlackBox将传统HDL合并到模型中的模型中

  • 选择Cosimulation块和类型Control-G以创建子系统

  • 右键单击新的协同仿真子系统并选择HDL Code和HDL块属性

  • 选择Architecture = BlackBox

  • 在“EntityName”中输入“FSMSubsystem”

  • 在SimptionLatency参数中输入0

  • 好的HDL块属性对话框

3.重新运行模拟以更新图表。

  • 双击“Launch HDL Simulator”块来启动HDL模拟器

  • 单击Simulink中的播放按钮以启动Cosimu金宝applation

  • 保存模型

3.生成HDL代码和FPGA in-in-Loop

此步骤需要HDL编码器。如果您没有此软件,则可以使用预先生成的HDL文件来进行仿真。直接跳转到步骤5.使用FILWIZARD进行仿真。

如果要遵循生成HDL文件的流程,请返回模型的顶级,右键单击MimoDecoder子系统,并在“HDL代码”下启动HDL编码器工作流程顾问。

  • 步骤1.1:选择FPGA-In-Loop目标工作流程,从下拉列表中选择您首选的FPGA开发板,并标识可写的目录以保存生成的HDL代码。

  • 步骤4.1:在“设置FPGA选项”中,选择“添加”并使用浏览器导航到在步骤1中将复制到工作文件夹中复制的EmbeddedController HDL文件,并在步骤3中修改固定的HDL代码。

  • 步骤4.2:右键单击左侧导航树中工作流程的步骤4.2,然后选择“运行到此任务”。此步骤可能需要几分钟,因为它包括合成,映射和路由FPGA设备的设计的步骤。

结果将是用于MIMO解码器子系统的FPGA-in-in-Loop仿真的FPGA编程文件,以及包含解码器的原始模型(包括FSM的传统HDL的遗留HDL)的新模型以及与FPGA-IN一起进行的 -循环块。它还将具有具有断言块的比较器,以识别与我们在待化模型中看到的那些类似的错配信号。

4.使用FPGA-IN-in-Loop仿真验证设计

由于生成的验证模型包括fsmsubsystem的辅助,因此您需要使用HDL模拟器运行整个FIL模型。确保从先前的Cosimulation中的HDL模拟器关闭并重新启动HDL模拟器。

在步骤3中生成的FPGA-in-循环模型中,打开FIL块。

选择“加载”以将FPGA编程文件下载到电路板上的设备。

单击Simulink模型中的播放以运金宝app行FPGA-in-in-Loole仿真。

在比较范围和模型中的错误计算中观察结果。您的仿真结果应与参考模型完全匹配。

5.使用FIL向导进行FIL模拟

对于那些没有HDL编码器软件的人来说,该步骤是步骤4的替代方案。如果您已完成步骤4,则不需要继续执行此步骤。

预先生成的HDL文件位于“verify_legacy_gen_hdlsrc”文件夹中。您可以使用FIL向导创建FPGA-In-in Loop的FPGA编程文件。FIL向导还将创建一个FIL块,您可以丢弃,因为为此示例提供的FIL模型已包含FIL块。

通过输入以下命令打开fil向导:

filWizard
  • fil选项从列表中选择FPGA开发板。

  • 在源文件中选择添加然后选择文件夹verify_legacy_gen_hdlsrc中的所有文件并进行识别mimodecoder.vhd.作为顶级文件。

  • 接受其余filWizard选项的默认值

  • 等待FIL块和要创建的FPGA编程文件。由于合成和路由FPGA实现所需的时间,这可能需要几分钟。

  • 打开GM_FIL_CODEGEN_MIMO_FIL.SLX模型,并将新生成的FIL块拖到所示位置的模型中。

  • 打开FIL块掩码,单击“信号属性”选项卡。将每个rx_decoded输出的数据类型更改为fixdt(1,6,0)以匹配行为块的数据类型。

  • 打开“FIL”块掩码,单击“Main”页签,选择“Load”,等待FPGA编程文件下载到设备。

  • 按Simulink模型中的播放以运行金宝appFPGA-In-in-Loop。

在比较范围和模型中的错误计算中观察结果。您的仿真结果应与参考模型完全匹配。

最后给出了利用HDL协同仿真和fpga在环验证HDL设计的实例。