\documentclass[a4paper,french,12pt]{article}

\title{Logique Programmable --- CTD1}
\author{}
\date{Dernière compilation~: \today{} à \currenttime}

\usepackage{../styles}
\usepackage{enumitem}

\begin{document}

\maketitle

\begin{enumerate}

    \item Citer les niveaux d'abstraction de conception d'un circuit électronique, du moins élevé au plus élevé.

        physique --- logique --- RTL --- algorithmique

    \item Parmi ces niveaux, lequel correspond aux outils d'EDA (Electronic Design Automation)~?

        RTL

    \item Le language VHDL est-il un language de description ou de programmation~?

        De description.

    \item Quelles sont les deux fonctions de ce langage~?

        Simulation et synthèse.

    \item Dans un fichier VHDL, à quoi sert l'entité~?
        À quoi sert l'architecture~?

        L'entité décrit les entrées et sorties.
        L'architecture décrit les étapes nécessaires pour l'implémentation.

    \item Compléter en VHDL l'entité du bloc suivant.
        Vous utiliserez les types \texttt{std\_logic} et \texttt{std\_logic\_vector}.

        \begin{center}
            \includegraphics[width=0.4\linewidth]{./img/ctd1-q6-bloc.png}
        \end{center}

        \lstinputlisting{./vhdl/ctd1-q6.vhd}

    \item Compléter le chronogramme suivant (sortie Q d'une bascule D).

        \includegraphics[width=\linewidth]{./img/ctd1-q7-chronogramme.png}

    \item Compléter le chronogramme suivant (sortie S d'un multiplexeur de bus), sachant que

        \begin{lstlisting}[gobble=12]
            S <= A when SEL = '0' else
                 B;
        \end{lstlisting}

        \begin{center}
            \includegraphics[width=0.6\linewidth]{./img/ctd1-q8-chronogramme.png}
        \end{center}

    \item Compléter le chronogramme suivant~:

        \begin{lstlisting}[gobble=12]
            S <= A when SEL = '0' else
                 B;
        \end{lstlisting}

        \begin{center}
            \includegraphics[width=0.6\linewidth]{./img/ctd1-q9-chronogramme.png}
        \end{center}

    \item Compléter les phrases selon les schémas ci-dessous~:

        \includegraphics[width=\linewidth]{./img/ctd1-q10.png}

        Le schéma 1 est combinatoire asynchrone. \\
        Le schéma 2 est séquentiel synchrone. \\
        Le schéma 3 est séquentiel asynchrone. \\
        Le schéma 4 est combinatoire synchrone.

    \item Les circuits ci-dessous sont-ils synchrone/asynchrone~? combinatoire/séquentiel~?
        Donner leur description en VHDL\@.

        \begin{enumerate}

            \item Combinatoire asynchrone

                \begin{center}
                    \includegraphics[width=0.5\linewidth]{./img/ctd1-q11-1.png}
                \end{center}

                \begin{lstlisting}[gobble=20]
                    s <= not (a and b and (c or d));
                \end{lstlisting}

            \item Séquenciel asynchrone

                \begin{center}
                    \includegraphics[width=0.5\linewidth]{./img/ctd1-q11-2.png}
                \end{center}

                \begin{lstlisting}[gobble=20]
                    s <= not (s and b and (c or d));
                \end{lstlisting}

            \item Combinatoire synchrone

                \begin{center}
                    \includegraphics[width=0.5\linewidth]{./img/ctd1-q11-3.png}
                \end{center}

                \begin{lstlisting}[gobble=20]
                    process (clk)
                        begin
                            if rising_edge (clk) then
                                s <= a and b and (c or d);
                            end if;
                    end process;
                \end{lstlisting}

        \end{enumerate}

    \item Les circuits ci-dessous sont-ils synchrone/asynchrone~? combinatoire/séquentiel~?
        Donner le schéma.

        \begin{itemize}

            \item Séquenciel asynchrone

                \begin{lstlisting}[gobble=20]
                    s <= a or b and s;
                \end{lstlisting}

            \item Combinatoire synchrone

                \begin{lstlisting}[gobble=20]
                    process (clk, rst)
                        begin
                            if rst = '1' then
                                s <= '0';
                            elsif rising_edge (clk) then
                                s <= a and b
                            end if;
                    end process;
                \end{lstlisting}

        \end{itemize}

\end{enumerate}

\end{document}
