Line 1... |
Line 1... |
\documentclass{gqtekspec}
|
\documentclass{gqtekspec}
|
\project{Double Clocked FFT}
|
\project{Double Clocked FFT}
|
\title{Specification}
|
\title{Specification}
|
\author{Dan Gisselquist, Ph.D.}
|
\author{Dan Gisselquist, Ph.D.}
|
\email{dgisselq\at opencores.org}
|
\email{dgisselq\at opencores.org}
|
|
\revision{Rev.~0.1}
|
\begin{document}
|
\begin{document}
|
\pagestyle{gqtekspecplain}
|
\pagestyle{gqtekspecplain}
|
\titlepage
|
\titlepage
|
\begin{license}
|
\begin{license}
|
Copyright (C) \theyear\today, Gisselquist Technology, LLC
|
Copyright (C) \theyear\today, Gisselquist Technology, LLC
|
Line 21... |
Line 22... |
|
|
You should have received a copy of the GNU General Public License along
|
You should have received a copy of the GNU General Public License along
|
with this program. If not, see \hbox{<http://www.gnu.org/licenses/>} for a copy.
|
with this program. If not, see \hbox{<http://www.gnu.org/licenses/>} for a copy.
|
\end{license}
|
\end{license}
|
\begin{revisionhistory}
|
\begin{revisionhistory}
|
0.0 & 3/2/2015 & Gisselquist & Incomplete Draft \\\hline
|
0.1 & 3/3/2015 & Gisselquist & First Draft \\\hline
|
\end{revisionhistory}
|
\end{revisionhistory}
|
% Revision History
|
% Revision History
|
% Table of Contents, named Contents
|
% Table of Contents, named Contents
|
\tableofcontents
|
\tableofcontents
|
\listoffigures
|
\listoffigures
|
Line 151... |
Line 152... |
\rput(-1.5in,1.8in){\psline{->}(0,0)(0.7in,0)}
|
\rput(-1.5in,1.8in){\psline{->}(0,0)(0.7in,0)}
|
\rput[r](-1.6in,1.5in){\tt i\_rst}
|
\rput[r](-1.6in,1.5in){\tt i\_rst}
|
\rput(-1.5in,1.5in){\psline{->}(0,0)(0.7in,0)}
|
\rput(-1.5in,1.5in){\psline{->}(0,0)(0.7in,0)}
|
\rput[r](-1.6in,1.2in){\tt i\_ce}
|
\rput[r](-1.6in,1.2in){\tt i\_ce}
|
\rput(-1.5in,1.2in){\psline{->}(0,0)(0.7in,0)}
|
\rput(-1.5in,1.2in){\psline{->}(0,0)(0.7in,0)}
|
% \rput(-1in,0.9in){\tt i\_nnonce}-1in,1.8in){\psline{->}(0,0)(1in,0)}
|
|
\rput[r](-1.6in,0.6in){\tt i\_left}
|
\rput[r](-1.6in,0.6in){\tt i\_left}
|
\rput(-1.5in,0.6in){\psline{->}(0,0)(0.7in,0)}
|
\rput(-1.5in,0.6in){\psline{->}(0,0)(0.7in,0)}
|
\rput(-1.15in,0.6in){\psline(-0.05in,-0.05in)(0.05in,0.05in)}
|
\rput(-1.15in,0.6in){\psline(-0.05in,-0.05in)(0.05in,0.05in)}
|
\rput[br](-1.2in,0.6in){\scalebox{0.75}{$2N_i$}}
|
\rput[br](-1.2in,0.6in){\scalebox{0.75}{$2N_i$}}
|
\rput[r](-1.6in,0.3in){\tt i\_right}
|
\rput[r](-1.6in,0.3in){\tt i\_right}
|
Line 186... |
Line 186... |
|
|
Internal to the FFT, things are a touch more complex. Fig.~\ref{fig:white-box}
|
Internal to the FFT, things are a touch more complex. Fig.~\ref{fig:white-box}
|
\begin{figure}\begin{center}
|
\begin{figure}\begin{center}
|
\begin{pspicture}(1.3in,-0.5in)(4.7in,5in)
|
\begin{pspicture}(1.3in,-0.5in)(4.7in,5in)
|
% \rput(0,0){\psframe(0,-0.5in)(\textwidth,5.25in)}
|
% \rput(0,0){\psframe(0,-0.5in)(\textwidth,5.25in)}
|
\rput(0,0){\psframe(1.3in,-0.25in)(4.7in,5in)}
|
\rput(0,0){\psframe[linewidth=2\pslinewidth](1.3in,-0.25in)(4.7in,5in)}
|
\rput(0,5in){%
|
\rput(0,5in){%
|
\rput[r](1.95in,0.125in){\tiny\tt i\_left}
|
\rput[r](1.95in,0.125in){\tiny\tt i\_left}
|
\rput[l](4.05in,0.125in){\tiny\tt i\_right}
|
\rput[l](4.05in,0.125in){\tiny\tt i\_right}
|
\rput(2.0in,0){\psline{->}(0,0.25in)(0,0.0in)}
|
\rput(2.0in,0){\psline{->}(0,0.25in)(0,0.0in)}
|
\rput(4.0in,0){\psline{->}(0,0.25in)(0,0.0in)}
|
\rput(4.0in,0){\psline{->}(0,0.25in)(0,0.0in)}
|
Line 313... |
Line 313... |
piece of the structure.
|
piece of the structure.
|
|
|
Internal to each of the FFT stages is a butterfly and a complex multiply,
|
Internal to each of the FFT stages is a butterfly and a complex multiply,
|
as shown in Fig.~\ref{fig:fftstage}.
|
as shown in Fig.~\ref{fig:fftstage}.
|
\begin{figure}\begin{center}
|
\begin{figure}\begin{center}
|
\begin{pspicture}(0in,0in)(\textwidth,5in)
|
\begin{pspicture}(-0.25in,-1.8in)(3.25in,4.25in)
|
\rput(0,0){\psframe(0in,0in)(\textwidth,5in)}
|
% \rput(0,0){\psframe(0in,-2in)(3in,4.25in)}
|
\rput(1.675in,3.75in){\psline{->}(0,0.5in)(0,0in)}
|
\rput(0,0){\psframe[linewidth=2\pslinewidth](-0.25in,-1.55in)(3.25in,4.0in)}
|
|
\rput[r](1.625in,4.125in){\tt i\_data}
|
|
\rput(1.675in,3.75in){\psline{->}(0,0.5in)(0,0in)%
|
|
\psline{->}(0,0)(-0.2in,-0.25in)%
|
|
\psarc{->}{0.15in}{200}{340}}
|
\rput(0,2.75in){\rput(0,0){\psframe(0,0)(1.3in,0.25in)}
|
\rput(0,2.75in){\rput(0,0){\psframe(0,0)(1.3in,0.25in)}
|
\rput(0,0){\psframe(0.1in,0)(0.2in,0.25in)}
|
\rput(0,0){\psframe(0.1in,0)(0.2in,0.25in)}
|
\rput(0,0){\psframe(0.3in,0)(0.4in,0.25in)}
|
\rput(0,0){\psframe(0.3in,0)(0.4in,0.25in)}
|
\rput(0,0){\psframe(0.5in,0)(0.6in,0.25in)}
|
\rput(0,0){\psframe(0.5in,0)(0.6in,0.25in)}
|
\rput(0,0){\psframe(0.7in,0)(0.8in,0.25in)}
|
\rput(0,0){\psframe(0.7in,0)(0.8in,0.25in)}
|
\rput(0,0){\psframe(0.9in,0)(1.0in,0.25in)}
|
\rput(0,0){\psframe(0.9in,0)(1.0in,0.25in)}
|
\rput(0,0){\psframe(1.1in,0)(1.2in,0.25in)}
|
\rput(0,0){\psframe(1.1in,0)(1.2in,0.25in)}
|
\rput(0,0){\psline{-}(0.7in,-0.05in)(1.1in,-0.25in)}
|
\rput(0,0){\psline{-}(0.7in,-0.05in)(1.1in,-0.25in)}
|
\rput(0,0){\psline{-}(0.7in,0.3in)(1.5in,0.5in)(1.5in,0.75in)}}
|
\rput(0,0){\psline{<-}(0.7in,0.3in)(1.5in,0.5in)(1.5in,0.75in)}}
|
\rput(1.85in,2.75in){\psline(0,0.75in)(0,-0.25in)}
|
\rput(1.85in,2.75in){\psline(0,0.75in)(0,-0.25in)}
|
\rput(0.6in,0.25in){\rput(0,0){\psframe(0,0)(2in,2.0in)}
|
\rput(0.6in,0.25in){\rput(0,0){\psframe[linewidth=2\pslinewidth](0,0)(2in,2.0in)}
|
\rput(0.50in,2in){\psline{->}(0,0.25in)(0,0in)}
|
\rput(0.50in,2in){\psline{->}(0,0.25in)(0,0in)}
|
\rput(1.25in,2in){\psline{->}(0,0.25in)(0,0in)}
|
\rput(1.25in,2in){\psline{->}(0,0.25in)(0,0in)}
|
\rput(1.75in,2in){\psline{->}(0,0.25in)(0,0in)}
|
\rput(1.75in,2in){\psline{->}(0,0.25in)(0,0in)}
|
\rput(0.5in,0){%
|
\rput(0.5in,0){%
|
\rput(0in,0){\psline{->}(0,2.0in)(0,1.1in)}
|
\rput(0in,0){\psline{->}(0,2.0in)(0,1.1in)}
|
Line 349... |
Line 353... |
\rput(0in,0){\psline{->}(0,0.9in)(0,0.6in)}
|
\rput(0in,0){\psline{->}(0,0.9in)(0,0.6in)}
|
\rput(0in,0.5in){$\bigotimes$}
|
\rput(0in,0.5in){$\bigotimes$}
|
\rput(0in,0){\psline{->}(0,0.4in)(0,0.0in)}}
|
\rput(0in,0){\psline{->}(0,0.4in)(0,0.0in)}}
|
\rput(1.75in,0){%
|
\rput(1.75in,0){%
|
\rput(0,0){\psline{->}(0,2.0in)(0,0.5in)(-0.4in,0.5in)}}
|
\rput(0,0){\psline{->}(0,2.0in)(0,0.5in)(-0.4in,0.5in)}}
|
\rput(0.50in,-0.25in){\psline{->}(0,0.25in)(0,0in)}
|
\rput(0.50in,-0.25in){\psline{->}(0,0.25in)(0,-1.05in)}
|
\rput(1.25in,-0.25in){\psline{->}(0,0.25in)(0,0in)}
|
\rput(1.25in,-0.25in){\psline{-}(0,0.25in)(0,0in)}}
|
}
|
\rput*[l](2.0in,0.5in){DIF Butterfly}
|
|
\rput*[lb](1.95in,2.5in){Coefficient memory}
|
% \rput(0,0){\psframe(1.3in,-0.25in)(4.7in,5in)}
|
% \rput(0,0){\psframe(1.3in,-0.25in)(4.7in,5in)}
|
\iffalse
|
\rput(1.7in,-0.5in){\rput(0,0){\psframe(0,0)(1.3in,0.25in)}
|
\rput(0,2.75in){\rput(0,0){\psframe(0,0)(1.3in,0.25in)}
|
|
\rput(0,0){\psframe(0.1in,0)(0.2in,0.25in)}
|
\rput(0,0){\psframe(0.1in,0)(0.2in,0.25in)}
|
\rput(0,0){\psframe(0.3in,0)(0.4in,0.25in)}
|
\rput(0,0){\psframe(0.3in,0)(0.4in,0.25in)}
|
\rput(0,0){\psframe(0.5in,0)(0.6in,0.25in)}
|
\rput(0,0){\psframe(0.5in,0)(0.6in,0.25in)}
|
\rput(0,0){\psframe(0.7in,0)(0.8in,0.25in)}
|
\rput(0,0){\psframe(0.7in,0)(0.8in,0.25in)}
|
\rput(0,0){\psframe(0.9in,0)(1.0in,0.25in)}
|
\rput(0,0){\psframe(0.9in,0)(1.0in,0.25in)}
|
\rput(0,0){\psframe(1.1in,0)(1.2in,0.25in)}
|
\rput(0,0){\psframe(1.1in,0)(1.2in,0.25in)}
|
\rput(0,0){\psline{-}(0.7in,-0.05in)(1.1in,-0.25in)}
|
\rput(0,0){\psline{<-}(0.7in,0.30in)(0.15in,0.5in)}
|
\rput(0,0){\psline{-}(0.7in,0.3in)(1.5in,0.5in)(1.5in,0.75in)}}
|
\rput(0,0){\psline{->}(0.7in,-0.05in)(-0.2in,-0.3in)(-0.2in,-0.55in)}}
|
\fi
|
\rput(1.3in,-1.3in){\psline{->}(-0.2in,0.25in)(0,0)}
|
|
\rput(1.3in,-1.3in){\psarcn{->}{0.15in}{150}{30}}
|
|
\rput(1.3in,-1.3in){\psline{->}(0,0)(0,-0.5in)}
|
|
\rput[l](1.35in,-1.675in){\tt o\_data}
|
\end{pspicture}
|
\end{pspicture}
|
\caption{A Single FFT Stage, with Butterfly (Figure is still a work in progress)}\label{fig:fftstage}
|
\caption{A Single FFT Stage, with Butterfly}\label{fig:fftstage}
|
\end{center}\end{figure}
|
\end{center}\end{figure}
|
These FFT stages are really no different than any other decimation in
|
These FFT stages are really no different than any other decimation in
|
frequency FFT, save only that the coefficients are alternated between the
|
frequency FFT, save only that the coefficients are alternated between the
|
two stages. That is, the even stages get all the even coefficients, and
|
two stages. That is, the even stages get all the even coefficients, and
|
the odd stages get all of the odd coefficients.
|
the odd stages get all of the odd coefficients.
|
Line 432... |
Line 439... |
line, and set {\tt i\_ce} high.
|
line, and set {\tt i\_ce} high.
|
\item At the first valid output, the FFT core will set {\tt o\_sync}
|
\item At the first valid output, the FFT core will set {\tt o\_sync}
|
line high in addition to the output values {\tt o\_left}
|
line high in addition to the output values {\tt o\_left}
|
(the first of two), and {\tt o\_right} (the second of the two).
|
(the first of two), and {\tt o\_right} (the second of the two).
|
\item Ever after, whenever {\tt i\_ce} is high, the FFT core will clock
|
\item Ever after, whenever {\tt i\_ce} is high, the FFT core will clock
|
two samples in and two samples out. On any valiid first
|
two samples in and two samples out. On any valid first
|
pair of samples coming out of the transform,
|
pair of samples coming out of the transform,
|
{\tt o\_sync} will be high. Otherwise {\tt o\_sync} will
|
{\tt o\_sync} will be high. Otherwise {\tt o\_sync} will
|
remain low.
|
remain low.
|
\end{enumerate}
|
\end{enumerate}
|
|
|