在Simulink中设计HDL视频处理算法
这个例子展示了如何使用Vision HDL Toolbox™块设计一个面向硬件的图像过滤器。它还使用了计算机视觉工具箱™块。
Simulink®中面向硬件的视频处理模型的主要特征是:
流像素接口:在视觉HDL工具箱中的块使用流像素接口。串行处理对于硬件设计是有效的,因为存储用于计算的像素数据所需的内存更少。串行接口允许块独立于图像大小和格式运行,并使设计对视频定时错误更有弹性。有关更多信息,请参见流像素接口.
针对HDL代码生成的子系统:通过从Vision HDL Toolbox库中选择块,设计一个硬件友好的像素流视频处理模型。针对HDL代码生成的设计部分必须在单独的子系统中。
转换到基于帧的视频:为了验证,您可以显示基于帧的视频,或将硬件兼容设计的结果与Simulink行为模型的输出进行比较。Vision HDL Toolbox提供了一个块,允许您对设计的输出进行反序列化。
开放模式模板
本教程使用一个Simulink模型模板开始。
单击Simulink按钮,或键入动态仿真模块
在MATLAB®命令提示符。在Simulink开始页面,找到Vision HDL工具箱部分,并单击基本模型模板。
该模板创建一个您可以自定义的新模型。用新名称保存模型。
导入数据
该模板包含一个Video Source块,其中包含一个240p视频样本。每个像素都是一个标量uint8
代表强度值。一个最佳实践是,在扩展到更大的图像尺寸之前,使用较小的帧大小来设计和调试您的设计,以便快速调试周期。您可以使用这个240p源来调试针对1080p视频的设计。
序列化数据
帧到像素块将有框的视频转换为像素流和控制结构。该块为以HDL代码生成为目标的子系统提供输入,但它本身不支持HDL代码生成。
模板包含此块的一个实例。若要使用标准视频格式进行模拟,请选择与输入源匹配的预定义视频填充格式。若要使用自定义大小的图像进行模拟,请选择要围绕在图像周围的非活动区域的尺寸。本教程使用标准视频格式。
打开“帧到像素”块对话框查看设置。源视频为240p灰度格式。标量整数表示每个像素的强度值。要匹配输入的视频,设置数量的组件到1,和视频格式240 p。
注意:视频源的采样时间必须与您在“帧到像素”块中选择的帧大小中的像素总数相匹配。设置采样时间为每行总像素×共线.在InitFcn
回调,模板创建一个工作区变量,totalPixels
为240p帧的采样时间。
设计HDL-Compatible模型
通过修改HDL算法子系统,设计了一个针对HDL代码生成的子系统。子系统输入和输出端口使用上一节中描述的流像素格式。打开HDL算法子系统来编辑它。
在Simulink库浏览器中,单击Vision HDL工具箱。您也可以通过键入打开这个库visionhdllib
在MATLAB命令提示符。
选择一个图像处理块。此示例使用图像滤波筛选子库中的块。还可以通过键入访问该库visionhdlfilter
在MATLAB命令提示符。将图像过滤器块添加到HDL算法子系统并连接端口。
打开Image Filter块,并进行以下更改:
集滤波器系数来
(4, 4) / 16
实现4×4 blur操作。集填充方法来
对称的
.集线缓冲区大小到2的幂,以适应所需的最大帧格式的活动行大小。该参数不影响模拟速度,因此在用较小的测试图像进行模拟时不需要降低。默认的2048支持1080p视频格式。
在数据类型选项卡,在数据类型,设置系数来
fixdt(0、1、4)
.
设计行为模型
您可以将针对hdl的设计与行为模型进行可视化或数学比较,以验证硬件设计并监视量化错误。该模板包含一个行为模型子系统,该子系统具有用于此目的的基于框架的输入和输出端口。双击行为模型来编辑它。
对于本教程,添加二维滤波器(计算机视觉工具箱)从计算机视觉工具箱™的块。这个块一次过滤整个帧。
打开二维FIR Filter块,并进行以下更改,以匹配Vision HDL工具箱中的Image Filter块的配置:
集系数来
(4, 4) / 16
实现4×4 blur操作。集填充选项来
对称的
.在数据类型选项卡,在数据类型,设置系数来
fixdt(0、2、4)
.
反序列化经过过滤的像素流
使用模板中包含的Pixels To Frame块来反序列化要显示的数据。
打开像素到帧块。设置图像尺寸属性以匹配输入视频和在“帧到像素”块中指定的设置。对于本教程,使用数量的组件设置为1,而视频格式设置为240p。该块将输出像素流和控制信号转换回表示帧的矩阵。
显示结果并与行为模型进行比较
使用模板中包含的Video Viewer块可视地比较输出帧。的validOut
像素到帧块的信号连接到启用
查看器的端口。运行模型以显示结果。
生成HDL代码
一旦你的设计在模拟中工作,你可以使用HDL Coder™为HDL算法子系统生成HDL代码。看到从Simulink生成HDL代码.