System Generator 概述
System Generator for DSP 设计工具运行于 Simulink 中。它采用赛灵思面向Simulink 的 DSP 模块集,并将自动调用赛灵思 CORE Generator™工具生成高度优化的 DSP 构建块网表。我们能通过 Simulink 库浏览器访问赛灵思 DSP 模块集。库浏览器可从标准的 MATLAB 工具栏中启动。构建 DSP 系统可用的 DSP 构建块有 90 多个,此外还包括 FIR 滤波器、FET、FEC 内核、嵌入式处理内核、存储器、算术块、逻辑块以及按位块 (bit-wise block) 等。每个块都实现了周期精确和位精确,我们可就延迟、面积与速度性能优化、I/O 端口数、量子化以及取整等对其逐一进行配置。 Gateway-In 与 Gateway-Out 这两个模块定义了 FPGA 系统与 Simulink 仿真模型的界线。Gateway-In 模块将浮点输入转化为定点数字,此后该工具能正确控制定点分辨率的所有位增长,具体取决于随后实用阶段中所实施的数**算。 由于 Simulink 建立在 MATLAB 基础之上,因此 System Generator 能使用完整的 MATLAB 语言用于输入信号生成及输出分析。我们可用 Simulink Source and Sink 库中的 From-Workspace 和 To-Workspace 模块来读取来自 MATLAB 变量 (From-Workspace) 的输入信号,或者将信号的部分结果存储于MATLAB 变量 (To-Workspace) 中。此外,我们还能通过 MATLAB 变量设置 System Generator 的众多参数,这样只需将包含所有这些变量的 MATLAB 脚本加以更新(我们可将 MATLAB 函数分配给模型,并在打开前,甚至还能在仿真开始前或停止后调用函数),就能实现设计方案的复杂定制。 System Generator for DSP 的另一重要特性就是软硬件协同仿真。我们能将设计的一部分综合到目标 FPGA 板(硬件模型)上,让其余部分作为主机 PC 中的软件模型。这样,我们就能逐渐从软件模型向硬件实施过渡。该工具能通过以太网透明地创建和管理通信基础设施以及主机 PC 与目标 FPGA 器件之间的共用存储器。这样,在运行仿真时,硬件上实施的部分设计就能真正运行在目标硅器件上,而软件模型则在主机 PC 上实现其余部分的仿真。我们可用共用存储器来存储输入图形和生成的输出图形等内容。以太网通信为伪实时处理提供了足够的带宽。您可在用户手册中了解到更详细的信息。 软件模型和硬件处理之间实现了灵活分区,再加上软硬件协同仿真功能,这就为您提供了一款功能强大的验证工具,能验证原纯软件算法与用于生产的硬件实施模型之间是否一致。我们可用 Simulink 来比较软硬件处理的数据结果。该功能在驾驶辅助应用中特别有用,因为一般的系统输入图形都是不确定的。 下面,我们不妨来仔细探讨如何在 System Generator for DSP 中构建图形处理算法模型,为了简单起见,这里我们选择 GNR 为例,这也是图形预处理流程的第一个模块。 System Generator 实施GNR 功能
强度值(即噪声)的随机变化通常会损坏图像质量。这种变化表现为高斯或正态分布,在不同传感器(即 CMOS 摄像头)中较为常见。线性平滑滤波器是消除高斯噪声的最佳方法,在许多情况下,它还可消除其它类型的噪声。为实现该功能,我们可通过使用连续窗口中的像素加权和来实施线性有限脉冲响应 (FIR) 滤波器。 在开始实施 GNR System Generator 模块之前,我们已在 MATLAB 中实现了其行为模型。而这只仅需两行代码即可实现。首先,我们需要计算内核,具体描述掩模尺寸(本例设为 5×5)和高斯的 ∑ 值。然后,我们可以通过卷积过滤输入图像: n_mask = fspecial(gaussian, 5, 0.8);
out_img = conv2(in_img, n_mask, same);
此外,我们还可使用这种行为模型,并通过实际视频数据测试滤波器,进而调节掩模系数。我们还可以通过验证 System Generator for DSP 子系统的输出是否与 MATLAB 函数的输出相等(在规定的误差范围内,这是因为 MATLAB 是以浮点方式工作,而 System Generator 则以固点算法方式工作)来验证硬件。 2-D GNR 模块以流线方式(即逐行方式)对输入图像进行处理。图 3 显示了整个预处理链的 System Generator 顶级方框图以及高斯噪声抑制功能的顶级方框图。 图 3 中的 data_in 和 data_out 端口分别用于接收输入像素流和返回滤波后的像素流,而其余的端口则用于邻接模块间的定时同步与处理控制。 如图中黄色和蓝色模块所示,我们将 GNR 块的内部架构建立在两个主要子系统上。我们将对上述各模块进行深入探讨,详细了解 System Generator 设计。 |