From 961aed44358c71a04ebcb5aace3d3be4cff962f4 Mon Sep 17 00:00:00 2001 From: =?utf8?q?St=C3=A9phane=20Domas?= Date: Fri, 21 Oct 2011 15:55:32 +0200 Subject: [PATCH] =?utf8?q?11=C3=A8me=20:=20-=20moidf=20resultat=20XP?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- dmems12.tex | 179 ++++++++++++++++++++++++++++----------------------- lever-xp.jpg | Bin 0 -> 27346 bytes 2 files changed, 100 insertions(+), 79 deletions(-) create mode 100644 lever-xp.jpg diff --git a/dmems12.tex b/dmems12.tex index 534a689..10db624 100644 --- a/dmems12.tex +++ b/dmems12.tex @@ -44,7 +44,7 @@ -\title{Using FPGAs for high speed and real time cantilever deflection estimation} +\title{A new approach based on least square methods to estimate in real time cantilevers deflection with a FPGA} \author{\IEEEauthorblockN{Raphaël Couturier\IEEEauthorrefmark{1}, Stéphane Domas\IEEEauthorrefmark{1}, Gwenhaël Goavec-Merou\IEEEauthorrefmark{2} and Michel Lenczner\IEEEauthorrefmark{2}} \IEEEauthorblockA{\IEEEauthorrefmark{1}FEMTO-ST, DISC, University of Franche-Comte, Belfort, France\\ \{raphael.couturier,stephane.domas\}@univ-fcomte.fr} @@ -90,19 +90,18 @@ the cantiliver which result in a complex fabrication process. In this paper our attention is focused on a method based on interferometry to measure cantilevers' displacements. In this method cantilevers are illuminated -by an optic source. The interferometry produces fringes on each cantilevers +by an optic source. The interferometry produces fringes on each cantilever which enables to compute the cantilever displacement. In order to analyze the fringes a high speed camera is used. Images need to be processed quickly and then a estimation method is required to determine the displacement of each -cantilever. In~\cite{AFMCSEM11}, the authors have used an algorithm based on +cantilever. In~\cite{AFMCSEM11}, authors have used an algorithm based on spline to estimate the cantilevers' positions. - The overall process gives -accurate results but all the computation are performed on a standard computer -using labview. Consequently, the main drawback of this implementation is that -the computer is a bootleneck in the overall process. In this paper we propose to -use a method based on least square and to implement all the computation on a -FGPA. +The overall process gives accurate results but all the computations +are performed on a standard computer using LabView. Consequently, the +main drawback of this implementation is that the computer is a +bootleneck. In this paper we propose to use a method based on least +square and to implement all the computation on a FGPA. The remainder of the paper is organized as follows. Section~\ref{sec:measure} describes more precisely the measurement process. Our solution based on the @@ -118,13 +117,6 @@ presented. \section{Measurement principles} \label{sec:measure} - - - - - - - \subsection{Architecture} \label{sec:archi} %% description de l'architecture générale de l'acquisition d'images @@ -138,24 +130,26 @@ deflection scheme and sentitive to the angular displacement of the cantilever, interferometry is sensitive to the optical path difference induced by the vertical displacement of the cantilever. -The system build by authors of~\cite{AFMCSEM11} has been developped based on a -Linnick interferomter~\cite{Sinclair:05}. It is illustrated in -Figure~\ref{fig:AFM}. A laser diode is first split (by the splitter) into a -reference beam and a sample beam that reachs the cantilever array. In order to -be able to move the cantilever array, it is mounted on a translation and -rotational hexapod stage with five degrees of freedom. The optical system is -also fixed to the stage. Thus, the cantilever array is centered in the optical -system which can be adjusted accurately. The beam illuminates the array by a -microscope objective and the light reflects on the cantilevers. Likewise the -reference beam reflects on a movable mirror. A CMOS camera chip records the -reference and sample beams which are recombined in the beam splitter and the -interferogram. At the beginning of each experiment, the movable mirror is -fitted manually in order to align the interferometric fringes approximately -parallel to the cantilevers. When cantilevers move due to the surface, the -bending of cantilevers produce movements in the fringes that can be detected -with the CMOS camera. Finally the fringes need to be -analyzed. In~\cite{AFMCSEM11}, the authors used a LabView program to compute the -cantilevers' movements from the fringes. +The system build by these authors is based on a Linnick +interferomter~\cite{Sinclair:05}. It is illustrated in +Figure~\ref{fig:AFM}. A laser diode is first split (by the splitter) +into a reference beam and a sample beam that reachs the cantilever +array. In order to be able to move the cantilever array, it is +mounted on a translation and rotational hexapod stage with five +degrees of freedom. The optical system is also fixed to the stage. +Thus, the cantilever array is centered in the optical system which can +be adjusted accurately. The beam illuminates the array by a +microscope objective and the light reflects on the cantilevers. +Likewise the reference beam reflects on a movable mirror. A CMOS +camera chip records the reference and sample beams which are +recombined in the beam splitter and the interferogram. At the +beginning of each experiment, the movable mirror is fitted manually in +order to align the interferometric fringes approximately parallel to +the cantilevers. When cantilevers move due to the surface, the +bending of cantilevers produce movements in the fringes that can be +detected with the CMOS camera. Finally the fringes need to be +analyzed. In~\cite{AFMCSEM11}, authors used a LabView program to +compute the cantilevers' deflections from the fringes. \begin{figure} \begin{center} @@ -171,21 +165,29 @@ cantilevers' movements from the fringes. \subsection{Cantilever deflection estimation} \label{sec:deflest} -As shown on image \ref{img:img-xp}, each cantilever is covered by -interferometric fringes. The fringes will distort when cantilevers are -deflected. Estimating the deflection is done by computing this -distortion. For that, (ref A. Meister + M Favre) proposed a method -based on computing the phase of the fringes, at the base of each -cantilever, near the tip, and on the base of the array. They assume -that a linear relation binds these phases, which can be use to -"unwrap" the phase at the tip and to determine the deflection.\\ - -More precisely, segment of pixels are extracted from images taken by a -high-speed camera. These segments are large enough to cover several -interferometric fringes and are placed at the base and near the tip of -the cantilevers. They are called base profile and tip profile in the -following. Furthermore, a reference profile is taken on the base of -the cantilever array. +\begin{figure} +\begin{center} +\includegraphics[width=\columnwidth]{lever-xp} +\end{center} +\caption{Portion of an image picked by the camera} +\label{fig:img-xp} +\end{figure} + +As shown on image \ref{fig:img-xp}, each cantilever is covered by +several interferometric fringes. The fringes will distort when +cantilevers are deflected. Estimating the deflection is done by +computing this distortion. For that, authors of \cite{AFMCSEM11} +proposed a method based on computing the phase of the fringes, at the +base of each cantilever, near the tip, and on the base of the +array. They assume that a linear relation binds these phases, which +can be use to "unwrap" the phase at the tip and to determine the deflection.\\ + +More precisely, segment of pixels are extracted from images taken by +the camera. These segments are large enough to cover several +interferometric fringes. As said above, they are placed at the base +and near the tip of the cantilevers. They are called base profile and +tip profile in the following. Furthermore, a reference profile is +taken on the base of the cantilever array. The pixels intensity $I$ (in gray level) of each profile is modelized by: @@ -344,10 +346,11 @@ that communicate between i.MX and Spartan6, using Spartan3 as a tunnel. By default, the WEIM interface provides a clock signal at 100MHz that is connected to dedicated FPGA pins. -The Spartan6 is an LX100 version. It has 15822 slices, equivalent to -101261 logic cells. There are 268 internal block RAM of 18Kbits, and -180 dedicated multiply-adders (named DSP48), which is largely enough -for our project. +The Spartan6 is an LX100 version. It has 15822 slices, each slice +containing 4 LUTs and 8 flip/flops. It is equivalent to 101261 logic +cells. There are 268 internal block RAM of 18Kbits, and 180 dedicated +multiply-adders (named DSP48), which is largely enough for our +project. Some I/O pins of Spartan6 are connected to two $2\times 17$ headers that can be used as user wants. For the project, they will be @@ -362,18 +365,18 @@ phase. The second one, detailed in this article, is based on a classical least square method but suppose that frequency is already known. -\subsubsection{Spline algorithm} +\subsubsection{Spline algorithm (SPL)} \label{sec:algo-spline} Let consider a profile $P$, that is a segment of $M$ pixels with an intensity in gray levels. Let call $I(x)$ the intensity of profile in $x \in [0,M[$. -At first, only $M$ values of $I$ are known, for $x = 0, 1, \ldots,M-1$. A -normalisation allows to scale known intensities into $[-1,1]$. We compute -splines that fit at best these normalised intensities. Splines (SPL in the -following) are used to interpolate $N = k\times M$ points (typically $k=4$ is -sufficient), within $[0,M[$. Let call $x^s$ the coordinates of these $N$ points - and $I^s$ their intensities. +At first, only $M$ values of $I$ are known, for $x = 0, 1, +\ldots,M-1$. A normalisation allows to scale known intensities into +$[-1,1]$. We compute splines that fit at best these normalised +intensities. Splines are used to interpolate $N = k\times M$ points +(typically $k=4$ is sufficient), within $[0,M[$. Let call $x^s$ the +coordinates of these $N$ points and $I^s$ their intensities. In order to have the frequency, the mean line $a.x+b$ (see equation \ref{equ:profile}) of $I^s$ is computed. Finding intersections of $I^s$ and this line allow to obtain @@ -394,7 +397,7 @@ Two things can be noticed: computation of $\theta$. \end{itemize} -\subsubsection{Least square algorithm} +\subsubsection{Least square algorithm (LSQ)} Assuming that we compute the phase during the acquisition loop, equation \ref{equ:profile} has only 4 parameters: $a, b, A$, and @@ -694,24 +697,42 @@ will include real experiments in the final version of this paper. % - en parallèle : simulink et VHDL à la main -From the LSQ algorithm, we have written a C program which uses only integer -values that have been previously scaled. The quantization of doubles into -integers has been performed in order to obtain a good trade-off between the -number of bits used and the precision. We have compared the result of -the LSQ version using integers and doubles. We have observed that the results of -both versions were similar. - -Then we have built two versions of VHDL codes: one directly by hand coding and -the other with Matlab using the Simulink HDL coder -feature~\cite{HDLCoder}. Although the approach is completely different we have -obtain VHDL codes that are quite comparable. Each approach has advantages and -drawbacks. Roughly speaking, hand coding provides beautiful and much better -structured code while HDL coder provides code faster. In terms of speed of -code, we think that both approaches will be quite comparable with a slightly -advantage for hand coding. We hope that real experiments will confirm that. In -the LSQ algorithm, we have replaced all the divisions by multiplications by -constants since divisions are performed with constants depending of the number -of pixels in the profile (i.e. $M$). +From the LSQ algorithm, we have written a C program that uses only +integer values. We use a very simple quantization by multiplying +double precision values by a power of two, keeping the integer +part. For example, all values stored in lut$_s$, lut$_c$, $\ldots$ are +scaled by 1024. Since LSQ also computes average, variance, ... to +remove the slope, the result of implied euclidian divisions may be +relatively wrong. To avoid that, we also scale the pixel intensities +by a power of two. Futhermore, assuming $nb_s$ is fixed, these +divisions have a knonw denominator. Thus, they can be replaced by +their multiplication/shift counterpart. Finally, all other +multiplications or divisions by a power of two have been replaced by +left or right bit shifts. By the way, the code only contains +additions, substractions and multiplications of signed integers, which +is perfectly adapted to FGPAs. + +As said above, hardware constraints have a great influence on the VHDL +implementation. Consequently, we searched the maximum value of each +variable as a function of the different scale factors and the size of +profiles, which gives their maximum size in bits. That size determines +the maximum scale factors that allow to use the least possible RAMs +and DSPs. Actually, we implemented our algorithm with this maximum +size but current works study the impact of quantization on the results +precision and design complexity. We have compared the result of the +LSQ version using integers and doubles and observed that the precision +of both were similar. + +Then we built two versions of VHDL codes: one directly by hand coding +and the other with Matlab using the Simulink HDL coder +feature~\cite{HDLCoder}. Although the approach is completely different +we obtained VHDL codes that are quite comparable. Each approach has +advantages and drawbacks. Roughly speaking, hand coding provides +beautiful and much better structured code while Simulink allows to +produce a code faster. In terms of throughput and latency, +simulations shows that the two approaches are close with a slight +advantage for hand coding. We hope that real experiments will confirm +that. \subsection{Simulation} diff --git a/lever-xp.jpg b/lever-xp.jpg new file mode 100644 index 0000000000000000000000000000000000000000..37beb0824cb71984c4a86f6e2e9c6a296ce5df05 GIT binary patch literal 27346 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 literal 0 HcmV?d00001 -- 2.39.5