%%%%%%%%%%%%%%%%%
%%%%% LFSR %%%%%%
%%%%%%%%%%%%%%%%%
\subsection{LFSR}

LFSR\footnote{Linear Feedback Shift Register} je n-bitový lineární čítač generující pseudonáhodnou posloupnost slov o maximální možné délce $2^n - 1$.
Čítač LFSR se skládá z posuvného registru délky $n$ a zpětné vazby, ve které je využita funkce XOR. Z toho vyplývá jeho nenáročnost na velikost
implementace. 

Jelikož se jedná o lineární čítač, je možno použít k jeho řešení lineární matematické postupy. Následující popis bude probíhat v modulo-2 aritmetice.
Sčítání si definujeme jako logickou funkci XOR, násobení jako AND. 

Čítač lze popsat maticovou rovnicí \ref{eq:lfsr-matrix}, kde matice $\mathbf{A}$ plně popisuje zkoumaný čítač včetně typu implementace.

\vzorec{eq:lfsr-matrix}{\mathbf{X}(n)=\mathbf{A}\cdot\mathbf{X}(n-1)}{}{LFSR citac}

Typičtěji se však pro popis LFSR čítače používá charakteristický polynom matice $\mathbf{A}$. Ten lze určit dle vzorce \ref{eq:lfsr-polynom}.

\vzorec{eq:lfsr-polynom}{\left|x\cdot\mathbf{I}-\mathbf{A}\right|=p_{A}(x)}{}{}

Pro popis čítače s délkou $2^n-1$ musí být charakteristický polynom primitivní.


Z rovnice \ref{eq:lfsr-matrix} vyplývá důvod, proč LFSR čítač maximální délky pokryje pouze $2^n-1$ stavů. Každou hodnotu čítače je třeba vyjádřit pomocí součtu 
vybraných hodnot předchozího stavu. Pokud jsou v čítači samé nuly, nemůže v žádném místě čítače vzniknout hodnota různá od nuly a čítač setrvá v nulovém stavu i nadále.


%%%%%%%%%%%%%%%%%%%%%%
%%%%%% Reverzace %%%%%
%%%%%%%%%%%%%%%%%%%%%%

\subsubsection{Reverzní LFSR čítač}
\label{sec:lfsr-rev}

Reverzním čítačem je myšlen čítač, který prochází své stavy v opačném pořadí, než čítač dopředný. Postup vedoucí k vytvoření takového čítače je popsán v následujících řádcích. 
Pro čítač dle rovnice \ref{eq:lfsr-matrix} lze vyjádřit předchozí stav vynásobením pomocí $\mathbf{A}^{-1}$ zleva jako \ref{eq:lfsr-reverse}.

\vzorec{eq:lfsr-reverse}{\mathbf{A}^{-1}\cdot\mathbf{X}(n)=\mathbf{X}(n-1)}{}{LFSR reverzní čítač}

Pro praktické použití bude lepší najít charakteristickou rovnici pro $\mathbf{A}^{-1}$ ze znalosti $p_A(x)$. Začneme úpravou rovnice \ref{eq:lfsr-polynom}
vynásobením pomocí $\left|\mathbf{A}^{-1}\right|$ a následnou úpravou  pomocí rovnosti $\left|\mathbf{A}\right|\cdot\left|\mathbf{B}\right| = \left|\mathbf{A\cdot B}\right|$.

\vzorec{eq:lfsr-reverse-st2}{\left|x\cdot\mathbf{A}^{-1}-\mathbf{I}\right| = \left|\mathbf{A}^{-1}\right|\cdot{}p_A(x)}{}{}

Následně provedeme substituci $\mu=x^{-1}$.

\vzorec{eq:lfsr-reverse-st3}{\left|\mu^{-1}\cdot\mathbf{A}^{-1}-\mathbf{I}\right| = \left|\mathbf{A}^{-1}\right|\cdot p_A(\mu^{-1})}{}{}

Dále rovnici rozšíříme výrazem $-\mu^{n}$, který na levé straně zapíšeme jako $\left|-\mu\cdot\mathbf{I}\right|$. Tím rovnici upravíme na \ref{eq:lfsr-reverse-st4}, která je na levé straně
formálně stejná jako \ref{eq:lfsr-polynom} pro matici $\mathbf{A}^{-1}$.

\vzorec{eq:lfsr-reverse-st4}{\left|\mu\mathbf{I}-\mathbf{A}^{-1}\right| = -\mu^n\cdot\left|\mathbf{A}^{-1}\right|\cdot p_A(\mu^{-1}) = p_{A^-1}(\mu)}{}{}

Zde jsme dokázali, že znalost \ref{eq:lfsr-polynom} nám stačí k realizaci reverzního LFSR čítače dle rovnice \ref{eq:lfsr-reverse-st4}\footnote{Předpokládáme splněnou podmínku $\left|A^{-1}\right|\neq0$.}.


Porovnáním obou polynomů zjistíme, že došlo pouze k obrácení pořadí koeficientů. Tyto poznatky se shodují s \cite{IEEE-comparsion-LFSR-CA}.

\subsubsection{Implementace}

Rozlišujeme dva způsoby, jak implementovat LFSR čítač - Fibonacci LFSR a Galois LFSR. Pro implementaci byla vybrána verze Fibonacci LFSR. Tato verze má z DFF(D \splithyphens{}flip-flop\standardhyphens) poskládaný nepřerušený posuvný registr, což je výhodné pro implementaci sériového přístupu k paměti.

%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%% Fibonacci LFSR %%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
\paragraph{Fibonacci LFSR} \mbox{}

Fibonacci LFSR čítač, jinak také nazývaný standardní, \uv{many-to-one}, \uv{external XOR gate}, využívá posuvný registr délky $n$, ze kterého jsou vzaty jednotlivé odbočky 
do zpětnovazební funkce definované charakteristickým polynomem. Fibonacci LFSR je popsán maticí $\mathbf{A}$ ve tvaru \ref{eq:lfsr-fibonacci-A}. Z této matice lze vypočítat polynom \ref{eq:lfsr-fibonacci-A-poly}.
Ukázkovou realizaci pro $n=3$ a $p(x)=x^3+x^2+1$ lze vidět na obrázku \ref{fig:lfsr-fibonacci}.

\vzorec{eq:lfsr-fibonacci-A}{
\mathbf{A} = 
\left| 
  \begin{matrix} 
    a_1 & a_2 & a_3 & \ldots & a_{n-1} & 1 \\ 
    1   &  0  &  0  & \ldots & 0   & 0 \\ 
    0   &  1  &  0  & \ldots & 0   & 0 \\ 
    0   &  0  &  1  & \ldots & 0   & 0 \\ 
    \vdots & \vdots & \vdots & \ddots & \vdots & \vdots \\
    0   &  0  &  0  & \ldots & 1   & 0 \\
  \end{matrix}\right|}{}{}

\vzorec{eq:lfsr-fibonacci-A-poly}{
  p_A(x)=x^n+a_1\cdot{}x^{n-1}+a_2\cdot{}x^{n-2}+\ldots+a_{n-1}\cdot{}x+1
}{}{}


\image{fig:lfsr-fibonacci}{
\input{obrazky/lfsr-fibonacci}}
{Fibonacci LFSR $n=3$ a $p(x)=x^3+x^2+1$}

Podle předchozích poznatků z kapitoly \ref{sec:lfsr-rev} můžeme odvodit matici A pro reverzní čítač v implementaci Fibonnaci LFSR. Výpočtem inverzní matice k matici A dostaneme matici \ref{eq:lfsr-fibonacci-rev}, jejíž charakteristický polynom je popsán výrazem \ref{eq:lfsr-fibonacci-A-rev-poly}. Realizace inverzního čítače je na obrázku \ref{fig:lfsr-fibonacci-rev}.

\vzorec{eq:lfsr-fibonacci-rev}{
\mathbf{A}^{-1} = \left|
  \begin{matrix}
    0  & 1  & 0  & \ldots & 0 \\
    0  & 0  & 1  & \ldots & 0 \\
    \vdots & \vdots & \vdots & \ddots & \vdots \\
    1  & a_1 & a_2 & \dots & a_{n-1} \\
  \end{matrix}
  \right|}{}{}

\vzorec{eq:lfsr-fibonacci-A-rev-poly}{
  p_{A^{-1}}(x)=x^n+a_{n-1}\cdot{}x^{n-1}+a_{n-2}\cdot{}x^{n-2}+\ldots+a_1\cdot{}x+1
}{}{}

\image{fig:lfsr-fibonacci-rev}{
\input{obrazky/lfsr-fibonacci-rev}}
{Reverzní Fibonacci LFSR $n=3$ a $p(x)=x^3+x^2+1$}

Souhrn požadavků na realizaci je vidět v tabulce \ref{tab:size-fibonacci}, kde $k$ je počet nenulových koeficientů charakteristického polynomu.
Pro tuto realizaci ovšem není podmínkou použití hradel XOR2 a lze využít i složitější hradla a ušetřit místo.

\tabulka{tab:size-fibonacci}{
\begin{tabular}{lll}
  \hline
  Hradlo & Velikost & Počet   \\\hline
  DFF    & 5        & $n$     \\ %dffpx1_d
  MUX2   & 2.333    & $n$     \\ %mux2x1_d
  XOR2   & 2        & $k - 1$ \\ %exor2x1_d
  AND2   & 1.333    & $n - 1$ \\ %and2x1_d
  OR2    & 1.333    & $1$     \\ %or2x1_d
  \hline
  \multicolumn{2}{l}{$\Sigma$} & $8.666\cdot{}n + 2\cdot{}k - 2 $ \\ 
\end{tabular}}{Odhad velikosti dopředného Fibonacci LFSR}

\tabulka{tab:size-fibonacci-fwdrev}{
\begin{tabular}{lll}
  \hline
  Hradlo & Velikost & Počet   \\\hline
  DFF    & 5        & $n$     \\
  MUX3\footnote{Kombinace OAI222 a INV1} & 3.5      & $n$ \\
  XOR2   & 2        & $k - 1$ \\
  AND2   & 1.333    & $n - 1$ \\
  OR2    & 1.333    & $1$     \\
  MUX2   & 2.333    & $k$     \\
  \hline
  \multicolumn{2}{l}{$\Sigma$} & $9.8333\cdot{}n + 4.333\cdot{k} - 2$ \\ 
\end{tabular}}{Odhad velikosti obousměrného Fibonacci LFSR}



%%%%%%%%%%%%%%%%%%%%%%%
%%%%% Galois LFSR %%%%%
%%%%%%%%%%%%%%%%%%%%%%%
%\subsubsection{Galois LFSR}
%
%Galois LFSR, jinak taky nazývaný \uv{one-to-many}, \uv{internal XOR gates} vuyžívá posuvný registr délky $n$, který je přerušen pomocí hradel XOR.
%Galois LFSR popsán maticí $\mathbf{A}$ ve tvaru \ref{eq:lfsr-galois-A}. Ukázkovou realizaci lze vidět na obrázku \ref{fig:lfsr-galois}.
%
%\vzorec{eq:lfsr-galois-A}{
%\left| 
%  \begin{matrix} 
%    0   &  0  &  0  & \ldots & 0   & 1   \\ 
%    1   &  0  &  0  & \ldots & 0   & a_1 \\ 
%    0   &  1  &  0  & \ldots & 0   & a_2 \\ 
%    0   &  0  &  1  & \ldots & 0   & a_3 \\ 
%    \vdots & \vdots & \vdots & \ddots & \vdots & \vdots \\
%    0   &  0  &  0  & \ldots & 1   & a_n \\
%  \end{matrix}\right|}{}{}
%
%\image{fig:lfsr-galois}{
%\input{obrazky/lfsr-galois}}
%{Galois LFSR $n=3$ a $p(x)=x^3+x^2+1$}
%
%Souhrn požadavků na realizaci je vidWt v tabulce \ref{tab:size-galois}. Definujeme $k$ jako počet nenulových koeficientů charakteristického polynomu. Narozdíl od Fibonacci LFSR 
%je zde nutnost použít hradla XOR2.
%
%\tabulka{tab:size-galois}{
%\begin{tabular}{lll}
%  \hline
%  Hradlo & Velikost & Počet   \\\hline
%  DFF    &          & $n$     \\
%  XOR2   &          & $k - 2$ \\
%  \hline
%  \multicolumn{2}{l}{$\Sigma$} & $ n\cdot + (k-2)\cdot $
%\end{tabular}}{Velikost Galois LFSR čítače}
%
%
