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