%--------------------------------------------------------------------------------
%
% Text pøíspìvku do sborníku EEICT
%
% Vytvoøil:  Martin Drahanský
% Datum:     26.02.2007
% E-mail:    drahan@fit.vutbr.cz
%
%--------------------------------------------------------------------------------
%
% Pøeloení: pdflatex prispevek.tex
%
% Optimální zpùsob pouití = pøepite jen vlastní text
%
\documentclass{eeict}
%\inputencoding{cp1250}
\inputencoding{utf8}
%\usepackage[utf8]{inputenc}
\usepackage[bf]{caption2}
\usepackage{pgfplots}
\usepackage[hidelinks]{hyperref}
%--------------------------------------------------------------------------------

\title{Microcode-controlled RAM BIST}
\author{Vykydal Lukáš}
\programme{Master Degree Programme (2), FEEC BUT}
\emails{xvykyd04@stud.feec.vutbr.cz}

\supervisor{Kubíček Michal}
\emailv{kubicek@feec.vutbr.cz}

\abstract{This paper deals with memory testing principles, focusing mainly on March algorithms. It describes their usage on word based memories. In second part it proposes small programmable BIST controller that can be used in digital circuits.}
\keywords{memory testing, March algorithms, memory BIST, counters}

\begin{document}
% -- Hlavièka práce --

\maketitle

%-------------------------------------------------------------------------------
\selectlanguage{czech}
\section{Úvod}

Polovodičové paměti zabírají stále větší část plochy integrovaných obvodů. S rostoucí velikostí roste i čas nutný k otestování pamětí, který je již při testu z externího ATE (Automatic Test Equipment) neúnosný.
Požadavek na zkrácení doby testu vedl k návrhu vestavných testovacích bloků (BIST - Built In Self Test). Jejich využitím došlo ke zrychlení testů. 

S dalším vývojem jsou ovšem odhalovány a modelovány další možné defekty na paměťových buňkách. Cílem je proto mít k dispozici programovatelný BIST blok, který umožní testovat paměť na provozní rychlosti.

\section{Testy pamětí}

Plný test paměti, při kterém je každá paměťová buňka přečtena ve všech možných kombinacích ostatních paměťových buňek, je jistě přespříliš časově náročný. 
Vyloučením nepravděpodobných chyb a optimalizací vznikly testovací algoritmy různých časových složitostí. 
Krátký seznam testovacích algoritmů je v tabulce \ref{algo}. SaF (Stuck at Fault) je defekt, kdy je paměťová buňka trvale v 0 nebo 1. TF (Transition Fault) nazýváme chybu, kdy jedna z logických hodnot nelze do paměti zapsat. CF (Coupling Fault) jsou vázané chyby mezi buňkami.

\begin{table}[h!]
  \vspace{.25cm}
  \hspace{-.25cm}
  \begin{minipage}[t]{0.5\hsize}
  \begin{tabular}{lll}
    \hline
    Algoritmus       & Složitost    & Defekty \\\hline
    Walking 0-1      & $O(n)$       & SaF\\ 
    GALPAT           & $O(n^{2})$   & SaF, TF, CF\\
%    Walking 1-0      & $O(n^{2})$   & SaF, TF, CF\\
    Sliding diagonal & $O(n^{3/2})$ & SaF, TF, CF\\
    March algoritmy  & $O(n)$       & Dle algoritmu\\ 
    \\
  \end{tabular}
  \caption{Složitosti algoritmů}
  \label{algo}
  \end{minipage} \hfill
  \begin{minipage}[t]{0.6\hsize}
  \begin{tabular}{lp{5.75cm}}
    \hline
    Zápis & Význam \\\hline
    $w0$/$w1$ & Zápis  na aktuální paměťovou pozici \\
    $r0$/$r1$ & Porovnání aktuální paměťové pozice\\
    $\Updownarrow(...)$ & Skupina prováděných operací\\
    $\Uparrow(...)$   & ... ve vzestupném pořadí \\
    $\Downarrow(...)$ & ... ve sestupném pořadí \\
  \end{tabular}
  \caption{Gramatika March testů}
  \label{gram}
  \end{minipage}
\end{table}


March algoritmy jsou skupinou algoritmů pro testování pamětí s lineární časovou složitostí. Příkladem budiž algoritmus MATS+ (Modified Algorithmic Test Sequence) formálně zapsaný ve výrazu~(\ref{mats+}) pomocí gramatiky definované v tabulce~\ref{gram}.
Jde o nejjednodušší March test. Do paměti je nejdříve na všechny pozice zapsána log. 0. Následně jsou data zkontrolována a nahrazena log. 1. Ve třetím kroce je opět obsah paměti porovnán s log. 1.

\begin{equation}\label{mats+}
  %Make \+ word-wrap command without hyphen
  \newcommand\+{\discretionary{}{}{}}
  \Updownarrow~(w0)\+\Uparrow~(r0,w1)\+\Downarrow~(r1,w0)
\end{equation}

S pomocí vhodné kombinace základních operací se dá dosáhnout velmi dobrého pokrytí jednobitových chyb a omezené skupiny vícebitových. Příkladem buď algoritmus March SS zapsaný ve výrazu~(\ref{marchss}). 
Tento March test pokryje navíc chyby DRF (Destructive Read) a dDRF (Deceptive Destructive Read - přečtená data jsou správná, ale dojde k poškození dat v paměti) pomocí zdvojeného čtení a WDF (Write Disturb Fault - zápisem stejné hodnoty jako je uložena v paměti dojde k poškození uložené hodnoty) pomocí opakovaného zápisu stejné hodnoty. 
\begin{equation}\label{marchss}
  %Make \+ word-wrap command without hyphen
  \newcommand\+{\discretionary{}{}{}}
  \Updownarrow~(w0)\+\Uparrow~(r0,r0,w0,r0,w1)\+\Uparrow~(r1,r1,w1,r1,w0)\+\Downarrow~(r0,r0,w0,r0,w1)\\\Downarrow~(r1,r1,w1,r1,w0)\+\Updownarrow~(r0)
\end{equation}

K pokrytí defektů mezi sousedními buňkami se využije šachovnicový vzor zapsaný do paměti. Pro~jeho generování je nutné znát fyzické rozložení paměti.

\subsection{March algoritmy a paměť s přístupem po slovech}

Standardní March testy jsou definované nad pamětí adresovanou po bitech. V reálném použití se vyskytují paměti adresované po slovech různých délek. March algoritmy můžeme tedy aplikovat dvěma způsoby:
\begin{itemize}
  \item Pro test vybrat skupinu slov a jejich inverzí, které budeme využívat místo hodnoty 0,1. Tato slova můžeme ve vhodných místech během testu střídat nebo nechat celý test proběhnout několikrát.
  \item Využít SMARCH (Serial March) testu. Jde o úpravu March algoritmů, kdy se k paměťovému slovu přistoupí jako k posuvnému registru, kdy na vstupu je hodnota zapisovaná do paměti a provádí se kontrola výstupní hodnoty. Každá operace SMARCH algoritmu tady trvá \textit{n} cyklů, kde \textit{n} je délkou slova testované paměti.
%  \item Možná je také kombinace předchozích postupů. 
\end{itemize}

\section{BIST kontrolér}

Struktura navrhovaného kontroléru je na obrázku \ref{block}. BIST kontrolér je rozdělen do dvou částí. V~první je obsažená LUT (Lookup Table) s mikrokódem a implementace mikrosekvenceru. Druhá část slouží k~přístupu k~paměti a generování testovacích datových slov.
Cílem tohoto rozdělení je možnost přepoužít mikrosekvencer pro více pamětí na čipu.

Pro implementaci šachovnicového vzoru jsou adresní čítače BIST kontroléru rozděleny na řádkový a sloupcový. Složením jejich výstupů dohromady vznikne celá adresa pro paměť. To také umožní přistupovat k paměti po sloupcích nebo po řádcích a zvýšit pokrytí vázaných chyb.

Navrhovaný BIST kontrolér také bude obsahovat sériové rozhraní pro přístup k paměti za účelem diagnózy.

\subsection{Optimalizace velikosti}

Pro adresaci přístupu k paměťovým buňkám je potřeba využít čítač, který pokryje všech $2^n$ možných kombinací adresního slova. Typicky se pro toto adresování využívá 
binární čítač, který přistupuje k~adresním pozicím v \uv{přirozeném} pořadí. 

Dle článku \cite{ieee-march-dof} lze pozorovat určité \uv{stupně volnosti} v definici March algoritmů při zachování jejich pokrytí chyb.
Pro nás je zajímavý stupeň volnosti 1, který umožňuje využít libovolné reverzibilní posloupnosti pro adresaci paměti March algoritmem. 

Pro porovnání byly zvoleny čítače binární a CFSR (Complete Feedback Shift Register - jde o čítač LFSR (Linear Feedback Shift Register) s vnuceným stavem \texttt{(others => '0')};
 jeho reverzibilita vychází z reverzibility LFSR čítačů \cite{IEEE-comparsion-LFSR-CA}).
Jako kritérium pro velikost výsledné realizace čítače na čipu bylo zvoleno množství NAND2 hradel, které by pokrylo plochu zabranou tímto čítačem. Výsledky porovnání jsou vidět v grafu \ref{cnt-sizes}. Z tohoto porovnání je zřejmé, že čítače CFSR zaberou v tomto MBIST kontroléru značně menší plochu
oproti běžným binárním čítačům při šířce čítače větší než 2 bity. 


\begin{figure}[h]
  \vspace{.25cm}
\begin{minipage}[t]{.5\hsize}\vspace{0pt}
  \scalebox{0.55}{\input{../DP/obrazky/test-ctrl-block.tex}}
  \caption{Bloková struktura MBIST kontroléru}
  \label{block}
\end{minipage}\hfill
\begin{minipage}[t]{.45\hsize}\vspace{0pt}
\begin{tikzpicture}
\begin{axis}[
  width = .9\textwidth, % Scale the plot to \linewidth
  grid = both, % Display a grid
  major grid style = {dashed,gray!50}, % Set the major grid style
  minor grid style = {dashed,gray!20}, % Set the minor grid style
  xlabel = Šířka čítače (b) , % Set the labels
  ylabel = Velikost (počet NAND2 hradel),
  xmin = 2,
  xmax = 16,
  xtick = {2,4,6,8,10,12,14,16},
%  x tick label style = {/pgf/number format/1000 sep={ }, rotate=90,anchor=east}, % Display labels sideways
%  ymin = -30,
%  ymax = 0,
  legend pos = north west,
  legend entries={CFSR, Binární}
  ]
  %\addplot [color=black, solid, mark options=solid, mark=none]
  %table[x=f_GHz, y=s11_dB, col sep=comma] {../export/s11.csv}; 
  %\addplot [black, no markers, dashed] coordinates {(1.227,-30) (1.227,0)};
  %\addplot [black, no markers, dashed] coordinates {(1.575,-30) (1.575,0)};
  \addplot [color=black, solid] table[x=Width, y=CFSR] {
Width CFSR  DEC
2 43.0001 45.0005
3 56.0004 66.3337
4 67.6672 78.3339
5 79.0005 93.334
6 89.3339 109.6674
7 96.3334 125.0008
8 112.3334  139.6676
9 116.6665  154.6677
10  128 169.6678
11  135.9999  186.0012
12  148.9998  200.0013
13  157.9998  210.668
14  169.9999  230.0015
15  173.3333  245.0016
16  190 260.0017

  };
  \addplot [color=black, dashed] table[x=Width, y=DEC] {
Width CFSR  DEC
2 43.0001 45.0005
3 56.0004 66.3337
4 67.6672 78.3339
5 79.0005 93.334
6 89.3339 109.6674
7 96.3334 125.0008
8 112.3334  139.6676
9 116.6665  154.6677
10  128 169.6678
11  135.9999  186.0012
12  148.9998  200.0013
13  157.9998  210.668
14  169.9999  230.0015
15  173.3333  245.0016
16  190 260.0017

  };
\end{axis}
\end{tikzpicture}
\caption{Závislost velikosti čítače jeho šířce} 
\label{cnt-sizes}
\end{minipage}
\end{figure}

\section{Závěr}

Porovnání klasických metod testování polovodičových pamětí ukázalo, proč jsou March algoritmy pro test pamětí velmi populární. Po jejich rozšíření směrem k SMARCH nebo k většímu množství testovacích slov je možné je použít na pamětech s přístupem po slovech a využít šachovnicový vzor dat. Pro úsporu místa na čipu navrhuji použít čítače typu CFSR pro generování adresních posloupností.  

\section*{Poděkování}
Děkuji společnosti ON Design Czech s.r.o. a jejím zaměstnancům, zejména Ing. Miroslavu Kaššovi za pomoc, rady a možnost zpracovávat práci v prostorách firmy.

%------------
% Citace
%
\begin{thebibliography}{9}

  \bibitem{march-ss}
    S. Hamdioui, A. J. van de Goor and M. Rodgers,
    \emph{March SS: A Test for All Static Simple RAM Faults}, Proceedings of the 2002 IEEE International Workshop on Memory Technology, Design and Testing (MTDT2002), 2002, pp. 95-100. 
    Dostupné z~URL:
    \(<\)\url{http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=1029769}\(>\)  

  \bibitem{ieee-march-dof}
    D. Niggemeyer, M. Redeker and J. Otterstedt,
    \emph{Integration of non-classical faults in standard March tests}, Proceedings. International Workshop on Memory Technology, Design and Testing (Cat. No.98TB100236), San Jose, CA, 1998, pp. 91-96.
    Dostupné z~URL:
    \(<\)\url{http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=\&arnumber=705953\&isnumber=15293}\(>\)

  \bibitem{IEEE-comparsion-LFSR-CA}
    Dhingra Sachin.
    \emph{Comparison of LFSR and CA for BIST}.
    Auburn University, USA
    Dostupné z~URL: 
    \(<\)\url{http://www.eng.auburn.edu/~agrawvd/COURSE/E7250_05/REPORTS_TERM/Dhingra_LFSR.pdf}\(>\)
\end{thebibliography}

\end{document}
