基于FPGA的数字相位展开技术研究

2017-11-03 00:51瑶,钱辉,龚敏,高
电子器件 2017年5期
关键词:链表入队存储器

史 瑶,钱 辉,龚 敏,高 博

(1.四川大学物理科学与技术学院,成都 610064;2.微电子技术四川省重点实验室,成都 610064)

基于FPGA的数字相位展开技术研究

史 瑶,钱 辉,龚 敏,高 博*

(1.四川大学物理科学与技术学院,成都 610064;2.微电子技术四川省重点实验室,成都 610064)

针对相位展开软件算法运算复杂的缺点,通过分析相位展开原理,提出基于FPGA的相位展开技术的硬件实现。采用加/减模块、乘法器以及除法器构成截断相位处理模块,将软件算法查找链表的思路转换成RAM存储器读写操作,利用状态机完成对存储器和截断相位处理模块的控制。采用ALTERA 系列EP4CE115F29C7芯片,针对256×256和512×512的图像实现设计,最高工作频率分别达到80.22 MHz,80.45 MHz;资源消耗分别为792个和1 436个LE。采用SignalTap Ⅱ Logic Analyzer工具实时验证了相位展开设计模块的正确性。

FPGA;相位展开;可靠度;三维成像

相位展开技术是目前三维成像等系统中相位测量技术最关键的模块之一。主要有可靠度导向相位展开算法[1]、最小断点法[2]、S变换轮廓术[3]小波变换法[4-5],广度优先搜索[6]等相位展开技术。采用可靠度导向展开算法,它可以使相位展开始终沿可靠度最高的方向展开,从而在某种程度上把误差降到最小。可靠度导向展开算法避免了洪水算法中的排序操作,提高了相位展开的速度[1]。相位展开技术的软件实现采用指令方式,执行算法按指令流水线处理,这样减慢处理速度,不利于实时显示[7-9]。FPGA采用数据并行处理方法,因而可处理的数据量比CPU方式多得多[10]。目前研究主要针对不同的相位展开算法提出的硬件设计,都是调用大量的乘法器和加法器模块完成硬件设计,并采用流水线方式得到较高的吞吐率[11-13]。

1 可靠度导向相位展开的快速算法

在基于傅里叶变换轮廓术的三维成像系统中,逆傅里叶变换处理之后,取逆傅里叶变换输出数据的幅值为可靠度。由于相位测量中采用反三角函数,原来连续的相位被截断成非连续相位取值(-π,π]中[1];然而对于可处理的信号而言,截断相位必须被展开成连续相位,要得到连续的相位需要进行相位展开。二维相位展开的理论依据是:在满足采样定理的条件下,曲面上相邻两点间的连续相位差应该在(-π,π)区间上。

(1)

式中:Φ(x,y)表示展开后的相位;φ(x,y)表示截断相位;φ0表示与(x,y)相应的已展开相位,Round[x]表示最接近x的整数。

相位展开过程始终沿可靠度最高的方向,将可靠度分成1到S共S级,这样就可以构成具有S级的链表,每一级代表一个可靠度,在该等级下存放需要展开的点。基于可靠度导相位展开的快速算法中通过查表将相位待展开点放到一个虚拟队列中,再进行相位展开。在链表中设置一个变量MAX记录等级表中代表最高可靠度的链表位置。假设图像中待展开点分布如图1所示。

图1 待展开点分布图

假设X为相位展开起始点,针对下面特征的一组数据进行分析。这组数据中可靠度分布MX>MA>MB>MC=MF>MD>ME>MG;首先将X移入队列,同时MAX的值为X的可靠度K。此时链表如图2(a)所示,虚拟队列里面只有一个点X。可以看到链表中只有1个待展开点X;接着将X点相位展开,并将X点移出队列,此时队列里面没有需要展开的点。将X点移出队列后,判断X点周围4个点是否移入队列,将未入队的点移入队列。此时链表如图2(b)所示,队列中有A、B、C、D4个点。此时MAX的值为A点的调制度J,将A点展开并移出队列,判断A点周围4个点是否移入队列,将未入队的点移入队列;此时链表如图2(c)所示。此时MAX将指向B点的链头,将B点相位进行展开并将其移除队列,判断B点周围4个点是否移入队列,将未入队的点移入队列。图像中的其他点以此类推,直到所有点相位都展开,得到图像连续的相位。

针对这样的链表查找过程,以及待展开点入队列过程,设置一个单端口RAM存储器代表链表,周围4点入队列过程中待展开点的可靠度作为其地址,完成其入链表过程。对于每个待展开点展开之后,都需要将周围4点未移入队列中的点移入队列,针对这样的算法思路引入状态机,前4个状态分别对应每个点移入队列过程,同时再需要两个状态分别找出需要展开的点,以及将该点展开并移出队列;这样实现软件算法与硬件状态机的对应。

图2 待展开点入队列链表图

2 可靠度导向相位展开的硬件设计

2.1 硬件框图

针对设计思路以及处理N×N的图像,提出硬件设计框图如图3所示。

整个模块采用50 MHz的时钟作为输入时钟,Rst_n作为系统复位信号,start信号作为相位展开过程启始信号。硬件实现需要的存储器有Stackchain_ram链表存储器、stackni栈存储器、Mask_ram掩膜版存储器、phase相位存储、stackxy_index待展开点坐标信息存储器、Mod_ram可靠度存储器、Stackpx_py已展开点坐标存储器;逆傅里叶变换得到的截断相位和可靠度需要在相位展开之前分别存储到phase相位存储器和Mod_ram可靠度存储器,以及通过大津阈值法得到的掩模版矩阵存储在Mask_mod掩模版矩阵中。采用分段式状态机完成各个存储器的读写控制和数据处理模块Cfuwp_core的控制。该设计针对一帧N×N像素的图像截断相位的处理,当N值较小时,使用FPGA内部存储资源可以满足存储要求;但是N取值较大时,FPGA内部存储资源不够,需要将一部分存储矩阵采用外部存储器SRAM或者SDRAM实现,正如虚线方框所示。

对于链表的设计,采用FPGA内部单端口RAM实现S×2×lbN的链表存储器,当寻找最大可靠度点时,将MAX作为存储器的地址完成寻找最大可靠度点过程。每当有一个待展开的点进入队列时,入队计数信号head加1,同时将待展开点的可靠度作为链表存储器的地址,把待展开点对应的入队计数值head写入对应的地址,这样建立了待展开点与计数信号head的对应关系,实现待展开点入队列的设计。

图3 FPGA实现设计框图

2.1.1 数据处理模块

数据处理模块是将截断相位恢复成连续相位,该模块完成式(1)的硬件实现。相位数据处理采用定点方式,截断相位采用{1位符号位+2位整数位+7位小数位}10 bit数据格式,展开相位采用{1位符号位+8位整数位+7位小数位}16 bit数据格式。设计中利用2个9位乘法器生成一个无符号16位乘法器,利用LE逻辑单元生成16位除法器。数据处理模块结构图4所示。

设计中需要对有符号的两个数进行减法运算,引入一个比较模块,该模块作用是根据两个输入数的符号和绝对值产生加/减模块的数据输入信号和加减控制信号以及减法结果的正负号。输出4个端口分别是:绝对值较大值端口,绝对值较小值端口,加/减模块的控制端口ADD_AUB,减法符号端口sign;ADD_SUB信号判断加/减法模块是其绝对值进行加法还是减法,sign信号判断加/减模块的结果是取正号还是取负号。同时为了减少路径延时满足时序要求,在加/减法模块之后可以增加寄存器以提高工作频率。

图4 数据处理模块结构图

图5 状态转换图

2.1.2 分段式状态机

基于设计思路,每当一个点被展开并移除队列之后都需要将周围上下左右4点中没有入队且需要展开的点移入队列,同时需要将读取出来的截断相位和周围已展开相位进行数据运算,当可靠度最高的点被展开之后又重复上述循环,基于这样的设计思路,引入分段式状态机完成每个状态对各个存储器的读写控制以及传输截断相位到数据处理模块进行相位展开。分段式状态机图如图5所示,每个状态所代表的信息如表1所示。

表1 状态信息

采用4个状态S0_sign、S1_sign、S2_sign、S3_sign分别表示将已展开点的上右下左4点移入队列,将该入队点与已展开点的位置信息写入stackxy_index存储器,同时已展开点的位置信息写入已展开点位置信息存储器相应的地址中。在这4个状态的每个状态需要将每个点的可靠度与MAX的值进行比较,MAX始终取最大值。在S4_idle状态读取链表存储器MAX地址的值,如果其值不为0,表示该调制度下有点需要展开,置false信号为高电平。否则没有点需要展开,置false信号为低电平。

在S5_cfuwp状态,首先判定false的值,如果高电平则通过链表存储器MAX地址的值在已展开点位置信息存储器和stackxy_index存储器中找到待展开点的位置信息,利用位置信息在相位存储器中读出截断相位和已展开点相位,输入到数据处理模块进行处理,得到的展开相位写入相位存储器相同的地址中去。同时将该点移出队列。如果false信号为低电平则MAX的值减1,又回到S4_idle状态中去寻找下一级可靠度下是否有点。

2.2 数据存储

2.2.1 软件优化

从前面分析可以看出,硬件设计需要存储的矩阵较多,对于硬件实现存储要求较高,因此硬件设计之前需要优化算法以减少对存储的要求。

由于都是将已展开点上右下右4个点移入队列,引入待展开点坐标信息存储器stackxy_index,该存储器与待展开点坐标存储器stackx,stacky形成对应关系,当入队点的坐标信息写入stackxy_index存储器时,该点周围的已展开的点的信息写stackpx_py存储器,该点的与已展开点位置关系可以分别取值2′b00,2′b01,2′b10,2′b11,分别表示已展开点上右下左4个点与已展开点的位置关系;相对于软件编码[1]省略了正在展开点的横坐标stackx和列坐标stacky两个矩阵的存储,针对N×N的图像,原来需要2×N2×log2N位的存储器缩减为N2×2的存储器。

软件算法中每一个入队的点,都需要该点的入队标志为0,以及该点的掩模板矩阵信号为1,当该点入队以后,将入队标志置1。由于相位展开之前所有点的入队标志都是0,因此设计可以省略入队标志矩阵,当点需要入队的时候,只需要判断掩膜版矩阵信号是否为1,入队以后将掩膜版矩阵信号置为0,这样省略入队标志矩阵[1],节省N×N×1的存储空间。

2.2.2 算法矩阵与存储器的对应关系

针对一帧N×N的图像列出硬件实现需要存储的矩阵如表2所示。

表2 数据存储矩阵列表

设计以Altera公司的EP4CE115F29C7芯片为实现平台,调制度分级数S=513,下面以N=256、N=512两种情况进行了讨论。

对于N=256时,将链表矩阵和掩膜版矩阵采用FPGA单端口RAM实现;可靠度存储器采用FPGA内部单端口RAM存储器实现,待展开点坐标信息矩阵采用FPGA单端口RAM实现;根据相位矩阵、已展开点坐标矩阵的大小以及存储位宽分别存储于SRAM存储器的不同地址中;将算法矩阵8位行坐标和8位列坐标分别作为掩膜版存储器、可靠度存储器读写地址的高8位和低8位。

对于N=512时,可靠度存储器采用FPGA内部单端口RAM存储器实现,待展开点坐标信息矩阵和已展开点坐标矩阵采用SDRAM存储器实现;根据链表矩阵、相位矩阵、掩膜版矩阵的大小以及存储位宽分别存储于SRAM存储器的不同地址中;将算法矩阵9位行坐标和9位列坐标分别作为可靠度存储器读写地址的高9位和低9位。

3 系统设计结果

系统针对N=256,N=512两种图像大小完成相位展开的过程,设计采用Verilog源代码以及Altera公司的EP4CE115F29C7芯片进行原型验证,采用50 MHz为系统时钟,在Altera开发环境Quartus Ⅱ 13.0 SPI中综合,综合结果如表3所示。

表3 综合分析报告

从表3可以分析,N=512比N=256所使用的资源增加很多,主要是由于N=512时需要存储的矩阵数据增加,引入SDRAM存储器,需要实现SDRAM控制模块,消耗大量资源;同时增加PLL模块产生100 MHz时钟作为SDRAM存储器的主时钟。

图6 设计验证波形

针对原型验证采用SigalTap Ⅱ Logic Analyer逻辑分析仪检测设计。设置采样时钟为系统时钟50 MHz,采样深度128。当开关SW[0]置为高电平时,电路进行相位展开的过程。针对一组256×256图像数据进行了验证,验证中选取点(149.167)为相位展开起始点,程序执行开始需要将该点的周围4个点移入链表;相位起始点周围点可靠度如表4所示,得到相位展开起始点周围4点入队列时各个模块验证波形如图6所示。

表4 相位展开起始点周围可靠度分布表

图6(a)中,状态信号stage分别在S0_sign,S1_sign,S2_sign,S3_sign这4个状态将起始点周围4个点依次移入队列,各状态对所有存储器的控制是在stage_count计数信号下进行;每个状态从掩模版储存器(mask_ram)读出的掩膜版信号q都是为1,表示展开起始点周围4个点都需要进入队列,同时将数值0写入相应的地址,表示该点已入队列,下次不需要移入队列。以及在每个状态读出相应的可靠度并与最大可靠度信号Mmax比较大小,在S4_sign状态之后Mmax取值237。每当一个点进入队列,入队计数信号head加1。

图6(b)中,链表存储器的地址在这4个状态的值分别是226、237、217、220;同时写入的数据分别是入队计数信号head在每个状态的值1、2、3、4;在S4_idle状态中读取链表存储器Mmax位置的值,即stackchain_address==10′d237,将S1_sign状态写入的值2读取出来,false信号被赋为高电平,这样表明在可靠度237下有点需要展开,该点就是展开起始点右边一点,S5_cfuwp状态将该点进行展开,同时将数值0写入链表存储器的地址10′d237,表示该点移出链表队列。

图6(c)、图6(d)中,将已展开点周围4个点移入队列过程中,每个状态需要将该点附近已展开点位置信息写入SRAM存储器中,将head的值作为SRAM存储器的地址,因此SRAM存储器的地址的值分别是1、2、3、4;相应的输入数据都是10010101_10100111(38311);同时每个入队点与已展开点的位置关系需要写入待展开点坐标信息存储器stackxy_index;各状态对应的地址stackxy_index_ram_address分别取值head计数值,对应写入数据2′b00,2′b01,2′b10,2′b11;S5_cfuwp状态将SRAM存储器地址2的存储数据38311读取出来,以及stackxy_index存储器地址2的存储数据2′b01读取出来,得到已展开点坐标stackpx=8′d149、stackpy=8′d167,待展开点坐标stackx=8′d149、stacky=8′d168。

从图6(d)、图6(e)分析,根据已展开点和待展开点坐标,在SRAM存储器读出其对应的相位,对应的SRAM存储器地址分别为20′d169383,20′d169384。读出已展开相位16′d48(0.3750),待展开相位11′d107(0.8359);由于两者之差小于π,经过cfuwp_core模块处理并输出展开相位0.8359,并将其写入地址20′d1693844中;这样完成其相位展开过程。

4 结论

通过分析相位展开原理,采用自顶而下的设计方法,提出了基于分段式状态机的硬件结构,将软件算法查表方式转换成单端口RAM的读写操作,并通过逻辑分析仪实时验证设计的正确性;设计的最高工作频率达到80.22 MHz(N=256)、80.45 MHz(N=512)。以N=256,clk=50 MHz为例,当一个点进入队列到被展开最短的时间需要0.46 μs;从N=256,N=512两种情况可以分析设计具有可扩展性,可以在满足存储要求的基础上完成对任意大小图像的相位展开硬件设计;同时可以采用更高性能的FPGA芯片以提高数据处理速度和内部存储空间。

[1] 李勇,苏显渝. 用于可靠度导向相位展开的快速算法[J]. 光电工程,2005,32(11):76-79.

[2] Heping Zhong,Zhen Tian,Pan Huang,et al. A Combined Phase Unwrapping Algorithm for InSAR Interferogram in Shared Memory Enviroment[C]//2015 8th International Congress on Image and Signal Processing. Shenyang:IEEE,2015.1504-1509.

[3] 郑毅,陈文静. 基于S变换滤波解相法的条纹解相研究[J]. 光学技术,2013,39(4):331-338.

[4] 王勇,饶勤菲,唐靖. 采用小波脊系数幅值导数方差质量图的相位展开法[J]. 光子学报,2015,44(2):1-8.

[5] 黄昊,达飞鹏. 小波变换轮廓术中快速相位展开方法研究[J]. 仪器仪表学报.2012.33(2):398-404.

[6] 黄玉波,栗大超,胡小唐. MEMS/NEMS表面3-D轮廓测量中基于模块的相位解包裹方法[J]. 传感器技术学报,2006,19(5):1488-1492.

[7] 黄敬尧,张超,陈振杰. 基于FPGA的动态三维面形测量系统设计[J]. 计算机测量与控制,2012,20(3):599-605.

[8] 王晓东,彭翔. 数字投影三维数字成像的并行DSP实现[J]. 光子学报,2008,37(7):1459-1463.

[9] 杨越,龚志,李江坤. 基于FPGA的位相测量轮廓术设计与实现[J]. 计算机测量与控制,2009,17(3):461-466.

[10] 汪昆,冯冬芹. 基于FPGA的以太网物理层信号处理器的研究[J]. 电子器件,2005,28(4):855-858.

[11] Wang Jiao,Xiong Zhiwei,Wang Zekun. FPGA Design and Implementation of Kinect-Like Depth Sensing[J]. IEEE Transactions on Circuits and Systems of Video Technology,2015,26(6):1175-1186.

[12] Sherman Braganza,Mirian Leeser. Implementing Phase Unwrapping Using Field Programmable Gate Arrays or Graphics processing Units:A Comparison[C]//2008 Sencond international Workshop on High-Performance Reconfigurable Computing Technology and Applications.Austin:IEEE,2008:1-10.

[13] Mazinan A H,Esmaeili A. An Algorithm for Extracting the Phase of the Fringe Patterns with its Applications to Three-Dimensional Imaging through FPGA Based Implementation[C]//2016 International Conference on Industrial Informatics and Computer Systems(CIICS). Sharjah:IEEE,2016.1-5.

TheStudyofDigitalPhaseUnwrappingTechniqueBasedonFPGA

SHIYao1,2,QIANHui1,2,GONGMin1,2,GAOBo1,2*

(1.Micro-Electronics of College of Physical Science and Technology,Chengdu 610064,China;2.Key Laboratory of Micro-Electronics Technology of Sichuan Province,Chengdu 610064,China)

Since the computation of phase unwrapping algorithm is complex by using software,the hardware circuit of the phase unwrapping technique was designed on the basis of FPGA through the principle of phase unwrapping. The plus/minus module,the multiplier and divider module formed the wrappedphase processing module. The software algorithm to the look-up table changed into the read-write operations of RAM memory. The state machine was used for the control of the memories and the wrapped phase processing module. The Altera chip of EP4CE115F29C7 was used in this design and the hardware implementation was completed for both 256×256 and 512×512 of the image. The highest working frequency reached to 80.22 MHz and 80.45 MHz,respectively. The amount of the resource usage reached 792 and 1 436 LEs,respectively. The Signal Tap Ⅱ Logic Analyzer has verified the correctness of the phase unwrapping module realtimely.

FPGA;phase unwrapping;reliability;three-dimensional imaging

10.3969/j.issn.1005-9490.2017.05.010

2016-07-05修改日期2016-09-26

TN402

A

1005-9490(2017)05-1097-07

史瑶(1991-),男,汉族,四川成都人,四川大学物理学院微电子专业,硕士研究生,研究方向为大规模集成电路设计,1508285028@qq.com;

钱辉(1992-),女,汉族,安微芜湖,四川大学物理学院微电子专业,硕士研究生,研究方向为大规模集成电路设计;

龚敏(1961-),男,教授(导师),博士生导师 从事新型半导体材料与器件工艺、集成电路设计和工艺及半导体器件的辐照效应研究;

高博(1975-),男,副教授(通讯作者),主要从事CMOS集成电路芯片设计和生物医学成像领域的研究。

猜你喜欢
链表入队存储器
今天我入队——入队仪式
静态随机存储器在轨自检算法
1+1我们这样学队章:我们的入队誓词
基于二进制链表的粗糙集属性约简
跟麦咭学编程
今天我入队了
基于链表多分支路径树的云存储数据完整性验证机制
入队风波
存储器——安格尔(墨西哥)▲
链表方式集中器抄表的设计