具有FFT功能的示波器的制作方法

文档序号:16809490发布日期:2019-02-10 13:27阅读:221来源:国知局
具有FFT功能的示波器的制作方法

本发明涉及示波器技术领域,特别涉及一种具有fft功能的示波器。



背景技术:

现有示波器的fft运算功能是通过软件算法实现的。现有方案最大的两个缺点就是处理速度比较慢、处理点数比较少,每次处理的数据量最多不会超过屏幕一行像素的个数。具体的数据处理流程如图1所示,首先adc采样后的数据会经过抽取、峰值检测等处理方式将采集到的数据压缩成屏幕水平像素点的数据量,然后这些数据送入内存中经过软件算法得到结果,最后经过显示处理单元将频谱图显示到屏幕上。

由于fft运算本身的运算量就比较大,点数越多所需要的处理时间也会相应的增多,采用软件运算的方式实现大数据量的fft运算不仅会严重增加cpu的处理负荷,同时还会因为处理速率变得更慢而不能满足设计的要求,因此现阶段的处理方式很难做到增加处理量的同时又能增大运算速率,这是现有方案的瓶颈和缺点之一。另外前面提到现有方案的处理仅对显示在屏幕上的点进行相应的处理,这种处理方式会造成频谱信息的丢失,频谱图显示效果一般,甚至不能满足客户需求,这是现有方案的缺点之二。总之采用软件处理的方案造成fft运算处理能力不强,效果欠佳。

当代数字示波器已向功能多样化、一体化方向发展,并且功能越来越强大。较少点数的频域处理效果已经逐渐不能满足客户对信号频谱的分析需求,而专用的频谱分析仪又相对昂贵,在此种情况下现阶段非常有必要提升示波器产品的fft运算能力。

因此,现有示波器fft运算处理点数少、频率分辨率低、处理速度慢,cpu负担大。



技术实现要素:

本发明实施例提供了一种具有fft功能的示波器,用以增加示波器fft运算处理点数,提高示波器fft运算处理效率和频谱图像的显示质量,减轻cpu的处理负担,该示波器包括:可编程逻辑器件和可编程逻辑器件外部的存储单元;可编程逻辑器件,包括1k点fft运算单元;

可编程逻辑器件用于接收示波器cpu的fft运算命令,根据fft运算命令,完成超过1k点的fft运算;

上述超过1k点的fft运算包括:

倒序读取待运算数据,通过1k点fft运算单元,对待运算数据进行n次1k点fft运算,得到fft运算的中间结果;

将中间结果顺序存储至可编程逻辑器件外部的存储单元;

按照间隔1k点跳读的方式,读取中间结果,再次利用1k点fft运算单元,对中间结果进行1k次n点fft运算,得到fft运算的最终结果;n为大于1的正整数。

在一个实施例中,可编程逻辑器件还用于根据fft运算命令,完成少于1k点的fft运算;

少于1k点的fft运算包括:倒序读取待运算数据,通过1k点fft运算单元对待运算数据进行计算,得到少于1k点的fft运算的最终结果。

在一个实施例中,可编程逻辑器件外部的存储单元为示波器共享内存。

在一个实施例中,可编程逻辑器件还包括:旋转因子计算单元,与1k点fft运算单元连接,用于根据fft待运算数据点数的数量,计算fft运算所需要的旋转因子,将旋转因子作为运算因子提供给1k点fft运算单元。

在一个实施例中,旋转因子计算单元具体用于当待运算数据点数大于1k点时,根据待运算数据输入的顺序,确定0-9级的与待运算数据对应的旋转因子,根据间隔1024个点数的顺序,确定10级以上的与待运算数据对应的旋转因子。

在一个实施例中,1k点fft运算单元包括:1k/2个蝶型运算单元,1k/2个蝶型运算单元和1k/2个旋转因子缓存单元;每一个蝶型运算单元对应一个旋转因子缓存单元;

旋转因子缓存单元,用于接收旋转因子计算单元输出的旋转因子,旋转因子作为运算因子输出至蝶型运算单元;

蝶型运算单元,用于根据旋转因子,对待运算数据进行计算。

在一个实施例中,每个1k点fft运算单元还包括:1k/2个延时移位处理单元;每个蝶型运算单元对应一个延时移位处理单元;每个延时移位处理单元包括:

输入延时移位处理单元,输入延时移位处理单元与蝶型运算单元的两个输入端连接,用于将串行输入数据转换为两个待运算数据并行输出至蝶型运算单元;

输出延时移位处理单元,输出延时移位处理单元与蝶型运算单元的两个输出端连接,用于将蝶型运算单元处理后并行输出的两个运算结果转换为串行输出的运算数据,作为下一级蝶型运算单元的输入数据或fft运算的最终结果。

在一个实施例中,上述具有fft功能的示波器还包括:寄存器配置单元,用于接收示波器cpu的fft运算命令,将fft运算命令解析发送;fft运算命令包括:fft运算点数控制命令和内存可操作地址配置命令。

在一个实施例中,上述具有fft功能的示波器还包括:数据读写地址控制单元,用于根据示波器cpu的fft运算命令,控制原始待运算数据的读取顺序,中间结果的读写顺序,以及最终结果的回写顺序。

在一个实施例中,上述具有fft功能的示波器还包括:读写接口控制单元,用于根据示波器cpu的fft运算命令,控制可编程逻辑器件与可编程逻辑器件外部的存储单元之间的通信。

首先,与现有技术中通过软件算法实现fft运算,需要cpu大量运算,运算速度慢的示波器相比较,本发明实施例提供的具有fft功能的示波器,通过示波器cpu发送fft运算命令给可编程逻辑器件,可编程逻辑器件根据读取到的fft运算命令,进行fft运算,采用可编程器件实现fft的运算,并且通过可编程逻辑器件外部的存储单元缓存fft运算的中间数据,既提高了fft运算速度,又可以将大数据量的运算工作从cpu中独立出来,减轻了cpu的处理负担;

其次,与现有技术中每次处理的点数最多不会超过屏幕一行像素的个数,会造成频谱信息的丢失,频谱图显示效果差的技术方案相比较,本发明实施例提供的具有fft功能的示波器,通过倒序读取待运算数据,通过1k点fft运算单元,对待运算数据进行n次1k点fft运算,得到fft运算的中间结果;将中间结果顺序存储至可编程逻辑器件外部的存储单元;按照间隔1k点跳读的方式,读取中间结果,再次利用1k点fft运算单元,对中间结果进行1k次n点fft运算,得到fft运算的最终结果;n为大于1的正整数,实现了用1k点fft运算单元扩展实现1k点以上的fft运算:将1k点以上的fft运算拆分成n次1k点fft运算和1k次n点fft运算的组合,将数据处理量提升到了最大1m点,增加了fft运算点数,使得信号频域中的更多细节可以显示出来,大大提高了频率分辨率。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,并不构成对本发明的限定。在附图中:

图1是现有技术中示波器fft运算处理示意图;

图2是本发明实施例中具有fft功能的示波器的结构示意图;

图3是本发明实施例中以32点的fft运算如何采用8点fft运算单元完成运算过程的示意图;

图4是本发明实施例中1k点以上的fft运算示意图;

图5是本发明又一实施例中具有fft功能的示波器的结构示意图;

图6是本发明实施例中寄存器配置单元的结构示意图;

图7是本发明实施例中可编程逻辑器件内每级的连接关系示意图;

图8是本发明实施例中1k点内部基本运算单元的结构示意图;

图9是本发明实施例中延时移位处理示意图;

图10是本发明实施例中接口控制单元结构示意图;

图11是本发明实施例中fft运算的流程示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施方式和附图,对本发明做进一步详细说明。在此,本发明的示意性实施方式及其说明用于解释本发明,但并不作为对本发明的限定。

本发明实施例旨在采用可编程逻辑器件实现一种fft处理算法,解决现有方案示波器中fft运算处理点数过少、处理速度较慢的问题。

为了解决数据处理过程中细节丢失的问题,本方案将数据处理量提升到了最大1m点,增加fft运算点数,提高了频率分辨率,使得信号频域中的更多细节可以显示出来。采用可编程器件实现fft的运算,既提高了fft的运算处理速率,又可以将大数据量的运算工作从cpu中独立出来,减轻了cpu的处理负担。下面对该具有fft功能的示波器进行详细介绍。

图2是本发明实施例中具有fft功能的示波器的结构示意图,如图2所示,该示波器包括:可编程逻辑器件和可编程逻辑器件外部的存储单元;可编程逻辑器件包括1k点fft运算单元;

可编程逻辑器件用于接收示波器cpu的fft运算命令,根据fft运算命令,完成超过1k点的fft运算;

上述超过1k点的fft运算可以包括:

倒序读取待运算数据,通过1k点fft运算单元,对待运算数据进行n次1k点fft运算,得到fft运算的中间结果;

将中间结果顺序存储至可编程逻辑器件外部的存储单元;

按照间隔1k点跳读的方式,读取中间结果,再次利用1k点fft运算单元,对中间结果进行1k次n点fft运算,得到fft运算的最终结果;n为大于1的正整数。

具体实施时,举个例子说明本发明实施例中“倒序”的含义及规律:以二进制形式表示“1,2,3,4,5…”等数据后,将二进制数高低位倒置表示的数据就是原数据的倒序。例如:“0,1,2,3,4,5,6,7”,二进制表示形式为:000、001、010、011、100、101、110、111,倒置后的形式为:000、100、010、110、001、101、011、111,所以最终的倒序结果为0、4、2、6、1、5、3、7。

具体实施时,凡是计算大于1k点的fft处理都会有中间结果,并且这些结果都得缓存到fpga(可编程逻辑器件)外的共享内存中,因为n次1k点运算并不能得到最终的结果,所以这n次1k点的运算结果需要缓存,缓存的目的是利用中间结果做进一步的运算,最终得到最终结果。处理过程是串行进行的,必须需要将中间结果全部计算完成并缓存起来,第二轮的计算才能开始(第二轮的计算指的是1k次n点fft计算过程)。例如计算一个2k点的fft,计算流程可分解为2次1k点fft和1k次2点fft运算,从流程上讲2次1k点fft的运算属于第一轮计算,1k次2点fft运算属于第2轮计算,而中间结果就是由第一轮的2次1k点fft运算产生的,这中间结果需要缓存在共享内存中,在进行第2轮计算时这中间结果又作为数据源被读取,最终得到最终的结果,因第一轮计算得到的数据并非最终结果,但又并非无用,所有称之为中间结果。

具体实施时,本发明实施例可编程器件采用串行分时复用的方式利用一个1k点fft运算单元,实现了最大1m点的fft运算过程,方案的总体思想是采用1k点fft运算单元扩展实现1k点以上点数的fft运算,另外该方案的流水线处理方式大大提高了运算速度。

为了实现最大1m点的fft运算,本方案中采用了可编程逻辑器件作为载体。需要采用较少点数的fft运算单元扩展实现更多点数的fft运算,该方案中以1k点的运算单元为基本单元,通过扩展运算实现了更多点数的fft运算功能。

为了更好的理解该方案中的以较少点数的fft运算单元扩展实现更多点数fft运算的思想,现以32点的fft运算如何采用8点fft运算单元完成运算的过程为例来说明。

一个32点fft运算过程如图3所示,图3中交叉点为空心的‘x’型结构表示一个蝶型运算单元,每个实心点代表一个数据,每一列蝶型运算单元称为一级,32点fft运算共有5级。将32点分为4组,每组为一个8点fft运算单元,4组8点fft运算单元计算完成后,得到的结果为第三级蝶型运算产生的结果为中间结果,并非最终结果。现将得到的中间结果从上到下依次编号为1~32,经过分析可以发现第1、9、17、25组合仍然可以组合成一个4点fft运算过程,同样2、10、18、26也可以组合成一个4点fft运算过程,这样的组合共有8组,这8组4点fft运算完成之后就可以得到最终的计算结果。所以32点fft运算可以由4组8点fft运算和8组4点fft运算组合计算完成。

具体实施时,本发明实施例中fft运算需要的级数=log2n(n为待处理点数,即原始运算数据点数),其中点数一般取2n,不够的向前补0。超过1024点的运算级数计算方式是相同的。方案中固定使用一个1k点的fft运算单元,它固定有10级运算。对于本方案中计算大于1k点的运算过程拆分成若干个1k点及以内的fft运算。例如:一个4k点的fft运算正常的fft运算流程有12级运算,但在本方案中将之拆分成了4次1k点运算和1k次4点fft运算。其中4次1k点运算属于第1轮计算流程,1k次4点fft运算属于第2轮计算流程。第1轮需要(n/1k)次1k点ff运算,第2轮需要1k次(n/1k)点fft运算。

类似地,1m点的fft运算流程与上述运算的方法相同,但采用的是1k点的fft运算扩展运算实现的。对于1k点以上的fft运算,可以将其拆分成n次1k点fft运算和1k次不大于1k点的fft运算的组合,组合方式如下:

2048点:2个1024点fft运算+1024个2点fft运算;

4096点:4个1024点fft运算+1024个4点fft运算;

8192点:8个1024点fft运算+1024个8点fft运算;

16384点:16个1024点fft运算+1024个16点fft运算;

32768点:32个1024点fft运算+1024个32点fft运算;

65536点:64个1024点fft运算+1024个64点fft运算;

…;

1m点:1024个1k点fft运算+1024个1k点fft运算。

如图4所示,1k点以上的fft运算需要进行两次运算得到最终的结果,第一次是原始数据(待运算数据)按照倒序的方式依次传送到1k点fft运算单元,与此同时,将计算的结果顺序回写到外部存储区域(编程逻辑器件外部的存储单元)中,完成第一阶段的运算任务后再启动第二次运算。第一次运算得到的结果按照间隔1024点跳读的方式再次传送到1k点fft运算单元,计算完成后就得到了最终的计算结果。

具体实施时,对于不足1k点的fft运算同样采用1k点fft运算模块完成。

在一个实施例中,可编程逻辑器件还用于根据fft运算命令,完成少于1k点的fft运算;

少于1k点的fft运算包括:倒序读取待运算数据,通过1k点fft运算单元对待运算数据进行计算,得到少于1k点的fft运算的最终结果。

在一个实施例中,可编程逻辑器件外部的存储单元为示波器共享内存。

具体实施时,受限于可编程器件内部的逻辑资源和存储空间,直接将1m点fft运算单元在可编程器件内部实现是很困难的,因为实现1m点运算单元需要使用的逻辑资源太多,并且计算过程中需要缓存的中间变量同样太多,一般的可编程器件内部没有足够的ram空间。基于以上两点分析要实现1m点的fft运算必须需要一个外部存储器作为一些中间变量缓存区域,本方案中利用了操作系统的部分内存空间作为变量缓存区,即可编程逻辑器件外部的存储单元可以为示波器共享内存。

本发明实施例提供的技术方案中提供的示波器涉及到的部分包括外部存储空间、可编程逻辑器件和cpu。外部存储空间作为原始数据、窗数据、中间数据结果以及最终结果的存放区域,可编程逻辑器件是本发明中的关键部分,cpu作为主控部分起到配置fft运算单元运算属性、启动运算等控制命令等作用。具体框图如图5所示。

可编程逻辑部分是本方案中的重点部分,它完成了整个fft运算的流程,具体包含寄存器配置单元、旋转因子计算单元、1k点fft运算复用单元(1k点fft运算单元)、数据读写地址控制单元,读写接口控制单元五部分,下面将详细描述这几部分内容、作用和实现过程。

(一),结合图6介绍寄存器配置单元。

在一个实施例中,上述具有fft功能的示波器还包括:寄存器配置单元,用于接收示波器cpu的fft运算命令,将fft运算命令解析发送;fft运算命令包括:fft运算点数控制命令和内存可操作地址配置命令。

具体实施时,寄存器配置单元的作用是接收cpu的控制字,然后将配置参数传送到相应的其它单元模块(例如上述的旋转因子计算单元、1k点fft运算单元、数据读写地址控制单元,读写接口控制单元)中。该单元主要包括与cpu通信的接口控制单元和配置字解析单元,如图6所示。

cpu发送的配置字或命令包括以下内容:

①fft运算启动信号;

②fft运算点数控制;

③fft运算窗数据读取控制;

④内存可操作地址配置信号。

cpu与寄存器配置单元的通信采用高速总线axi3实现,该总线具有高速、低延迟的特点。

(二),介绍旋转因子计算单元。

在一个实施例中,可编程逻辑器件还包括:旋转因子计算单元,与1k点fft运算单元连接,用于根据fft待运算数据点数的数量,计算fft运算所需要的旋转因子,将旋转因子作为运算因子提供给1k点fft运算单元。

在一个实施例中,旋转因子计算单元具体用于当待运算数据点数大于1k点时,根据待运算数据输入的顺序,确定0-9级的与待运算数据对应的旋转因子,根据间隔1024个点数的顺序,确定10级以上的与待运算数据对应的旋转因子。

具体实施时,旋转因子属于蝶型运算单元中的一个运算因子,根据fft的算法结构每一级的蝶型运算都需要使用正确的旋转因子值,随着运算点数的增多需要的旋转因子数量也会增加。1k点数的fft运算需要210-1个旋转因子,1m点数的fft运算就需要220-1个旋转因子。普通的较少点数的fft运算实现方案中一般都会将预先计算好的旋转因子(如下表1)存放到可编程器件的ram空间中,然后通过寻址的方式找到需要的旋转因子,但是1m点的fft运算需要的旋转因子如果全部预存到可编程器件内部已经很难做到,因为有些可编程器件根本容不下1m左右的数据,即使能容下也会消耗掉大部分存储资源,造成资源紧张,而将旋转因子存放在外部的内存中又会占用读取带宽。

为解决以上问题方案中采用cordic算法通过在可编程逻辑器件中实时运算的方式得出需要的旋转因子。旋转因子由实部和虚部组成,实部数据和虚部数据均采用16位定点数据表示,过宽的数据会占用过多的逻辑资源,在误差可以接受的情况下该方案中采用了16位宽的数据表示旋转因子。

优选地,为了统一处理流程,提高处理效率,对于较少点数的fft运算和超过1k点的fft运算,本发明实施例提供的技术方案均通过在可编程逻辑器件中实时运算的方式得出需要的旋转因子。

运算过程中旋转因子需要的数量随着级数的增加成指数增长,每一级需要的旋转因子数量n=2m,其中m表示级数,范围从0开始,各级需要的旋转因子值如下列表1所示。

表1

具体实施时,上表1不是用来查找的,这些旋转因子都时实时计算得到的,表1中只是将计算结果展现了出来。没有行列的概念,整个计算过程从开始到结束都是按照表格中从上到下从左到右的顺序计算的。

旋转因子的表达式为式中,代表旋转因子,n代表原始数据(待运算数据)的第n个点,n代表总点数,j代表一个虚数单位,pi代表圆周率,k代表经变换(运算)后的结果的第k个点。

旋转因子的计算要求实时性,平均每输入一个数据就需要完成一个旋转因子的计算,为了便于计算,本方案中将旋转因子的计算顺序与当前输入的数据量n联系起来,只要按照规律进行旋转因子的计算即可。

在不大于1k点的fft运算过程中,旋转因子的计算顺序与上表中一致;当计算点数大于1k点时前面0-9级的旋转因子计算顺序与上表中仍然一致,从第10级以后计算顺序会发送一定的变化,计算顺序需要在上表的基础上间隔1024个数据取数,这是由方案本身蝶型运算的方式决定的。以计算4096点的fft为例第10级以后计算旋转因子需要得到的结果顺序应为如下表2:

表2

(三),介绍1k点fft运算单元。

1k点fft运算单元是该方案中的一个核心处理单元,运算点数不大于1024点时,经过该处理单元处理后可直接得到结果,当运算点数大于1024点时通过该模块进行前后两次运算后就可以得到结果,因此该部分是一个复用单元。

该单元的实现部分可以分为10级相对独立的部分,设编号为0-9,级与级之间的关系如图7所示,前一级的计算结果为下一级的输入,同时每一级的输出都应当能够作为本单元的最终输出结果,这样做也是为了模块复用的需要,比如对8点做fft运算时,其结果就是第二级运算单元的输出结果,又比如16点的fft运算结果就是第三级运算单元输出结果。每一级在运算过程中都需要缓存一些中间数据,缓存数据相对较少可以直接利用可编程器件内部的ram空间。

在一个实施例中,可编程逻辑器件包括一个由多级运算单元组成的一个1k点fft运算单元,该1k点fft运算单元包括:1k/2个蝶型运算单元和1k/2个旋转因子缓存单元(由于蝶型运算单元过多,在此无法用附图表示,具体结构可以参照附图3);如图8所示,每一个蝶型运算单元对应一个旋转因子缓存单元;

旋转因子缓存单元,用于接收可编程逻辑器件内部存储单元或是旋转因子计算单元输出的旋转因子,旋转因子作为运算因子输出至蝶型运算单元;

蝶型运算单元,用于根据旋转因子,对待运算数据进行计算。

具体实施时,每计算一个数据对应一个旋转因子。

在一个实施例中,如图8所示,每个1k点fft运算单元还包括:1k/2个延时移位处理单元;每个蝶型运算单元对应一个延时移位处理单元;所述每个延时移位处理单元包括:

输入延时移位处理单元,所述输入延时移位处理单元与蝶型运算单元的两个输入端连接,用于将串行输入数据转换为两个待运算数据并行输出至所述蝶型运算单元;

输出延时移位处理单元,所述输出延时移位处理单元与蝶型运算单元的两个输出端连接,用于将蝶型运算单元处理后并行输出的两个运算结果转换为串行输出的运算数据,作为下一级蝶型运算单元的输入数据或fft运算的最终结果。

如图8所示,蝶型运算单元、旋转因子缓存单元,输入延时移位处理单元和输出延时移位处理单元构成了一个基本运算单元。下面对该基本的运算单元进行详细介绍。

首先,介绍蝶型运算单元:

蝶型运算单元是一块复用率很高的模块,10级运算单元都会包含相同的蝶型运算单元,具体表达式为:

其中,x(k)代表第k个数据的计算函数,x(k+n/2)代表第k+n/2个数据的计算函数,n代表总点数,x1代表一个原始数据点,x2代表另一个原始数据点,k代表结果序号,代表旋转因子。

本发明实施例中提到的原始数据指的是待运算数据。

如图8所示,蝶型运算单元的接口包括2个数据的输入接口、1个旋转因子的输入接口和2个结果的输出接口,根据表达式可以看出实现过程采用乘法器、加法器、减法器实现。

其次,介绍旋转因子缓存单元:旋转因子的缓存数量会随着级数的增加而增加。第0级运算需要的旋转因子数量为1,第1级需要的旋转因子的数量为2,第2级需要的旋转因子的数量为4,第3级需要的旋转因子的数量为8,依次类推第n级需要的旋转因子的数量为2n。该部分缓存的数据是旋转因子计算单元的输出结果。

最后,介绍延时移位处理单元:

输入接口的延时移位处理单元是为了将串行输入数据转换为双数据并行输出的结构然后再将数据送入蝶型运算单元。输出接口的延时移位处理单元是为了将蝶型运算单元处理后并行输出的两个结果转换为串行输出的方式将数据顺序送出。缓存结构需要遵循先进先出的原则。

每一级的缓存深度是不同的,第0级缓存1个数据,第1级缓存2个数据,第2级缓存4个数据,依次类推第i级需要的缓存深度为2i

以第2级缓存的过程为例,如图9所示,第一个蝶型运算单元需要第1个数据和第5个数据为一组做为输入组合,第二个蝶型运算单元需要第2个数据和第6个数据为一组做为输入组合,依次类推,因此需要先缓存前4个数据才能实现前后数据的组合。输出接口中每个蝶型运算单元会并行输出两个复数结果。为了将结果串行输出需要缓存标号为2、4、6、8的结果,当标号为1、3、5、7的结果顺序输出之后再顺序输出标号为2、4、6、8的结果。

(四),介绍读写地址控制单元。

在一个实施例中,上述具有fft功能的示波器还包括:数据读写地址控制单元,用于根据示波器cpu的fft运算命令,控制原始待运算数据的读取顺序,以及中间结果的读写顺序,以及最终结果的回写顺序。

读写地址控制单元用来控制原始运算数据的读取顺序,以及中间结果的读写顺序以及最终结果的回写顺序,下面将详细介绍读写地址的控制规律。

首先,介绍原始数据读取控制:

运算单元需要原始数据以倒序的方式输入,原始数据在内存中是以顺序的方式存储的,因此倒序输入的过程是通过跳读地址实现的。

以8点为例,0-7数据经过倒序之后变为0,4,2,6,1,5,3,7。

为了寻址最大1m空间的数据,逻辑器件中采用20位宽的二进制数据来表示地址,如addr[19:0],需要倒序读取的地址只需要将地址的最低位到最高位按顺序颠倒过来就可以即addr[0:19]。

其次,介绍中间结果缓存结果读写控制:

当运算点数大于1k点时需要将一定数量的中间结果缓存到外部的内存当中。将中间结果缓存到内存中时只需在基地址的基础上顺序存储即可。

当读取中间结果进行二次运算时,读取方式需要采取跳读的方式进行,具体为每间隔1024个点读取一个数据,如果读取地址溢出则回到起始读取第二个数据,然后在按照间隔1024点的读取方式进行,直到将所有的数据取完为止。详细的读取顺序如下所示:

0,1024,2048,3072…

1,1025,2049,3073…

2,1026,2050,3074…

3,1027,2051,3075…

1023,2047,3071,4095…

最后,介绍最终结果回写地址控制:

当计算点数不大于1k时,只需进行一次计算即可得到最终结果,结果回写过程按顺序回写到外部内存中即可。当计算点数大于1k点数时,需要进行前后两次运算,为了得到顺序存储的结果,回写过程同样需要间隔地址回写,但回写的规律与中间结果读取的地址规律相同也需要间隔1024个地址空间进行回写。

(五),介绍读写接口控制单元。

在一个实施例中,上述具有fft功能的示波器还包括:读写接口控制单元,用于根据示波器cpu的fft运算命令,控制可编程逻辑器件与可编程逻辑器件外部的存储单元之间的通信。

具体实施时,接口控制单元完成可编程逻辑单元与内存间的通信功能,如图10所示,接口采用两个axi总线接口,目的是为了提高数据传输带宽,其中s_gp0接口负责读写数据的实部,s_gp1接口负责读写数据的虚部。传输过程中采用fifo(firstinfirstout,先进先出缓冲单元)收发数据实现了数据的实部和虚部在传输过程中的同步。

图11是本发明实施例中fft运算的流程示意图,如图11所示,对该方案实现了点数为24~20的fft运算,根据计算量的不同分为两类计算:第一类为1k及以下点数的fft运算,第二类为1k点以上的fft运算。在图11中done表示fft运算单元处理完成,只有运算完成之后,才能利用结果做进一步的处理。

第一类运算过程:

原始数据倒序输入运算单元中,经过一次运算后直接得到正序的结果。

第二类运算过程:

第一阶段:原始数据倒序输入,运算结果缓存到外部存储器中,缓存完成之后启动第二阶段的运算过程。

第二阶段:根据特定的规律依次将中间结果送入运算单元,输出结果原位存储到中间结果所在的存储空间,此阶段完成后得到的数据即为最终结果。

每次fft的运算都需要由软件启动,过程可分为配置、启动、等待、模值运算(软件完成)四步骤,详细流程图11所示:

(1)将要进行fft变换的数据存放于内存中的指定位置。

(2)cpu发送启动命令、数据量配置字、读写区域起始地址后处于等待状态。

(3)fpga(可编程逻辑器件)接收到运算指令后,启动运算过程并将变换后的数据存储于原始位置或其它地址空间,当运算结束后给出done信号,通知cpu变换结束。

(4)cpu接收到done(完成)信号取走有效运算数据,然后进行后续的显示处理操作。

本发明实施例可以达到如下有益技术效果:

首先,与现有技术中通过软件算法实现fft运算,需要cpu大量运算,运算速度慢的示波器相比较,本发明实施例提供的具有fft功能的示波器,通过示波器cpu发送fft运算命令给可编程逻辑器件,可编程逻辑器件根据接收到的fft运算命令,进行fft运算,采用可编程器件实现fft的运算,并且通过可编程逻辑器件外部的存储单元缓存fft运算的中间数据,既提高了fft运算速度,又可以将大数据量的运算工作从cpu中独立出来,减轻了cpu的处理负担;

其次,与现有技术中每次处理的点数最多不会超过屏幕一行像素的个数,会造成频谱信息的丢失,频谱图显示效果差的技术方案相比较,本发明实施例提供的具有fft功能的示波器,通过倒序读取待运算数据,采用串行分时复用的方式利用1k点fft运算单元,对待运算数据进行第一次计算,完成n次1k点fft运算,得到fft运算的中间结果;将中间结果顺序存储至可编程逻辑器件外部的存储单元;按照间隔1k点跳读的方式,读取中间结果,再次利用1k点fft运算单元,对中间结果进行计算,完成1k次n点fft运算,得到fft运算的最终结果;n为大于1的正整数,实现了用1k点fft运算单元扩展实现1k点以上的fft运算:采用串行分时复用的方式利用一个1k点fft运算单元,将1k点以上的fft运算拆分成n次1k点fft运算和1k次n点fft运算的组合,将数据处理量提升到了最大1m点,增加了fft运算点数,使得信号频域中的更多细节可以显示出来,显著提高了频率分辨率。

显然,本领域的技术人员应该明白,上述的本发明实施例的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明实施例不限制于任何特定的硬件和软件结合。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1