System Generator初体验FIR滤波器(二)

简介: System Generator初体验FIR滤波器

System Generator初体验FIR滤波器(一)https://developer.aliyun.com/article/1472305


三、步骤 2:在 FPGA 中创建优化设计

在本步骤中,您将看到如何使用 FPGA 通过过采样来创建步骤1中使用的相同设计的更优化版本。您还将了解如何使用工作空间变量。

1、运行 Lab1_2.slx 文件

可以看到 Lab1_2.slx 与上面我们修改后的 Lab1_1.slx 是同样的设计,且运行结果也一模一样

2、进行优化设计

①、双击 System Generator 令牌以打开 Properties Editor。如第前面步骤 1 所述,该设计要求最小采样频率为18 MHz,目前设置为20 MHz(50 ns FPGA时钟周期)。

FPGA 器件的时钟频率很容易超过 20MHz。以更高的时钟频率运行 FPGA 将允许 System Generator 使用相同的硬件资源来计算多个中间结果。

②、双击 FDATool 实例打开属性编辑器,单击 Filter Coefficients 按钮查看过滤系数

这表明过滤器使用了 11 个对称系数。这将需要至少 6 次乘法。如步骤 1 Resource Analyzer 所示:Lab1_1 资源分析仪,其中最终硬件使用 6 个 DSP48 组件,用于执行乘法的 FPGA 资源。当前的设计以 20MHz 的速率对输入进行采样。如果输入以当前频率的 6 倍采样,则可以使用单个乘法器执行所有计算。

③、现在,将用工作空间变量替换此设计的一些属性。首先,需要定义一些工作空间变量

MATLAB 命令窗口中:

  • 输入num_bits = 16
  • 输入bin_pt = 14

④、在设计 Lab1_2 中,双击 Gateway In 块打开属性编辑器,在定点精度部分,将 16 替换为 num_bits,将 14 替换为 bin_pt,如下所示

单击 OK 保存并退出属性编辑器

⑤、在 System Generator 令牌中,以这种方式将采样频率更新为 120 MHz(6 * 20 MHz)

  • 设置 FPGA 时钟周期为 8.33 ns(1/120MHz)
  • 指定 Simulink 系统周期为 1/120e6 秒
  • 从执行分析菜单,选择合成后,从分析器类型菜单,选择资源如下所示。此选项提供完成后的资源使用详细信息

Compilation 按照下图配置

⑥、按 “生成” 将设计编译成硬件描述。在这种情况下,可以忽略 Diagnostic Viewer 中出现的消息,因为你有意将设计的时钟设置在采样率以上,以允许资源共享并减少资源。关闭“诊断查看器”窗口。

⑦、生成完成后,单击 OK 以关闭编译状态对话框。生成完成后,Resource Analyzer 窗口打开,可以很好地估计合成后的最终设计结果,如下所示

硬件设计现在只使用一个 DSP48 资源(一个乘法器),与上图 Lab 1_1 resource Analyzer 中的结果相比,使用的资源大约减少了一半

四、步骤 3:使用离散资源创建设计

在本步骤中,你将看到如何使用 System Generator 来构建使用离散组件的设计,以实现非常高效的硬件设计

1、运行 Lab1_3.slx 文件

这将打开如下图所示的 Simulink 设计。此设计与前两步中的设计类似。然而,这一次滤波器是用离散元件设计的,只是部分完成。作为此步骤的一部分,你将完成此设计并学习如何添加和配置离散部件。

这个离散滤波器就是这样工作的:

  • 采样通过端口 In 到达,延迟后存储在移位寄存器(实例 ASR)中
  • 滤波器系数需要一个 ROM
  • 需要一个计数器来选择数据和系数样本进行计算
  • 需要一个乘法累加单位来进行计算
  • 最后的下采样单元每 n 个周期选择一个输出

2、将分立组件添加到设计中

①、单击 Simulink 工具栏中的库浏览器按钮,打开 Simulink 库浏览器。

  • a. 展开 Xilinx Blockset 菜单
  • b. 如下图所示,选择 Control Logic 部分,然后选择 Counter 并用鼠标右键单击以将该组件添加到设计中
  • c. 选择 Memory 部分(如图左下角所示),并在设计中添加一个 ROM
  • d. 最后,选择 DSP 部分,并在设计中添加 DSP48 Macro 3.0

②、将三个新实例连接到设计的其余部分,如下所示

现在,将配置实例以正确过滤数据

③、双击 FDATool 实例并从工具栏中选择 Filter Coefficients 以查看过滤器规范

这显示了与步骤 1 中前面步骤相同的规格,并确认有 11 个系数。你还可以确认,通过双击输入网关,输入采样率再次为 20Mhz(采样周期= 1/20e6)。有了这些信息,您现在就可以配置离散组件了。关闭 FDATool 属性编辑器。

④、双击 Counter 实例打开属性编辑器

  • a. 对于计数器类型,选择 Count limited 并为 Count 输入以下值:length(xlfda_numerator(‘FDATool’))-1,这将确保计数器计数从 0 到 10(11个系数和数据地址)
  • b. 对于输出类型,将默认值保留为 Unsigned,并在位数中输入值 4。计数到 11 只需要 4 个二进制地址位
  • c. 对于显式周期,请输入 1/(11*20e6),以确保采样周期为输入数据速率的 11 倍。滤波器必须为每个输入样本执行11次计算。点击 OK 退出属性编辑器。

⑤、双击 ROM 实例打开 Properties Editor

  • a. 对于 Depth,输入值 length(xlfda_numerator(‘FDATool’))。这将确保 ROM 有 11 个元素
  • b. 对于初始值向量,输入:xlfda_numerator(‘FDATool’)。系数值将由 FDATool 实例提供
    单击 OK 退出属性编辑器

⑥、双击 DSP48 Macro 3.0 实例打开属性编辑器

  • a. 在 “指令” 选项卡中,将现有的 “指令” 替换为 A*B+P,然后添加 A*B。当 sel 输入为假时,DSP48 将相乘并累加。当 sel 输入为真时,DSP48 将简单地相乘
  • b. 在“管道选项”页签中,使用“管道选项”下拉菜单选择 By_Tier,选择分级 3 和分级 5。这将确保在 A 和 B 的输入处以及乘法和累加操作之间使用寄存器。单击 OK 退出属性编辑器

⑦、单击 Run simulation 按钮来模拟设计并查看结果,如下图所示

⑧、最后一步是将设计编译成硬件描述并进行综合

双击 System Generator 令牌以打开 Properties Editor,在 Compilation 选项卡中,确保编译目标是 IP Catalog

从时钟选项卡,在执行分析下选择后合成和分析器类型选择资源。此选项提供完成后的资源使用详细信息

按 “生成” 将设计编译成硬件描述。生成完成后,在“资源分析器”窗口中显示资源利用率。

该设计现在使用的 FPGA 硬件资源比使用数字 FIR 滤波器宏设计的任何版本都少(Lab 1_1 资源分析仪Lab1_2资源分析仪 )。

单击 OK 以关闭 “资源分析器” 对话框


System Generator初体验FIR滤波器(三)https://developer.aliyun.com/article/1472307

目录
相关文章
|
人工智能 算法 自动驾驶
使用OpenCV实现Halcon算法(2)形状匹配开源项目,shape_based_matching
使用OpenCV实现Halcon算法(2)形状匹配开源项目,shape_based_matching
3952 0
使用OpenCV实现Halcon算法(2)形状匹配开源项目,shape_based_matching
|
6月前
|
存储 传感器 算法
技术心得记录:手把手教系列之FIR滤波器设计
技术心得记录:手把手教系列之FIR滤波器设计
46 0
|
7月前
|
编译器 异构计算
System Generator初体验FIR滤波器(一)
System Generator初体验FIR滤波器
117 1
|
7月前
|
编解码 异构计算
System Generator初体验FIR滤波器(三)
System Generator初体验FIR滤波器
89 1
RxSwift特征序列Single、Maybe、Completable的使用
RxSwift特征序列Single、Maybe、Completable的使用
245 1
|
机器学习/深度学习 算法
m基于MATLAB和simulink实现模糊控制器以及模糊神经网络控制器
m基于MATLAB和simulink实现模糊控制器以及模糊神经网络控制器
229 0
m基于MATLAB和simulink实现模糊控制器以及模糊神经网络控制器
|
计算机视觉
Scharr与Laplacian滤波器---OpenCV-Python开发指南(21)
Scharr与Laplacian滤波器---OpenCV-Python开发指南(21)
212 0
Scharr与Laplacian滤波器---OpenCV-Python开发指南(21)
|
边缘计算 计算机视觉
图像梯度与Sobel滤波器---OpenCV-Python开发指南(20)
图像梯度与Sobel滤波器---OpenCV-Python开发指南(20)
418 0
图像梯度与Sobel滤波器---OpenCV-Python开发指南(20)
|
计算机视觉
矩特征---OpenCV-Python开发指南(25)
矩特征---OpenCV-Python开发指南(25)
224 0
矩特征---OpenCV-Python开发指南(25)