\addcontentsline{toc}{chapter}{Teoretická část studentské práce}
\chapter{Sběrnice MIL-STD-1553B}
\label{chptr:milstd1553b}
\section{Základní popis}
Z hlediska rozdělení komunikačních sběrnic je MIL-STD-1553B \textbf{sériovou} sběrnicí, používající \textit{master-slave} model pro řízení datového toku. Byl vyvinut Americkou armádou, a~i~přesto, že existují modernější a~bezpečnější sběrnice (Firewire, ATM, FDDI - viz \cite{Young1997}), je v~současnosti stále využíván z~důvodu obtížné implementace nové technologie do zaběhlých systémů. \cite{StanOrly2019OtSo} \\
Protože standard vznikl v~80. letech 20. století a~hlavním požadavkem byla především spolehlivost, nelze jej považovat za příliš bezpečný proti kybernetickým útokům. O~této problematice rozsáhle pojednávají publikace \cite{Open_systems_avionics_network_to_replace_MIL-STD-1553}  a~\cite{StanOrly2019OtSo}.
\section{Stručná historie}
Myšlenka pro vytvoření sběrnice MIL-STD-1553 vznikla po druhé světové válce s~rostoucí složitostí a~komplexností subsystémů v~leteckých technologiích. Stávalo se téměř nemožným, aby každé dva~komunikující subsystémy vyžadovaly speciální komunikační kanál.
Proto byla v~roce 1968 na žádost americké vlády zformována skupina odborníků, kteří dostali za úkol vytvořit komunikační sběrnici, která by umožňovala bezpečnou a~multiplexovanou komunikaci mezi jednotlivými periferiemi. \cite{earhartmil} \\
Reakcí bylo v~roce 1973 uvedení standardu sběrnice \textbf{MIL-STD-1553}. Standard byl v~následujících letech dvakrát aktualizován, z~čehož vznikly dvě modifikace: MIL-STD-1553A (starší verze – 1975)a~MIL-STD-1553B (novější verze – 1978). \cite{earhartmil} \cite{Delong2017} \\
Verze B se v~nezměněné podobě používá dodnes a~byla upravována jen v~podobě vyhlášek (angl. \textit{notices}), které pouze měnily některé zaběhlé termíny a~odstranily omezení na letecké systémy. Poslední vyhláška (číslo 7) vyšla v~roce 2008. \cite{Delong2017} \\
V roce 2018 byla uvedena revize MIL-STD-1553C, která zařazuje požadavky na elektromagnetickou kompatibilitu do samostatného dokumentu a~pozměňuje některé operace s~terminálem. \cite{milbusC}
\subsection{Použití sběrnice}
Historicky první implementace sběrnice (verze A) byly  ve stíhacím letounu F-16 a~vojenské helikoptéře AH-64A Apache. Ověřování v~praxi rychle podnítilo myšlenku standard zrevidovat, protože dostupné funkce nestačily pro požadavky systému.  \cite{Delong2017} \\
Roku 1981 přijalo standard NATO a~vydalo vlastní verzi pod názvem STANAG~3838, která byla použila v~mnoha vojenských systémech (např. Hawk 1T trainer, Lynx helicopter, SAK 57 automatic cannon...).
\subsection{Specifikace standardů MIL-STD-1553A a~MIL-STD-1553B}
Novější standard MIL-STD-1553B je skoro ve všech ohledech složitější a~rozsáhlejší; umožňuje například použití utilit jako \textit{Mode code} (viz \ref{subs:mode_code}) a~\textit{Broadcast mode} (viz \ref{subs:broadcast}), které rozšiřují možnosti komunikace mezi subsystémy a~nabízí lepší přizpůsobení architektury podle požadavků konkrétní aplikace za cenu větší komplexnosti. \\
Rovněž definuje některé další požadavky (například elektromagnetickou kompatiblitu, parametry transformátoru ve fyzické vrstvě), které starší standard nechával na návrháři, jiné naopak redefinuje (specifikace vazebního členu (\textit{coupler}), doba odezvy RT) a~některé dokonce vynechává (použité konektory ve sběrnici). Konkrétních změn je poměrně velký počet a~protože se tato práce zabývá právě novějším standardem, nebudu se na ně dále odkazovat. \cite{milbus1553B_datasheet}

\section{Zařízení ve sběrnici}
Protože celá sběrnice je postavena na topologii \textit{master-slave}, mají jednotlivé subsystémy pevně danou hierarchii a~rozdělují se na \textbf{řadič sběrnice} (angl. \textit{bus controller}, zkr. \textbf{BC}), \textbf{terminál} (angl. \textit{remote terminal}, zkr. \textbf{RT}) a~\textbf{sledovač sběrnice} (angl. \textit{bus monitor}, zkr. \textbf{BM}).

\begin{figure}[!h]
  \begin{center}
    \includegraphics[scale=0.8]{obrazky/topologie_sbernice.pdf}
  \end{center}
  \caption{Topologie zařízení ve sběrnici}
\end{figure}
\subsection{Řadič sběrnice}
Řídící jednotka celé sběrnice (tedy \textit{master}), která jediná může zahájit přenos mezi jednotlivými periferiemi. Kromě řízení přenosu také analyzuje a~vede historii chybných zpráv. Ve sběrnici se může v~aktivním stavu nacházet pouze jeden \textit{řadič sběrnice}, ale v~některých aplikacích lze nalézt tzv. záložní řadič sběrnice (angl. \textit{backup bus controller}), který může sloužit jako náhrada.
\subsection{Terminál}
Představuje periferii pro všechna zařízení, která mezi sebou mají komunikovat po sběrnici (tedy \textit{slaves}). Bez dovolení řadiče sběrnice nemůže sama zahájit přenos. Standard MIL-STD-1553B dovoluje až 31 terminálů, každý má ve sběrnici svou unikátní adresu. Právě touto periferií se tato práce zabývá a~její návrh je v~části \ref{chptr:arch}.
\subsection{Sledovač sběrnice}
Ve sběrnici se může nacházet ještě tzv. sledovač sběrnice, který pouze monitoruje celý přenos a~ukládá data do off-line paměti. Nijak nezasahuje do komunikace, nemůže posílat data do jiných periferií. Používá se pro zpětnou revizi komunikace například v~případě poruchy.

\section{Komunikace mezi periferiemi}
\label{sec:komunikace}
Na sběrnici může dojít k~několika požadavkům na komunikaci, kde každá má jasně daný průběh. Průběh přenosu dat ve všech případech řídí BC, jednotlivá slova se pak rozdělují na \textbf{příkazové slovo} (nese informaci o~nadcházející akci, inicializuje přenos), \textbf{datové slovo} (obsahuje přenášená data) a~\textbf{stavové slovo} (nese informaci o~stavu zařízení). Jejich podrobný popis je v~oddílu \ref{sec:formaty_ramcu}. \\
Komunikace se neomezuje pouze na přenos dat, řadič sběrnice může například požádat vybraný terminál o~synchronizaci časovače, zakázat další komunikaci nebo jej restartovat. Konkrétní příkazy jsou součástí \textbf{příkazového slova} v~režimu \textit{Mode code} a~jsou rozebrány v~kapitole \ref{subs:prikaz_ramec}. \\
\begin{figure}[h]
  \begin{center}
    \includegraphics[scale=0.63]{obrazky/kodovani_manchester.pdf}
  \end{center}
  \caption{Kódování Manchester – převzato z~ \cite{milbus1553B_datasheet}}
  \label{fig:kodovani_man}
\end{figure}
\pagebreak
Všechny bity na sběrnici jsou přenášeny za pomoci tzv. \textbf{kódování \textit{Manchester}}, což je speciální druh kódování, který rovněž používá např. \textit{Ethernet} \cite{Kutilek2013} a~který umožňuje synchronní přenos bez nutnosti zavádět do sběrnice hodinový signál. Výsledný signál je totiž exkluzivním součtem datového a~hodinového signálu, takže signál neustále mění svou napěťovou úroveň i~při konstantní logické hodnotě. \\
Kromě synchronního přenosu kódování umožňuje přenášet signál přes transformátory, čehož pak využívá fyzická vrstva. Nevýhodou je obecně nutnost daný signál dekódovat a~také omezení použitelné šířky pásma dané přenosové linky na polovinu (bez kódování by bylo možné přenášet informaci dvojnásobnou rychlostí).
\pagebreak
\section{Fyzická vrstva}
Nejnižší vrstva komunikace má ve standardu 1553B striktně definované požadavky. Vychází především ze skutečnosti, že signál je po lince přenášen v~tzv. \textbf{direfenciální podobě}, což znamená, že log.~1 je reprezentována kladným napětím a~log.~0 záporným napětím (oproti zemi). Výhodou je především větší odolnost vůči elektromagnetickému rušení (což je u~leteckých systémů nezbytné). \cite{DrbalJakub2014Irss}\\
Nicméně periferie, které sběrnice MIL-STD-1553B používá, jsou uzpůsobeny pro signály se společnou a~zemí, kde log.~0 je na potenciálu země. Pro převod mezi diferenciálním přenosem a~přenosem se společnou zemí se dají použít speciální integrované obvody, které buď mohou být přímo součástí periferie, nebo na externím čipu. Jako příklad externího čipu lze uvést obvody HI-15690 a~HI-1565 od firmy Holt Integrated Circuits \cite{pNVnIOVk0QWVppiT}. \\
\begin{figure}[h!]
	\includegraphics[scale=0.435]{obrazky/diff_na_nes.pdf}
	\caption{Ukázka převodu diferenciálního přenosu na nesymetrický}
\end{figure}

Kabely, které přenášejí signál po lince, by měly být realizovány pomocí \textbf{kroucené dvojlinky} a~odstíněny proti rušení. Standard přímo definuje, že jejich kapacita nesmí přesahovat 30 pF na stopu (tedy přibližně 90 pF na metr) a~jmenovitá impedance musí mít hodnotu od 70 do 85 $\Omega$ při frekvenci 1 MHz. Jmenovitý útlum pak nesmí při stejné frekvenci být větší než 5 dB na 100 m. Vodiče, které splňují dané požadavky a~jsou přímo vyráběné pro implementaci sběrnice, nabízí firmy jako Digikey nebo Connectivity Power Control. \\
Mezi přijímačem diferenciálního signálu a~samotnou linkou jsou potřeba ještě \textbf{oddělovací transformátory}, které slouží nejen pro galvanické oddělení, ale hlavně pro impedanční přizpůsobení. Na lince je požadavek držet koncovou impedanci na hodnotě, kterou mají vodiče, periferie ale mají vysokou vstupní impedanci pro nízký příkon a~lepší citlivost. Pokud by byla sběrnice připojena k~periferii přímo, docházelo by k~odrazu signálu a~vzniku stojatých vln na vedení, což by způsobilo rušení a~riziko poškození periferií. Standard uvádí možnosti \textbf{přímého} (\textit{direct}) spojení skrze jeden transformátor a~dva rezistory, případně pak spojení skrze další \textbf{spojovací} (\textit{coupling}) transformátor, který snižuje rušení a~je požadován v~aplikacích, kde je velká vzdálenost mezi sběrnicí a~periferií.  \\
\begin{figure}
	\begin{center}
		\includegraphics[scale=0.75]{obrazky/fyzicka_vrstva.pdf}
	\end{center}
	\caption{Možné způsoby připojení terminálu ke~sběrnici (upraveno z~\cite{milbus1553B_datasheet})}
\end{figure}
\pagebreak
\section{Formáty slov}
\label{sec:formaty_ramcu}
Všechny informace jsou po sběrnici přenášeny ve formě zpráv, kde každá zpráva obsahuje slova s~délkou 20 bitů. První tři bity vždy zabírá \textbf{synchronizační vlna}, která jako jediná není modulována kódováním Manchester. U~příkazového a~stavového slova začíná synchronizace v~log.~1, u~datového rámce v~log.~0, což je záměrně pro odlišení přenosu dat. \\
Poslední bit je pak paritní (doporučená je lichá parita). Zbylých 16 bitů každé slovo využívá jiným způsobem a~některé jsou dokonce ignorovány, protože nemají využití.
\subsection{Příkazové slovo}
\label{subs:prikaz_ramec}
Každá komunikace je zahájena \textbf{příkazovým slovem}, které terminál informuje o~následující akci. Současně může obsahovat hodnotu \textit{\textbf{Mode code}}.
\begin{figure}[!h]
	\begin{center}
		\includegraphics[scale=0.64]{obrazky/slova/prikazove_slovo.pdf}
	\end{center}
	\caption{Význam jednotlivých bitů v~příkazovém slově}
\end{figure}

\begin{enumerate}
\item
	\textbf{Adresa terminálu} – Zabírá 5~bitů, může tedy obsahovat číslo od 0 do 31. Adresu 11111 standard doporučuje nepoužívat jako unikátní adresu pro jeden terminál, ale pro tzv. \textit{Broadcast message}, která je doručena všem terminálům na sběrnici.. To znamená, že sběrnice může mít až 31 terminálů.  
\item
	\textbf{T/R} – Bit určující, zda bude terminál přijímat zprávu (log.~0) nebo vysílat.
\item
	\textbf{Subadresa} – Určuje adresu subsystému daného terminálu. Komplexnější terminály mohou subsystémů obsahovat více, standard jich umožňuje mít až 30. Adresy 00000 a~11111 se pak používají jako signalizace terminálu, že následujících 5 bitů neurčuje délku zprávy, ale jeden z~příkazů \textit{Mode code}. \\
	První bit se dá optimálně použít pro rozlišení mezi \textbf{příkazovým} a~\textbf{stavovým slovem} (viz \ref{subs:status_ramec}), čímž dojde k~redukci adres subsystémů na polovinu.
\item
	\textbf{Počet datových slov/\textit{mode code}} – Při \textit{Mode code} specifikuje daný příkaz. Jinak určuje délku přenášených dat (tedy počet \textbf{datových slov}), která může dosahovat hodnoty 31.
\end{enumerate}
\subsubsection{Mode code}
\label{subs:mode_code}
Funkce \textit{\textbf{Mode code}} \footnote{Termín je bez překladu} přidává řadiči sběrnice širokou paletu možností, jak řídit přenos po sběrnici, od synchronizace časovačů v~terminálech až po jejich reset. Všechny možné funkce jsou v~tabulce \ref{tab:mode_code}. Jsou rozděleny jednak podle toho, zda při jejich realizaci dochází k~přenosu dat (tj. v~dané zprávě je přítomno datové slovo), a~také zda je možné je použít pro režim \textit{Broadcast}. Většina jich nenajde u~jednodušších aplikací velké využití, proto jsou zde popsány jen ty nejdůležitější z~nich. Podrobný popis všech funkcí lze nalézt v~publikaci \cite{milbus1553B_datasheet}.
% Table generated by Excel2LaTeX from sheet 'List1'
\begin{table}[htbp]
  \centering
  \caption{Výpis funkcí režimu \textit{Mode code}}
    \begin{tabular}{rrlll}
    \toprule
    T/R     & \textit{Mode code} & Funkce & Přítomnost & Možnost   \\
    bit	  &		    &	   &	datového	 & použití \\
    		  &		    &	   &	slova	 & \textit{Broadcast} \\
    \midrule
    1 & 00000 & Dynamické řízení sběrnice & Ne    & Ne \\
    1 & 00001 & Synchronizace & Ne    & Ano \\
    1 & 00010 & Odeslání stavového slova & Ne    & Ne \\
    1 & 00011 & \textit{"Initiate self-test"} & Ne    & Ano \\
    1 & 00100 & \textit{"Transmitter shutdown"} & Ne    & Ano \\
    1 & 00101 & \textit{"Override transmitter shutdown"} & Ne    & Ano \\
    1 & 00110 & \textit{"Inhibit terminal flag bit"} & Ne    & Ano \\
    1 & 00111 & \textit{"Override inhibit terminal flag bit"} & Ne    & Ano \\
    1 & 01000 & Reset terminálu & Ne    & Ano \\
    1 & 01001 & \textit{"Reserved"} & Ne    & - \\
    1 & 01111 & \textit{"Reserved"} & Ne    & - \\
    1 & 10000 & Přenos vektorového slova & Ano   & Ne \\
    0 & 10001 & Synchronizace & Ano   & Ano \\
    1 & 10010 & \textit{"Transmit last command"} & Ano   & Ne \\
    1 & 10011 & \textit{"Transmit bit word"} & Ano   & Ne \\
    0 & 10100 & \textit{"Selected transmitter shutdown"} & Ano   & Ano \\
    0 & 10101 & \textit{"Override sel. transmitter shutdown"} & Ano& Ano \\
    1/0   & 10110 & \textit{"Reserved"}& Ano   & - \\
    1/0   & 11111 & \textit{"Reserved"} & Ano   & - \\
    \bottomrule
    \end{tabular}%
  \label{tab:mode_code}%
\end{table}%
\pagebreak

\begin{itemize}
\item
	\textbf{Dynamické řízení sběrnice} (angl. \textit{Dynamic bus control}, zkratka \textit{DBC}) – Příkaz, kterým řadič sběrnice žádá terminál o~převzetí řízení sběrnice. Terminál (a celá aplikace) k~tomu musí být pochopitelně přizpůsoben. Odpověď terminálu je v~následovaném stavovém slově (viz \ref{subs:status_ramec}).
\item
	\textbf{Synchronizace} – Požadavek na synchronizaci terminálu, tj. resetování vnitřního časovače. Požadavek může být následován datovým slovem (při 10001 je následován, při 00001 nikoliv), který může specifikovat další konfiguraci terminálu. O~jakou konfiguraci se jedná a~jak je bitově reprezentována, zůstává na návrháři. V~obou případech je odpovědí terminálu stavové slovo.
\item
	\textbf{Odeslání stavového slova} (angl. \textit{Transmit status word}) – Příkaz pro zaslání stavového slova, který se týká posledního příkazového slova, jenž terminál obdržel. Hodnota stavového slova je po odeslání v~systému ponechána.

\item
	\textbf{Reset terminálu} (angl. \textit{Reset remote terminal}) – Okamžitý reset terminálu. Terminál před resetem odešle stavové slovo o~momentálním stavu.
\item
	\textbf{Odeslání vektorového slova} (angl. \textit{Transmit vector word}) – Způsobí zaslání stavového slova daného terminálu, následovaného datovým slovem, kde je specifikována porucha, kterou terminál má. Jedná se o~reakci na obdržení předchozího stavového slova, ve kterém byl Service request bit v~log.~1.
\end{itemize}
\subsection{Datové slovo}
Na lince by se datové slovo bez předchozího \textbf{příkazového slova} nemělo nikdy objevit. Terminál bezpečně datové slovo rozezná podle odlišné \textit{synchronizační vlny}.
\begin{figure}[!h]
	\begin{center}
		\includegraphics[scale=0.64]{obrazky/slova/datove_slovo.pdf}
	\end{center}
	\caption{Význam jednotlivých bitů v~datovém slově}
\end{figure}

\begin{enumerate}
\item
	\textbf{Data} – Jedno datové slovo může mít maximálně 16 bitů, které reprezentují přenášenou informaci mezi periferiemi. Právě tyto bity terminál dekóduje a~předá systému, který jej obsluhuje.    
\end{enumerate}
\subsection{Stavové slovo}
\label{subs:status_ramec}
Terminál po skončení komunikace ve většině případů odesílá \textbf{stavové slovo}, kde může informovat \textbf{řadič} o~vzniklých problémech. \textbf{Stavové slovo} není nikdy odesláno, pokud hrozí kolize dat (režim \textit{Broadcast} nebo neočekávaná chyba).
\begin{figure}[!h]
	\begin{center}
		\includegraphics[scale=0.64]{obrazky/slova/stavove_slovo.pdf}
	\end{center}
	\caption{Význam jednotlivých bitů ve stavovém slově}
\end{figure}

\begin{enumerate}
\item
	\textbf{Adresa terminálu} – Adresa koncového terminálu (viz \ref{subs:prikaz_ramec}). 
\item
	\textbf{Chyba zprávy} – Při log.~1 signalizuje chybný přenos jednoho nebo více datových rámců. Přenos je považován za chybný, jestliže:
	\begin{enumerate}
		\item
		Nebyla splněna kontrola parity
		\item
		Přenos nezačal synchronizačním impulzem
		\item
		Data nebyla přenášena kódováním Manchester (případně forma byla chybná)
	\end{enumerate}  
\item
	\textbf{Instrumentace} \textit{(volitelné)} – Umožňuje odlišení příkazového a~stavového slova tím, že u~stavového je vždy v~log.~0 (u příkazového je pak v~log.~1). Je na návrháři, zda této možnosti využije. Pokud ne, je tento bit jednoduše ignorován.
\item
	\textbf{Žádost o~obsluhu} \textit{(volitelné)} – Bit, kterým může terminál signalizovat řadiči sběrnice, že něco není v~pořádku. Ten by na to měl reagovat a~pomocí \textit{Mode code} (Transmit vector word) zjistit, o~co se konkrétně jedná. Použití tohoto bitu je volitelné a~není-li využit, měl by být v~log.~0.
\item
	\textbf{Rezervováno} – 3 bity, které v~současné verzi standardu nemají využití a~měly by zůstat v~log.~0.
\item
	\textbf{Příjem v~režimu \textit{Broadcast}} – Nabývá log.~1, pokud bylo předchozí slovo odesláno všem terminálům (byl využit režim \textit{Broadcast})
	\pagebreak
\item
	\textbf{Zaneprázdnění} \textit{(volitelné)} – Nabývá log.~1, jestliže terminál momentálně není schopen doručit data z/do subsystému. Řadič sběrnice by na to měl adekvátně reagovat a~zvážit například další akce. Není-li tato funkce implementována, bit je vždy v~log.~0. 
\item
	\textbf{Příznak chyby subsystému} \textit{(volitelné)} – Signalizuje (log.~1) možnou chybu na straně subsystému, čímž dává řadiči sběrnice informaci, že data mohou být chybná. Při nevyužití je vždy v~log.~0.
\item
	\textbf{Potvrzení DBC} \textit{(volitelné)} – Odpověď terminálu na požadavek řadiče sběrnice o~dynamické řízení sběrnice. Je-li v~log.~1, terminál požadavek přijímá a~stává se novým řadičem (viz \ref{subs:mode_code}).
\item
	\textbf{Příznak chyby terminálu} \textit{(volitelné)} – Signalizuje (log.~1) možnou chybu na straně terminálu. při nevyužití je vždy v~log.~0.	
	
\end{enumerate}
\section{Řízení přenosu po sběrnici}
\label{sec:rizeni}
Komunikace na sběrnici probíhá formou zpráv o~přesně určeném formátu a~pořadí jednotlivých slov. Ve všech případech ji iniciuje řadič sběrnice, nemůže se tedy stát, že by terminál zahájil odesílání dat sám od sebe. Mezi jednotlivými zprávami je nutné dodržovat \textbf{časový interval} (angl. \textit{intermessage gap}), který standard uvádí na $4 \; \mu s$. \\
Terminály mají rovněž určenou dobu \textbf{dobu odezvy} (angl. \textit{response time}), která je mezi $4$ a~$12 \; \mu s$. Řadič sběrnice ji měří od poloviny posledního odeslaného bitu do poloviny prvního přijatého bitu.
\subsection{Přenos dat z~BC do RT}
Řadič sběrnice zahájí komunikaci příkazovým slovem, kde specifikuje vybraný terminál a~nastaví jej pro příjem dat. Následují datová slova. Po obdržení všech slov terminál pošle stavové slovo s~informací o~možných chybách.
\begin{figure}[!h]
	\begin{center}
		\includegraphics[scale=0.65]{obrazky/zpravy/BC_to_RT.pdf}
	\end{center}
	\caption{Struktura zprávy při přenosu dat z~řadiče sběrnice do terminálu}
\end{figure}

\subsection{Přenos dat z~RT do BC}
Řadič sběrnice zahájí komunikaci příkazovým slovem, kde specifikuje vybraný terminál a~nastaví jej pro odesílání dat. Terminál odpoví stavovým slovem a~odpovídajícím počtem datových slov.
\begin{figure}[!h]
	\begin{center}
		\includegraphics[scale=0.65]{obrazky/zpravy/RT_to_BC.pdf}
	\end{center}
	\caption{Struktura zprávy při přenosu dat z~terminálu do řadiče sběrnice}
\end{figure}

\subsection{Přenos dat z~RT do RT}
Řadič sběrnice nejprve nastaví příkazovými slovy terminál 1 pro příjem dat a~terminál 2 pro odeslání dat. Terminál 2 zašle do řadiče stavové slovo a~datovým slovem pak přenese data do terminálu 1. Ten po přijetí všech dat pošle řadiči stavové slovo.
\begin{figure}[!h]
	\begin{center}
		\includegraphics[scale=0.65]{obrazky/zpravy/RT_to_RT.pdf}
	\end{center}
	\caption{Struktura zprávy při přenosu dat z~terminálu 2 do terminálu 1}
\end{figure}

\subsection{Mode code bez dat}
Pokud řadič při použití režimu \textit{Mode code} neoperuje s~daty, zasílá do terminálu pouze příkazové slovo, na které terminál odpovídá stavovým slovem.
\begin{figure}[!h]
	\begin{center}
		\includegraphics[scale=0.65]{obrazky/zpravy/mode_code_no_data.pdf}
	\end{center}
	\caption{Struktura zprávy při použití režimu \textit{Mode code} bez přenosu dat}
\end{figure}

\subsection{Mode code následovaný daty}
Je-li v~režimu \textit{Mode code} přítomno datové slovo, může být buď přenášen z~řadiče do terminálu, nebo být součástí odpovědi terminálu na daný příkaz.
\begin{figure}[!h]
	\begin{center}
		\includegraphics[scale=0.65]{obrazky/zpravy/mode_code_data.pdf}
	\end{center}
	\caption{Struktura zprávy při použití režimu Mode code s~přenosem dat}
\end{figure}
\subsection{Broadcast}
\label{subs:broadcast}
Režim \textit{Broadcast} \footnote{Termín není překládán, protože čeština neobsahuje vhodný ekvivalent} lze použít zaslání zprávy všem terminálům na sběrnici. Řadič sběrnice jej aktivuje tak, že jako adresu terminálu v~příkazovém slově použije bitovou hodnotu 11111. Komunikace má pak stejný průběh jako v~předešlých případech. \\ 
Při přenosu dat z~terminálu 2 do terminálu 1 je příkazové slovo s~adresou 11111 zasláno terminálu 1, terminál 2 pak obdrží instrukci, že má poslat data (která obdrží všechny ostatní terminály). \\
\textit{Mode code} má \textit{Broadcast} povolen jen v~určitých případech (viz tabulka  \ref{tab:mode_code}).
Při odesílání dat v~režimu \textit{Broadcast} řadič neočekává přijetí \textbf{stavového slova} v~odpovědi, protože by došlo ke~kolizi dat.


\chapter{Standard ECSS-E-ST-50-13C}
\label{chptr:eccs}
\section{Základní popis}
Protože sběrnice našla své využití i~ve vesmírných technologiích, byl v~roce 2008 vydán standard ECSS-E-ST-50-13C, který do velké míry shrnuje originální standard (a~často se na něj odkazuje), nabízí ale rovněž praktické tipy pro návrh periferií, konkretizaci fyzické vrstvy s~ohledem na moderní technologie a~především pak přichází s~tzv. \textbf{službami} (angl. \textit{services}), kterými nabízí modernější řízení sběrnice. \cite{ECSS-E-ST-50-13C} \\
Zároveň se zmíněný standard daleko více věnuje i~subsystémům, které obsluhují periferie sběrnice, např. pro ně definuje názvy příkazů, které periferiím posílají, a~obecně popisuje komunikaci na vyšší komunikační vrstvě.

\section{Služby}
Implementace a~použití služeb nevyžaduje žádné změny v~hardwarovém návrhu, z~pohledu komunikace se jedná spíš o~doporučené použití utilit, které sběrnice již obsahuje. Je nutno dodat, že služby nejsou nezávislé na sobě a~\textbf{služba synchronizace komunikace} je potřebná pro všechny ostatní. \\
\subsection{Služba synchronizace komunikace \protect\footnote{Anglický termín: \textit{Communication synchronize service}}}
Rozděluje komunikaci na tzv. \textbf{komunikační rámce}, kde u~každého rámce je předem určeno, jakou ponese informaci. Na začátku každého rámce je použito příkazové slovo v~režimu \textit{Mode code} (viz \ref{subs:mode_code}) s~datovým slovem, který specifikuje číslo daného komunikačního rámce. Následuje série \textbf{rezervovaných} (angl. \textit{populated}) a~\textbf{nerezervovaných} (angl. \textit{unpopulated}) slotů (angl. \textit{content}), které mohou obsahovat zprávy.  \\ 
Rezervované sloty jsou vyhrazeny pro závažné okolnosti, které musí být ošetřeny co nejdříve. Nerezervované pak může řadič sběrnice použít pro zahájení komunikace (která není "závažná"). Pokud chce tedy odeslat více zpráv za sebou, musí pokaždé počkat, až bude volný nerezervovaný slot. \\
Na obrázku \ref{fig:komunikacni_ramec} je odkryta struktura komunikačních rámců. Pokud je zároveň použita \textbf{služba času}, každý první komunikační rámec neobsahuje číslo rámce, ale údaje k~synchronizaci času. \\
Počet rámců, slotů a~zpráv v~příslušných blocích komunikace není pevně stanoven a~je určen konkrétní aplikací.
\begin{figure}[h!]
	\begin{center}
		\includegraphics[scale=0.55]{obrazky/sluzby/komunikacni_ramec.pdf}
	\end{center}
	\caption{Struktura komunikačního rámce při použití \textbf{služby času}}
	\label{fig:komunikacni_ramec}
\end{figure}
\subsubsection{Pravidla obsazování slotů zprávami}
Obsazování slotů ovládá řídící subsystém (řadič sběrnice). Jejich provedení je vždy až v~následujícím komunikačním rámci, ve kterém jsou zprávy odeslány v~příslušných slotech. \\
Komunikace mezi subsystémem a~periferií probíhá za pomocí \textbf{příkazů} "Proveď" (angl. \textit{Submit}) a~"Obdrž" (angl. \textit{Deliver}) a~\textbf{požadavkem}, který je unikátní pro každou službu. \\
\begin{figure}[h!]
	\begin{center}
		\includegraphics[scale=0.65]{obrazky/sluzby/pravidla.pdf}
	\end{center}
	\caption{Obsazování volných slotů v~komunikačních rámcích}
	\label{fig:pravidla}
\end{figure}
\pagebreak

"Proveď" signalizuje subsystému, aby v~dalším komunikačním rámci odeslal zprávu v~příslušných slotech. Konkrétní podoba zprávy (tj. jaké sloty obsadí a~jak bude dlouhá) je určena konkrétním požadavkem. \\
Na obrázku \ref{fig:prikazy_a_pozadavky} je vzorová struktura komunikace na úrovni subsystémů. Subsystém vznese \textbf{Požadavek} a~konkrétní \textbf{příkaz}, řadič jej zaznamená a~čeká, až bude volný komunikační rámec. Zatímco komunikace mezi periferiemi je řízena komunikačními rámci, subsystém může periferii kontaktovat kdykoliv (a naopak).
\begin{figure}
	\centering
	\includegraphics[scale=0.55]{obrazky/sluzby/prikazy_a_pozadavky.pdf}
	\caption{Ukázka možné komunikace mezi subsystémy a~periferiemi}
	\label{fig:prikazy_a_pozadavky}
\end{figure}
\pagebreak
\subsection{Služba času \protect\footnote{Anglický termín: \textit{time service}}}
Je-li použita, řadič sběrnice periodicky každých několik komunikačních rámců (počet závisí na návrhu) posílá na začátku rámce v~režimu \textit{Broadcast} požadavek k~synchronizaci vnitřního časovače (viz \ref{subs:mode_code} – Synchronizace). \\
Samotná synchronizace může probíhat dvěma způsoby:
\begin{enumerate}
	\item
	Řadič vyšle zprávu, která obsahuje data k~synchronizaci. (tzv. \textit{Time message} Terminál zprávu přijímá a~rovnou s~daty operuje (tj. považuje daný čas za validní). \\
	Výhodou je jednoduchost, nevýhodou pak nepřesnost, která roste s~délkou údaje o~čase.
	\item
	Řadič vyšle zprávu, která obsahuje data k~synchronizaci. (\textit{Time message}) Terminál zprávu přijímá, ale nepracuje s~daty, dokud nedostane další povel (tzv. \textit{Time synchronization message}). Ten je obvykle vysílán po oddělené lince. \\
	Výhodou je přesnější synchronizace (a odstranění nepřesností u~delších údajů o~čase), nevýhodou komplexnost a~vyšší nároky na linku.
\end{enumerate}
Na úrovni subsystémů je pak komunikace s~periferiemi řízena \textit{požadavky} \textbf{údaj o~čase} (angl. \textit{TimeData}) a~\textbf{synchronizace času} (angl. \textit{TimeSynchronise}).
\begin{figure}[h!]
		\includegraphics[scale=0.53]{obrazky/sluzby/sluzba_casu.pdf}
	\caption{Průběh časové synchronizace za využití \textbf{služby času} na úrovni subsystémů}
	\label{fig:sluzba_casu}
\end{figure}
\pagebreak


\subsection{Služba přenosu dat \protect\footnote{Zahrnuje dvě služby, označované ve standardu ECSS-E-ST-50-13C jako \textit{Set Data} a~\textit{Get Data service})}}
Představuje jednodušší variantu řízení komunikace na sběrnici. \\
Pro zahájení přenosu dat používá subsystém \textit{požadavky} \textbf{odeslat data} (angl. \textit{SendData}) a~\textbf{přijmi data} (angl. \textit{ReceiveData}). \\
Po přenosu pak může v~případě odesílání dat za pomoci \textit{požadavku} \textbf{Zjisti stav} vyžádat od terminálu informace o~přenosu (a zjistit například možné chyby). V~případě přijímání dat si řídící subsystém vyžádá data od řadiče \textit{požadavkem} \textbf{Přečti data} (angl. \textit{ReadData}). \\
Průběh provedení služby je na obrázcích \ref{fig:sluzba_odeslat_data} a~\ref{fig:sluzba_prijmi_data}. Komunikace podle standardu MIL-STD-1553B probíhá v~komunikačních rámcích. Podle toho, zda přenos využívá \textit{rezervované} nebo \textit{nerezervované} sloty rozděluje standard službu na \textbf{typ 1} a~\textbf{typ 2}.
Výhodou této služby je jednoduchost a~nízké požadavky na terminál a~řadič sběrnice, nevýhodou pak skutečnost, že délka zprávy je pevně daná při návrhu hardwaru a~při potřebě přenášet větší množství dat je potřeba \textbf{požadavek} opakovat.
\pagebreak
\begin{figure}[h!]
	\centering
	\includegraphics[scale=0.5]{obrazky/sluzby/odeslat_data.pdf}
	\caption{Průběh komunikace při odesílání dat pomocí \textbf{služby přenosu dat}}
	\label{fig:sluzba_odeslat_data}
\end{figure}

\begin{figure}[h!]
	\centering
	\includegraphics[scale=0.5]{obrazky/sluzby/prijmi_data.pdf}
	\caption{Průběh komunikace při příjmu dat pomocí \textbf{služby přenosu dat}}
	\label{fig:sluzba_prijmi_data}
\end{figure}
\pagebreak
\subsection{Služba toku datových bloků \protect\footnote{Anglický termín: \textit{Data block transfer service}}}
U komplexnějších systémů, kde je vyžadována vysoká spolehlivost, organizace a~možnost přenášet velké množství dat, najde uplatnění \textit{služba toku datových bloků}. Ta podporuje rozdílnou délku dat, \textit{handshake} (potvrzení zprávy o~přijetí) a~více možností, jak komunikaci přizpůsobit konkrétní potřebě. \\
Požadavky pro řízení komunikace se stejně jako u~\textbf{služby přenosu dat} nazývají \textbf{Odeslat data} a~\textbf{Přijmi Data}. Standard požaduje, aby před každým zahájením komunikace došlo k~resetování periferie, k~čemuž slouží požadavek \textbf{Reset}. \\
Velikost jednoho datového bloku závisí na způsobu využití subadres, které jsou součástí \textbf{Deskripce datového bloku}.
\begin{enumerate}
	\item
	\textbf{adresování typu \textit{flat}} – 2 bity z~prostoru pro subadresu jsou použity pro rozlišení různých částí datového bloku. Délka zprávy pak nemůže být delší než 1024 bajtů.
	\item	
	\textbf{adresování typu \textit{deep}} – Celý datový blok je přenášen jednou subadresou, takže zpráva může dosahovat délky 4096 bajtů.
\end{enumerate}
Služba umožňuje použít dva způsoby přenosu, tzv. \textit{Quality of service} (zkr. \textit{QoS}) \footnote{Protože \textit{Quality of Service} je v~telekomunikaci zaběhlý pojem, je termín ponechán bez překladu}
\begin{enumerate}
	\item
	\textit{\textbf{Best effort}} – Datové toky jsou přenášeny za sebou (v souladu s~komunikačními rámci), aniž by periferie potvrzovala přijetí dat.
	\item
	\textit{\textbf{Verified Length}} – Za každým datovým blokem následuje \textbf{Potvrzení přenosu datového bloku}.
\end{enumerate}

\subsubsection{Odesílání dat}
Přenos dat z~řadiče do terminálu probíhá pomocí následujících zpráv:
\begin{itemize}
	\item
	\textbf{Přenos datového bloku} (zkr. DDB) – (angl. \textit{Distribution Data Block}) Obsahuje pouze přenášená data, která mohou mít velikost od 1 do 1024 (nebo 4096 v~případě adresování \textbf{deep}).  
	\item
	\textbf{Deskripce datového bloku} (zkr. DTD) – (angl. \textit{Distribution Transfer Descriptor}) Nese informaci o~následujícím přenášeném bloku a~zároveň jej lze použít pro reset (při zahájení komunikace). Je více rozebrán v~příloze \ref{fig:DTD}.
	\item	
	\textbf{Potvrzení přenosu datového bloku} (zkr. DTC) – (angl. \textit{Distribution Transfer Confirmation}) Odeslán terminálem po každém přijetí datového bloku (pokud je jako \textit{QoS} použit \textit{Verified Length}) (viz \ref{fig:DTC}).
\end{itemize}
\pagebreak
Komunikace mezi subsystémy je iniciována požadavkem Reset, který v~dalším komunikačním rámci následuje \textbf{Odeslat data}. Reset způsobí odeslání DTD s~příkazem k~resetování terminálu, požadavek Odeslat data invokuje přenos DTD a~DDB. Na obdržení a~zpracování dat má terminál jeden celý komunikační rámec. Pokud je \textit{Quality of service} typu \textit{Verified Length}, další rámec odešle terminál řadiči DTC a~až v~následujícím je připraven přijmout další datový blok; v~případě \textit{Best effort} může místo odesílání DTC rovnou přijmout datový blok. \\

\subsubsection{Přijímání dat}
Přenos dat z~terminálu do řadiče probíhá pomocí následujících zpráv:
\begin{itemize}
	\item
	\textbf{Příjem datového bloku} (zkr. ADB) – (angl. \textit{Acquisition Data Block}) Obsahuje pouze přenášená data, která mohou mít velikost od 1 do 1024 (nebo 4096 v~případě adresování \textbf{deep}). 
	\item
	\textbf{Žádost o~příjem} (zkr. ATR) – (angl. \textit{Acquisition Transfer Request}) Zpráva, kterou terminál zahajuje přenos signalizuje řadiči, že má data k~odeslání (řadič pravidelně kontroluje každý terminál, zda nechce zahájit přenos). Obsahuje velikost dat a~další informace o~tom, jak má komunikace probíhat. (viz \ref{fig:ATR})
	\item
	\textbf{Potvrzení příjmu} (zkr. ATC) – (angl. \textit{Acquisition Transfer confirmation}) Odeslána řadičem poté, co obdrží všechna data z~terminálu. Terminál nemůže poslat další zprávu, dokud neobdrží ATC – forma \textit{handshake}. (viz \ref{fig:ATC})
\end{itemize}

Protože terminál nemůže sám od sebe zahájit přenos dat, řadič v~každém komunikačním rámci kontroluje, zda má určený terminál data k~odeslání. Pokud ano, odešle terminál řadiči zprávu \textbf{Žádost o~příjem} a~ve druhém následujícím komunikačním rámci je přenos realizován (zpráva \textbf{Příjem datového bloku}) a~zakončen zprávou \textbf{Potvrzení příjmu}. Při \textbf{Best effort} je zpráva s~daty přijata každý 3. komunikační rámec, u~\textbf{Verified length} každý pátý. \\

Přijímání a~odesílání dat je ilustracemi popsáno v~příloze \ref{priloha:sluzba_dat_toku}.




\addcontentsline{toc}{chapter}{Praktická část studentské práce}
\chapter{Návrh architektury terminálu}
\label{chptr:arch}
\section{Základní požadavky}
\label{sec:zakl_pozadavky}
Návrh architektury terminálu podle standardu MIL-STD-1553B je závislý na požadavcích, které jsou kladeny na aplikaci. V~rámci této práce je požadavkem především:
\begin{itemize}
	\item
	Správné dekódování signálu
	\item
	Zpracování přijatých dat a~jejich předání subsystému
	\item
	Detekce a~určení chyb, které nastaly při přenosu
	\item
	Odeslání dat do sběrnice podle pravidel komunikace
	\item
	Možnost použití \textit{Mode code} režimu – vystavení hodnoty na výstup a provedení pro \textbf{Synchronizaci} a \textbf{Odeslání stavového slova} (viz \ref{subs:mode_code})
\end{itemize}
Kompletní seznam požadavků, ke~kterým je vztažena verifikace a~následné testy, jsou v~tabulce \ref{tab:ver_matice}. Implementace architektury bude provedena do FPGA obvodu Spartan3 od firmy Xillinx. Jako \textbf{pracovní frekvenci volím 32 MHz}. \\
Na lince může dojít hned k~několika chybám, které terminál musí umět vyhodnotit a~zpracovat podle standardu MIL-STD-1553B. Chyby mohou být rozděleny na \textbf{chyby na lince} a~\textbf{chyby v~terminálu}.
\subsection{Chyby na lince}
Jedná se o~chyby, které terminál vyhodnotí již při přijetí dat. Může jít o:
\begin{itemize}
	\item
	Chybnou paritu v~datovém či příkazovém slově
	\item
	Neznámé kódování, resp. nerozpoznatelnou logickou hodnotu.
	\item
	Neočekávatelný průběh komunikace (např. předčasné ukončení)
\end{itemize}
Společným znakem je, že na každou z~těchto chyb reaguje terminál přiřazením log.~1 do bitu \textbf{Chyba zprávy} ve \textbf{Stavovém slově} (viz \ref{subs:status_ramec}). \\
Stavové slovo je odesláno v~případě, že komunikace jinak proběhla v~pořádku a~pouze obsahovala chyby v~datech (např. vadná parita). Pokud není jasné, zda komunikace probíhá tak, jak terminál předpokládá, stavové slovo odesláno není (aby nedošlo ke~kolizi dat).
\subsection{Chyby v~terminálu}
Pokud byla zpráva přijata bez komplikací a~k~chybě došlo až při jejím zpracování, jde o~\textbf{chybu v~terminálu} a~ve \textbf{Stavovém slově} je pro tuto signalizaci určen bit \textbf{Příznak chyby terminálu}. \\
V našem případě může jít jen o~neplatný přístup do \textbf{verifikačního bufferu} nebo do subsystému. Protože po zpracování řadič sběrnice očekává stavové slovo, je při výskytu této chyby odesláno vždy.

\begin{table}[htbp]
  \centering
  \caption{Verifikační matice terminálu}
    \begin{tabular}{c|l|l}
    \toprule
Číslo& Požadavek	&Způsob\\
pož. & & ověření \\
\midrule
1	&Frekvence FPGA: 32 MHz	& viz \ref{sec:zakl_pozadavky} \\
\midrule
2	&Frekvence linky: 1 MHz	& viz \ref{sec:struktura_term} \\
\midrule
3	&Parita zpráv: lichá	& simulace\\
\midrule
4	&Cílová technologie FPGA: Spartan3	& viz \ref{sec:synteza} \\
\midrule
5	&Odolnost proti metastabilitě	& viz \ref{sec:struktura_term} \\
\midrule
6	&Rozpoznání synchronizační vlny 	&simulace\\
	&a správné dekódování signálu Manchester	&\\
	\midrule
7	&Odesílání dat podle standardu MIL-STD-1553B 	&simulace\\
	&(synchronizační vlna + manchester kódování)	&\\
	\midrule
8	&Příjem dat od řadiče a~uložení do 	&simulace\\
	&subsystému dle standardu MIL-STD-1553B	&\\
	\midrule
9	&Příjem požadavku na odeslání dat ze subsystému	&simulace\\
	& a~provedení dle standardu MIL-STD-1553B	&\\
	\midrule
10	&Rozpoznání chyby ve zprávě a~adekvátní	&simulace\\
	&reakce (stavové slovo)	&\\
	\midrule
11	&Rozpoznání chybné zprávy (požadavku) 	&simulace\\
	&a adekvátní reakce (stavové slovo)	&\\
	\midrule
12	&Příjem zprávy v~režimu \textit{Broadcast}	&simulace\\
	\midrule
13	&Příjem požadavku v~režimu \textit{Mode code} 	&simulace\\
	&(provedení a~vystavení na výstup)	&\\
	\midrule
14	&Příjem požadavku pro odeslání dat	&simulace\\
	& v~režimu \textit{Broadcast}	&\\
	\midrule
15	&Příjem požadavku \textit{Mode code} 	&simulace\\
	&v režimu \textit{Broadcast}	&\\
	\midrule
16	&Reakce na chybu v~terminálu & simulace \\
	\bottomrule
    \end{tabular}%
  \label{tab:ver_matice}%
\end{table}%
\pagebreak

\section{Fyzická vrstva}
Mezi sběrnicí a~obvodem FPGA je přítomen pomocný obvod, který zpracovává symetrický signál a~převádí jej na nesymetrický. Pro svou aplikaci jsem zvolil obvod HI-15690 od firmy Holt Integrated circuits. Vnitřní struktura obvodu je v~příloze \ref{fig:obvod}. \\
Když je signál ze sběrnice v~kladné polaritě, vývod RX je v~log.~1; při záporné polaritě je naopak $\overline{\rm RX}$ v~log.~1. Je-li sběrnice na potenciálu země (neprobíhá přenos), oba vývody jsou v~log.~0. Při příjmu dat je RXEN v~log.~1.\\
Pro vysílání do sběrnice používá terminál svorky TX (pro kladnou polaritu) a~$\overline{\rm TX}$ (pro zápornou polaritu). Při vysílání je TXINH v~log.~1.
\begin{figure}[!h]
	\centering
	\includegraphics[scale=0.6]{obrazky/architektura/prenos_obvod.pdf}
	\label{fig:prenos_obvod}
	\caption{Průběh signálu na obvodu HI-15690 při přijímání dat a~odesílání dat}
\end{figure}

\begin{figure}
	\centering
	\includegraphics[scale=0.5]{obrazky/architektura/propojeni_fpga.pdf}
	\label{fig:propojeni_fpga}
	\caption{Propojení mezi FPGA a~obvodem HI-15690}
\end{figure}
Na obrázku \ref{fig:propojeni_fpga} je naznačeno, jak může vypadat propojení mezi obvodem FPGA a~pomocným obvodem HI-15690. Výstup terminálu je připojen přímo na vývod TX a~s bitovou negací na vývod $\overline{\rm TX}$, díky čemuž je zapotřebí jediný výstup. Vstup do terminálu už tak jednoduše ošetřit nejde, obvod FPGA musí zpracovávat oba vývody RX a~$\overline{\rm RX}$. Povolovací signál je výstupem stavového automatu, který určuje, zda terminál vysílá (log.~1) nebo přijímá data (log.~0). \\
\section{Vnitřní struktura terminálu}
\label{sec:struktura_term}
Standard MIL-STD-1553B nezmiňuje žádnou doporučenou architekturu terminálu (ani jiných periferií), provedení je tedy čistě na návrháři. Některé publikace, které se sběrnicí zabývají, obsahují hrubý náčrt architektury; některé z~nich jsou uvedeny v~příloze \ref{priloha:architektury}. \\
V rámci bakalářské práce jsem pak navrhl vlastní architekturu (viz obrázek \ref{fig:architektura_terminalu}). \\
Architektura se skládá ze čtyř hlavním komponent, kde každá má svoji specifickou funkci a~dají se použít nezávisle na sobě. Data ze sběrnice přijímá a~vyhodnocuje \textbf{Manchester dekodér}, které následně posílá do \textbf{Hlavního stavového automatu}. Ten podle přijatých bitů rozhoduje o~řízení celého terminálu – podle potřeby data ukládá do \textbf{verifikačního bufferu} a~je-li k~tomu vyzván \textbf{příkazovým slovem}, odesílá zprávy po sběrnici za pomoci \textbf{Manchester enkodéru}. Terminál je schopen komunikovat se subsystémem skrze jednoduchou proprietární sběrnici. \\
Vstupní signály jsou připojeny na dva klopné obvody typu D (\textbf{DFF}), které zabraňují metastabilitě.

\begin{figure}[h!]
	\centering
	\includegraphics[scale=0.47]{obrazky/praktic/praktic_architektura.pdf}
	\caption{Návrh architektury terminálu}
	\label{fig:architektura_terminalu}
\end{figure}
\pagebreak
\subsection{Manchester dekodér}
Na dekodér je přímo připojen vstupní signál ze sběrnice. Jeho hlavním úkolem je data přijmout, dekódovat, vyhodnotit případné chyby a~informace poslat do Hlavního stavového automatu. Samotný dekodér rovněž obsahuje stavový automat, který má 8 stavů a~slouží hlavně pro rozpoznání \textit{synchronizační vlny}, kterou musí podle standardu MIL-STD-1553B začínat každé slovo. \\

\begin{figure}[h!]
	\centering
	\includegraphics[scale=0.52]{obrazky/praktic/dacoder_arch.pdf}
	\label{fig:architektura_terminalu}
	\caption{Architektura Manchester dekodéru}
\end{figure}
Při vzorkování signálu jsou použity tři čítače a~jeden datový registr. \\
K samotnému dekódování logické hodnoty slouží \textit{mster$\_$tmr}, který signalizuje přetečení vždy ve čtvrtině periody linky, což je místo, kde se v~manchester kódování nachází dekódovaná logická hodnota. Do datového registru (\textit{decoded$\_$data}) je při každém takovém přetečení uložena logická hodnota ze sběrnice – pokud ji nelze přesně určit, je \textit{data$\_$error} v~log.~1, což zastaví vzorkování a~vyšle do Hlavního stavového automatu zprávu o~chybě. \\
Při každém uložení hodnoty do registru je inkrementován čítač \textit{data$\_$cntr}, který přeteče při dosažení hodnoty 17, což je délka zprávy. Tím byla přijata celá zpráva a~podle parity je vyhodnocena její správnost. Výpočet parity je sekvenční za pomoci klopného obvodu (\textit{parity$\_$bit}), který průběžně provádí exkluzivní součin právě přijaté hodnoty s~posledně přijatou hodnotou. \\
Poslední čítač je (\textit{err$\_$tmr}), který nezávisle na ostatních kontroluje, zda vstupní signál jedné polarity nepřekračuje 1.5násobek periody, což by znamenalo chybu na lince. Pokud za úspěšně přijatým slovem ihned následuje další slovo, dekodér rovnou měří synchronizaci, v~opačném případě přechází do výchozího stavu. \\

\begin{figure}[h!]
	\centering
	\includegraphics[scale=0.52]{obrazky/praktic/comm_prubeh.pdf}
	\label{fig:comm_prubeh}
	\caption{Posloupnost stavů v~dekodéru při přijímání příkazového slova}
\end{figure}

Stavový diagram je uveden na \ref{fig:decoder_FSM}. Z~výchozího stavu (\textbf{IDLE}) se automat může dostat do dvou možných stavů (\textbf{CMD$\_$SYNC$\_$1} nebo \textbf{DATA$\_$SYNC$\_$1}), podle polarity vstupního signálu. Protože \textit{synchronizační vlna} musí zůstat v~jedné polaritě po dobu 1.5krát perioda linky (tedy 1.5 $\mu$s), je v~těchto dvou stavech spuštěn čítač \textit{sync$\_$tmr}, který přeteče v~hodnotě 1.375 $\mu$s – záměrně před koncem očekávatelné délky první půlvlny synchroničního pulzu, kvůli případnému nepřesnému časování. Pokud čítač stihne přetéct, stavový automat přechází do druhého stavu (\textbf{CMD$\_$SYNC$\_$2} nebo \textbf{DATA$\_$SYNC$\_$2}), v~opačném případě (při ztrátě signálu či předčasné změně polarity) přechází do výchozího stavu. \\
Ve druhém stavu setrvává po dobu čtvrt periody (0.25 $\mu$s), poté zkontroluje, zda došlo na lince ke~změně polarity. Pokud ano, přechází do třetího stavu \\
(\textbf{CMD$\_$SYNC$\_$3} nebo \textbf{DATA$\_$SYNC$\_$3}), jinak přechází do výchozího stavu. \\
V posledním stavu setrvá znovu 1.375 $\mu$s (zbytek \textit{synchronizační vlny}), pak postupuje do posledního stavu (\textbf{DATA$\_$REC}), ve kterém jsou vzorkována data. \\ 

\begin{figure}[h!]
	\centering
	\includegraphics[scale=0.66]{obrazky/praktic/decoder_state_machine.pdf}
	\label{fig:decoder_FSM}
	\caption{Stavový diagram Manchester dekodéru}
\end{figure}

Do hlavního stavového automatu dekodér posílá dekódované paralelní slovo (bez parity), informaci o~validitě slova (ve formě \textit{RX$\_$done} – odesláno při každém přechodu ze stavu \textbf{DATA$\_$REC} do stavu \textbf{IDLE}) a~pokud přijímá data (tj. nachází se v~jiném stavu než výchozím), je tato skutečnost signalizována signálem \textit{RX$\_$flag}. \\

\begin{table}[htbp]
  \centering
  \caption{Interpretace signálu \textit{RX$\_$done}}
    \begin{tabular}{c|l}
    \toprule
	Hodnota & Význam \\
	\midrule
	"00" & Výchozí stav; žádná data nebyla přijata \\
	"01" & Přijato příkazové slovo \\
	"10" & Přijato datové slovo \\
	"11" & Došlo k~chybě při vzorkování nebo je nesprávná parita \\
    \bottomrule
    \end{tabular}%
  \label{tab:RX_done}%
\end{table}%
\pagebreak

\subsection{Manchester enkodér}
Enkodér obsahuje tři čítače, jeden posuvný registr a~sekvenční generátor parity, který je součástí posuvného registru. \\
Čítač (\textit{timer}) slouží pro měření délky synchronizační vlny a~dosahuje maxima po 1.5 $\; \mu$s. Zároveň (ve stavu \textbf{ENCODE}) signalizuje uplynutí doby jedné periody, tedy 1 $\; \mu$s, po čemž je inkrementován druhý čítač (\textit{data$\_$counter}), který počítá odeslané bity a~dosahuje maxima při hodnotě 17 (šířka každého odeslaného slova + parita). \\
Poslední čítač (\textit{freq$\_$divider}) dělí hodinový signál FPGA na frekvenci 1 MHz, která je použita pro kódování dat podle manchester kódování (viz obrázek \ref{fig:kodovani_man}). \\
Posuvný registr obsahuje v~okamžiku zahájení vysílání data z~Hlavního stavového automatu a~je používán pro serializaci dat. Po odeslání všech 16 bitů je do registru vsazena parita, která je při odesílání počítána sekvenčním generátorem parity. \\

\begin{figure}[h!]
	\centering
	\includegraphics[scale=0.59]{obrazky/praktic/encoder_arch.pdf}
	\label{fig:encoder_arch}
	\caption{Architektura Manchester enkodéru}
\end{figure}
\pagebreak

Enkodér přijímá data z~Hlavního stavového automatu a~na vyžádání vysílá do sběrnice, včetně \textit{synchronizační vlny} a~paritního bitu. \\
Obsahuje jednoduchý stavový automat o~čtyřech stavech (viz obrázek \ref{fig:encoder_FSM}). Při startu vysílání přechází automat z~výchozího stavu (\textbf{IDLE}) do stavu \textbf{SYNC$\_$POS} (pro příkazové slovo) nebo \textbf{SYNC$\_$NEG} (pro datové slovo), ve kterém vysílá první část synchronizační vlny. Poté přechází do opačného stavu (po \textbf{SYNC$\_$POS} do \textbf{SYNC$\_$NEG} a~naopak) a~vysílá druhou část synchronizační vlny. Nakonec následuje stav \textbf{ENCODE}, ve kterém vysílá data z~Hlavního stavového automatu. \\
\begin{figure}[h!]
	\centering
	\includegraphics[scale=1]{obrazky/praktic/encoder_state_machine.pdf}
	\caption{Stavový diagram Manchester enkodéru}
	\label{fig:encoder_FSM}
\end{figure}
\pagebreak

\subsection{Hlavní stavový automat}
Řídící komponentou celého terminálu je stavový automat o~11 stavech.
Pro řízení má k~dispozici dva interní čítače – \textit{cntr} (5-bit) a~\textit{err$\_$tmr} (11-bit). První jmenovaný slouží pro počítání přijatých nebo odeslaných datových slov. Druhý je nastaven tak, že jedno maximum má při 50 $\mu$s, což je maximální doba, kterou v~některých stavech terminál čeká na příchozí slovo (po jejím překročení je vyhodnoceno, že došlo k~\textbf{chybě na lince}); druhé maximum je v~3 $\mu$s, což maximální prodleva subsystému k~odpovědi na uložení/načtení dat (překročení je vyhodnoceno jako \textbf{chyba v~terminálu}).  \\
Dále stavový automat používá několik registrů:
\begin{itemize}
\item
 \textit{sw$\_$msg$\_$err}, \textit{sw$\_$brdcast} a~\textit{sw$\_$term$\_$err} ukládají hodnoty pro stavové slovo, které představuje signál \textit{stat$\_$w}
\item
 \textit{saddr} a~\textit{dw$\_$cnt} jsou 5-bitové registry; obsahují hodnoty z~příkazového slova a~jsou dále použity při vyhodnocování podmínek. 
\item
 \textit{mode$\_$c} a~\textit{sync} nesou informaci z~požadavku \textit{Mode code} a~jejich hodnota je vystavena jako výstupní signál z~terminálu. 
\item
 Klopný obvod \textit{data$\_$wr} je použit pro generování krátkého impulzu při zápisu do Manchester enkodéru. Poslední klopný obvod \textit{msg$\_$err} drží informaci o~výskytu chyby ve zprávě při příjmu dat a~na základě jeho obsahu terminál rozhoduje o~další akci.
\end{itemize}

Signál \textit{TR$\_$output} nabývá log.~1, pokud terminál odesílá data na linku. Implementován je pro koordinaci s~obvodem HI-15690, viz obrázek \ref{fig:propojeni_fpga}.

Stavový diagram lze rozdělit na 4 hlavní části:
\begin{enumerate}
\item
\textbf{Příjem datových slov} – Bylo přijato příkazové slovo s~požadavkem o~přijetí dat. Data jsou přijata (\textbf{DATA$\_$RX}), uložena (\textbf{MEM$\_$WR}), stavové slovo je nastaveno (\textbf{MEM$\_$WR$\_$DONE}) a~odesláno (\textbf{STAT$\_$WRD$\_$TX}).
\item
\textbf{Odesílání datových slov} – Bylo přijato příkazové slovo s~požadavkem o~odeslání dat. Data jsou načtena z~paměti (\textbf{MEM$\_$READ}), je odesláno stavové slovo (\textbf{MEM$\_$RD$\_$DONE}) a~následně data (\textbf{DATA$\_$TX}).
\item
\textbf{Broadcast} – Bylo přijato příkazové slovo s~\textit{Broadcast adresou} (stav \textbf{BROADCAST}). Na základě dalšího přijatého slova následuje \textbf{odesílání} nebo \textbf{příjem datových slov}.
\item
\textbf{Mode code} – Bylo přijato příkazové slovo s~\textit{Mode code} požadavkem. Po jeho provedení (\textbf{MODE$\_$CODE}) je odesláno stavové slovo (\textbf{STAT$\_$WRD$\_$TX}). Pokud požadavek je zároveň v~režimu \textit{Broadcast} (\textbf{MC$\_$BROADCAST}), stavové slovo odesláno není.
\end{enumerate}
Jednotlivé stavy jsou detailně popsány \textbf{v příloze \ref{priloha:FSM_brain}}.
\pagebreak
\begin{figure}[th!]
	\centering
	\includegraphics[scale=0.5]{obrazky/praktic/FSM_brain_State_diagram.png}
	\label{fig:FSM_brain_SM}
	\caption{Hlavní stavový diagram}
\end{figure}
\pagebreak

\subsection{Verifikační buffer}
Dočasné úložiště dat, do kterého Hlavní stavový automat ukládá právě přijatá (nebo z~paměti načtená) data, která následně ukládá do proprietární paměti (nebo odesílá do enkodéru). \\
Jedná se o~jednoduchou paměť SRAM typu FIFO (\textit{first in, first out}).
Velikost bufferu je 512 bitů, tedy tolik, aby byla schopna pojmout 32 16-bitových slov, což je maximum, které může obsahovat jedna zpráva.
Pro zápis a~čtení z~bufferu jsou součástí komponenty čítače \textit{head} a~\textit{tail}, které fungují jako ukazatele na adresu v~bufferu. \\
Při každém zápisu do bufferu jsou na adresu ukazatele \textit{head} zapsána příslušná data a~čítač je inkrementován. Při čtení z~bufferu jsou data odebrána z~místa, kam ukazuje \textit{tail}, a~čítač je rovněž inkrementován. \\
Pokud \textit{head} i~\textit{tail} ukazují na stejnou adresu, buffer je prázdný. Pokud má \textit{head} o~jedna menší hodnotu než \textit{tail}, buffer je plný. \\
Princip bufferu je na obrázku \ref{fig:SRAM}. \\

\begin{figure}[b!]
	\centering
	\includegraphics[scale=0.65]{obrazky/praktic/SRAM.pdf}
	\caption{Princip verifikačního bufferu s~ukazateli \textit{head} a~\textit{tail}}
	\label{fig:SRAM}
\end{figure}
\pagebreak
\subsection{Sloha terminálu}
Sloha \textit{Terminal$\_$package} obsahuje konstanty, které jsou použity při VHDL popisu komponent. Je zde možné měnit například adresu terminálu. Ostatní konstanty (například parita nebo \textit{Mode code} hodnoty) jsou určené standardem MIL-STD-1553B a~měly by zůstat beze změny.

\subsection{Komunikace s~proprietární pamětí}
\label{subs:komun_p_pamet}
Proprietární paměť (viz \ref{subsec:p_memory}) je komponenta, simulující subsystém pro účely verifikace. \\
Zápis a~čtení jsou terminálem inicializovány pomocí krátkých řídících signálů \textit{write$\_$en} a~\textit{read$\_$en}, paměť po provedení dané operace posílá odpověď signály \textit{write$\_$done} a~\textit{read$\_$done}. \\
Data jsou přenášena z/do terminálu formou stavových signálů \textit{data$\_$in} a~\textit{data$\_$out}. \\
Terminál společně s~požadavkem na čtení/zápis dodává (kromě případných dat) i~subadresu v~podobě 5-bitového slova (\textit{subaddress}), který určuje paměťový blok pro manipulaci s~daty. \\
Časování jednotlivých signálů je znázorněno na obrázku \ref{fig:memory_timing}.

\begin{figure}[b!]
	\centering
	\includegraphics[scale=0.52]{obrazky/praktic/memory_timing.pdf}
	\caption{Časování u~proprietární paměti}
	\label{fig:memory_timing}
\end{figure}
\pagebreak
\section{Verifikační prostředí}
\label{sec:ver_env}
Pro ověření funkčnosti a~splnění všech zadaných požadavků bylo vytvořeno verifikační prostředí, které umožňuje simulovat průběhy chybné i~bezchybné komunikace a~přijímat odpovědi z~terminálu. Obsahuje komponentu \textbf{BFM} (\textit{bus functional model}) a~\textbf{Verifikační slohu}. \\
Výběr testu je možný přiřazením do proměnné TEST$\_$NUMBER. Kromě procesu, ve kterém jsou popsány všechny testovací scénaře, obsahuje topový modul prostředí (\textit{Environment.vhd}) také proces pro generování hodinového signálu FPGA (32 MHz).

\begin{figure}[h!]
	\centering
	\includegraphics[scale=0.56]{obrazky/praktic/Verifikace.pdf}
	\caption{Struktura verifikačního prostředí}
	\label{fig:verifikace}
\end{figure}

\subsection{Verifikační testy}
Testy, kterým je terminál v~rámci verifikace podroben, přímo vyplývají z~požadavků, které jsou na něj kladeny. v~tabulce \ref{tab:testy} jsou testy shrnuty, včetně názvu a~čísla požadavku, které pokrývá. Testy jsou rozepsány v~příloze \ref{priloha:ver_testy}.

\begin{table}[htbp]
  \centering
  \caption{Seznam testů pro verifikaci}
    \begin{tabular}{c|l|l|c}
    \toprule
	Číslo & Název testu & Pokryté   & Výsledek\\
	testu & 			& požadavky &  \\
	\midrule
	\midrule
	1 		& Odeslání datových slov & 3, 6, 7, 8, 9 & $\checkmark$\\
	\midrule
	2		& Chyba na lince (v příkazovém slově) & 10 (1/3) & $\checkmark$\\
	\midrule
	3		& Chyba na lince (v datovém slově) & 10 (2/3) & $\checkmark$\\
	\midrule
	4		& Chyba na lince (méně datových slov) & 10 (3/3) & $\checkmark$\\
	\midrule
	5		& \textit{Mode code} požadavek & 13 & $\checkmark$\\
	\midrule
	6		& Příjem dat z~řadiče v~režimu \textit{Broadcast} & 12 (1/2) & $\checkmark$\\
	\midrule
	7		& Odeslání dat v~režimu \textit{Broadcast} & 14 & $\checkmark$\\
	\midrule
	8		& Příjem dat z~terminálu v~režimu \textit{Broadcast} & 12 (2/2) & $\checkmark$\\
	\midrule
	9		& \textit{Mode code} požadavek v~režimu \textit{Broadcast} & 15 & $\checkmark$\\
	\midrule
	10		& Chyba v~terminálu & 16 & $\checkmark$\\
	\bottomrule
    \end{tabular}%
  \label{tab:testy}%
\end{table}%
\pagebreak

\subsection{BFM – Model sběrnice}
Simulační model emulující průběhy signálů na lince MILBUS. Pro příjem dat je použita již vytvořená komponenta \textbf{Manchester dekodér}, BFM tedy reaguje na signály \textit{RX$\_$done} a~\textit{data$\_$out}. \\
Ze souboru \textit{Environment.vhd} přijímá BFM příkaz k~provedení komunikace ve formě signálu \textit{command}, kde je číslem (\textit{command$\_$number}) specifikován druh komunikace (odeslání stavového slova, odeslání příkazového slova, odeslání chybného slova, přijetí slova, atd.). \\

\subsection{Verifikační sloha}
Kromě definice nových datových typů, použitých pro propojení komponent (kvůli přehlednosti), zahrnuje sloha i~všechny procedury, které jsou použity pro generování slov vysílaných do terminálu. 
\begin{itemize}
\item
\textbf{BFM procedury}
\begin{enumerate}
\item
\textbf{Make$\_$sync} – Do terminálu je vyslána synchronizační vlna (podoba je specifikována v~argumentech procedury).
\item
\textbf{Make$\_$manchester} – Do terminálu je vyslán bit v~manchester kódování.
\end{enumerate}
\item
\textbf{Environment procedury}
\begin{enumerate}
\item
\textbf{Send$\_$command$\_$word} – Do terminálu je vysláno příkazové slovo, včetně vygenerované parity.
\item
\textbf{Send$\_$data$\_$word} – Do terminálu je vysláno datové slovo, včetně vygenerované parity.
\item
\textbf{Send$\_$invalid$\_$command$\_$word} – Do terminálu je vysláno příkazové slovo. Počet odeslaných bitů, správnost parity a~přítomnost \textit{synchronizační vlny} lze specifikovat v~argumentech procedury.
\item
\textbf{Send$\_$invalid$\_$data$\_$word} – Do terminálu je vysláno datové slovo. Počet odeslaných bitů, správnost parity a~přítomnost \textit{synchronizační vlny} lze specifikovat v~argumentech procedury.
\item
\textbf{Receive$\_$word} – Čekání na příjem slova z~terminálu.
\end{enumerate}
\end{itemize}

\subsection{Proprietární paměť}
\label{subsec:p_memory}
Komponenta (\textit{memory.vhd}), která v~rámci verifikace simuluje subsystém. Jedná se o~paměť se 30 subadresami, každá má kapacitu 512 bitů. \\
Paměť obsahuje vstupní signál \textit{memory$\_$func}, který ji při log.~0 vyřadí z~provozu (viz \ref{tab:testy}). Časování terminálu a~proprietární paměti je uvedeno v~sekci \ref{subs:komun_p_pamet}. \\
Struktura paměti je na obrázku \ref{fig:memory}.

\begin{figure}[h!]
	\centering
	\includegraphics[scale=0.78]{obrazky/praktic/Memory.pdf}
	\caption{Struktura proprietární paměti}
	\label{fig:memory}
\end{figure}
\pagebreak

\section{Syntéza a~implementace}
\label{sec:synteza}
Pro vytvořenou jednotku byla provedena syntéza a~implementace do obvodu FPGA Spartan3 pro model XC3S50, a~to za pomoci syntentizéru XST od firmy Xillinx. Cíl optimalizace byl pro porovnání zvolen s~ohledem \textbf{na plochu} i na \textbf{rychlost}. \\
IOB klopné obvody jsou registry, které syntetizér záměrně používá pro vstupně-výstupní signály, protože tak lze zvýšit rychlost a~spolehlivost dané aplikace. Použitá paměť RAM má dohromady kapacitu 18432 bitů, využito je pouze 512 bitů. \\

\subsection{Optimalizace s~ohledem na plochu}
Syntetizér se snaží vytvořit s~minimálním počtem použitých zdrojů – ty jsou k~nahlédnutí v~tabulce \ref{tab:area_pocet_zdroju}. \\
Statická časová analýza ukázala, že maximální použitelný kmitočet je 73.4 MHz. Hodnota \textit{Slack} (tj. rezerva k~periodě kmitočtu 32 MHz) je 17.376 ns. \\
\begin{table}[h!]
	\centering
	\caption{Celkový počet použitých zdrojů při optimalizaci s~ohledem na plochu}
	\begin{tabular}{c|ccc}
	\toprule
	Zdroj & využito & dostupné v~FPGA & obsazení [$\%$] \\
	\midrule
	LUT (4 vstupy) & 433 & 1536 & 28\\
	IOB klopné obvody & 69 & 124 & 55\\
	Klopné obvody & 154 & 1536 & 10 \\
	paměť RAM & 1 & 4 & 25 \\
	\bottomrule
	\end{tabular}
	\label{tab:area_pocet_zdroju}
\end{table}
\subsection{Optimalizace s~ohledem na rychlost}
Rychlost aplikace byla navýšena na úkor použitých zdrojů, viz tabulka \ref{tab:speed_pocet_zdroju}. \\
Maximální použitelný kmitočet je 88.747 MHz. Hodnota \textit{Slack} je 19.732 ns. \\
\begin{table}[h!]
	\centering
	\caption{Celkový počet použitých zdrojů při optimalizaci s~ohledem na rychlost}
	\begin{tabular}{c|ccc}
	\toprule
	Zdroj & využito & dostupné v~FPGA & obsazení [$\%$] \\
	\midrule
	LUT (4 vstupy) & 627 & 1536 & 40\\
	IOB klopné obvody & 69 & 124 & 55\\
	Klopné obvody & 176 & 1536 & 11 \\
	paměť RAM & 1 & 4 & 25 \\
	\bottomrule
	\end{tabular}
	\label{tab:speed_pocet_zdroju}
\end{table}

\label{chp:architecture}








