热度 15
2017-10-9 21:46
3108 次阅读|
0 个评论
一、FPGA信号处理的方法 在数字信号处理方面, FPGA 比 DSP 具有更多的优势,主要表现在速度和性能。 FPGA 处理的性能取决于处理数据的并行结构,而微处理器与所运行的频率密切相关。 如下图所示,传统的微处理器和 DSP 在实现 256 阶 FIR 滤波器时,采用了顺序的处理结构。这样,就限制了数据的吞吐量。由于这个处理结构采用的是共享时间的乘积累加( Multiply Accumulate,MAC )单元,因此通过高频率驱动这个单元会造成系统的竞争力的降低。在这个结构中,每个数据采样执行 256 个乘和加操作。每 256 个时钟周期才能输出一个结果。 当采用 FPGA 的并行处理结构时,可以得到最大的数据吞吐量。由于这种结构支持任何的并行度,因此可以很好地在性能和成本之间进行权衡。在这个结构中,每个数据采样同时执行 256 个乘和累加( MAC )操作,可以在每个时钟周期输出一个结果。 以前使用 FPGA 进行数字信号处理比较困难,是由于使用 HDL 语言描述数字信号处理模型非常麻烦。但是,随着高级建模工具 SysGen 的出现,使得在 FPGA 内构建数字信号处理的模型变的更加简单。所以越来越多的高性能信号处理都采用 FPGA 实现,而不使用 DSP 。 通常使用标准的 Simulink 块集创建一个可执行的规范。该规范可以使用浮点数值精度进行设计,而不需要知道详细的硬件细节。一旦定义了功能和基本的数据流, SysGen 可以用来为 Xilinx 的器件指定硬件的实现细节。 SysGen 使用了 Simulink 中的 Xilinx DSP 块集,并且通过自动调用 Xilinx 的核生成器为所构建的 DSP 模块生成经过优化的网表。此外, SysGen 可以执行所有的下游的实现工具,为 FPGA 生成比特流文件。同时可以选择通过使用来自 Simulink 所提取出来的测试向量创建用于 ModelSim 的测试平台。 SysGen 并不是用来取代基于 HDL 的设计,但是可以是设计的注意力只集中在关键的部分。类似地,绝大部分的 DSP 程序员都不会专门在汇编器中编程,他们都使用高级语言编程。只有在必须满足性能要求时才使用汇编。 拇指规则: 在设计中必须管理内部硬件时钟的部分,应该使用 HDL 实现。设计中少量的关键部分使用 SysGen 实现,然后将 HDL 和 SysGen 设计连接起来。通常,除了外部接口以外,一个信号处理系统的绝大部分不需要这个级别的控制。 System Generator 提供了机制,用于将 HDL 代码导入到设计中,这是 HDL 设计者十分感兴趣的。另一个令设计者感兴趣的方面是, SysGen 能自动地生成 HDL 测试平台,包括测试向量。 通过硬件协同仿真处理接口,我们可以在 Simulink 的控制下,在硬件上运行设计。这样,可以充分发挥 matlab 和 Simulink 用于数据分析和可视化的功能。 二、FPGA设计模块的介绍 Xilinx Blockset, 包含了基本的 SysGen 模块,一些模块是底层的,提供了对器件指定硬件的访问,其他是高层次的,实现信号处理和高级的通信算法。为了方便,具有广泛适用的模块(如 Gateway I/O 块)是很多库的成员。每个模块包含在 Index 库中。 Xilinx Reference Blockset 包含了 SysGen 的复合体,用于实现范围更广的功能 三、信号模型的构建 1、模型的时域表达式 通过 Z 变换 变换到 Z 域 2、 打开 System Generator ,会打开 matlab( 版本为 R2015b) ,然后在命令窗口输入 simulink, 然后 simulink 就被打开了。 在 Simulink 下新建一个空白的设计界面。然后在 Simulink 主界面的 Library Browser 窗口下展开 Xilinx Blockset, 点击击 Floarting-Point ,出现用于浮点信号处理的 IP 核元件。如下图所示。 将 Gateway In 和 Gateway Out 元件拖入到设计中。 Gateway In 元件作用: 从浮点数转换为 N 位 boolean 类型,有符号(二进制补码)或者无符号定点精度; 在转换期间,提供选项管理额外的位; 在 SysGen 生成的 HDL 设计中,定义了顶层输入端口的名字; 当在 SysGen 块中,勾选 Create Testbench 选项时,定义了测试平台的激励源; Gateway Out 作用: 将 SysGen 产生的定点数转为 Simulink 的双精度; 在 SysGen 生成的 HDL 设计中,定义了顶层输出端口的名字。 拖拽 3 个 Delay 元件和 CMult 元件、 Addsub 元件到设计窗口。 展开 Xilinx Blockset ,找到 Basic Elements, 将 System Generator 元件拖入设计窗口。 在主界面的 Libraries 窗口下,找到并展开 Simulink, 找到 Sinks, 将 Scope 元件拖入到设计中。(打开 Scope 元件符号,将 Number of axis 设置为 2 ) 按照如下图所示连接元器件 3、模型参数的设置 (1) Sine Wave 先介绍一下正弦信号的类型( Sine type ) 基于时间 ( Time-Based )的模式,在该模式下,正弦信号的输入由下式决定 在该模式下有两个可以选择的子模式,即连续模式和离散模式。 Sample time 参数的值确定子模式,当该参数为 0 时,是连续模式,当该参数大于 0 时,是离散模式。 2.基于采样( Sample-Based )的模式,使用下面的公式: 其中, A 是信号的幅度, P 是每个正弦周期的采样个数, k 是重复的整数值,其范围从 0~ ( p-1 ) , o 是信号的偏置(相位移动); b 是信号的直流偏置。 参数按如下图配置 双击 Gateway In 符号,打开参数设置对话框,参数设置为: Output Type : Float-point;Floating-point Precision:Single 其他参数默认。 双击 Delay1 符号,在 Basic 标签页,设置 Latency 为 2 ; Delay2 的 Latency 设置为 3 。 双击 CMult 符号,参数设置如下: Constant value:3;Constant Type: Floating-point;Floating-point Precision: Single。 双击 CMult1 符号,参数设置如下: Constant value:4;Constant Type: Floating-point;Floating-point Precision :Single; 双击 CMult2 符号,参数设置如下: Constant value: 1.5;Constant Type: Floating-point;Floating-point Precision:Single 双击所有 Addsub 符号,将 Latency 设置为 0 (无延迟) 4、模型的仿真 在设计窗口的工具栏的文本框中输入 45.0 ;然后单击仿真按钮,开始仿真;仿真结束后,在设计中双击 Scope 符号。显示如下图 5、生成模型子系统 鼠标选中Gateway In 和Gateway Out之间的区域,单击鼠标右键,在弹出的快捷菜单中,选择 Create Subsystem From Selection 命令。 6、模型HDL代码的生成 双击 System Generator 符号,参数设置如下 然后单击Generate。 7、打开设计文件并仿真 在 netlist 子目录下打开该工程,然后进行行为级仿真