主要内容

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

这个示例使用HDL cosimulation和FPGA-in-the-loop (FIL)仿真来验证一个遗留高密度脂蛋白HDL设计包括生成和代码。此处使用的术语“遗留”来表示可能是手写的代码,从第三方购买或为另一个项目生成并保存在这个设计重用。

本例中的遗留代码实现了一个有限状态机(FSM)的sub-module多输入-多输出(MIMO)解码器用于无线通信系统。多输入多输出信号译码器中的大多数已经开发的仿真软件,它将产生的高密度脂蛋白HDL代码编码器。万博1manbetxFSM所属在仿真软件的设计。万博1manbetxFSM的遗留代码将综合与仿真软件模型,纳入FPGA实现通过代码生成过程。万博1manbetx

示例将展示设计师或验证工程师可以使用HDL验证人cosimulation向导集成遗留FSM的Simulink仿真模型,并验证它。万博1manbetx高密度脂蛋白Cosimulation提供完整的可见性和控制,使代码的调试和验证。

集成遗留FSM的成功之后,cosimulation块HDL代码生成时自动包含了遗留代码的仿真软件模型,从而产生一个完整的多输入多输出信号译码器的FPGA实现。万博1manbetx最后,整个设计在实际使用FPGA-in-the-loop FPGA验证。

大纲的例子

  1. 使用cosimulation向导遗留HDL代码导入仿真软件模型万博1manbetx

  2. 验证遗留cosimulating HDL代码和行为模型的比较结果

  3. 生成整个天线系统解码器的HDL代码使用cosimulation块在一个黑箱

  4. 多输入多输出信号与FPGA-in-the-loop译码器验证

需求和先决条件

cosimulation和FPGA-in-the-loop你需要以下软件和硬件:

  • 一个支持的高密度脂蛋白万博1manbetx模拟器。支持模拟万博1manbetx器看到Cosimulation需求

  • FPGA设计软件

  • 一个支持的FPGA开发万博1manbetx板。硬件支持万博1manbetx,看到万博1manbetx支持FPGA器件FPGA验证

  • 使用以太网连接:千兆以太网适配器安装在主机上,千兆以太网交叉电缆

  • 连接使用JTAG: USB导火线I或II为英特尔FPGA板电缆和驱动程序。Digilent®JTAG电缆和司机Xilinx FPGA板。

MATLAB®和FPGA设计软件可以在本地安装在您的计算机或网络设备访问。如果你使用软件的网络需要第二个网络适配器安装在你的电脑提供一个私有网络的FPGA开发板。咨询您的计算机的硬件和网络指导学习如何安装网络适配器。

注意:这个例子包括代码生成。如果你没有获得高密度脂蛋白编码器软件您可以跳过此示例中的代码生成步骤和使用HDL文件一起提供给你用FPGA-in-the-loop费尔向导来模拟。

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

参考模型是仿真模型的行为预期实现。它通常用于高密度脂蛋白验证通过实例化与RTL实现,给同样的输入和比较他们的输出。在验证参考模型的优点是,他们可以独立开发实现的(通常是由不同的人)提供一个独立的验证预期的行为,他们更容易创造比实际实现(不需要合成或实际设备时间),他们通常在模拟跑得快。

的第一步验证遗留HDL代码在这个例子中是创建一个参考模型,设计的一部分。FSM已经完成。打开behavioral_mimo。基金模式。双击进入MIMO译码器子系统和你会发现了FSM子系统包含一个MATLAB功能块,实现了FSM的行为。这个参考模型将被用来验证遗留FSM HDL代码。

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

调用MATLAB的cosimulation向导通过输入下面的命令提示符:

cosimWizard

选择您的首选的高密度脂蛋白HDL cosimulation万博1manbetx仿真软件和模拟器从下拉列表中。如果HDL模拟器不是在您的系统路径,提供的路径,然后单击Next。

添加FSMSubsystem。FSMSubsystem_pkg vhd。vhd, Embedded_Controller。vhd文件(位于“verify_legacy_hdlsrc”文件夹)使用cosimWizard的添加按钮,重新排序将FSMSubsystem列表。vhd底部和FSMSubsystem_pkg。vhd在列表的顶部,用于编译正确排序。然后单击Next。

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

clk:端口类型=时钟复位:端口类型=重置clk_enable:端口类型=重置

这个端口类型的识别会导致cosimulation块在高密度脂蛋白模拟器迫使这些信号,而不是要求他们在模型驱动的图。万博1manbetx在这个例子中,我们把clk_enable港口作为cosimulation另一个重置。继续下一步之前同样为ce_out选择“未使用”,使其从cosimulation块省略了,因为它不需要在仿真软件。万博1manbetx

cosimulation向导自动识别输入和输出的HDL代码并创建cosimulation块模型基于港口那里找到。万博1manbetx有一些细节的输出端口,它不能学习HDL代码。HDL代码中的比特的输出只是集合没有迹象表明你想如何解读这些部分的仿真软件。万博1manbetx你必须告诉cosimulation向导是否你想要的那些被视为签署或无符号值,如果他们想要被理解为定点数字,把小数点的位置。

在输出端口的详细信息面板中提炼为每个输出的数据类型。这个设计的输出端口解释如下。请注意,有多个标量矢量港口港口HDL代码(out_1、out_6 out_9, out_10, out_11, out_12):

out_1:签订,部分长度= 0(4标量港口)out_2:无符号,分数长度= 0 out_3:无符号,分数长度= 0 out_4:无符号,分数长度= 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

时钟/重置详情面板上设置以下值:

时钟周期= 10 ns,活跃的边缘=上升复位初始值= 1,时间= 27 ns clk_enable初始值= 0,时间= 37 ns

单击Next继续开始时间对齐面板,设置“HDL时间开始cosimulation (ns)”为40。

进入最后一步和取消复选框为“自动确定时间表在模拟”的开始。对于这个例子我们知道cosimulation应该1秒的时间尺度模型对应于10 ns HDL模拟器。万博1manbetx看到HDL校验文档信息为其他设计中使用自动时间设置功能。上述时间表并单击Finish。

cosimulation块将遗留HDL代码输入到仿真软件生成的模型。万博1manbetx你可以拖拽新生成的cosimulation块和2方便命令块到仿真软件模型,在FSMSubsystem块并将其连接到输出端口FSMSubsystem。万博1manbetxcosimulation模型,比较器和断言街区内的MIMO译码器子系统,提供了对于这个示例。比较器和断言块添加了提醒你任何不匹配的参考模型输出之间的嵌入式控制器和遗留HDL实现。

使用以下命令调整生成cosimulation块,让它更容易将其插入到cosimulation模型:

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

打开cosim_mimo。基金模式。把新的块和方便的命令块由cosimWizard cosimulation模型,取代MIMODecoder子系统内部的占位符子系统。

2。Cosimulate验证遗留HDL代码

cosimulation模型中双击“发射HDL模拟器”块推出你选择高密度脂蛋白模拟器。点击播放按钮在仿真软件开始cosimulation万博1manbetx和观察,在MATLAB窗口中显示警告消息。这些都表明不匹配的输出信号,因为差异参考FSM模型和HDL实现。

现在你可以使用仿真软件和HDL模万博1manbetx拟器调试特性隔离问题和修复bug。在这种情况下,错误是由于状态转换弧是错过了HDL实现。注意在高密度脂蛋白模拟器的波形显示,FSM卡住在仿真的早期状态。

解决手写HDL代码并重新运行Cosimulation

纠正HDL代码已经提供了这个例子。使用以下命令将新代码复制到你的工作目录,覆盖坏Embedded_Controller.vhd版本:

拷贝文件(fullfile (“verify_legacy_hdlsrc”,“fixed_hdl”,“Embedded_Controller.vhd”),“verify_legacy_hdlsrc”,“f”);

编译遗留HDL代码通过双击“编译HDL设计”。退出HDL模拟器后如果仍然开放之前执行cosimulation重启HDL模拟器,然后回放cosimulation。你应该观察没有不匹配。

现在你已经调试和验证嵌入式控制器的遗留HDL代码你可以继续验证整个MIMODecoder FPGA-in-the-loop。

FPGA设计的软件环境

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

准备HDL代码生成模型

准备模型FPGA-in-the-loop将遗留代码和生成新的高密度脂蛋白HDL代码的其余部分天线系统解码器需要做两件事完成FPGA实现:

  1. 编辑FSM cosimulation模型,消除参考设计

  2. 使用高密度脂蛋白编码器黑箱将遗留HDL代码生成模型

如果你想遵循所有步骤准备使用高密度脂蛋白HDL代码生成黑盒模型,保存cosimulation模型与一个不同的名称和与其他模型进行准备如下:

1。编辑FSM cosimulation模型,消除参考设计

  • 多输入多输出信号译码器子系统内部删除Embedded_Controller功能块

  • 删除”从“块驱动Embedded_Controller输入除了enablecoder输入

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

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

2。使用高密度脂蛋白编码器黑箱将遗留HDL代码生成模型

  • 选择cosimulation块和类型control-G创建子系统

  • 右键单击新cosimulation子系统和选择和高密度脂蛋白HDL代码块属性

  • 选择建筑=黑箱

  • 输入FSMSubsystem EntityName参数

  • 在ImplementationLatency参数输入0

  • 高密度脂蛋白块属性对话框

3所示。重新运行模拟更新图。

  • 双击“发射HDL模拟器”块发射HDL模拟器

  • 点击播放按钮启动cosimulation仿真软件万博1manbetx

  • 保存模型

3所示。生成和FPGA-in-the-Loop HDL代码

这一步需要高密度脂蛋白编码器。如果你没有这个软件,您可以使用预生成的HDL费尔仿真的文件。直接跳转到步骤5。使用filWizard费尔模拟。

如果你想遵循过程生成HDL文件自己回归模型的顶层,右键单击MIMODecoder子系统和“HDL代码”下启动HDL编码器工作流顾问。

  • 步骤1.1:选择FPGA-in-the-loop目标工作流程,从下拉列表中选择您的首选FPGA开发板,并确定一个可写目录生成的HDL代码。

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

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

的结果将是一个FPGA编程文件FPGA-in-the-loop多输入多输出信号译码器的仿真子系统和一个新的模型包含原始模型(包括遗留HDL FSM)的解码器与FPGA-in-the-loop块。也将比较器与断言块识别不匹配信号类似于我们看到cosimulation模型。

4所示。验证设计与FPGA-in-the-Loop模拟

因为生成的验证模型包含的cosimulation FSMSubsystem您需要使用HDL模拟器运行整个费尔模型。确保从你以前的cosimulation HDL模拟器是关闭和重启HDL模拟器。

FPGA-in-the-loop模型生成在步骤3中,打开费尔块。

选择“负载”下载FPGA编程文件到设备在你的董事会。

单击在仿真软件模型FPGA-in-t万博1manbetxhe-loop模拟运行。

观察结果的比较范围和ErrorRate计算模型。您的费尔仿真结果应该精确匹配参考模型。

5。费尔模拟使用费尔向导

这一步是步骤4的选择对于那些没有HDL编码软件。如果你已经完成了第四步不需要继续这个步骤。

高密度脂蛋白预先生成的文件位于“verify_legacy_gen_hdlsrc”文件夹中。您可以创建的FPGA编程文件FPGA-in-the-loop使用费尔向导。还费尔向导将创建一个费尔块可以丢弃,因为费尔模型提供了这个例子中已经包含费尔块。

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

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

  • 在源文件选择添加并选择的所有文件在文件夹verify_legacy_gen_hdlsrc和识别MIMODecoder.vhd为顶层文件。

  • 接受其余的缺省值filWizard选项

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

  • 打开gm_fil_codegen_mimo_fil。基金模型和新生成的费尔块拖到模型的位置表示。

  • 打开费尔块面具,单击信号属性选项卡。改变数据类型为每个rx_decoded输出fixdt(1 6 0)相匹配的数据类型的行为。

  • 打开费尔块面具,点击主要选项卡上,选择加载和等待FPGA编程文件下载到设备。

  • 媒体在FPGA-in-the-loo万博1manbetxp运行仿真软件模型。

观察结果的比较范围和ErrorRate计算模型。您的费尔仿真结果应该精确匹配参考模型。

这个总结的例子使用HDL Cosimulation和FPGA-in-the-loop验证HDL设计。