first round
authorPaul Kocialkowski <contact@paulk.fr>
Sat, 9 May 2015 10:53:53 +0000 (12:53 +0200)
committerPaul Kocialkowski <contact@paulk.fr>
Sat, 9 May 2015 10:53:53 +0000 (12:53 +0200)
annexes.tex
applications-logiques.tex
aspects-informatique.tex
avant-propos.tex
biblio.bib
conclusion.tex
introduction.tex
memoire.tex
phenomenes-circuits-temps.tex
resume.tex

index 19bd8b9..42d7e67 100644 (file)
@@ -3,30 +3,29 @@
 \addcontentsline{toc}{chapter}{Annexes}
 
 \chapter{Synthèse culturelle}
-
 \newpage
 \begin{minipage}{\textwidth}
-\includepdf[pages=1]{synthese.pdf}
+\includepdf[pages=1]{annexes/synthese.pdf}
 \end{minipage}
 \thispagestyle{plain}
 \newpage
 \begin{minipage}{\textwidth}
-\includepdf[pages=2]{synthese.pdf}
+\includepdf[pages=2]{annexes/synthese.pdf}
 \end{minipage}
 \thispagestyle{plain}
 \newpage
 \begin{minipage}{\textwidth}
-\includepdf[pages=3]{synthese.pdf}
+\includepdf[pages=3]{annexes/synthese.pdf}
 \end{minipage}
 \thispagestyle{plain}
 \newpage
 \begin{minipage}{\textwidth}
-\includepdf[pages=4]{synthese.pdf}
+\includepdf[pages=4]{annexes/synthese.pdf}
 \end{minipage}
 \thispagestyle{plain}
 \newpage
 \begin{minipage}{\textwidth}
-\includepdf[pages=5]{synthese.pdf}
+\includepdf[pages=5]{annexes/synthese.pdf}
 \end{minipage}
 \thispagestyle{plain}
 \newpage
 \label{ardui2c-photo}
 \end{figure}
 
-\lstinputlisting[caption=Ardui2c,label=ardui2c]{ardui2c.c}
+\lstinputlisting[caption=Ardui2c,label=ardui2c]{annexes/ardui2c.c}
 
 \begin{figure}[!h]
 \centering
 \label{encodage}
 \end{figure}
 
-\lstinputlisting[caption=Programme d'exemple de calcul parallèle,label=thread]{thread.c}
+\lstinputlisting[caption=Programme d'exemple de calcul parallèle,label=thread]{annexes/thread.c}
 
-\lstinputlisting[caption=Différences introduites pour tenir compte de la synchronisation,label=thread-diff]{thread.diff}
+\lstinputlisting[caption=Différences introduites pour tenir compte de la synchronisation,label=thread-diff]{annexes/thread.diff}
index 774347d..58efa3c 100644 (file)
@@ -4,16 +4,15 @@ On s'intéresse particulièrement aux interactions entre les montages électroni
 
 \section{Concepts et définitions}
 \subsection{Systèmes logiques}
-\label{section_logique} % systemes-logiques
 \label{systemes-logiques}
-Dans les systèmes électroniques logiques, l'information est représentée par des grandeurs électriques prend la forme de valeurs discrètes\citenotepage{Tocci}{4}. On définit alors deux états en chaque point du circuit, correspondants à la présence de la grandeur considérée (une tension, un courant) : c'est l'état logique \emph{haut} ou en son absence : l'état logique \emph{bas}.\\
+Dans les systèmes électroniques logiques, l'information est représentée par des grandeurs électriques prend la forme de valeurs discrètes\notecitepage{Tocci}{4}. On définit alors deux états en chaque point du circuit, correspondants à la présence de la grandeur considérée (une tension, un courant) : c'est l'état logique \emph{haut} ou en son absence : l'état logique \emph{bas}.\\
 
 On parle de système \emph{analogique} (par opposition à système logique) lorsque les grandeurs représentant l'information varient de manière continue (une infinité de valeurs est possible).\\
 Pourtant, il n'y a pas de différence fondamentale du point de vue électrique entre un système logique et un système analogique : c'est bien l'interprétation que l'on porte aux différents états possibles qui donne sens à l'information.\\
 
-Ainsi, dans la pratique, on définit un état logique en un point à partir de la tension mesurée en ce point (par rapport à la masse, le $0$ V du générateur). Les tensions correspondantes à chaque état logique sont spécifiques à la technologie des composants utilisés, il en existe plusieurs sortes et les deux plus répandues sont le TTL\acrotrad{Transistor-Transistor Logic}{logique transistor-transistor}, qui utilise des transistors bipolaires et le CMOS\acrotrad{Complementary Metal Oxide Semiconductor}{Semi-conducteur à complémentarité métal-oxide}, qui utilise des transistors à effet de champ. Pour la technologie TTL, les tensions d'alimentation sont de l'ordre de 5V. Ainsi, on attribue l'état bas à un intervalle de tensions proche de $0$ V ( de $0$ V à $0,8$ V) et l'état haut à une autre intervalle, proche de $5$ V (de $2$ V à $5$ V). L'intervalle de tensions entre $0,8$ V et $2$ V ne représente donc pas d'état logique défini.\\
+Ainsi, dans la pratique, on définit un état logique en un point à partir de la tension mesurée en ce point (par rapport à la masse, le $0$ V du générateur). Les tensions correspondantes à chaque état logique sont spécifiques à la technologie des composants utilisés, il en existe plusieurs sortes et les deux plus répandues sont le TTL\notetrad{Transistor-Transistor Logic}{logique transistor-transistor}, qui utilise des transistors bipolaires et le CMOS\notetrad{Complementary Metal Oxide Semiconductor}{Semi-conducteur à complémentarité métal-oxide}, qui utilise des transistors à effet de champ. Pour la technologie TTL, les tensions d'alimentation sont de l'ordre de 5V. Ainsi, on attribue l'état bas à un intervalle de tensions proche de $0$ V ( de $0$ V à $0,8$ V) et l'état haut à une autre intervalle, proche de $5$ V (de $2$ V à $5$ V). L'intervalle de tensions entre $0,8$ V et $2$ V ne représente donc pas d'état logique défini.\\
 
-Cette représentation dite logique de l'information présente de nombreuses applications. En effet, elle permet tout d'abord de représenter des nombres sous la forme de quantités discrètes : on parle alors de bits\citenotepage{Tocci}{10}. Un \emph{bit} représente l'unité fondamentale d'un système de numération ne pouvant prendre que deux valeurs possibles (les états logiques haut et bas), c'est à dire de la base 2. Afin de représenter des nombres plus grands que 1 (le nombre maximal représentable sur un bit), on forme des ensembles de bits (de la même manière que l'on forme des ensembles de chiffres allant de 0 à 9 pour représenter un nombre supérieur à 9 en base 10). Chaque bit porte un poids, c'est à dire qu'il représente une puissance de 2 plus ou moins élevée. Par exemple, dans la notation $\overrightarrow{101}$ en base 2, le bit de droite porte un poids 0 (il représente l'unité), le bit du milieu un poids 1 (il représente $2^1$) et le bit de gauche un poids 2 ($2^2$). On lit alors la valeur numérique en base 10 : $1 \cdot 1 + 0 \cdot 2^1 + 1 \cdot 2^2 = 5$. Un ensemble de 8 bits est appelé un \emph{octet} (ou \textit{byte} en anglais).\\
+Cette représentation dite logique de l'information présente de nombreuses applications. En effet, elle permet tout d'abord de représenter des nombres sous la forme de quantités discrètes : on parle alors de bits\notecitepage{Tocci}{10}. Un \emph{bit} représente l'unité fondamentale d'un système de numération ne pouvant prendre que deux valeurs possibles (les états logiques haut et bas), c'est à dire de la base 2. Afin de représenter des nombres plus grands que 1 (le nombre maximal représentable sur un bit), on forme des ensembles de bits (de la même manière que l'on forme des ensembles de chiffres allant de 0 à 9 pour représenter un nombre supérieur à 9 en base 10). Chaque bit porte un poids, c'est à dire qu'il représente une puissance de 2 plus ou moins élevée. Par exemple, dans la notation $\overrightarrow{101}$ en base 2, le bit de droite porte un poids 0 (il représente l'unité), le bit du milieu un poids 1 (il représente $2^1$) et le bit de gauche un poids 2 ($2^2$). On lit alors la valeur numérique en base 10 : $1 \cdot 1 + 0 \cdot 2^1 + 1 \cdot 2^2 = 5$. Un ensemble de 8 bits est appelé un \emph{octet} (ou \textit{byte} en anglais).\\
 
 Cette représentation se révèle particulièrement efficace pour effectuer des opérations sur ces nombres ou simplement les représenter : on peut aisément associer à chaque point du circuit représentant un bit, une LED dont l'état (allumé ou éteint) traduit directement l'état logique du bit (haut ou bas).
 
@@ -177,9 +176,9 @@ Il existe d'autres types de bascules, faisant office de mémoire du circuit et d
 \subsection{Horloges et synchronisation}
 \label{section_horloge} % section-horloges
 \label{h-\thepage}
-Dans un cadre plus général que les bascules, il existe deux grandes familles de circuits logiques : les circuits synchrones et les circuits asynchrones. Les circuit asynchrones sont les plus immédiats à la compréhension : en effet, il s'agit de circuits dans lesquels une variation d'un état d'entrée entraîne immédiatement (aux temps de propagation du signal et de réaction des composants près) une variation des sorties en conséquence (ce qui n'exclut pas non plus l'utilisation de rétroactions et de dispositifs de mémoire). De fait, l'état du circuit peut potentiellement changer à tout moment, ce qui rend le système complexe à concevoir et à dépanner\citenotepage{Tocci}{167}. De plus, la communication entre deux circuits asynchrones peut s'avérer particulièrement ardue dès lors qu'il s'agit de transférer des informations numériques en série ou en parallèle, comme détaillé dans la partie \ref{synchronisation-echange-donnees}.\\
+Dans un cadre plus général que les bascules, il existe deux grandes familles de circuits logiques : les circuits synchrones et les circuits asynchrones. Les circuit asynchrones sont les plus immédiats à la compréhension : en effet, il s'agit de circuits dans lesquels une variation d'un état d'entrée entraîne immédiatement (aux temps de propagation du signal et de réaction des composants près) une variation des sorties en conséquence (ce qui n'exclut pas non plus l'utilisation de rétroactions et de dispositifs de mémoire). De fait, l'état du circuit peut potentiellement changer à tout moment, ce qui rend le système complexe à concevoir et à dépanner\notecitepage{Tocci}{167}. De plus, la communication entre deux circuits asynchrones peut s'avérer particulièrement ardue dès lors qu'il s'agit de transférer des informations numériques en série ou en parallèle, comme détaillé dans la partie \ref{synchronisation-echange-donnees}.\\
 
-Au contraire, dans les circuits asynchrones, le moment exact où un point du circuit change d'état peut être commandé par un signal externe : il s'agit d'un signal de synchronisation que l'on appelle le signal d'horloge\citenotepageagain{Tocci}{167}. Généralement, le signal d'horloge est rectangulaire, périodique et de rapport cyclique\footnote{Il s'agit du rapport entre le temps haut du signal sur une période et l'ensemble de la période.} égal à $\frac12$.\\
+Au contraire, dans les circuits asynchrones, le moment exact où un point du circuit change d'état peut être commandé par un signal externe : il s'agit d'un signal de synchronisation que l'on appelle le signal d'horloge\notecitepageagain{Tocci}{167}. Généralement, le signal d'horloge est rectangulaire, périodique et de rapport cyclique\footnote{Il s'agit du rapport entre le temps haut du signal sur une période et l'ensemble de la période.} égal à $\frac12$.\\
 
 Dans la plupart des cas, on synchronisera les états logiques du circuit sur un front de l'horloge, c'est à dire au moment où le signal d'horloge passe d'un état bas à un état haut (front montant) ou d'un état haut à un état bas (front descendant) : on parle alors de synchronisation sur front. Il est également possible de synchroniser l'état sur un niveau logique (haut ou bas) et d'interdire les changements pendant cet état logique : on parle alors de synchronisation sur niveau. Selon le système en question et son utilisation, on cherchera à exploiter l'un de ces mécanismes de synchronisation, ou une combinaison habile de plusieurs d'entre eux, afin de donner cohérence au système et de faciliter l'opération recherchée.\\
 
@@ -236,14 +235,14 @@ On propose une solution de synchronisation en deux temps, où la valeur d'entré
 \caption{Solution de synchronisation proposée}
 \end{figure}
 
-On utilise deux bascules RS asynchrones, simples à réaliser et au fonctionnement bien connu. On synchronise alors la première bascule sur le temps haut de l'horloge avec deux portes ET reliées à $H$ sur les entrées $R$ et $S$, on relie l'entrée du montage à la porte ET reliée à l'entrée $S$ de la bascule et on relie l'inverse de l'entrée du montage pour la porte ET reliée à l'entrée $R$ de la bascule. De fait, l'état de l'entrée est recopié en sortie de la bascule pendant l'état haut de l'horloge et reste inchangé pendant le temps bas. On y associe alors une seconde bascule synchronisée de la même façon mais sur l'état bas de l'horloge (avec deux portes ET reliées à $\overline{H}$) et on relie la sortie $Q$ (resp. $\overline{Q}$ de la première bascule à l'entrée $S$ (resp. $R$) (au travers des portes ET). De fait, pendant le temps bas de l'horloge, l'état intermédiaire de sortie de la première bascule (qui est inchangé) est recopié en sortie par la seconde bascule, qui restera alors inchangée pendant le temps haut, ce qui fournit le résultat attendu. Il s'agit d'une technique d'utilisation des bascules avec sensitivité aux états logiques de l'horloge\citenote{CoursLogique}.\\
+On utilise deux bascules RS asynchrones, simples à réaliser et au fonctionnement bien connu. On synchronise alors la première bascule sur le temps haut de l'horloge avec deux portes ET reliées à $H$ sur les entrées $R$ et $S$, on relie l'entrée du montage à la porte ET reliée à l'entrée $S$ de la bascule et on relie l'inverse de l'entrée du montage pour la porte ET reliée à l'entrée $R$ de la bascule. De fait, l'état de l'entrée est recopié en sortie de la bascule pendant l'état haut de l'horloge et reste inchangé pendant le temps bas. On y associe alors une seconde bascule synchronisée de la même façon mais sur l'état bas de l'horloge (avec deux portes ET reliées à $\overline{H}$) et on relie la sortie $Q$ (resp. $\overline{Q}$ de la première bascule à l'entrée $S$ (resp. $R$) (au travers des portes ET). De fait, pendant le temps bas de l'horloge, l'état intermédiaire de sortie de la première bascule (qui est inchangé) est recopié en sortie par la seconde bascule, qui restera alors inchangée pendant le temps haut, ce qui fournit le résultat attendu. Il s'agit d'une technique d'utilisation des bascules avec sensitivité aux états logiques de l'horloge\notecite{CoursLogique}.\\
 
-On considérera ici que les temps de propagation des signaux sont négligeables, de sorte que les états $H$ et $\overline{H}$ sont identiques en tous points du circuit. Si ce n'est pas exactement rigoureux, les temps nécessaires aux bascules pour changer d'état, toujours supérieurs aux temps de propagation des signaux\citenotepage{Tocci}{187} pourront jouer en notre faveur et éviter que, même dans le cas où on a effectivement  $H = \overline{H}$, le circuit recopie directement l'entrée à la sortie.
+On considérera ici que les temps de propagation des signaux sont négligeables, de sorte que les états $H$ et $\overline{H}$ sont identiques en tous points du circuit. Si ce n'est pas exactement rigoureux, les temps nécessaires aux bascules pour changer d'état, toujours supérieurs aux temps de propagation des signaux\notecitepage{Tocci}{187} pourront jouer en notre faveur et éviter que, même dans le cas où on a effectivement  $H = \overline{H}$, le circuit recopie directement l'entrée à la sortie.
 
 \subsubsection*{Expérimentation}
 
 On conçoit alors un premier montage qui utilise directement cette solution de synchronisation pour la rétroaction des bits $D_0$ et $D_1$. On a alors un additionneur pour chaque bit (et on ne s'intéresse pas à la porte ET qui amène au calcul de $D_2$. Le détail du schéma logique est reporté en annexe \ref{incrementation}. Comme l'addition est effectuée sur chaque bit en un temps d'horloge, on incrémente effectivement le compteur d'une unité par cycle d'horloge : c'est le résultat attendu.\\
-Cependant, on peut directement simplifier le montage avant de le réaliser : la porte OU EXLUSIF de l'additionneur du bit $D_0$ avec une entrée à $1$ est simplifiable en NON, on se retrouve alors avec une double inversion que l'on peut supprimer. Une inversion simple du bit $D_0$ peut directement être obtenue avec la sortie $\overline{Q}$ de la dernière bascule. De même, la porte ET de l'additionneur du bit $D_0$ avec une entrée à $1$ recopie l'entrée et peut-être supprimée. On peut formellement démontrer ces simplifications dans l'algèbre booléenne en utilisant des méthodes systématiques telles que les diagrammes de Karanaugh\citenotepage{Tocci}{108}. Le détail du schéma logique simplifié est détaillé en annexe \ref{incrementation-simplifie}.\\
+Cependant, on peut directement simplifier le montage avant de le réaliser : la porte OU EXLUSIF de l'additionneur du bit $D_0$ avec une entrée à $1$ est simplifiable en NON, on se retrouve alors avec une double inversion que l'on peut supprimer. Une inversion simple du bit $D_0$ peut directement être obtenue avec la sortie $\overline{Q}$ de la dernière bascule. De même, la porte ET de l'additionneur du bit $D_0$ avec une entrée à $1$ recopie l'entrée et peut-être supprimée. On peut formellement démontrer ces simplifications dans l'algèbre booléenne en utilisant des méthodes systématiques telles que les diagrammes de Karanaugh\notecitepage{Tocci}{108}. Le détail du schéma logique simplifié est détaillé en annexe \ref{incrementation-simplifie}.\\
 
 Dans un premier temps, le circuit a été mis en œuvre en réalisant les portes logiques à l'aide de composants électroniques fondamentaux tels que les résistances, diodes et transistors (on parle de logique DTL\footnote{Diode-Transistor Logic en Anglais, ou logique diode-transistor en Français}). Vu la quantité de composants nécessaires et la place requise, seul l'étage d'addition du bit $D_0$ a été réalisé, qui permet de valider la solution de synchronisation. Par ailleurs, cette expérience a été réalisée alors qu'aucun circuit de génération d'horloge n'était disponible : l'horloge a donc été émulée par un bouton poussoir relié à un état logique haut. La sortie est représentée par une LED, allumée pour signifier un état haut et éteinte pour un état bas. Une photographie du montage réalisé est reportée en annexe \ref{compteur-experimental}.\\
 
@@ -269,7 +268,7 @@ Une fois le multivibrateur astable à transistors réalisé, il a été possible
 \subsection{Composants actuels, état de l'art et évolution des montages}
 \label{composants-actuels}
 
-Dans l'état de l'art actuel\citenotepage{Tocci}{199}, la manière la plus directe de réaliser un compteur sur un bit consiste à utiliser une bascule synchronisée sur front d'horloge et dont la valeur de sortie s'inverse à chaque cycle. On souhaitera par exemple synchroniser sur le front descendant de l'horloge de sorte que le décompte du premier bit soit effectif un cycle d'horloge après la mise sous tension du système, si on considère que l'horloge démarre avec un état bas.\\
+Dans l'état de l'art actuel\notecitepage{Tocci}{199}, la manière la plus directe de réaliser un compteur sur un bit consiste à utiliser une bascule synchronisée sur front d'horloge et dont la valeur de sortie s'inverse à chaque cycle. On souhaitera par exemple synchroniser sur le front descendant de l'horloge de sorte que le décompte du premier bit soit effectif un cycle d'horloge après la mise sous tension du système, si on considère que l'horloge démarre avec un état bas.\\
 
 C'est bien là le cœur du système que l'on a réalisé : il apparaît bien (en particulier dans le schéma simplifié donné en annexe \ref{incrementation-simplifie} et dans le chronogramme en annexe \ref{chronogramme-compteur-fonctionne}) que le bit $D_0$ est inversé à chaque cycle d'horloge. On remarque alors que le compteur a pour effet de diviser par deux la fréquence de l'horloge pour le premier bit.\\
 
@@ -281,7 +280,7 @@ Ainsi, on pourra réaliser simplement un compteur sur $n$ bits en utilisant $n$
 
 On peut appliquer la même logique au montage de synchronisation que nous avons réalisé : on obtient alors le schéma reporté en annexe \ref{incrementation-final-nor}. On peut réaliser le même circuit en utilisant uniquement des portes NON-ET (il faut alors remplacer les portes ET par des portes NON-ET vu que les bascules à base de NON-ET sont à état logique bas actif) : on obtient le schéma reporté en annexe \ref{incrementation-final-nand}.\\
 
-On réalise ce montage fondamental $n$ fois pour $n$ bits en utilisant des portes NON-ET, qui sont disponibles en grande quantité et à faible coût (le composant TTL très répandu \bsc{7400}\citenote{Wikipedia7400} de \bsc{Texas Instruments} comporte 4 portes NON-ET en un seul circuit intégré). Un photographie du montage réalisée est reportée en annexe \ref{compteur-final}.
+On réalise ce montage fondamental $n$ fois pour $n$ bits en utilisant des portes NON-ET, qui sont disponibles en grande quantité et à faible coût (le composant TTL très répandu \bsc{7400}\notecite{Wikipedia7400} de \bsc{Texas Instruments} comporte 4 portes NON-ET en un seul circuit intégré). Un photographie du montage réalisée est reportée en annexe \ref{compteur-final}.
 
 \section{Système complet modulable}
 
index a890816..76605c2 100644 (file)
@@ -20,7 +20,7 @@ De la même façon qu'il est nécessaire de synchroniser certains types de circu
 \caption{La carte Cubieboard2}
 \end{figure}
 
-La carte Cubieboard2\citenote{Cubieboard} est un exemple particulier d'ordinateur complet. On retrouve en effet tous les composants constituants un ordinateur sur une carte de petite taille : on parle d'ordinateur à carte unique, de l'Anglais \emph{Single Board Computer}, parfois abrégé par ses initiales : \emph{SBC}. Le processeur de l'ordinateur est intégré au sein d'une puce de type SoC\footnote{System on a Chip en Anglais, soit système sur une puce en Français} : il s'agit d'un seul circuit intégré rassemblant, en plus du processeur principal, un certain nombre d'autres composants utiles tels que diverses entrées sorties, des processeurs auxiliaires, etc. Pour autant, il ne contient pas la mémoire principale de l'ordinateur : il ne s'agit donc pas d'un microcontrôleur. Le SoC utilisé dans la Cubieboard2 est un \bsc{A20} produit par la société chinoise \bsc{Allwinner}. Le processeur utilisé dans le \bsc{A20} est un \bsc{Cortex A7}, qui utilise un jeu d'instructions \bsc{ARM} et opère avec un fréquence d'horloge de $1$ GHz.\\
+La carte Cubieboard2\notecite{Cubieboard} est un exemple particulier d'ordinateur complet. On retrouve en effet tous les composants constituants un ordinateur sur une carte de petite taille : on parle d'ordinateur à carte unique, de l'Anglais \emph{Single Board Computer}, parfois abrégé par ses initiales : \emph{SBC}. Le processeur de l'ordinateur est intégré au sein d'une puce de type SoC\footnote{System on a Chip en Anglais, soit système sur une puce en Français} : il s'agit d'un seul circuit intégré rassemblant, en plus du processeur principal, un certain nombre d'autres composants utiles tels que diverses entrées sorties, des processeurs auxiliaires, etc. Pour autant, il ne contient pas la mémoire principale de l'ordinateur : il ne s'agit donc pas d'un microcontrôleur. Le SoC utilisé dans la Cubieboard2 est un \bsc{A20} produit par la société chinoise \bsc{Allwinner}. Le processeur utilisé dans le \bsc{A20} est un \bsc{Cortex A7}, qui utilise un jeu d'instructions \bsc{ARM} et opère avec un fréquence d'horloge de $1$ GHz.\\
 
 \begin{figure}[!h]
 \centering
@@ -28,7 +28,7 @@ La carte Cubieboard2\citenote{Cubieboard} est un exemple particulier d'ordinateu
 \caption{La carte Arduino Uno}
 \end{figure}
 
-Quant aux microcontrôleurs, on pourra s'intéresser à la carte Arduino\citenote{Arduino} Uno : il s'agit également d'une carte au format réduit, contenant un microcontrôleur. Le microcontrôleur en question est un \bsc{ATmega328p} de la société \bsc{Atmel} et son processeur utilise un jeu d'instructions \bsc{AVR} et opère avec une fréquence d'horloge de $16$ MHz.\\
+Quant aux microcontrôleurs, on pourra s'intéresser à la carte Arduino\notecite{Arduino} Uno : il s'agit également d'une carte au format réduit, contenant un microcontrôleur. Le microcontrôleur en question est un \bsc{ATmega328p} de la société \bsc{Atmel} et son processeur utilise un jeu d'instructions \bsc{AVR} et opère avec une fréquence d'horloge de $16$ MHz.\\
 
 Ces deux cartes se prêtent particulièrement à l'étude de leur fonctionnement :
 \begin{itemize}
@@ -83,7 +83,7 @@ Au sein de la Cubieboard2, la communication avec le circuit intégré responsabl
 \item[--] Avec résistances de rappel au niveau haut\\
 \end{itemize}
 
-La ligne de données est notée $SDA$ et la ligne d'horloge $SCL$. Le schéma électrique\citenote{CubieboardDiagram} de connexion de l'\bsc{AXP209} au SoC est détaillé avec la figure \ref{axp209} :
+La ligne de données est notée $SDA$ et la ligne d'horloge $SCL$. Le schéma électrique\notecite{CubieboardDiagram} de connexion de l'\bsc{AXP209} au SoC est détaillé avec la figure \ref{axp209} :
 
 \begin{figure}[!h]
 \centering
@@ -92,7 +92,7 @@ La ligne de données est notée $SDA$ et la ligne d'horloge $SCL$. Le schéma é
 \label{axp209}
 \end{figure}
 
-On souhaite alors faire communiquer la Cubieboard2 avec le microcontrôleur Arduino, en utilisant le bus et le protocole \iic. La Cubieboard2 dispose de 5\citenote{A20UserManual} composants dédiés à la gestion du bus \iic\ intégrés au sein de son SoC : il s'agit de contrôleurs \iic\ \bsc{Marvell MV64xxx}\citenote{AWIPCores}. L'Arduino ne dispose par contre pas de contrôleur intégré. Il va s'agir d'implémenter la gestion du protocole \iic\ dans un programme qui sera exécuté sur l'Arduino, en utilisant deux lignes numériques d'entrée/sortie dont dispose le microcontrôleur de l'Arduino : ils'agit de la technique dite de bit banging.\\ Ces lignes d'entrée/sortie se comportent d'après la logique trois états, avec un état haut, un état bas et un état hi-Z qui permettra la lecture. On pourra configurer le mode de chaque ligne avec des instructions. Les entrées/sorties sont plus précisément contrôlées en écrivant à des adresses mémoire précises (on parle de MMIO\footnote{Memory-Mapped Input/Output en Anglais, soit entrée/sortie cartographiée en mémoire en Français}) plutôt qu'avec des instructions directes pour le processeur (on parle de PIO\footnote{Programmed Input/Output en Anglais, soit entrée/sortie programmée en Français}).\\
+On souhaite alors faire communiquer la Cubieboard2 avec le microcontrôleur Arduino, en utilisant le bus et le protocole \iic. La Cubieboard2 dispose de 5\notecite{A20UserManual} composants dédiés à la gestion du bus \iic\ intégrés au sein de son SoC : il s'agit de contrôleurs \iic\ \bsc{Marvell MV64xxx}\notecite{AWIPCores}. L'Arduino ne dispose par contre pas de contrôleur intégré. Il va s'agir d'implémenter la gestion du protocole \iic\ dans un programme qui sera exécuté sur l'Arduino, en utilisant deux lignes numériques d'entrée/sortie dont dispose le microcontrôleur de l'Arduino : ils'agit de la technique dite de bit banging.\\ Ces lignes d'entrée/sortie se comportent d'après la logique trois états, avec un état haut, un état bas et un état hi-Z qui permettra la lecture. On pourra configurer le mode de chaque ligne avec des instructions. Les entrées/sorties sont plus précisément contrôlées en écrivant à des adresses mémoire précises (on parle de MMIO\footnote{Memory-Mapped Input/Output en Anglais, soit entrée/sortie cartographiée en mémoire en Français}) plutôt qu'avec des instructions directes pour le processeur (on parle de PIO\footnote{Programmed Input/Output en Anglais, soit entrée/sortie programmée en Français}).\\
 
 Afin de relier les deux systèmes, on cherchera à connecter deux lignes, entre deux entrées/sorties numériques de l'Arduino et des connecteurs reliés aux points $SDA$ et $SCL$ de la Cubieboard2. Si les entrées/sorties numériques de l'Arduino sont disponibles en grande quantité, seul le contrôleur \iic\ identifié par l'index 1 est accessible par les connecteurs externes de la carte (dans la littérature spécifique au SoC \bsc{A20}, il est appelé $TWI1$\footnote{Two Wire Interface en Anglais, soit interface à deux fils en Français, terme équivalent à \iic.}). On relie alors les connecteurs reliés à $TWI1-SDA$ et $TWI1-SCK$\footnote{Référence : http://linux-sunxi.org/Cubieboard/ExpansionPorts}à l'Arduino. Une photographie des deux cartes connectées est reporté en annexe \ref{ardui2c-photo}.\\
 
@@ -105,17 +105,17 @@ Afin de réaliser l'expérience, nous avons modifié le code source (écrit en l
 
 \subsubsection*{Réalisation du programme}
 
-Une fois les aspects matériels et logiciels en place, on peut commencer la réalisation du programme propre à l'Arduino. Celui-ci sera réalisé en langage C natif, c'est à dire sans sur-couche propre à l'Arduino. Il existe en effet un IDE\footnote{Integrated Development Environment en Anglais, soit environnement de développement intégré en Français} propre à l'Arduino, contenant un certain nombre de sur-couches au langage C++ utilisé. Comme notre application est fortement dépendante du temps, on cherchera à écrire du code au plus proche du langage machine afin de ne pas ralentir l'exécution. Le système de compilation sera basé sur de traditionnels $Makefiles$, très couramment utilisés pour le développement au sein de systèmes de type \bsc{Unix}. Le compilateur utilisé est une variante de \bsc{GCC} propre à l'architecture matérielle \bsc{AVR} : \bsc{avr-gcc}. On utilisera une librairie C standard propre à l'\bsc{AVR}, qui fournit également des définitions propres au microcontrôleur : l'\bsc{avr-libc}. Enfin, le logiciel sera envoyé sur la carte en utilisant l'utilitaire \bsc{avrdude}. Enfin, on utilisera l'outil de gestion de code source \bsc{git} pour garder trace des modifications. Tous ces logiciels sont des logiciels libres et on donne d'ailleurs comme licence d'utilisation à notre logiciel, astucieusement nommé $ardui2c$, la Licence Publique Générale GNU en version 3 ou plus récente\footnote{Texte complet de la licence : https://www.gnu.org/licenses/gpl.html}, ce-qui en fait également un logiciel libre.\\
+Une fois les aspects matériels et logiciels en place, on peut commencer la réalisation du programme propre à l'Arduino. Celui-ci sera réalisé en langage C natif, c'est à dire sans sur-couche propre à l'Arduino. Il existe en effet un IDE\footnote{Integrated Development Environment en Anglais, soit environnement de développement intégré en Français} propre à l'Arduino, contenant un certain nombre de sur-couches au langage C++ utilisé. Comme notre application est fortement dépendante du temps, on cherchera à écrire du code au plus proche du langage machine afin de ne pas ralentir l'exécution. Le système de compilation sera basé sur de traditionnels $Makefiles$, très couramment utilisés pour le développement au sein de systèmes de type \bsc{Unix}. Le compilateur utilisé est une variante de \bsc{GCC} propre à l'architecture matérielle \bsc{AVR} : \bsc{avr-gcc}. On utilisera une librairie C standard propre à l'\bsc{AVR}, qui fournit également des définitions propres au microcontrôleur : l'\bsc{avr-libc}. Enfin, le logiciel sera envoyé sur la carte en utilisant l'utilitaire \bsc{avrdude}. Enfin, on utilisera l'outil de gestion de code source \bsc{git} pour garder trace des modifications. Tous ces logiciels sont des logiciels libres et on donne d'ailleurs comme licence d'utilisation à notre logiciel, astucieusement nommé $ardui2c$, la Licence Publique Générale GNU en version 3 ou plus récente\footnote{Texte complet de la licence : https://www.gnu.org/licenses/gpl.html}, ce qui en fait également un logiciel libre.\\
 
 Le code source lui-même est rédigé avec un terminologie en Anglais, afin qu'il soit techniquement compréhensible (et modifiable) par le plus grand nombre, mais on attache tout de même des commentaires en Français, afin de faciliter sa compréhension dans le cadre de notre projet. Afin d'analyser l'exécution étape par étape du programme au cours de son écriture, on cherche à utiliser un dispositif d'entrée/sortie simple à utiliser. L'Arduino dispose d'un contrôleur UART permettant d'envoyer au cours de l'exécution des informations de débogage (typiquement, des chaînes de caractères) à un ordinateur relié à la carte par USB (un convertisseur UART/USB est également intégré à la carte Arduino). Cependant, la vitesse de transmission des informations est au maximum de $115200$ bits/s (on parle de bauds), qui n'est pas suffisante pour transmettre suffisamment rapidement ces informations tout en relevant les changements des lignes du bus. En effet, une première expérience montre que le microcontrôleur n'arrive pas à correctement détecter les changements d'états de la ligne d'horloge, qui a une fréquence que l'on a fixée à $50$ kHz, soit $2 * 50 000 = 100 000$ changements d'état logique par seconde. Il est donc évident que cette solution n'est pas utilisable.\\
 
 Pour palier à ce problème, on a utilisé une sortie numérique du microcontrôleur que l'on dédie au débogage ($DEBUG$) et dont on inversera l'état logique à un moment donné de l'exécution du programme (par exemple à la détection d'un événement en particulier). Il s'agit de la fonction $debug$, que l'on associera à un test que l'on souhaite vérifier à l'exécution. Certains événements, tels que les conditions de départ ou de fin ont ainsi pu être détectés, mais on remarque un décalage entre la fin des événements et l'apparition du changement sur la ligne de débogage. L'optimisation du code produit lors de la compilation (argument $-Os$ du compilateur \bsc{avr-gcc}) permet de gagner en temps d'exécution (moins d'instructions à exécuter) et donc de rapprocher le changement d'état de la ligne de débogage de l'événement. On utilise encore une fois l'analyseur logique pour relever l'état des lignes $SDA$, $SCL$ et $DEBUG$.\\
 
-Une fois tous les moyens de déterminer l'état du système en place, il a été possible de commencer l'implémentation du protocole \iic\footnote{La compréhension du protocole est basée sur les explications et les exemples de la référence \cite{WikipediaI2C} et des connaissances antérieures.}. On choisit de réaliser le programme sous la forme d'une machine à états\citenote{WikipediaAutomateFini}, avec un variable $state$ décrivant l'état du système. Les différents états possibles sont définis au début du programme et chaque état est décrit dans un commentaire associé. Dans la fonction principale ($main$) du programme, une boucle infinie ($while (1)$) assure l'interprétation du protocole en continu et contient un disjonction des cas sur l'état du système ($switch (state)$) attribue à chaque état les actions à réaliser, après avoir lu l'état des lignes du bus et gardé référence de l'état précédent.\\
+Une fois tous les moyens de déterminer l'état du système en place, il a été possible de commencer l'implémentation du protocole \iic\footnote{La compréhension du protocole est basée sur les explications et les exemples de la référence \cite{WikipediaI2C} et des connaissances antérieures.}. On choisit de réaliser le programme sous la forme d'une machine à états\notecite{WikipediaAutomateFini}, avec un variable $state$ décrivant l'état du système. Les différents états possibles sont définis au début du programme et chaque état est décrit dans un commentaire associé. Dans la fonction principale ($main$) du programme, une boucle infinie ($while (1)$) assure l'interprétation du protocole en continu et contient un disjonction des cas sur l'état du système ($switch (state)$) attribue à chaque état les actions à réaliser, après avoir lu l'état des lignes du bus et gardé référence de l'état précédent.\\
 
-Les entrées/sorties sont effectuées par des lectures ou des écritures sur des ports données, formalisés par des adresses mémoire. On utilise les opérations booléennes du langage C pour effectuer les actions de lecture et d'écriture de bits aux adresses et aux bits nécessaires, tel qu'indiqué par la documentation du microcontrôleur\citenote{AVRDatasheet} et les déclarations de l'\bsc{avr-libc}. Ainsi, pour forcer l'état logique de la ligne de données, on écrira un bit dont le poids est défini par la définition $PORTB4$ à l'adresse donnée par la définition $PORTB$, soit en C : $PORTB |= (1 << PORTB4)$. Lors de l'implémentation, on fera attention à ne changer l'état du bus de données que sur un temps bas d'horloge et de ne lire l'état logique du bus imposé par le maître que sur un temps haut d'horloge, comme indiqué dans les spécifications du protocole I2C\citenote{WikipediaI2C}.\\
+Les entrées/sorties sont effectuées par des lectures ou des écritures sur des ports données, formalisés par des adresses mémoire. On utilise les opérations booléennes du langage C pour effectuer les actions de lecture et d'écriture de bits aux adresses et aux bits nécessaires, tel qu'indiqué par la documentation du microcontrôleur\notecite{AVRDatasheet} et les déclarations de l'\bsc{avr-libc}. Ainsi, pour forcer l'état logique de la ligne de données, on écrira un bit dont le poids est défini par la définition $PORTB4$ à l'adresse donnée par la définition $PORTB$, soit en C : $PORTB |= (1 << PORTB4)$. Lors de l'implémentation, on fera attention à ne changer l'état du bus de données que sur un temps bas d'horloge et de ne lire l'état logique du bus imposé par le maître que sur un temps haut d'horloge, comme indiqué dans les spécifications du protocole I2C\notecite{WikipediaI2C}.\\
 
-Avec les protocole \iic, les données de l'esclave sont référencées par des adresses : on parle alors de registres, dont la taille vaut un octet. Le maître pourra lire ou écrire les données d'un registre en spécifiant son adresse. Notre implémentation dispose de $5$ registres, représentant $CPBx$ au format ASCII\acrotrad{American Standard Code for Information Interchange}{Code américain normalisé pour l'échange d'information} avec un octet final nul pour terminer la chaîne de caractères.\\
+Avec les protocole \iic, les données de l'esclave sont référencées par des adresses : on parle alors de registres, dont la taille vaut un octet. Le maître pourra lire ou écrire les données d'un registre en spécifiant son adresse. Notre implémentation dispose de $5$ registres, représentant $CPBx$ au format ASCII\notetrad{American Standard Code for Information Interchange}{Code américain normalisé pour l'échange d'information} avec un octet final nul pour terminer la chaîne de caractères.\\
 
 L'ensemble du code source ainsi réalisé est reporté en annexe \ref{ardui2c}. Il est également disponible sur Internet\footnote{Le code source d'Ardui2c est disponible à l'adresse : http://git.paulk.fr/gitweb/?p=ardui2c.git;a=summary} au travers du système de gestion de version $git$, qui garde trace des modifications et permet de dupliquer aisément le code source. C'est un outil de gestion de code source aux visées communautaires, initialement développé par \bsc{Linux Torvalds} pour la gestion du code du noyau \bsc{Linux}, dont il est également l'auteur initial.
 
@@ -248,14 +248,14 @@ Exception en point flottant
 
 En effet, cet erreur traduit une division par zéro, effectuée à la ligne 87, même si la valeur $n$ a été vérifiée comme différente de zéro avant cette opération. En effet, comme les deux fils d'exécution sont exécutés en même temps (ou dans le cas d'un processeur à un seul cœur, alternativement, mais le découpage du temps d'exécutions attribué à chaque fil n'est pas prédictible pour le programmeur), il est possible que le second fil d'exécution change la valeur de $n$ entre le test avec zéro et l'opération effectivement effectuée. Par exemple, si on a $n=9$ au moment du test, puis le second fil s'exécute et tire un dixième nombre, réinitialisant $n$ à 0, la division sur le premier fil sera effectuée avec $n = 0$.\\
 
-Afin de palier à ce problème, on introduit la notion de blocage des fils d'exécution. Il s'agit de fonctions de blocage et de déblocage liés à une variable de type mutex\acrotrad{Mutual exclusion}{exclusion mutuelle}, définies dans la librairie \bsc{pthread} et qui fonctionnent comme suit\citenote{pthread} :
+Afin de palier à ce problème, on introduit la notion de blocage des fils d'exécution. Il s'agit de fonctions de blocage et de déblocage liés à une variable de type mutex\notetrad{Mutual exclusion}{exclusion mutuelle}, définies dans la librairie \bsc{pthread} et qui fonctionnent comme suit\notecite{pthread} :
 \begin{itemize}
 \item[--] Un premier appel à la fonction de blocage $pthread\_mutex\_lock$ passe la variable mutex à un état bloqué et l'exécution du fil d'exécution appelant continue.
 \item[--] Un second appel à la fonction de blocage $pthread\_mutex\_lock$ (avec la variable mutex dans un état bloqué) bloque l'exécution du fil d'exécution appelant.
 \item[--] Une appel à la fonction de déblocage $pthread\_mutex\_unlock$ passe la variable mutex à un état débloqué et débloque l'exécution des fils bloqués par ce mutex.\\
 \end{itemize}
 
-Ce mécanisme va donc permettre de bloque l'un des fils d'exécution quand des données communes aux deux fils sont utilisés, ce-qui n'empêchera pas les fils d'effectuer certains actions (comme l'affichage de la moyenne calculée) indépendamment du blocage. Ainsi, on modifie le code source du programme en y insérant des appels à $pthread\_mutex\_lock$ avant les blocs de code utilisant les données communes et des appels à $pthread\_mutex\_unlock$ après. Les modifications apportées au code sont reportées en annexe \ref{thread-diff}.\\
+Ce mécanisme va donc permettre de bloque l'un des fils d'exécution quand des données communes aux deux fils sont utilisés, ce qui n'empêchera pas les fils d'effectuer certains actions (comme l'affichage de la moyenne calculée) indépendamment du blocage. Ainsi, on modifie le code source du programme en y insérant des appels à $pthread\_mutex\_lock$ avant les blocs de code utilisant les données communes et des appels à $pthread\_mutex\_unlock$ après. Les modifications apportées au code sont reportées en annexe \ref{thread-diff}.\\
 
 On constate dès lors que l'exécution du programme se déroule sans encombres et des valeurs sont affichées continuellement, sans erreur :
 \begin{verbatim}
@@ -268,4 +268,4 @@ Moyenne : 488697234
 Moyenne : 338524137
 \end{verbatim}
 
-L'utilisation des mutex reste néanmoins un sujet sensible dans l'écriture de code source, en particulier à cause de problèmes d'auto-blocage ou d'inter-dépendances. Dans le premier cas, il s'agit de plusieurs appels successifs à $pthread\_mutex\_lock$ dans le même fil d'exécution, ce-qui a pour effet de bloquer ce fil sans qu'il ne soit garanti qu'un autre fil puisse le débloquer. En particulier, si les parties du code à protéger des autres fils sont entourées d'appels à $pthread\_mutex\_lock$ et $pthread\_mutex\_unlock$, les fils seront tous bloqués avant de pour débloquer ce premier fil, ce-qui aboutit à un programme irrémédiablement bloqué dans sa globalité. Dans le second cas, il s'agira de l'utilisation de plusieurs mutex distincts avec au moins deux fils d'exécution, chacun bloquant un mutex et attendant le déblocage de l'autre mutex (les appels à $pthread\_mutex\_lock$ seront donc dans l'ordre inversé sur les deux fils d'exécution), ce-qui aboutit au blocage des deux fils, irrémédiable s'il n'existe pas d'autre fil capable d'appeler $pthread\_mutex\_unlock$ pour débloquer l'ensemble.
+L'utilisation des mutex reste néanmoins un sujet sensible dans l'écriture de code source, en particulier à cause de problèmes d'auto-blocage ou d'inter-dépendances. Dans le premier cas, il s'agit de plusieurs appels successifs à $pthread\_mutex\_lock$ dans le même fil d'exécution, ce qui a pour effet de bloquer ce fil sans qu'il ne soit garanti qu'un autre fil puisse le débloquer. En particulier, si les parties du code à protéger des autres fils sont entourées d'appels à $pthread\_mutex\_lock$ et $pthread\_mutex\_unlock$, les fils seront tous bloqués avant de pour débloquer ce premier fil, ce qui aboutit à un programme irrémédiablement bloqué dans sa globalité. Dans le second cas, il s'agira de l'utilisation de plusieurs mutex distincts avec au moins deux fils d'exécution, chacun bloquant un mutex et attendant le déblocage de l'autre mutex (les appels à $pthread\_mutex\_lock$ seront donc dans l'ordre inversé sur les deux fils d'exécution), ce qui aboutit au blocage des deux fils, irrémédiable s'il n'existe pas d'autre fil capable d'appeler $pthread\_mutex\_unlock$ pour débloquer l'ensemble.
index 42f7287..49413ca 100644 (file)
@@ -5,12 +5,12 @@ Ce mémoire traduit le travail effectué dans le cadre du projet final du Cycle
 
 Pourtant, le choix de cette thématique ne s'est pas limité à un ensemble de considérations strictement techniques. En effet, ce sujet aborde un concept fondamentalement abstrait et pourtant si immédiat à l'Homme : le temps. C'est bien la possibilité de représenter au sein de systèmes physiques un concept à priori détaché de toute matérialité qui a su éveiller en nous un intérêt tout particulier.\\
 
-Au cours de ce sujet, on souhaite donc mettre en évidence de quelle manière le temps est représenté en électronique (mais également quels systèmes de représentation du temps ont précédé à l'électronique) et par quels procédés il est quantifié. De plus, on s'intéresse aux systèmes électroniques qui ont recours à la quantifications du temps pour répondre à diverses problématiques que l'on cherchera à expliciter mais également aux contraintes supplémentaires que l'utilisation du temps introduit. Il s'agit en effet de fournir une compréhension de ces phénomènes.\\
+Au cours de ce sujet, on souhaite donc mettre en évidence de quelle manière le temps est représenté en électronique (en évoquant également quels systèmes de représentation du temps ont précédé à l'électronique) et par quels procédés il est quantifié. De plus, on s'intéresse aux systèmes électroniques qui ont recours à la quantification du temps pour répondre à diverses problématiques que l'on cherchera à expliciter, mais également aux contraintes supplémentaires que l'utilisation du temps introduit. Il s'agit en effet de fournir une explication de ces phénomènes.\\
 
-Notre démarche provient initialement d'un questionnement vis à vis d'un système complexe tel qu'un ordinateur. En particulier, nous avons choisi d'aborder l'étude d'un ordinateur à carte unique : la Cuebieboard2, ordinateur complet au format physique réduit (de l'ordre de la taille d'une carte de crédit). On s'intéressera aux aspects liés au temps de ce système à la fois du point de vue électronique et du point de vue informatique : il s'agit du fil conducteur de notre étude. Notre étude est par ailleurs l'occasion d'aborder certains grands aspects des domaines en question, comme la logique booléenne en électronique ou le parallelisme en informatique.\\
+Notre démarche vient initialement d'un questionnement vis-à-vis d'un système complexe tel qu'un ordinateur. En particulier, nous avons choisi d'aborder l'étude d'un ordinateur à carte unique : la Cuebieboard2, ordinateur complet au format physique réduit (de l'ordre de la taille d'une carte de crédit). On s'intéressera aux aspects liés au temps de ce système à la fois du point de vue de l'électronique et du point de vue de l'informatique : il s'agit du fil conducteur de notre projet. Notre étude est par ailleurs l'occasion d'aborder certains grands aspects des domaines en question, comme la logique booléenne en électronique ou le parallelisme en informatique.\\
 
 En plus de l'étude ponctuelle de ce système, on propose de réaliser différentes expériences. D'une part, on cherchera à réaliser différents montages et programmes informatiques pour mettre en évidence un procédé ou la nécessité d'un concept et d'autre part, on réalisera un certain nombre de systèmes complets, qui ont une application pratique directe détachée des domaines d'ingénierie qui nous concernent. Il s'agit alors de démontrer la présence des concepts liés aux système électroniques numériques et au temps dans la vie courante.\\
 
-Notre étude, si elle est fondamentalement constituée en une démarche de recherche et d'explicitation s'appuie en partie sur des connaissances personnelles. Celles-ci auront bien souvent été acquises au fil du temps, avant même notre intégration au sein du Cycle Préparatoire de Bordeaux, traduisant ainsi notre intérêt de longue date pour ces domaines. Évidemment, ces connaissances ne sauraient se substituer à une recherche documentaire, réalisée afin de cerner l'ensemble des aspects développés et d'en préciser notre connaisance.\\
+Notre étude, si elle est fondamentalement constituée en une démarche de recherche et d'explicitation s'appuie en partie sur des connaissances personnelles. Celles-ci auront bien souvent été acquises au fil du temps, avant même notre intégration au sein du Cycle Préparatoire de Bordeaux, traduisant notre intérêt de longue date pour ces domaines. Évidemment, ces connaissances ne sauraient se substituer à une recherche documentaire, réalisée afin de cerner l'ensemble des aspects développés et d'en préciser notre connaisance.\\
 
-C'est donc à la fois avec un intérêt personnel partagé et une volonté d'approfondir nos connaissances dans ces domaines, qui seront nos sujets d'études, que nous abordons ce projet.
+C'est donc à la fois avec un intérêt personnel partagé et une volonté d'approfondir nos connaissances dans ces domaines, qui seront nos futurs sujets d'études, que nous abordons ce projet.
index b47a2da..96d3cfe 100644 (file)
-@misc{Multivib,\r
-author={MongoSukulu},\r
-title={Les multivibrateurs},\r
-note={http://www.mongosukulu.com/index.php/en/contenu/genie-electrique4/electronique/542-les-multivibrateurs?showall=\&start=1},\r
-}\r
-\r
-@misc{Wikipedia7400,\r
-author={Wikipédia},\r
-title={Liste des circuits intégrés de la série 7400},\r
-note={https://fr.wikipedia.org/wiki/Liste\_des\_circuits\_intégrés\_de\_la\_série\_7400}\r
-}\r
-\r
-@misc{WikipediaNE555,\r
-author={Wikipédia},\r
-title={NE555},\r
-note={https://fr.wikipedia.org/wiki/NE555}\r
-}\r
-\r
-@book{Tocci,\r
-title={Circuits numériques : théorie et applications},\r
-author={Tocci, R.J.},\r
-isbn={9782100033645},\r
-year={1996},\r
-publisher={Dunod}\r
-}\r
-\r
-@misc{CoursLogique,\r
-title={Cours de l'université de Laval sur les circuits logiques},\r
-author={Xavier Maldague},\r
-note={http://w3.gel.ulaval.ca/~maldagx/gel10279/chap5.pdf}\r
-}\r
-\r
-@misc{Cubieboard,\r
-title={Cubieboard},\r
-author={Cubietech},\r
-note={http://cubieboard.org/}\r
-}\r
-\r
-@misc{Arduino,\r
-title={Arduino},\r
-author={Arduino},\r
-note={http://www.arduino.cc/}\r
-}\r
-\r
-@misc{WikipediaI2C,\r
-author={Wikipédia},\r
-title={I2{C}},\r
-note={https://fr.wikipedia.org/wiki/I2C}\r
-}\r
-\r
-@misc{CubieboardDiagram,\r
-author={Cubietech},\r
-title={Cubieboard {B}lock {D}iagram},\r
-note={http://dl.cubieboard.org/hardware/cubieboard\_block\_diagram.pdf}\r
-}\r
-\r
-@misc{A20UserManual,\r
-author={Allwinner},\r
-title={A20 {U}ser {M}anual},\r
-note={https://github.com/allwinner-zh/documents/raw/master/A20/A20 user manual v1.3 20141010.pdf}\r
-}\r
-\r
-@misc{AWIPCores,\r
-author={Linux-Sunxi},\r
-title={Used {IP} {C}ores},\r
-note={http://linux-sunxi.org/Used\_IP\_cores}\r
-}\r
-\r
-@misc{WikipediaAutomateFini,\r
-author={Wikipédia},\r
-title={Automate fini},\r
-note={https://fr.wikipedia.org/wiki/Automate\_fini}\r
-}\r
-\r
-@misc{AVRDatasheet,\r
-author={Atmel},\r
-title={Atmel 8-bit microcontroller with 4/8/16/32 kbytes in-system programmable flash datasheet},\r
-note={http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P\_datasheet\_Complete.pdf}\r
-}\r
-\r
-@misc{pthread,\r
-author={Xavier Leroy},\r
-title={pthread man page},\r
-note={http://manpages.ubuntu.com/manpages/hardy/man3/pthread\_mutex\_lock.3.html}\r
-}\r
+@misc{wikipedia-resonance,
+author={Wikipédia},
+title={Résonance},
+note={https://fr.wikipedia.org/wiki/R%C3%A9sonance}
+}
+
+@misc{wikipedia-filtre,
+author={Wikipédia},
+title= {Filtre (électronique)},
+note={https://fr.wikipedia.org/wiki/Filtre_(électronique)}
+}
+
+@misc{wikipedia-transistor,
+author={Wikipédia},
+title= {Transistor bipolaire)},
+note={https://fr.wikipedia.org/wiki/Transistor_bipolaire}
+}
+
+@misc{Multivib,
+author={MongoSukulu},
+title={Les multivibrateurs},
+note={http://www.mongosukulu.com/index.php/en/contenu/genie-electrique4/electronique/542-les-multivibrateurs?showall=\&start=1}
+}
+
+@misc{Wikipedia7400,
+author={Wikipédia},
+title={Liste des circuits intégrés de la série 7400},
+note={https://fr.wikipedia.org/wiki/Liste\_des\_circuits\_intégrés\_de\_la\_série\_7400}
+}
+
+@misc{WikipediaNE555,
+author={Wikipédia},
+title={NE555},
+note={https://fr.wikipedia.org/wiki/NE555}
+}
+
+@book{Tocci,
+title={Circuits numériques : théorie et applications},
+author={Tocci, R.J.},
+isbn={9782100033645},
+year={1996},
+publisher={Dunod}
+}
+
+@misc{CoursLogique,
+title={Cours de l'université de Laval sur les circuits logiques},
+author={Xavier Maldague},
+note={http://w3.gel.ulaval.ca/~maldagx/gel10279/chap5.pdf}
+}
+
+@misc{Cubieboard,
+title={Cubieboard},
+author={Cubietech},
+note={http://cubieboard.org/}
+}
+
+@misc{Arduino,
+title={Arduino},
+author={Arduino},
+note={http://www.arduino.cc/}
+}
+
+@misc{WikipediaI2C,
+author={Wikipédia},
+title={I2{C}},
+note={https://fr.wikipedia.org/wiki/I2C}
+}
+
+@misc{CubieboardDiagram,
+author={Cubietech},
+title={Cubieboard {B}lock {D}iagram},
+note={http://dl.cubieboard.org/hardware/cubieboard\_block\_diagram.pdf}
+}
+
+@misc{A20UserManual,
+author={Allwinner},
+title={A20 {U}ser {M}anual},
+note={https://github.com/allwinner-zh/documents/raw/master/A20/A20 user manual v1.3 20141010.pdf}
+}
+
+@misc{AWIPCores,
+author={Linux-Sunxi},
+title={Used {IP} {C}ores},
+note={http://linux-sunxi.org/Used\_IP\_cores}
+}
+
+@misc{WikipediaAutomateFini,
+author={Wikipédia},
+title={Automate fini},
+note={https://fr.wikipedia.org/wiki/Automate\_fini}
+}
+
+@misc{AVRDatasheet,
+author={Atmel},
+title={Atmel 8-bit microcontroller with 4/8/16/32 kbytes in-system programmable flash datasheet},
+note={http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P\_datasheet\_Complete.pdf}
+}
+
+@misc{pthread,
+author={Xavier Leroy},
+title={pthread man page},
+note={http://manpages.ubuntu.com/manpages/hardy/man3/pthread\_mutex\_lock.3.html}
+}
index ed268ee..197335c 100644 (file)
@@ -5,4 +5,4 @@ Au cours de ce projet, nous avons pu constater le lien des deux domaines d'étud
 
 Tous ces différents aspects ont été illustrés avec diverses expériences, sous la forme de réalisations de circuits pour la partie électronique, d'abord au travers d'un étape de conception de schéma électronique puis de test et enfin de réalisation d'un circuit fonctionnel, avec des composants biens réels et des résultats directs et observables. On a ainsi réalisé un multivibrateur astable, différents circuits de décompte et un ensemble de modules constituants des systèmes aux applications directes. Pour la partie informatique, nous réalisations ont pris la forme de code source, tout d'abord au travers d'une contribution au projet libre U-Boot, revue et approuvée par une communauté d'experts en la matière, mais également par la réalisation d'un programme complet pour la communication entre l'Arduino et le Cubieboard2 : Ardui2c. On aura également réalisé un programme avec calcul parallèle, qui démontre la nécessité du blocage avec mutex et un relevé de l'utilisation d'un algorithme d'encodage de vidéos, se prêtant plus ou moins bien au calcul parallèle.\\
 
-On a ainsi couvert un vaste champ technique mettent en rapport le temps d'une part et l'électronique et l'informatique d'autre part, ce-qui aura constitué pour nous une expérience très enrichissante et aura contribué à décupler notre intérêt pour ces domaines, renforçant ainsi notre volonté d'être admis au sein de l'ENSEIRB-MATMECA.
+On a ainsi couvert un vaste champ technique mettent en rapport le temps d'une part et l'électronique et l'informatique d'autre part, ce qui aura constitué pour nous une expérience très enrichissante et aura contribué à décupler notre intérêt pour ces domaines, renforçant ainsi notre volonté d'être admis au sein de l'ENSEIRB-MATMECA.
index 11dbaaa..106d5a3 100644 (file)
@@ -2,19 +2,19 @@
 \addcontentsline{toc}{chapter}{Introduction}\r
 \r
 \begin{quotation}\r
-"Qu’est-ce donc que le temps ? Qui saurait en donner avec aisance et brièveté\r
+« Qu’est-ce donc que le temps ? Qui saurait en donner avec aisance et brièveté\r
 une explication ? ... Si personne ne me pose la question, je le sais ; si\r
-quelqu’un pose la question et que je veuille expliquer, je ne sais plus."\r
+quelqu’un pose la question et que je veuille expliquer, je ne sais plus. »\r
 \end{quotation}\r
 \r
 \vspace{0.5cm}\r
 \r
-Cette citation de Saint-Augustin qui remonte au \siecle{5} résume efficacement en quelques mots tout le problème lié à la définition de la notion du temps. C'est en effet un concept familier de tous, dont on fait l'expérience en permanence, mais qui pose un problème immédiat dès qu'il s'agit de formaliser ce concept. C'est bien là un problème qui aura occupé (et occupe encore) des générations de philosophes et scientifiques, échinés au travail de définition du temps\footnote{Cet aspect est plus détaillé au travers de la synthèse culturelle, en annexe.}. Ces travaux ont donné jour à de grandes théories scientifiques : que ce soit la mécanique Newtonienne ou la relativité d'Einstein. L'aspect d'entité fondamentale que revêt le temps est un obstacle constant à sa définition et le vocabulaire qu'on lui associe se révèle bien souvent insuffisant, tant ce concept est fondamental. Scientifiquement, on s'accorde à dire que le temps n'est pas une grandeur quantifiable au même titre que l'énergie par exemple. La seule quantification apparaît dans la volonté de mesurer une sorte de \og distance \fg{} entre deux événements, quand on parle de mesurer le temps, on veut implicitement faire référence à des durées, car c'est la seule grandeur que l'on peut décompter.\\\r
+Cette citation de Saint-Augustin qui remonte au \siecle{5} résume efficacement en quelques mots tout le problème lié à la définition de la notion du temps. C'est en effet un concept familier de tous, dont on fait l'expérience en permanence, mais qui pose une difficulté immédiate dès qu'il s'agit de formaliser ce concept. C'est bien là un problème qui aura occupé (et occupe encore) des générations de philosophes et scientifiques, échinés au travail de définition du temps\footnote{Cet aspect est plus détaillé au travers de la synthèse culturelle, reportée en annexe.}. Ces travaux ont donné jour à de grandes théories scientifiques : que ce soit la mécanique Newtonienne ou la relativité d'Einstein. L'aspect d'entité fondamentale que revêt le temps est un obstacle constant à sa définition et le vocabulaire qu'on lui associe se révèle bien souvent insuffisant, tant ce concept est fondamental. Scientifiquement, on s'accorde à dire que le temps n'est pas une grandeur quantifiable au même titre que l'énergie par exemple. La seule quantification apparaît dans la volonté de mesurer une sorte de \og distance \fg{} entre deux événements, quand on parle de mesurer le temps, on veut implicitement faire référence à des durées, car c'est la seule grandeur que l'on peut décompter.\\\r
 \r
-L'instinct de l'Homme qui le pousse à s'organiser en société l'a inévitablement mené à réaliser des outils favorisant l'organisation au sein du groupe et savoir se repérer dans le temps en est un trait essentiel. Très tôt dans l'Histoire, l'Homme a su tirer partie de phénomènes naturels pour mesurer des durées entre des événements, puis au fur et à mesure des progrès techniques et technologiques les méthode d'acquisition se sont améliorées, passant de l'horloge solaire à la clepsydre, puis du sablier aux horloges mécaniques. La précision n'a cessé de croître au fil des années et considérant le progrès effréné des techniques, le \siecle{20} a vu une énorme avancée en ce qui concerne la précision de la mesure du temps. L'avènement de l'électronique a conduit au développement d'horloges très précises et les progrès en mécanique quantique ont eux abouti à la conception d'horloges atomiques, qui sont aujourd'hui la référence en terme de précision\footnote{La définition de la seconde se fait aujourd'hui à l'aide d'horloges atomiques, comme on le détaille dans la synthèse culturelle en annexe}.\\\r
+L'instinct de l'Homme qui le pousse à s'organiser en sociétés l'a inévitablement conduit à la réalisation d'outils favorisants cette organisation et savoir se repérer dans le temps en est un trait essentiel. Très tôt dans l'Histoire, l'Homme a su tirer à son avantage des phénomènes naturels pour mesurer des durées entre des événements, puis au fur et à mesure des progrès techniques et technologiques les méthode d'acquisition se sont améliorées, passant de l'horloge solaire à la clepsydre, puis du sablier aux horloges mécaniques. La précision n'a cessé de croître au fil des années et considérant le progrès effréné des techniques, le \siecle{20} a vu une énorme avancée en ce qui concerne la précision de la mesure du temps. L'avènement de l'électronique a conduit au développement d'horloges très précises et les progrès en mécanique quantique ont eux abouti à la conception d'horloges atomiques, qui sont aujourd'hui la référence en terme de précision\footnote{La définition de la seconde se fait aujourd'hui à l'aide d'horloges atomiques, comme on le détaille dans la synthèse culturelle en annexe}.\\\r
 \r
-Cette quête de précision est motivée par le besoin d'une représentation temporelle particulièrement précise de la part de l'ensemble des acteurs de la société. En effet la vie quotidienne  demande à chacun d'avoir à sa disposition une base de temps précise, au-delà de considérations ne demandant pas une grande précision, comme être à l'heure à un rendez-vous. Les technologies actuelles nécessitent cette précision, que ce soit dans le domaine des communications où des soucis de synchronisation évidents apparaissent, de la géolocalisation où les effets relativistes qui entrent en jeux imposent d'avoir la précision d'une horloge atomique (faute de quoi l'usage d'un GPS deviendrait caduque), ou encore dans le domaine de l'informatique où les systèmes nécessitent également d'avoir une horloge précise. En effet la plupart des ordinateurs et autres systèmes informatiques que l'on utilise aujourd'hui ont recourt à une base temps plutôt précise pour pouvoir fonctionner efficacement (la fréquence des horloges utilisées peut aller jusqu'à quelques GHz). L'ensemble de ces exemples (dont la liste est non exhaustive) illustrent de façon parlante l'enjeu de la mesure du temps dans cette société contemporaine.\\\r
+Cette quête de précision est motivée par le besoin d'une représentation temporelle particulièrement précise de la part de l'ensemble des acteurs de la société. En effet la vie quotidienne  demande à chacun d'avoir à sa disposition une base de temps précise, au-delà de considérations ne demandant pas une grande précision, comme être à l'heure à un rendez-vous. Les technologies actuelles nécessitent cette précision, que ce soit dans le domaine des communications où des soucis de synchronisation évidents apparaissent, de la géolocalisation où les effets relativistes qui entrent en jeux imposent d'avoir la précision d'une horloge atomique (faute de quoi l'usage d'un GPS deviendrait caduque), ou encore dans le domaine de l'informatique où les systèmes nécessitent également d'être cadencés par des horloges précises. En effet la plupart des ordinateurs et autres systèmes informatiques que l'on utilise aujourd'hui ont recourt à une base temps plutôt précise pour pouvoir fonctionner efficacement (la fréquence des horloges utilisées peut aller jusqu'à quelques GHz). L'ensemble de ces exemples (dont la liste est non exhaustive) illustrent de façon parlante l'enjeu de la mesure du temps dans nos sociétés contemporaines.\\\r
 \r
-La représentation du temps utilisée dans les systèmes informatiques se fait à l'aide de propriétés électroniques et repose sur de nombreuses méthodes. Celles-ci ne se valent pas toutes en terme de précision mais les systèmes électroniques et informatiques existent en grande variété et nécessitent des degrés de précision différente.\\\r
+La représentation du temps utilisée dans les systèmes informatiques se fait à l'aide de propriétés électroniques et repose sur de nombreuses techniques. Celles-ci ne se valent pas toutes en terme de précision mais les systèmes électroniques et informatiques existent en grande variété et nécessitent des degrés de précision différente.\\\r
 \r
-Cette étude s'articule autour de trois axes principaux, dans un premier temps seront détaillés les phénomènes électroniques qui dépendent du temps et la façon dont on les exploite pour créer des outils de représentation du temps. Une brève mention de l'usage de ces méthodes dans les technologies actuelles sera énoncée. Dans un second temps on détaillera l'usage qui est fait de ces bases de temps au sein de circuits logiques, ce qui permettra de comprendre l'utilité d'une telle base de temps dans un système complet. Enfin, on étudiera comment le temps est exploité au niveau informatique, au travers dess techniques utilisées pour gérer les communications entre différents composants numériques. Par ailleurs, on détaillera l'enjeu de la complexité des algorithmes et les moyens mis en œuvre pour réduire les temps d'exécution des programmes ainsi que leurs limites.\r
+Cette étude s'articule autour de trois axes principaux. Dans un premier temps seront détaillés les phénomènes électroniques qui dépendent du temps et la façon dont on les exploite pour créer des outils de représentation du temps. Une brève mention de l'usage de ces méthodes dans les technologies actuelles sera énoncée. Dans un second temps on détaillera l'usage qui est fait de ces bases de temps au sein de circuits logiques, ce qui permettra de comprendre l'utilité d'une telle base de temps dans un système complet. Enfin, on étudiera comment le temps est exploité au niveau informatique, au travers des techniques utilisées pour gérer les communications entre différents composants numériques. Par ailleurs, on détaillera l'enjeu de la complexité des algorithmes et les moyens mis en œuvre pour réduire les temps d'exécution des programmes ainsi que leurs limites.\r
index 3698537..666ebf0 100644 (file)
 \newcommand{\ohm}{$\mathrm{\Omega}$}
 \newcommand{\microf}{$\mathrm{\mu}$F}
 \newcommand{\iic}{$\mathrm{I^2C}$}
-\newcommand{\citenote}[1]{\footnote{\label{#1-\thepage}Référence bibliographique \cite{#1}}}
-\newcommand{\citenoteagain}[1]{\footnotemark[\getrefnumber{#1-\thepage}]}
-\newcommand{\citenotepage}[2]{\footnote{\label{#1-#2-\thepage}Référence bibliographique \cite{#1} page #2}}
-\newcommand{\citenotepageagain}[2]{\footnotemark[\getrefnumber{#1-#2-\thepage}]}
-\newcommand{\toldat}[1]{\footnote{\label{#1-\thepage}Cette notion sera détaillée dans la partie \ref{#1} en page \pageref{#1}.}}
-\newcommand{\acrotrad}[2]{\footnote{\textit{#1} en Anglais, soit #2 en Français.}}
 \newcommand{\siecle}[1]{\MakeUppercase{\romannumeral #1}\textsuperscript{e}~siècle}
+\newcommand{\notecite}[1]{\footnote{\label{#1-\thepage}Référence bibliographique \cite{#1}}}
+\newcommand{\noteciteagain}[1]{\footnotemark[\getrefnumber{#1-\thepage}]}
+\newcommand{\notecitepage}[2]{\footnote{\label{#1-#2-\thepage}Référence bibliographique \cite{#1} page #2}}
+\newcommand{\notecitepageagain}[2]{\footnotemark[\getrefnumber{#1-#2-\thepage}]}
+\newcommand{\notepartie}[1]{\footnote{\label{#1-\thepage}Cette notion sera détaillée dans la partie \ref{#1} en page \pageref{#1}.}}
+\newcommand{\notetrad}[2]{\footnote{\textit{#1} en Anglais, soit #2 en Français.}}
 
 \captiondelim{~--~}
 \renewcommand{\figurename}{\textbf{Figure}}
index 9de485c..fc73dc2 100644 (file)
@@ -1,25 +1,17 @@
-% Partie 2 - 
-% le 28.04.2015
-% ============================================\\
-
-% =========== TITRE DE LA PARTIE =============
 \chapter{Phénomènes et circuits électroniques à base de temps}
-%=============================================\\
 
-% =============== SECTION 1 ==================
 \section{Phénomènes électriques dépendants du temps}
-%=============================================\\
 
-\subsection{Composants électroniques de base}\\
+\subsection{Composants électroniques de base}
 
 On se sert en électronique d'un certain nombre de composants, mais certains sont fondamentaux, on cite les principaux:
 \begin{itemize}
-       \item[--] la résistance
-       \item[--] la bobine (ou \og solénoïde\fg)
-       \item[--] le condensateur
-       \item[--] la diode
-       \item[--] le transistor
-\end{itemize}\\
+\item[--] la résistance
+\item[--] la bobine (ou \og solénoïde\fg)
+\item[--] le condensateur
+\item[--] la diode
+\item[--] le transistor\\
+\end{itemize}
 
 Les symboles utilisés dans les schémas électroniques sont représentés sur la figure \ref{symboles}.\\
 
@@ -58,38 +50,43 @@ Les symboles utilisés dans les schémas électroniques sont représentés sur l
 \label{symboles}
 \end{figure}\\
 
-La résistance (c'est le symbole européen qui est représenté sur la figure \ref{symboles}), est sans doute l'élément le plus fondamental, c'est un dipôle qui sert à réguler des tensions ou des intensité aux endroits souhaités dans un circuit. Il fonctionne en dissipant l'énergie électrique par \emph{effet Joule} au passage d'un courant. Il est caractérisé par la grandeur notée $R$ (s'exprime en $\Omega$ : Ohm), la résistance, qui dépend du matériau utilisé ainsi que de la température. La loi qui régit le fonctionnement d'une résistance la loi d'\bsc{ohm}, donne le lien entre le courant $I$ qui traverse un dipôle résistant et la tension $U$ à ses bornes :
-\[ U=RI \]\\
+La résistance (c'est le symbole européen qui est représenté sur la figure \ref{symboles}), est sans doute l'élément le plus fondamental. C'est un dipôle utilisé pour réguler des tensions ou des intensité aux endroits souhaités dans un circuit. Il fonctionne en dissipant l'énergie électrique par \emph{effet Joule} au passage d'un courant. Il est caractérisé par la grandeur notée $R$ (s'exprime en \ohm\ : Ohm), la résistance, qui dépend du matériau utilisé ainsi que de la température. La loi qui régit le fonctionnement d'une résistance est la \emph{loi d'Ohm}, qui fait le lien entre le courant $I$ qui traverse un dipôle résistant et la tension $U$ à ses bornes :
+$$U = R \cdot I$$
 
-En réalité la grandeur $R$ se retrouve dans d'autres composants réels, tous possèdent en général une résistance interne qui est dépendante des matériaux utilisés. $R$ peut être intuitivement visualisé comme représentant la \og répugnance\fg{} d'un milieu conducteur à faire passer un courant.\\
+En réalité la grandeur $R$ se retrouve dans de nombreux autres composants réels, qui possèdent une résistance interne dépendante des matériaux utilisés. $R$ peut être intuitivement visualisée comme une grandeur qui représente la \emph{répugnance} d'un milieu conducteur à faire passer un courant.\\
+
+La bobine fait partie des composants dont le fonctionnement est directement dépendant du temps. Il s'agit d'un dipôle composé d'un fil conducteur enroulé en un grand nombre de spires, souvent autour d'un matériau ferromagnétique (de façon à en augmenter l'effet). Elle fonctionne sur le principe de l'auto-induction : la variation temporelle du flux magnétique, engendré par le courant qui y circule, à travers ses spires entraîne un courant induit qui s'oppose au courant initial. La grandeur $L$ (s'exprime en H : Henry) qui est un coefficient caractérisant l'ampleur de cet effet est appelée \emph{inductance} et elle apparaît dans la loi de comportement de cet élément :
+$$ u=L\derivd[]{i}{t} $$
 
-La bobine fait partie des composants dont le fonctionnement est directement dépendant du temps. Il s'agit d'un dipôle composé d'un fil conducteur enroulé en un grand nombre de spires, souvent autour d'un matériau ferromagnétique de façon à en augmenter son effet. Elle fonctionne sur le principe de l'auto-induction : la variation temporelle du flux magnétique, engendré par le courant qui y circule, à travers ses spires entraîne un courant induit qui s'oppose au courant initial. La grandeur $L$ (s'exprime en H : Henry) caractérisant un solénoïde est appelée \emph{inductance}, elle apparaît dans la loi de comportement de cet élément :
-\[ u=L\derivd[]{i}{t} \]
 Ici $u$ est la tension aux bornes de la bobine et $i$ le courant qui la traverse. Le solénoïde est généralement appelé \emph{inductance} par métonymie avec la grandeur $L$ qui le caractérise.\\
 
-Le condensateur fonctionne également sur un principe lié au temps. Ce dipôle est composé de deux plaques conductrices placées en regard et séparées par un isolant . Lorsqu'une tension est appliquée à ses bornes, les charges électriques s'accumulent sur les plaques, créant un champ électrique en son sein : les plaques sont polarisées de signe contraire. Le condensateur permet de \og stocker\fg{} un champ électrique et donc une certaine énergie qui pourra être restituée dans le circuit quand on le souhaite. Une fois chargé il ne laisse plus passer le courant. La capacité $C$ (s'exprime en F : Farad) caractérise un condensateur, cette grandeur apparaît dans sa loi de comportement :
-\[ i=C\derivd[]{u}{t} \]
+Le condensateur fonctionne également sur un principe lié au temps. Ce dipôle est composé de deux plaques conductrices placées en regard et séparées par un isolant . Lorsqu'une tension est appliquée à ses bornes, les charges électriques s'accumulent sur les plaques, créant un champ électrique en son sein : les plaques portent alors des charges de signes contraires. Le condensateur permet de \og stocker\fg{} un champ électrique et donc une certaine énergie qui pourra être restituée dans le circuit à posteriori. Une fois chargé il ne laisse plus passer le courant. La capacité $C$ (s'exprime en F : Farad) caractérise un condensateur, cette grandeur apparaît dans sa loi de comportement :  
+$$ i=C\derivd[]{u}{t} $$
 De même $i$ est le courant qui traverse le condensateur et $u$ la tension à ses bornes\\
 
-Ces trois composants sont souvent utilisés pour créer des circuits à dépendance temporelle : que ce soit pour créer des circuits résonants ou des oscillateurs. \\
+Ces trois composants sont souvent utilisés pour créer des circuits à dépendance temporelle : que ce soit pour créer des circuits \emph{résonants} ou des \emph{oscillateurs}. \\
 
-Le principe de fonctionnement des circuits résonants repose sur l'agencement précis de résistances, de condensateurs et d'inductances : les circuits $RLC$, $RL$ ou encore $RC$. Ces circuits résonants sont généralement alimentés par une source sinusoïdale munie donc d'une certaine fréquence, et sont utilisés afin de créer des filtres de fréquences. Chaque circuit possède une fréquence de résonance propre $f_0$ et agit différemment selon la fréquence du signal d'entrée : lorsque qu'on lui passe en entrée une source sinusoïdale de fréquence $f_0$, l'amplitude du signal de sortie sera bien plus important que pour les autres fréquences, on dit que le circuit entre en \emph{résonance}. On peut généralement définir une intervalle de fréquences autour de $f_0$ pour laquelle le signal de sortie aura une amplitude suffisante, c'est-à-dire telle qu'elle ne s'éloigne pas trop d'un niveau souhaité : c'est la \emph{bande passante}. La bande passante dépend des paramètres de chaque circuit, et c'est en exploitant les bandes passantes des différents montages qu'on peut créer des filtres en électroniques.\\\\
+Le principe de fonctionnement des circuits dits résonants\notecite{wikipedia-resonance} repose sur la sensibilité de ces circuits à une ou plusieurs fréquences appliquées au système. Une telle fréquence (dite fréquence fondamentale ou fréquence de résonance propre) appliquée au système va entraîner des oscillations de plus en plus importantes, jusqu'à aboutir à un régime stable dépendant des éléments de dissipation de l'énergie du système (ou jusqu'à sa rupture). En particulier, en électronique, la fréquence en question sera la fréquence d'oscillation des courants et tensions (qui sont alors sinusoïdaux) appliqués pour alimenter le circuit. Une combinaison d'éléments aux lois de comportements dépendantes du temps tels que des condensateurs ou des inductances d'une part et des éléments de dissipation, tels que des résistances d'autre part pourra aboutir à un système possédant une fréquence de résonance propre, notée $f_0$.\\
 
-Pour créer des oscillateurs, on aura besoin en plus d'utiliser certains composants actifs. La diode et le transistor sont deux éléments qui existent dans une très grande variété. On décrit brièvement deux modèles dont le fonctionnement est basé sur les propriétés des semi-conducteurs : la diode à jonction NP et le transistor NPN. On ne cherchera pas à expliquer ce fonctionnement vu sa complexité. Cependant on va juste expliquer brièvement comment il est utilisé dans les applications qui nous intéressent. \\
+Ces circuits résonants sont donc alimentés par une source sinusoïdale d'une certaine fréquence et ils pourront être utilisés afin de créer des filtres de fréquences. En effet, lorsque la fréquence d'alimentation est proche de $f_0$, l'amplitude du signal de sortie sera bien plus important que pour les autres fréquences : le circuit entre alors en résonance. On peut généralement définir un intervalle de fréquences autour de $f_0$ pour lequel le signal de sortie aura une amplitude suffisante, c'est-à-dire telle qu'elle ne s'éloigne pas trop d'un niveau souhaité : c'est la \emph{bande passante}. La bande passante dépend des paramètres de chaque circuit et c'est en exploitant les bandes passantes des différents montages qu'on pourra éliminer certaines fréquences indésirables, d'où le nom de filtre.\\
 
-La diode est un dipôle permettant de ne laisser passer le courant que dans un sens unique, à partir du moment où une tension suffisante est appliquée à ses bornes. Généralement la tension seuil vaut : $V_{seuil}=0,7$ V.\\
+Les filtres les plus simples\notecite{wikipedia-filtre} seront réalisés avec des associations simples de condensateurs, bobines et de résistances. Avec un circuit $RC$ associant en série une résistance et un condensateur, on pourra réaliser un filtre passe-bas (qui filtre les hautes fréquences) ou un filtre passe-haut (qui filtre le basses fréquences). De même, avec un circuit $RLC$ associant en série une résistance, une bobine et un condensateur, on pourra réaliser un filtre passe-bande (laisse passer un intervalle de fréquences).\\
 
-Le transistor est un tripôle, ses branches\footnote{Voir le symbole sur la figure\ref{symboles}.} sont appelées collecteur (C), base (B) et émetteur (E). Il possède différents modes de fonctionnement : en régime linéaire ou en commutation, seul le second mode nous intéresse ici. Dès lors que la tension entre la base et l'émetteur et suffisante (généralement le seuil est de $0,7$ V), et qu'un faible courant arrive par la base, un courant plus important peut circuler entre le collecteur et l'émetteur : on dit que le transistor est passant ou saturé. Quand la tension base-émetteur n'est pas suffisante, le transistor est dit bloqué : aucun courant ne peut circuler par le jonction collecteur-émetteur. Dans les applications que l'on réalise, on cherchera par exemple à porter l'émetteur du transistor à la masse de sorte que la tension entre la base et la masse corresponde à la tension base-émetteur, ce-qui pourra simplifier la compréhension des montages.\\
+Pour construire des oscillateurs, c'est à dire des circuits qui génèrent un signal électrique variable dans le temps, on aura besoin en plus d'utiliser certains composants dits actifs\footnote{Il s'agit de composants qui permettent d'augmenter la puissance d'un signal.}, tels que le transistor. Il s'agit d'un composant qui permet de contrôler le courant de sa sortie en fonction du courant qui lui est fourni en entrée. Plusieurs types de transistors existent et on s'intéressera aux transistors dits bipolaires, dont le fonctionnement repose sur deux jonctions de matériaux présentant des excédents ou des manques d'électrons : dans le cas des transistors bipolaires dits NPN, on trouve une jonction entre un matériau avec un excédent d'électrons (N) dit dopé négativement, un matériau avec un manque d'électrons (P) dit dopé positivement et à nouveau un matériau (N) dopé négativement. À l'inverse, on trouve également des transistors bipolaires PNP.\\
 
-Ces deux derniers éléments sont extrêmement utilisés en électronique numérique, notamment dans la confection de portes logiques\footnote{Voir la section \ref{section_logique} en page \pageref{section_logique}.}.
+On ne détaillera pas ici le fonctionnement interne des transistors bipolaires, relativement complexe, mais on énoncera l'utilisation que l'on fait des transistors bipolaires NPN pour les applications qui nous intéressent.\\
 
-%=============================================\\
+Le transistor\notecite{wikipedia-transistor} bipolaire NPN présente trois connecteurs ou broches\footnote{Voir le symbole sur la figure \ref{symboles}.}, qui sont appelées base~(B), collecteur~(C) et émetteur~(E) et il peut être utilisé de différentes manières. Dès lors que la tension entre la base et l'émetteur dépasse un seuil de $0,7$ V et qu'un faible courant passe entre la base et l'émetteur, un courant plus important peut circuler entre le collecteur et l'émetteur : on dit que le transistor est passant ou saturé. Quand la tension base-émetteur est inférieure au seuil (sans être nulle), le transistor est en régime linéaire et laisse passer le courant entre le collecteur et l'émetteur proportionnellement au courant qui circule entre la base et l'émetteur : on dit qu'il est utilisé en amplification. Enfin, quand la tension base-émetteur est proche de 0 V, le transistor est dit bloqué : aucun courant ne peut circuler par le jonction collecteur-émetteur. Dans les applications que l'on réalise, on utilise le transistor en fonctionnement passant ou bloqué, c'est à dire comme un interrupteur commandé électriquement. De plus, on cherchera à porter l'émetteur du transistor à la masse de sorte que la tension entre la base et la masse corresponde à la tension base-émetteur, ce qui pourra simplifier la compréhension des montages.\\
+
+Un autre composant fondamental utilise une jonction entre un matériau dopé négativement (N) et un matériau dopé positivement (P) : il s'agit de la diode, dipôle qui ne laisse passer le courant que dans un sens, dès qu'une tension suffisante est appliquée à ses bornes. Cette tension de seuil est généralement de l'ordre de $0,7$ V (mais varie en fonction des matériaux utilisés).\\
+
+Ces deux derniers éléments sont extrêmement utilisés en électronique numérique, notamment dans la réalisation de portes logiques\notepartie{systemes-logiques}.
 
 \subsection{Génération d'un signal périodique sinusoïdal}\\
 
-On a vu précédemment que les circuits résonants nécessitent un signal sinusoïdal d'entrée pour fonctionner. La problématique à laquelle on s'intéresse s'articule autour des différentes façons d'obtenir de tels signaux : comment peut-on générer un signal électrique sinusoïdal (ou pseudo-sinusoïdal) de fréquence choisie ?\\
+On a vu précédemment que les circuits résonants nécessitent un signal sinusoïdal d'entrée pour fonctionner. La problématique à laquelle on s'intéresse s'articule autour des différentes façons d'obtenir de tels signaux : comment peut-on générer un signal électrique sinusoïdal de fréquence choisie ?\\
 
-Premièrement on rappelle que parmi les manières d'alimenter un circuit aujourd'hui, il y a les tensions continues et les tensions sinusoïdales. La génération des sources de courant alternatives sinusoïdales à haute tension fait appel à des propriétés mécanique et au phénomène d'induction. Cependant on peut aussi générer des signaux sinusoïdaux à l'aide de circuits alimentés uniquement par une tension continue. 
+On rappelle premièrement que parmi les manières d'alimenter un circuit aujourd'hui, il y a les tensions continues et les tensions sinusoïdales. La génération des sources de courant alternatives sinusoïdales à haute tension fait appel à des propriétés mécanique et au phénomène d'induction. Cependant on peut aussi générer des signaux sinusoïdaux à l'aide de circuits alimentés uniquement par une tension continue. 
 Alors que la première méthode est plutôt utilisée afin de fournir de l'énergie électrique, la seconde permet au sein-même d'un circuit électronique de véhiculer une information.\\
 
 Le principe de l'induction magnétique repose sur la variation d'un champ magnétique, qui entraîne l'apparition d'un courant induit dans un circuit. Plus précisément, considérons un fil conducteur fermé $\mathcal{C}$, on note $\mathcal{S}$ une surface quelconque d'aire $S$ qui s’appuie sur le contour de $\mathcal{C}$. $\mathcal{C}$ est plongé dans un champ magnétique $\vec{B}(M,t)$. On peut visualiser toutes ces conditions sur le schéma de la figure \ref{schema_induction}.\\
@@ -231,7 +228,7 @@ En effet la durée $T_h$ durant laquelle le signal de sortie est à l'état haut
 
 Un signal périodique carré peut également être généré en utilisant le circuit intégré $NE555$, utilise en mode de fonctionnement multivibrateur. Le $NE555$ est un circuit inventé dans les années 1970 et qui comporte tous les éléments pour réaliser divers montages temporels. En particulier, on pourra réaliser un multivibrateur monostable, c'est à dire un circuit qui ne générera qu'une seule impulsion de durée paramétrable, après un courte impulsion sur une entrée de déclenchement.\\
 
-Le $NE555$ est composé d'éléments tels que des comparateurs, une bascule RS\footnote{Voir la section \ref{bascules} dédiée aux bascules.} ou encore un inverseur. C'est la connexion de ces éléments entre eux, qui est d'une part fixée à l'intérieur du composant et d'autre part configurable au travers des contacts extérieurs du composants qui va permettre différents modes d'utilisation. On s'intéresse à l'utilisation en mode multivibrateur astable, réalisée avec le montage\citenoteagain{WikipediaNE555} suivant (on ne cherchera pas à détailler le fonctionnement interne du composant qui explique le fonctionnement du montage) :
+Le $NE555$ est composé d'éléments tels que des comparateurs, une bascule RS\footnote{Voir la section \ref{bascules} dédiée aux bascules.} ou encore un inverseur. C'est la connexion de ces éléments entre eux, qui est d'une part fixée à l'intérieur du composant et d'autre part configurable au travers des contacts extérieurs du composants qui va permettre différents modes d'utilisation. On s'intéresse à l'utilisation en mode multivibrateur astable, réalisée avec le montage\noteciteagain{WikipediaNE555} suivant (on ne cherchera pas à détailler le fonctionnement interne du composant qui explique le fonctionnement du montage) :
 
 \begin{figure}[!h]
 \centering
@@ -239,7 +236,7 @@ Le $NE555$ est composé d'éléments tels que des comparateurs, une bascule RS\f
 \caption{Montage du $NE555$ en mode multivibrateur}
 \end{figure}
 
-La fréquence d'oscillation $f$ et le rapport cyclique\footnote{Il s'agit du rapport entre le temps haut du signal sur une période et l'ensemble de la période.} $\alpha$ sont obtenus avec les formules\citenote{WikipediaNE555} :
+La fréquence d'oscillation $f$ et le rapport cyclique\footnote{Il s'agit du rapport entre le temps haut du signal sur une période et l'ensemble de la période.} $\alpha$ sont obtenus avec les formules\notecite{WikipediaNE555} :
 $$f = \frac {1,44} { (R2 + 2R1)C1 }\quad~\quad \alpha = 1 - \frac {R1} { (R2 + 2R1) }$$
 
 Le condensateur $C2$ est essentiellement présent pour stabiliser la tension interne du composant.
@@ -470,7 +467,7 @@ On a pu observer sur ce chronogramme que le signal de sortie était tel que souh
 \newpage
 \subsection{Exemple d'utilisation dans un système réel}
 
-L'oscillateur Pierce, qui fonctionne avec un quartz est très fréquemment utilisé pour la génération des signaux d'horloge\toldat{section_horloge} au sein des microcontrôleurs\toldat{echanges-concepts-definitions}. En effet, on retrouve cet oscillateur plusieurs fois sur un système complet tel que la Cubieboard2, sous la forme d'un quartz et de deux condensateurs de résonance, la porte inverseuse faisant partie du circuit intégré, comme c'est généralement le cas. Il est utilisé d'une part pour générer une horloge de $24$ MHz commune à plusieurs composants (entrées $OSC24MI$ et $OSC24MO$) et d'autre part pour générer l'horloge principale du composant \bsc{RTL8201}, dédié à la gestion du port Ethernet de la carte (entrées $X1$ et $X2$) :
+L'oscillateur Pierce, qui fonctionne avec un quartz est très fréquemment utilisé pour la génération des signaux d'horloge\notepartie{section_horloge} au sein des microcontrôleurs\notepartie{echanges-concepts-definitions}. En effet, on retrouve cet oscillateur plusieurs fois sur un système complet tel que la Cubieboard2, sous la forme d'un quartz et de deux condensateurs de résonance, la porte inverseuse faisant partie du circuit intégré, comme c'est généralement le cas. Il est utilisé d'une part pour générer une horloge de $24$ MHz commune à plusieurs composants (entrées $OSC24MI$ et $OSC24MO$) et d'autre part pour générer l'horloge principale du composant \bsc{RTL8201}, dédié à la gestion du port Ethernet de la carte (entrées $X1$ et $X2$) :
 
 \begin{figure}[!h]
 \centering
index dd6f784..2ee449a 100644 (file)
@@ -1,8 +1,8 @@
 \section*{Résumé}
 
-En notre qualité d'être Humain, nous faisons l'expérience du temps à chaque instant. La représentation de concept a été formalisé au cours de l'Histoire pour contribuer à l'organisation des sociétés. Elle s'est opérée au travers de différentes techniques, allant des effets périodiques naturels tels que le cycle du soleil ou les phases de la lune jusqu'à différents effets physiques comme la gravité ou les oscillations mécaniques. Cependant, depuis la fin des années cinquante, il a été possible de représenter le temps au travers de systèmes électroniques, utilisant les propriétés électriques de nombreux matériaux. Ce projet vise à fournir une compréhension globale du fonctionnement de ces systèmes. En particulier, il s'agit d'expliciter la génération de signaux de forme carrée à des fréquences précises. De plus, l'intégration de ces oscillateurs au sein de systèmes complets sera détaillée au travers de plusieurs expériences, mettant en valeur les utilisations au-delà de la théorie. Par l'étude d'un ordinateur de la taille d'une carte de crédit, la Cubieboard2, ce projet vise aussi à montrer comment les composants électroniques interagissent avec les composants basés sur le temps qui composant on ordinateur. De fait, certains aspects de l'interaction du temps avec les ordinateurs seront évoqués, accompagnés d'expériences illustrant la parallélisme et ses applications. Le cas de la communication entre plusieurs circuits numériques sera également abordé. Finalement, une synthèse de ces concepts et de leurs applications sera dressée, en mentionnant l'évolution et le futur proche de l'informatique basée sur le temps.
+Comme chaque être Humain, nous faisons l'expérience du temps en continu. La représentation de ce concept a été formalisée au cours de l'Histoire pour contribuer à l'organisation des sociétés. Elle s'est opérée au travers de différentes techniques, allant des effets périodiques naturels tels que le cycle du soleil ou les phases de la lune jusqu'à différents effets physiques comme la gravité ou les oscillations mécaniques. Cependant, depuis la fin des années cinquante, il a été possible de représenter le temps au travers de systèmes électroniques, utilisant les propriétés électriques de nombreux matériaux. Ce projet vise à fournir une compréhension globale du fonctionnement de ces oscillateurs. En particulier, il s'agit d'expliciter la génération de signaux de forme carrée à des fréquences précises. De plus, l'intégration de ces oscillateurs au sein de systèmes complets sera détaillée au travers de plusieurs expériences, mettant en valeur différentes utilisations concrètes au-delà de la théorie. Par l'étude d'un ordinateur de la taille d'une carte de crédit, la Cubieboard2, ce projet vise aussi à montrer comment les composants électroniques interagissent avec les composants basés sur le temps qui composant un ordinateur. De fait, certains aspects de l'interaction du temps avec les ordinateurs seront évoqués, accompagnés d'expériences illustrant le parallélisme et ses applications. Le cas de la communication entre plusieurs circuits numériques sera également abordé. Finalement, une synthèse de ces concepts et de leurs applications sera dressée, en mentionnant l'évolution et le futur proche de l'informatique basée sur le temps.
 
-\subsubsection*{Mots clefs : Temps, électronique, numérique, logique, informatique, parallélisme}
+\subsubsection*{Mots clefs : Temps, électronique, numérique, logique, informatique, synchronisation, parallélisme}
 
 \vfill
 
@@ -11,7 +11,7 @@ En notre qualité d'être Humain, nous faisons l'expérience du temps à chaque
 
 As human beings, we experience time at every instant. For a very long time, we have been trying to understand time better and have come up with various representations of it in order to organize our societies. At first, natural periodical effects were used as a base for representing time going by: the course of the sun, the phases of the moon, the different seasons, etc. Pretty soon, mankind created various systems to represent and count time passing by, using various physical properties such as gravity and mechanical oscillators. However, since the 1950s, we have been able to represent time using electronic systems, based on electrical properties of various materials. This project aims to provide an overall understanding of how these systems work. In particular, it will put the emphasis on how electrical oscillator generate square signals at a fixed frequency. In addition, the integration of those oscillators within full systems will be detailed through various experiments, highlighting actual uses of this theory. Throughout the study of a credit-card-sized single-board-computer, the Cubieboard2, this project also aims to show how electronic components interact with digital time-related parts that compose a full computer. Thus, some aspects of the interaction of time with computing systems will be explained, along with experiments regarding multi-thread computing and its implications. The basis for communication between two integrated circuits will also be detailed. Finally, an overview of these different concepts and their applications will be drawn, with considerations about what to expect regarding time-based computing for the near future.
 
-\subsubsection*{Keywords: Time, electronics, digital, logic, computing, multi-threading}
+\subsubsection*{Keywords: Time, electronics, digital, logic, computing, synchronization, multi-threading}
 \end{otherlanguage}
 
 \vfill