【FPGA-DSP】第一期:DSP基础

news/2024/5/19 20:20:22/文章来源:https://blog.csdn.net/weixin_44810982/article/details/129748023

目录

1. DSP基础 

1.1 DSP基本概念

1.2 FPGA实现DSP的特点

2. DSP硬核的结构与使用

3. FPGA设计DSP技术

3.1. 浮点数与定点数的表示与转换

3.1.1. 双精度浮点数表示

3.1.2. 双精度浮点数与定点数的转换


本章作为FPGA数字信号处理的入门介绍课程,将介绍DSP的基本原理                                           

通常的数字信号处理器只包含一个或几个乘法器,需要进行多次迭代完成运算。不同的是从平台级 FPGA 开始,器件中集成了大量数字信号处理(DSP)的硬件模块,成为对信号进行并行处理的引擎,利用 FPGA 实现数字信号处理算法可以满足信号处理系统所提出的高性能要求,因此得到越来越广泛的应用。本章讨论采用 FPGA 硬件实现 DSP 系统的设计方法。

1. DSP基础 

1.1 DSP基本概念

DSP 与其他通用计算技术相互区别的两个重要特性是实时流量要求数据驱动特性。DSP 的硬件实现应该以满足实时处理的流量约束来设计,新的输入采样从信号源周期地按收时就需要立即处理,这与先在缓冲器存储,然后按批作业处理不同。如果系统的流量比要求的采样率低,必须停止或缓冲新的输人采样,并需要无限长的缓冲器。但是,一旦硬件达到要求的采样率和实时流量处理的能力,就没必要提高计算的执行速度。

因为FPGA有着强大的实时计算能力,一旦输入数据有效,FPGA就会进行数据处理,这种系统是由数据流同步的,而不是系统时钟同步。DSP程序可以实现对一个无限长时间信号进行重复的数据处理。DSP系统的时钟速率一般和采样率是不同的。

在进行DSP处理前,首先要对模拟信号进行采样的处理,将模拟信号转换成数字信号。若不在最佳采样点采样,可能会引入混迭和其他不期望的频率分量。同时采样尽量使信号的有效动态范围达到满量程,实现最大信噪比,减小量化误差。

最小的采样率称为 Nyquist 频率。在 Nyquist-Shannon定理中定义了这个最小频率来确地表示一个连续的频带受限模拟信号,采样频率至少是信号最大频率的两倍以上,这里不做过多赘述。

在A/D转换时会引入量化误差和噪声,量化误差由量化间隔决定,量化噪声与DAC位数有关,DAC位数越高,在满量程时采样出来的信号越逼近原始模拟信号,此时量化噪声最小,可以发现量化噪声和量化误差都是在采样时引入的。下面介绍一些常用相关术语

  • 最大信噪比:采样达到有效信号的满量程动态范围即可输出最大信噪比
  • 迭代:执行一次全部DSP算法的过程称为一次迭代
  • 关键通道:计算的组合逻辑电路中,输入到输出最长的一条数据通道称为关键通道,因此关键通道的计算时间决定了一个DSP系统的最小可处理时钟周期或最大时钟频率
  • 等待时间:系统接收到输入到计算输出的时间差

DSP输入输出关系公式:

从上述公式可以看出,实现一个基本的DSP 算法需要三种运算单元,包括加法运算、延时单元以及乘法运算。加法和乘法运算在电路中有专门的器件,单位延时可采用D触发器来实现。如果需要产生多个单位延时,可采用多个D触发器的级联或者对存储器先写入然后延时读出数据的方式。其实,D 触发器属于存储器的一种,所以,实现一个基本的数字信号处理系统,需要加法器、乘法器和存储器。FPGA 内部包括上述所有器件,因而成为实现DSP的理想选择。

要采用 FPGA实现 DSP算法,必须经过量化。在公式中,系数a_{k}b_{k}通常都是通过理论计算或者 MATLAB工具计算得到的。前者采用无限精度,后者采用双精度浮点数。无论是无限精度还是双精度浮点数,FPGA 芯片都是无法直接处理的,所以必须将系数a_{k}b_{k}进行量化,以有限长的二进制码的形式表示。量化采用的二进制位数越多,精度越高,但耗费的 FPGA资源就越多,设计中根据系统的指标对精度与资源进行折中。此外,由于量化会引入量化误差,在设计中要引起重视。例如,设计一个有极点的滤波器,若其极点太靠近单位圆,量化误差有可能会使该极点跑到单位圆外,造成系统不稳定。具体的量化分析读老可以参阅与数字信号处理相关的书籍,这里不再详述。 

量化之后还需要选取运算结构。不同的算法结构所需的存储器和乘法器资源是不同的,前者影响复杂度,后者影响运算速度。

经过量化和确定好运算结构之后,便可以使用FPGA来设计一个DSP系统。但是DSP系统设计不再是用硬件描述语言直接描述,而是从算法角度着手的系统级综合,再通过高级综合实现RTL级的描述。进行DSP算法综合需要用到除了vivado以外的电子系统及设计软件。

利用 FPGA实现DSP嵌人式系统时,可以利用 Altera 和 Xilinx 公司在MATLAB-Simulink 中预先提供的模块集(Blockset),按照基于模型的设计方法建立DSP系统的算法模型在仿真、优化的基础上由 DSP Builder 和 System Generator 自动转换成硬件实现的网表文件,再进行布局和布线的实现。     

System Generator是 Xilinx公司推出的一个面向 DSP 开发的基于模型的设计工具它是作为 MTALAB中的一个Smulink 工具箱出现的工具,广泛应用于科学计算和工程计算,可以进行复杂的 DSP 系统的建模与仿真。Simulink 是MATLAB的一个组成部分,用于图形化建模仿真。System Generator 作为Simulink 的一个工具箱,使得利用 FPGA 设计嵌入式 DSP 系统时,设计者完全可以通过Simulink 的图形化界面来进行系统建模,只要简单地进行 System Generator 工具箱中的模块调用即可。值得注意的是,System Generator 中的 DSP 基本模块是以算法级的描述出现的,便于设计者从系统级或者算法级进行理解,甚至不需要了解 FPGA本身和硬件描述语言。    

1.2 FPGA实现DSP的特点

FPGA是具有极高并行速度的信号处理引擎,通过并行方式提供高性能的信号处理能力。传统的DSP设备是顺序执行所需要处理的任务,分时共享乘法累加单元,从而限制了数据流量,是的系统时钟频率就算很高也无法提供高速的处理速度。但是FPGA内部有大量的乘法器,大量处理可以并行实现,能够保持高速可靠的数据率。传统的通用DSP器件和FPGA器件的顺序与并行处理比较。 

FPGA的系统时钟频率一般低于通用DSP器件,也能够保证比DSP器件更快的计算速度。就通用DSP器件而言,运算速度随着抽头数(算法复杂度)增加成指数下降。一般情况下FPGA可以与DSP处理器配合使用,一起构成了数字信号处理系统。

(1)利用 FPGA 的并行处理的特性实现预处理器,对系统前端的高速数据流进行预先处理,得到低速的数据流,在将低速数据流由 DSP 处理器完成后续的处理。例如将多路并行数据进行预处理得到单路数据,再交给通用 DSP 做相应的处理。

(2)利用 FPGA 硬件高速处理的能力实现协处理器,将软件无法完成的高速处理交由FPGA处理。所以作为协处理器,FPGA 受到起系统主机作用的 DSP 处理器控制,在不同的工作模式下协助主机完成高速处理的任务。

其实,通用 DSP处理器的功能也可以采用 FPGA 完成,构成可编程片上系统(SOPC)。七系列Zynq芯片就提供了大量的DSP硬核在PL中,在ARM处理器控制下实现信号的高速处理。总之,FPGA能够实现高性能的数字信号处理,主要基于一下三个因素

  • 高度的并行性
  • 重构的灵活性
  • 最佳性价比

 

2. DSP硬核的结构与使用

fpga对于数字信号处理(DSP)应用是有效的,因为它们可以实现定制的、完全并行的算法。DSP应用程序使用很多二进制最好在专用DSP片中实现的乘数器和累加器。所有7系列fpga有许多专用的、全定制的、低功耗的DSP片,组合起来高速度快,体积小,同时保持系统设计的灵活性。DSP片增强了许多应用的速度和效率超出了数字信号处理的范围动态总线移位器,内存地址生成器,宽总线多路复用器,和内存映射的I/O寄存器。七系列FPGA中的DSP硬核DSP48E1参考官方文档。

DSP功能的一些亮点包括:

  • 25 × 18位二补乘法器:
    • 动态旁路
  • 48位累加器:
    • 可作为同步上/下计数器使用
  • 省电预加法器:
    • 优化对称滤波器应用,降低DSP片的要求
  • 单指令多数据(SIMD)算术单元:
    • 双24位或四12位加/减/累加
  • 可选逻辑单元:
    • 可以生成两个操作数的十个不同逻辑函数中的任何一个
  • 模式检测器:
    • 收敛或对称四舍五入
    • 与逻辑单元一起使用时,96位宽的逻辑功能
  • 高级功能:
    • 可选的流水线和专用总线级联

DSP48E1片提供了提高的灵活性和利用率,提高了效率应用程序,降低了整体功耗,并提高了最大频率。高性能允许设计人员在一个程序中实现多个较慢的操作,单DSP48E1片采用时间多路复用方法。DSP48E1片支持许多独立的功能。这些函数包括multiply, multiply累加(MACC), multiply add, three-input add, barrel shift, wide(广义)总线复用,幅度比较器,位逻辑函数,模式检测,以及wide计数器。该架构还支持级联多个DSP48E1片以形成宽数学函数,DSP滤波器和复杂的算术,而不使用通用的FPGA逻辑。 

3. FPGA设计DSP技术

在第二期我们会使用matlab中的Simulink与vivado中的System Generator套件联合开发,下面简要介绍一些FPGA中需要具备的数字信号处理必备知识。

3.1. 浮点数与定点数的表示与转换

3.1.1. 双精度浮点数表示

在设计仿真中,Simulink 是利用双精度数(double)表示数值,它是 64 位 2的补码浮点数,而双精度数对 FPGA 是无效或不实际的。

当利用有限位数来表示二进制数时,进制点的位置确定了所表示数的范围和精度。二者的关系是,二进制点前面的位数多表示的数值的有效范围大,精度就低;相反,二进制点后面的位数多,数值精度提高,数值有效范围减小。

  • 首先介绍一下单双精度浮点数的区别

单精度是这样的格式,一共32位,其中1位符号,8位指数,23位小数。

双精度一共64位,其中1位符号,11位指数,52位小数。 

要先理解3大要点:

  1. 小数的二进制表示法,即浮点数
  2. 浮点数如何在计算机中储存,即符号位(0正、1负),指数位,小数位(通常翻译做尾数)
  3. 取值范围取决于指数位,计算精度取决于小数位(尾数)。小数位越多(比如双精度是52位),则能表示的数越大,那么计算精度则越高。

单精度的小数位在计算机中只有23位(二进制),换算到十进制只能百分百保证6位十进制数字的精确度。不能百分百保证7位的精度运算。超过该精度(二进制23位,十进制6位)的小数运算将会被截取,造成精度损失和计算结果的不准确。同理,双精度,小数位是52位(二进制),换算为十进制则只能百分百能保证15位,16位及其之后的数据同样会被截取。

注意:浮点数中小数点的位置是不固定的,用阶码和尾数来表示。通常尾数为纯小数,阶码为整数,尾数和阶码均带符号数。同时通过移动小数点的位置,可以实现纯整数或者纯小数的表示方法:

# 纯整数表示法

最高位是符号位,小数点默认隐含在数值位末尾的后一位,数值位是整数部分的二进制

# 纯小数表示法

最高位是符号位,小数点默认隐含在符号位和数值位之间,数值位是小数部分的二进制

3.1.2. 双精度浮点数与定点数的转换

由于硬件无法按照双精度的要求进行实现,所以要转换成N位的定点数。在Simulink中Xilinx的模块集有3种数据类型:
(1)不带符号的N位定点数,表示为 UFix_N_m,其中N为二进制位数,m 为二进制点距离最低位的位置,最大精度为2^{m}

(2)带符号的 N位定点数,表示为 Fix_N_m,其中N为二进制位数,m 为二进制点距离最低位的位置,最大精度为2^{m}

(3) 布尔类型数,总是定义为0或1,作为控制口的使能(CE)或复位(reset),所以不可以设为无效

例:将数值-2.261 108表示为Fix_16_13的格式

在基于模型的系统设计流程中,当Xilinx 模块集中的带符号的定点数模块需要与Simulink 的双精度数模块通信时,必须要进行数据类型的变换,这是基于模型的系统设计流程中的重要概念之一。
为了完成这个数据类型变换,要选择 Xilinx模块集中的Gateway In实现双精度数到定点数的转换,或者选择Xilinx 模块集中的 Gateway Out 实现定点数到双精度数的转换 。

Gateway In/Out 两个模块可以通过选择参数来控制如何实现双精度数与定点数之间的相互转换。一般来说,主要由 Gateway In 模块的参数选择来进行控制,除了选择带符号或不带符号定点数的位数和二进制点位置之外,还需要选择以下两个参数:
(1)量化方式:截断(Trancate)或舍人(Round)
(2)溢出方式:饱和(Saturate)或交迭(Wrap)。
当小数部分的位数不足以表示一个数值的小数部分时,将出现量化的情况,截断是放弃最低有效位右边的所有位,当有两个等距离最接近表示的数值,舍入将取最接近表示的数值,或去偏离0最远的数值。

双精度浮点和定点的转换见下图:

 

当一个数值超出了表示范围,将出现溢出,在仿真过程中出现溢出将有溢出标志位作为Simulink的错误产生。同时溢出时有两种数据表示方式:

(1)饱和

        去最大的正值或最大的负值

(2)交迭

         直接放弃超出最大有效位的任何有效位

在满足设计要求的情况下,尽量选择截断的量化方式(不增加硬件资源)。溢出方式选着饱和可以防止输出的震荡,输出数据不再改变,但是会增加硬件资源。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_275821.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在Windows 10中恢复丢失的分区?

一般来说,未分配的空间不能在分区前直接用于存储数据,因此大多数Windows用户会将硬盘划分为不同的分区以存储各种数据。你可以在Windows安装期间或安装完系统后通过硬盘管理、DiskPart命令或第三方工具创建分区。 在分区丢失后,你会…

C的强符号/弱符号

首先上代码和结果&#xff1a; 代码&#xff1a; #include <stdio.h> int k; int k; int main() {printf("addr of k %p\n", &k);printf("value of k %d\n", k);return 0; }结果&#xff1a; addr of k 00408074 value of k 0问题&…

《辉煌优配》消费医疗加速回暖 数字化新竞赛鸣枪

“栽培牙集采将给口腔职业带来深远影响。”瑞尔齿科副总经理胡云帆3月23日承受证券时报记者采访时表明&#xff0c;资料费用下降将惠及公司运营端&#xff0c;同时激活了一大批存量客户。公司相关产品和服务价格已经开端呈现一些变动的迹象。 栽培牙费用包含栽培体费用、牙冠费…

狗都能看懂的VAE笔记

文章目录自编码器普通Auto-Encoder的问题解决的方法如何运作数学细节生成模型Auto-Encoder一直是一个非常有创造性的方向。期中的VAE变分编码器一直是我没搞懂的部分&#xff0c;在AI绘画突然火起来的时候&#xff0c;不得不搞清楚VAE了。看了很多VAE的讲解&#xff0c;没有良好…

The Shebeen——爱尔兰酒吧 NFT 来袭!

从爱尔兰神像到标志性的爱尔兰帽子&#xff0c;The Shebeen——爱尔兰酒吧 NFT 系列是一系列非常吸引的独特数字资产&#xff0c;体现了爱尔兰的精神和风俗。 The Shebeen NFT 系列均来自 The Shebeen——爱尔兰酒吧游戏体验&#xff0c;3 月 17 日至 3 月 29 日可在 The Sandb…

c/c++开发,无可避免的自定义类类型(篇八).为类妥善处理异常

目录 一、异常简述 1.1 异常是什么 1.2 异常处理概念 二、异常处理 2.1 try……catch异常处理语法 2.2 动态异常说明-throw 2.3 标准异常体系 2.4 try ...catch抛出异常对象的处理 2.5 异常捕获处理级别 2.6 抛出对象方式 2.7 try 块以及处理块内严禁跳转语法使用 2.8 异常捕…

【MySQL高级篇】 第8章_索引的创建与设计原则

第8章_索引的创建与设计原则 1. 索引的声明与使用 1.1 索引的分类 MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。 从 功能逻辑 上说&#xff0c;索引主要有 4 种&#xff0c;分别是普通索引、唯一索引、主键索引、全文索引。 按照 物…

Python如何实现读写txt文件?读写txt文件的方法有哪些?

前言 又是一篇纯知识点的文章&#xff0c;现在看文章的人越来越少了&#xff0c;是都去看视频了吗 今天就来聊聊 - Python实现读写txt文件的方法 一、读写模式&#xff1a; w&#xff1a;向文件中写入内容&#xff0c;w会清空原来文本内容a&#xff1a;向文件中追加内容r&am…

sql性能优化:MS-SQL(SQL Server2012)服务器配置选项(sp_configure )对照表

sql性能优化&#xff1a;MS-SQL&#xff08;SQL Server&#xff09;服务器配置选项&#xff08;sp_configure &#xff09;对照表 2019服务器配置选项 (SQL Server) - SQL Server | Microsoft Learn 2012服务器配置选项 | Microsoft Learn 介绍 可以使用 SQL Server Managemen…

什么是蓝牙的核心协议层和产品类型?一文读懂BQB认证中两者的关联

蓝牙核心协议层 什么是蓝牙核心协议层? 所有蓝牙产品必须拥有相应资格才可以进行出售或分发。而蓝牙技术是需通过软件和硬件的 组合实现,分为蓝牙HOST主机(软件)和CONTROLLER控制器(硬件)。 蓝牙核心协议层的规范如何? 目前蓝牙技术分为经典蓝牙(BR/EDR) 和低功耗蓝牙(B…

【vulhub靶场】medium_socnet

文章目录环境搭建信息收集主机发现&#xff1a;端口扫描Web 渗透(CVE-2019-14322)Pallets Werkzeug 0.15.4 路径遍历漏洞代码注入-反弹shell关于Dockerfile判断是否在Docker环境中&#xff1a;Command SHELL 提升至 Meterpreter方法一方法二Docker环境中存在内网环境内网主机探…

二分查找【含左边界查询 + 右边界查询】

789. 数的范围 - AcWing题库 二分查找看起来是很简单的一个算法&#xff0c;但是其中涉及到比较多的细节问题。 一不小心就死循环了…… 使用条件 一般情况下&#xff0c;二分查找通常适用于一个有序的序列中&#xff08;一般为升序&#xff09; 算法解析 确定左右边界 首…

Linux内核文件系统知识大总结

1、文件系统特点文件系统要有严格的组织形式&#xff0c;使得文件能够以块为单位进行存储。文件系统中也要有索引区&#xff0c;用来方便查找一个文件分成的多个块都存放在了什么位置。如果文件系统中有的文件是热点文件&#xff0c;近期经常被读取和写入&#xff0c;文件系统应…

Cursor软件,内含GPT服务,软件免费,可以进行聊天

Cursor软件,内含GPT服务,软件免费,可以进行聊天 Cursor这个软件的安装 安装好后,双点击使用: 最后有软件地址 如果英文不好,怎么办,搭配有道词典: 效率嘎嘎快 用Ctrl+K进行代码指令后面如下自动生成代码 也可以在聊天框里面进行代码的编写和对话

linux 调试系列(二)coredump段错误查找使用详解

《linux 调试系列&#xff08;一&#xff09;coredump环境配置》 《linux 调试系列&#xff08;二&#xff09;coredump段错误查找使用详解》 一、 背景 这一节&#xff0c;通过一个样例&#xff0c;详细介绍怎么使用coredump来定位程序段错误。 构造两个常用错误&#xff0c;…

STM-32:GPIO 输出-点亮LED-流水灯-蜂鸣器

目录一、GPIO1.1GPIO简介1.2GPIO 硬件解析1.2.1保护二极管1.2.2 P-MOS、N-MOS 管1.2.3数据输入输出寄存器1.2.4复用功能输出1.2.5模拟输入输出1.3GPIO 的工作模式1.3.1 输入模式 (模拟/浮空/上拉/下拉)1.3.2 输出模式 (推挽/开漏)1.3.3 复用功能 (推挽/开漏)1.3.4 小结二、GPIO…

线程与子线程

目录 一、简介 线程 主线程与子线程 线程与进程 并发和并行 二、代码编写 1、创建线程之每个线程有独立的线程函数 验证 2、创建线程 每个线程共用的同一线程函数 验证 3、回收线程资源&#xff08;阻塞&#xff09; 验证 4、分离线程&#xff08;不阻塞&a…

DI相关内容

DI相关内容5&#xff0c;DI相关内容5.1 setter注入5.1.1 环境准备5.1.2 注入引用数据类型步骤1:声明属性并提供setter方法步骤2:配置文件中进行注入配置步骤3:运行程序5.1.3 注入简单数据类型步骤1:声明属性并提供setter方法步骤2:配置文件中进行注入配置步骤3:运行程序5.2 构造…

如何用VOSviewer Online想画啥就画啥(配合python+networkX)

VOSviewer一直都是学术界文献可视化的神器&#xff0c;不过貌似很少看有人来DIY&#xff0c;随意画东西。 那笔者花了点时间测试了一下&#xff0c;发现【VOSviewer Online networkX/python】可以极快的画出好看的网络关系图。 网址&#xff1a;https://app.vosviewer.com/ …

Win10系统的截图功能 几种快捷键 以及QQ附带的截图功能

直接按 Prtsc 键 对整个屏幕截图&#xff0c;比如下图 altshiftPrtSc 对某个窗口截图 winshifts 矩形截图&#xff0c;可以对当前屏幕选择一个矩形区域截图&#xff0c;比如下面这样 如果失效,解决方法是在任务管理器里重新启动文件资源管理器的进程 参考&#xff1a;截图快捷键…