高密度脂蛋白从框架代码生成算法
平台,I / O FPGA和ASIC有限设备通常处理大型数据集流式像素或样品。将框架模型部署到这些设备,你必须手动翻译算法操作的数据流。你可以自动化这个过程和生成HDL代码框架模型或MATLAB®函数矩阵输入使用frame-to-sample优化高密度脂蛋白编码器™。这种优化框架向量或矩阵输入转换为小样本或像素HDL代码生成目标基于流的硬件和减少所需的FPGA的I / O处理大型输入和输出信号。您可以优化设计硬件,同时减少算法的各种用例开发时间域有大量输入,如图像处理、数字信号处理、雷达应用,和音频处理。
使用frame-to-sample优化时,高密度脂蛋白编码器生成hardware-ready HDL代码不定位算法,有必要的逻辑存储样本DUT内部缓冲区,使流,和平衡数据路径。您可以使用多个建模模式,比如element-wise操作,邻域操作,和迭代和减少操作,作者不定位算法支持的frame-to-sample优化。
从框架算法生成HDL代码
当你使用frame-to-sample转换来生成HDL代码不定位算法,高密度脂蛋白编码器转换框架算法与纸浆包synthesizable HDL代码逻辑有效的和准备控制信号和逻辑处理和调整数据流直接从框架算法。您可以使用frame-to-sample转换模型®模型或一个MATLAB函数。
当你从框架生成HDL代码算法,基于流的HDL代码和生成的模型包含纸浆包逻辑,其中包括数据信号,有效和控制信号。这个计时图映射之间的关系有效,数据,并准备好信号。
一个有效的信号表明当数据是可用的。准备好信号表明DUT可以接受和处理数据。数据传输发生只有当有效的和准备好信号都高。这是由数据包A、B和C的形象。当准备好信号低,DUT无法处理更多的数据。如果你发送一个有效的断言之前准备好信号和数据信号,数据信号下降。可以de-assert有效信号,而不是发送数据准备好信号时高。如果准备好信号de-asserts和有效的信号是高,信号被删除的数据。这是由数据包D的形象。
您可以创建矩阵或不定位算法利用element-wise操作,附近操作和迭代和减少操作支持HDL代码生成。您可以创建:
通过社区行动
hdl.npufun
在MATLAB函数或函数社区处理子系统在仿真软件模型。您可以使用hdl.npufun
在一个MATLAB函数块在你DUT应用邻域处理和element-wise操作传入的图像或矩阵,如过滤内核。迭代操作使用
hdl.iteratorfun
函数。例如,您可以使用hdl.iteratorfun
在一个MATLAB函数块在你的DUT循环数组来产生一个输出传入的图像或矩阵直方图均衡化和计算统计等最小值
和马克斯
。Element-wise操作通过使用Element-wise函数或模块等获得,产品,总和,减去,分块。
在视觉或图像处理,您可以使用这些框架操作模型基于二维算法,如滤波、直方图的创建、直方图均衡化、边缘检测。在信号处理中,您可以计算一个移动平均计算输入信号。
指定Frame-to-Sample转换优化
你可以用frame-to-sample转换生成HDL代码优化的仿真软件模型或MATLAB函数。
指定Frame-to-Sample转换优化动态仿真模块
使frame-to-sample转换为仿真软件优化模型:
分别使高密度脂蛋白块属性ConvertToSamples为轮廓尺寸块在DUT传入的向量或矩阵输入信号转换为样本通过使用框架示例转换优化。指定一个轮廓尺寸块的输入信号frame-to-sample转换,输入:
hdlset_param (“<路径/ /尺寸>”ConvertToSamples =“上”)
选择使帧样本转换参数配置参数窗口中。使用应用frame-to-sample frame-to-sample转换参数优化设计方案。在仿真软件上启用frame-to-sample转换模型,在命令行,输入:
hdlset_param (“< model_name >”FrameToSampleConversion =“上”)
如果你设计框架算法使用MATLAB函数块,设置高密度脂蛋白块属性体系结构的MATLAB函数块
MATLAB Datapath公司
。
生成HDL代码之后,您可以检查生成的模型和HDL代码,每个矩阵的输入流包含一个示例中,有效的,准备好包。您可以使用验证模型比较原始的框架模型和生成的纸浆包模型。您还可以将生成的HDL代码部署到一个FPGA使用IP核心代工作流。例如,看到的部署一个框架模型与AXI4-Stream接口。
指定Frame-to-Sample转换从MATLAB
使frame-to-sample转换为MATLAB优化功能:
打开MATLAB HDL工作流顾问。开始使用MATLAB HDL工作流顾问,明白了从MATLAB基本HDL代码生成和FPGA合成。
在左窗格中,单击HDL代码生成的任务。在右窗格中,导航到优化选项卡并选择积极的数据流转换。
单击帧样本转换选项卡并选择使帧样本转换。使用此选项卡中的frame-to-sample转换参数优化选择适用于您的设计。
从框架模型生成HDL代码的例子
仿真软件模型hdlFrame_Blur_2D_MLFB
常见的图像处理框架模型模糊算法使用一个社区处理模式。
打开模型视图框架模糊算法。该模型适用于图像的图像模糊的内核cameraman.tif
。
open_system (“hdlFrame_Blur_2D_MLFB”);set_param (gcs,“SimulationCommand”,“更新”);
DUT包含调用MATLAB函数image_blur
在MATLAB函数块。的image_blur
函数调用frame-to-sample支持功能hdl.npufun
应用模糊的内核模糊
函数的输入图像。有关更多信息,请参见hdl.npufun
。
open_system (“hdlFrame_Blur_2D_MLFB / DUT / MATLAB函数”)
应用frame-to-sample转换优化模型通过设置配置参数FrameToSampleConversion
来在
从命令行。
hdlset_param (“hdlFrame_Blur_2D_MLFB”FrameToSampleConversion =“上”);
指定输入信号转换为一个纸浆包不定位信号通过设置高密度脂蛋白尺寸块属性ConvertToSamples
的输入在
。在这个例子中,设置ConvertToSamples
财产在
只有尺寸块DUT
子系统,我
。
hdlset_param (“hdlFrame_Blur_2D_MLFB / DUT /我”ConvertToSamples =“上”);
看到转换到纸浆包版本的框架模型,使模型生成。生成HDL代码和生成的模型DUT
子系统。
hdlset_param (“hdlFrame_Blur_2D_MLFB”GenerateModel =“上”);makehdl (“hdlFrame_Blur_2D_MLFB / DUT”);bdclose (“原来hdlFrame_Blur_2D_MLFB /”);bdclose (“hdlFrame_Blur_2D_MLFB / Equalized1”);
# # #生成hdlFrame_Blur_2D_MLFB / DUT的高密度脂蛋白。使用的配置集模型# # # < a href = " matlab: configset。showParameterGroup (hdlFrame_Blur_2D_MLFB, {HDL代码生成的})" > hdlFrame_Blur_2D_MLFB < / > HDL代码生成参数。# # #“hdlFrame_Blur_2D_MLFB”高密度脂蛋白检查运行模型。# # #开始编译模型的“hdlFrame_Blur_2D_MLFB”……# # #工作模型“hdlFrame_Blur_2D_MLFB”……# # #代码生成和优化选项选择已经引入了额外的管道延迟。# # #延迟平衡功能自动插入匹配延误赔偿。# # # DUT需要一个初始管道设置延迟。每个输出端口的经历这些额外的延迟。 ### Output port 1: 127 cycles. ### Output port 1: The first valid output of this port will be after an initial latency of 257 valid inputs. ### Output port 2: 127 cycles. ### Output port 2: The first valid output of this port will be after an initial latency of 257 valid inputs. ### Working on... GenerateModel ### Begin model generation 'gm_hdlFrame_Blur_2D_MLFB' .... ### Rendering DUT with optimization related changes (IO, Area, Pipelining)... ### Model generation complete. ### Begin VHDL Code Generation for 'hdlFrame_Blur_2D_MLFB'. ### MESSAGE: The design requires 65536 times faster clock with respect to the base rate = 1. ### Working on counterNetwork as hdlsrc/hdlFrame_Blur_2D_MLFB/counterNetwork.vhd. ### Working on NeighborhoodCreator_3x3/row3_col2 as hdlsrc/hdlFrame_Blur_2D_MLFB/row3_col2.vhd. ### Working on NeighborhoodCreator_3x3/row2_linebuffer/SimpleDualPortRAM_generic as hdlsrc/hdlFrame_Blur_2D_MLFB/SimpleDualPortRAM_generic.vhd. ### Working on NeighborhoodCreator_3x3/row2_linebuffer as hdlsrc/hdlFrame_Blur_2D_MLFB/row2_linebuffer.vhd. ### Working on NeighborhoodCreator_3x3 as hdlsrc/hdlFrame_Blur_2D_MLFB/NeighborhoodCreator_3x3.vhd. ### Working on boundaryCounters_3_3 as hdlsrc/hdlFrame_Blur_2D_MLFB/boundaryCounters_3_3.vhd. ### Working on BoundaryCheck_3x3 as hdlsrc/hdlFrame_Blur_2D_MLFB/BoundaryCheck_3x3.vhd. ### Working on ValidDelay_257 as hdlsrc/hdlFrame_Blur_2D_MLFB/ValidDelay_257.vhd. ### Working on I_NeighborhoodCreator as hdlsrc/hdlFrame_Blur_2D_MLFB/I_NeighborhoodCreator.vhd. ### Working on hdlFrame_Blur_2D_MLFB/DUT/MATLAB Function/blur/nfp_div_single as hdlsrc/hdlFrame_Blur_2D_MLFB/nfp_div_single.vhd. ### Working on hdlFrame_Blur_2D_MLFB/DUT/MATLAB Function/blur/nfp_add_single as hdlsrc/hdlFrame_Blur_2D_MLFB/nfp_add_single.vhd. ### Working on hdlFrame_Blur_2D_MLFB/DUT/MATLAB Function/blur as hdlsrc/hdlFrame_Blur_2D_MLFB/blur.vhd. ### Working on hdlFrame_Blur_2D_MLFB/DUT/MATLAB Function as hdlsrc/hdlFrame_Blur_2D_MLFB/MATLAB_Function.vhd. ### Working on hdlFrame_Blur_2D_MLFB/DUT/Input_FIFOs/I_FIFO as hdlsrc/hdlFrame_Blur_2D_MLFB/I_FIFO.vhd. ### Working on hdlFrame_Blur_2D_MLFB/DUT/Input_FIFOs as hdlsrc/hdlFrame_Blur_2D_MLFB/Input_FIFOs.vhd. ### Working on hdlFrame_Blur_2D_MLFB/DUT/Output_FIFOs/I_out_FIFO as hdlsrc/hdlFrame_Blur_2D_MLFB/I_out_FIFO.vhd. ### Working on hdlFrame_Blur_2D_MLFB/DUT/Output_FIFOs as hdlsrc/hdlFrame_Blur_2D_MLFB/Output_FIFOs.vhd. ### Working on hdlFrame_Blur_2D_MLFB/DUT as hdlsrc/hdlFrame_Blur_2D_MLFB/DUT.vhd. ### Generating package file hdlsrc/hdlFrame_Blur_2D_MLFB/DUT_pkg.vhd. ### Code Generation for 'hdlFrame_Blur_2D_MLFB' completed. ### Creating HDL Code Generation Check Report file:///tmp/Bdoc23a_2213998_3309690/tp9b00d648/hdlcoder-ex36441221/hdlsrc/hdlFrame_Blur_2D_MLFB/DUT_report.html ### HDL check for 'hdlFrame_Blur_2D_MLFB' complete with 0 errors, 2 warnings, and 1 messages. ### HDL code generation complete.
打开生成的模型,gm_hdlFrame_Blur_2D_MLFB
。这个模型包含了DUT的纸浆包版本,包含有效的,准备好了,和数据信号。
open_system (“gm_hdlFrame_Blur_2D_MLFB”);Simulink.BlockDiagram.arrangeSystem (“gm_hdlFrame_Blur_2D_MLFB”);
DUT打开生成的模型。有更多的硬件细节sampled-based生成的模型比原来的框架模型。在DUT
子系统,有一个输入和输出FIFO,处理和存储的数据流生成矩阵分区。流矩阵分区包含模糊算法和其他纸浆包逻辑需要部署算法基于流的硬件。
open_system (“gm_hdlFrame_Blur_2D_MLFB / DUT”);
如果你运行生成的模型,发现时间得到输出图像比原始模型。将框架算法转换为纸浆包算法流图像像素的一次需要更多的时间来处理每个像素比框架版本。延迟处理有效的输出为一个有效的输入像素的原始输入帧取决于几个因素,如输入图像的大小,每周期的样品,和算法。的输出makehdl
命令在MATLAB命令窗口中显示添加延迟。在这个例子中,第一个有效的输出是访问后的初始延迟257个有效输入。
采样率,延迟和图像大小确定所需的仿真停止时间生成的模型。生成模糊输出图像的纸浆包算法在生成的模型中,原始的和后续生成的模型已经停止2秒的时候,这是显示整个后输出图像所需的时间延迟。
硬件方面的考虑
之前生成HDL代码不定位算法的硬件部署:
检查目标硬件应该有足够的内存来存储帧之前和之后在内存中应用了基于流的算法。纸浆包算法需要更多的内存,但是使用I / O更少。
确保你的设计可以处理一些延迟。纸浆包添加延迟和延迟取决于你的算法,算法设计,输入数据的大小。
支撑块和操作
Frame-to-sample转换支持这些块和操作:
MATLAB函数块与高密度脂蛋白块属性体系结构设置为
MATLAB Datapath公司
。在MATLAB函数,您可以使用:Frame-to-sample-focused功能,例如
hdl.npufun
和hdl.iteratorfun
。Element-wise操作之间的数据流。
操作之间的一个标量和流数据。
社区处理子系统块。
Element-wise操作。例如,您可以使用块支持element-wise操作等获得,产品,总和,减去,分块。
方阵产品业务。例如,您可以使用矩阵相乘块方输入矩阵。
常数输入或来源。
饱和度。
三角函数的操作。
位操作操作,比如位片,对他造成打击——并且制裁范围还咬伤或。
比较操作。
偏见块。
腹肌块。
复杂Real-Imag块和Real-Imag复杂块。
√6块。
数据类型转换块。
开关块。
限制
Frame-to-sample转换不支持:
三维矩阵。
列向量。
持续的变量。
非方阵产品业务。
矩阵操作流数据。例如,在仿真软件不支持使用frame-to-sample转换选择器,赋值,或重塑块流数据。
和元素的操作。
产品元素的操作。
MATLAB系统对象等
hdl.RAM
。为每个子系统。
延迟块。
块包含设计延误。
公共汽车
对象的数据类型。IP核心代从MATLAB函数。
另请参阅
hdl.npufun
|hdl.iteratorfun
|社区处理子系统