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

此示例使用HDL协同仿真和FPGA合环(FIL)仿真来验证其包括所生成的HDL设计和遗留HDL代码。术语“遗留”在这里用来表示代码可能已手写,从第三方购买或另一个项目生成,在这种设计中保存重用。

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

这个示例将展示设计师或验证工程师可以使用HDL协同仿真验证向导如何整合与Simulink模型的传统FSM和验证。金宝appHDL联合仿真提供了完整的可视性和控制,从而实现调试和代码的验证。

遗留FSM的成功整合后,协同仿真块自动并入当从仿真模型生成的HDL代码,产生一个完整的FPGA实施MIMO解码器的传统代码。金宝app最后,整个设计是利用FPGA-在环仿真的实际FPGA验证。

实施例的概要

  1. 使用向导导入遗留HDL代码的联合仿真到Simulink模型金宝app

  2. 通过对遗留的HDL代码进行仿真,并将结果与行为模型进行比较,从而验证它

  3. 在一个黑箱使用协同仿真块生成整个MIMO解码器HDL代码

  4. 使用循环中的fpga验证MIMO解码器

要求和先决条件

必需和建议的运行这个例子:

  • HDL验证™

  • HDL编码器™(推荐用于可选码生成步骤)

  • 通信工具箱™

上述产品下载188bet金宝搏需要MATLAB®、Simulink®、定点设计器™。金宝app

此外,协同仿真和FPGA在环仿真,您需要具备以下软件和硬件:

  • 其中一个金宝app支持高密度脂蛋白模拟器

  • FPGA设计软件

  • 其中一个金宝app支持FPGA开发板及配件

  • 用于连接使用以太网:主机计算机上安装千兆位以太网适配器,千兆以太网跨接电缆

  • 对于使用JTAG接口:USB声霸卡I或II线和驱动程序英特尔FPGA开发板。Digilent®JTAG电缆和驱动为Xilinx FPGA板。

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

注意:实施例包括代码生成。金宝appSimulink中不允许你修改MATLAB安装面积。变化,是不是在开始之前这个例子中,MATLAB安装面积的工作目录。如果你没有获得HDL编码器软件,您可以跳过此示例中的代码生成步骤,使用所提供的HDL文件你一起FIL向导,FPGA,在环仿真来模拟他们。

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

参考模型是对期望实现的行为的模拟模型。它通常用于HDL验证,与RTL实现一起实例化它,为两者提供相同的输入并比较它们的输出。在验证参考模型的优点是,他们可以独立开发实现的(通常是由不同的人)提供一个独立的验证预期的行为,他们更容易创造比实际实现(不需要合成或实际设备时间),他们通常在模拟跑得快。

在验证该示例中的遗留HDL代码的第一步是建立一个参考模型的设计的部分。这已经为FSM完成。打开behavioral_mimo模型。双击进入MIMO解码器子系统,你会看到FSM子系统包含了MATLAB功能模块实现了FSM的行为。这个参考模型将被用于验证的FSM传统HDL代码。

通过执行以下命令遗留HDL代码文件到当前目录复制:

copyFILDemoFiles(“verify_legacy”);

1.使用联合仿真向导,将传统HDL代码

如果你已经熟悉了联合仿真向导,并想跳过这一步,打开cosim_mimo_mq模型,如果你正在使用的ModelSim或奎斯塔HDL仿真器或cosim_mimo_in如果您使用的是精辟的HDL模拟器,请建模并跳转到步骤2。

在MATLAB命令提示符中输入以下命令,调用cosimulation向导:

cosimWizard

选择HDL协同仿真与Simulink和从下拉列表中选择首选金宝appHDL仿真器。如果HDL仿真器是不是你的系统路径上,提供路径,然后单击下一步。

在底部和FSMSubsystem_pkg.vhd使用cosimWizard的添加按钮,并重新排序列表中的3个HDL文件添加到地方FSMSubsystem.vhd在列表的顶部,进行正确的编译顺序。然后单击下一步。

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

CLK:端口类型=时钟复位:端口类型=复位clk_enable:端口类型=复位

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

cosimulation向导自动识别HDL代码中的输入和输出,并根据它在其中找到的端口为Simulink创建cosimulation块。金宝app有一些关于输出端口的细节是它无法从HDL代码中学习的。在HDL代码中,输出只是位的集合,没有指示您希望如何在Simulink中解释这些位。金宝app您必须告诉cosimulation向导,您希望这些位元被视为有符号的值还是无符号的值,如果要将它们解释为定点数字,则需要将基数放在何处。

在输出端口详细信息面板缩小用于每个输出的数据类型。在该设计的情况下,输出端口如下来解释。请注意,有在用于矢量端口HDL代码多条标量端口(OUT_1,out_6,out_9,out_10,out_11,out_12):

有符号,分数长度=0(4标量港口)输出2插孔:无符号,分数长度=0out_3:无符号,分数长度=0out_4:无符号,分数长度=0out_5:签名,分数长度=10out_6:签名,分数长度=10(3标量港口)有符号的,分数长度=2out_8:无符号,分数长度=0out_9:签名,分数长度=0(4标量港口)有符号,分数长度=0(4标量港口)有符号,分数长度=10(4标量港口)有符号,分数长度=10(4标量港口)无符号,分数长度=0有符号的,分数长度=0

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

clk=10ns、积极边缘=升起重置初始价值=1,持续时间= 27 ns clk_enable初始价值=0,持续时间= 37纳秒

单击Next进入启动时间对齐面板,并将“HDL启动cosimulation (ns)的时间”设置为40。

进入最后一步,取消选择“在模拟开始时自动确定时间刻度”复选框。对于这个例子,我们知道在Simulink中,共仿真的时间标度应该是1秒,相当于10纳秒。金宝app在HDL模拟器中。有关在其他设计中使用自动时间刻度设置功能的信息,请参阅HDL验证器文档。设置上述时间刻度并单击Finish。

为了将遗留的HDL代码导入Simulink模型,将生成cosimulation块。金宝app您可以将新生成的cosimulation块和两个方便的命令块拖放到Simulink模型中,在fsm子系统块中,并将其连接到fsm子系统的输出端口。金宝app本例中提供了一个具有MIMO解码器子系统中的比较器和断言块的协同仿真模型。已经添加了比较器和断言块,以提醒您嵌入式控制器的引用模型的输出与遗留HDL实现之间的任何不匹配。

使用下面的命令来调整所产生的协同仿真模块,使其更容易将其插入到联合仿真模型:

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

打开cosim_mimo模型。拖动通过cosimWizard创建到协同仿真模型中的新块和便利命令块,在更换MIMODecoder子系统内的占位符子系统。

2.协同仿真验证的传统HDL代码

在您的联合仿真模型双击“启动HDL模拟器”块启动您选择的HDL仿真器。点击Simulink中的播放按钮,开始联合仿真,并金宝app观察警告消息显示在MATLAB窗口。这些被指示在因为参考FSM模型和HDL实现之间的差异的输出信号失配。

现在你可以使用Simulink和金宝appHDL模拟器调试功能隔离问题并修复错误。在这种情况下出现的错误,因为状态过渡圆弧是在HDL实现错过。在HDL仿真器的波形显示注意,FSM状态获取仿真很早卡住。

修复手写HDL代码并重新运行联合仿真

本例提供了修正后的HDL代码。使用以下命令将新代码复制到工作目录,覆盖Embedded_Controller.vhd的坏版本:

的CopyFile(完整文件( 'verify_legacy_hdlsrc', 'fixed_hdl', 'Embedded_Controller.vhd'), 'verify_legacy_hdlsrc', 'F');

双击“编译HDL设计”块重新编译传统HDL代码。退出HDL仿真器,如果它仍然是开放的协同仿真的先前执行以下并重新启动HDL仿真器,然后重播协同仿真。您应该遵守没有错配的这个时候。

现在,您已经调试和验证的嵌入式控制器传统HDL代码,你可以去验证与FPGA-在环仿真整个MIMODecoder。

集FPGA设计软件环境

在使用FPGA-in-the- loop之前,请确保您的系统环境设置正确,以便访问FPGA设计软件。你可以使用这个函数hdlsetuptoolpath将FPGA设计软件添加到当前MATLAB会话的系统路径中。

准备HDL代码生成模型

为了准备FPGA-在环仿真结合了传统的HDL代码,为的MIMO解码器的其余部分产生新的HDL代码,你需要做两件事情来完成FPGA实现的模型:

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

  2. 使用HDL编码器黑箱纳入传统HDL到模型的代码生成

如果你想跳过编辑和黑箱步骤打开fil_codegen_mimo模式,直接进入第3步。

如果您想按照所有步骤使用HDL Blackbox为HDL代码生成准备模型,请使用不同的名称保存cosimulation模型,并按照以下步骤进行剩余的模型准备工作:

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

  • 在MIMO解码器子系统中,删除Embedded_Controller函数块

  • 删除驱动Embedded_Controller输入(enablecoder输入除外)的“from”块

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

  • 将cosimulation块的输出重新连接到DelaySubsystem1的输入

2.使用HDL编码器黑箱纳入传统HDL到模型的代码生成

  • 选择cosimulation块和type control-G来创建子系统

  • 在新的联合仿真子系统,单击鼠标右键,选择HDL代码和HDL块属性

  • 选择架构=黑匣子

  • 进入FSMSubsystem作为实体名称

  • OK的HDL块的属性对话框

  • 保存模型

3.生成HDL代码和FPGA在环仿真

这一步需要HDL编码器。如果你没有这个软件,你可以使用预先生成HDL文件FIL模拟。直接跳转到第5步FIL模拟使用filWizard。

如果你想跟随的过程中产生的HDL文件自行返回到模型,对MIMODecoder子系统,并在“HDL代码”右键点击的顶层启动HDL编码器工作流程顾问。

  • 步骤1.1:选择FPGA-在环仿真目标的工作流程,请从下拉列表中选择首选FPGA开发板,并确定一个可写的目录,用来保存生成HDL代码。

  • 步骤4.1:在Set FPGA选项中选择“Add”,并使用浏览器导航到EmbeddedController HDL文件,这些文件已复制到步骤1的工作文件夹中,并在步骤3中使用固定的HDL代码进行了修改。

  • 步骤4.2:在左侧导航栏中的工作流程步骤4.2,选择“运行这个任务”右键。因为它包括的步骤来合成,地图和路线FPGA器件设计此步骤可能需要几分钟。

结果将是一个FPGA编程文件,用于MIMO解码器子系统的FPGA-in- The - loop仿真,以及一个新模型,该模型包含解码器的原始模型(包括FSM的遗留HDL)和FPGA-in- The - loop块。它还将具有与断言块相比较的器,以识别与我们在cosimulation模型中看到的信号类似的不匹配信号。

4.验证与FPGA的在半实物仿真设计

由于生成的验证模型包括fsm子系统的cosimulation,您将需要使用HDL模拟器来运行整个FIL模型。请确保关闭以前的cosimulation中的HDL模拟器并重新启动HDL模拟器。

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

选择“Load”将FPGA编程文件下载到板上的设备上。

在Simulink模型中单击Play金宝app以运行FPGA-in-the-Loop仿真。

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

5. FIL模拟使用FIL向导

对于那些没有HDL编码器软件的人,此步骤是步骤4的替代。如果你已经完成了第4步,你不需要继续这个步骤。

以下命令将把预先生成的HDL文件复制到您的工作文件夹:

copyFILDemoFiles( 'verify_legacy_gen');

现在,您可以使用FIL向导为循环中的FPGA创建FPGA编程文件。FIL向导还将创建一个可以丢弃的FIL块,因为本例中提供的FIL模型已经包含了FIL块。

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

filWizard
  • 费尔选项从列表中选择您的FPGA开发板。

  • 在源文件选择然后选择verify_legacy_gen_hdlsrc文件夹中的所有文件并进行标识MIMODecoder.vhd作为最高级别的文件。

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

  • 等待创建FIl块和FPGA编程文件。这可能需要几分钟,因为需要时间来合成和路由FPGA实现。

  • 打开gm_fil_codegen_mimo_fil模型和拖动新生成的FIL块进入该位置处的模型表示。

  • 打开FIL块蒙版,点击信号属性标签。将每个rx_decoded输出的数据类型更改为fixdt(1,6,0),以匹配行为块的数据类型。

  • 打开FIL块面膜,主要选项卡,选择Load并等待FPGA编程文件上单击要下载到设备中。

  • 在Simulink模型中按Play以金宝app运行FPGA-in-the-Loop。

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

这结束使用HDL联合仿真和FPGA在环仿真验证HDL设计的例子。