TP 2
====


A. Consignes ge'ne'rales
========================

- Ce TP fera l'objet d'un rapport e'value'.
  Les consignes figurent au bas de la page web de l'unite'.

- Un rapport peut e^tre rendu par mono^me ou bino^me.
  Leur composition est releve'e le jour du TP 2 et
  ne peut plus e^tre modifie'e ensuite.

- Le travail demande' est un peu plus important pour un bino^me.

- Le plagiat est bien e'videmment interdit me^me pour une
  petite partie de code, commentaire, ou fichier de donne'es.



B. Consignes pour les exercices
===============================

- Toujours cre'er un sous-re'pertoire de'die' a` chaque exercice.

- Ne pas oublier d'ajouter un signal boole'en supple'mentaire
  pour pouvoir visualiser l'horloge d'un signal de sortie
  lorsque celle-ci n'est pas la plus fre'quente du syste`me.

- Imaginer des valeurs pour chaque signal d'entre'e permettant
  de tester tous les cas particuliers fait partie inte'grante
  de la re'solution d'un exercice et montre la compre'hension
  de la proble'matique de l'exercice.

- E'crire les e'quations d'horloges dans le fichier .SIG
  (uniquement pour les exercices avec le symbole +H),
  en indiquant les re`gles utilise'es.
  Des e'quations de signaux les plus simples possibles
  seront pre'fe're'es a` une seule e'quation complique'e.



C. E'nonce's des exercices (pour tous)
======================================


Exercice 1 (identite')
----------

 1.1)
 Objet   : utilisation de sous-processus dans un me^me fichier

 E'nonce': E'crire le processus Identite prenant en entre'e le signal E de
  type re'el et en sortie un signal S de me^me type.
  Le processus multipliera d'abord par 2 puis par 0.5 pour que la sortie
  soit identique a`l'entre'e.
         +-----+     +-------+
   E --> | x 2 | --> | x 0,5 | --> S
         +-----+     +-------+
  Pour cela, il utilisera deux fois le processus MulPar du TP1.

 1.2)
 Objet   : utilisation de module

 E'nonce': E'crire le processus Modulaire identique a` Identite ci-dessus,
  sauf pour le processus MulPar qui sera de'fini dans un module se'pare'.


Exercice 2 (Compteur modulo) +H
----------

 Objet: Syntaxe du fichier de parame`tres du processus principal, retard,
  et synchronisation.

 E'nonce': E'crire le processus CptMod prenant un parame`tre M de type integer,
  en entre'e un signal top de type event, et en sortie un signal N de type
  integer comptant a` partir de 0 et modulo M les occurences de top, tout
  en n'utilisant pas l'ope'rateur modulo.

 Par exemple pour M=3 :
   TOP   T  T  T  T  T  T  T  ...
    N    0  1  2  0  1  2  0  ...

 Attention !  L'e'nonce' est diffe'rent de celui du TD.


Exercice 3 (lissage) +H
----------

 Objet   : Fene^tre glissante

 E'nonce': E'crire le processus Lissage qui prend en entree un signal re'el
  et en sortie un signal re'el qui vaut la moyenne des 3 dernie`res valeurs
  (y compris l'instant courant).

 Contrainte : Utiliser une fene^tre glissante.

 Par exemple :
  E  3.0 3.0 6.0 3.0 6.0 3.0 3.0 6.0 3.0 3.0 9.0 3.0 3.0
  S  1.0 2.0 4.0 4.0 5.0 4.0 4.0 4.0 4.0 4.0 5.0 5.0 5.0


Exercice 4 (sur-e'chantillonneur)
----------

E'nonce': E'crire le processus Sur avec un signal d'entre'e E et un signal
 de sortie S, tous deux de type entier. S portera les me^mes valeurs que E
 mais il sera deux fois plus fre'quent !

Aide: utiliser une bascule bi-stable

Par exemple :
 E  10    3   -7    5   ...
 S  10 10 3 3 -7 -7 5 5 ...


Exercice 5 (convertisseur Se'rie -> Paralle`le) +H
----------

 E'nonce': E'crire le processus SerPar avec un signal d'entre'e BIT de type
  boole'en, et un signal de sortie OCTET de type entier. Celui-ci est ge'ne're'
  toutes les huit occurences de BIT, dont chacune code, par poids de'croissants,
  la valeur binaire de OCTET.
  La valeur true (resp. false) de BIT code un bit a` 1 (resp. 0).

 Contraintes:
  - Utiliser un sous-processus CptMod dans un module
  - Ne pas utiliser de tableaux
  - Ne pas utiliser l'ope'rateur puissance (**)

 Par exemple :
    BIT   F F F F  F F F T  F F F T  F F T T  T T T T  T T T T   ...
   OCTET                 1                 19                255 ...




Exercice 6 (convertisseur Paralle`le -> Se'rie) +H
----------

 E'nonce': E'crire le processus ParSer avec un signal d'entre'e OCTET de type
  entier, et un signal de sortie BIT de type boole'en, dont les valeurs
  successives repre'sentent les huit bits de poids faible de l'entre'e,
  ge'ne're's par poids croissants.

 Contraintes: idem exercice 5

 Par exemple :
   OCTET  1                 19                255              ...
    BIT   T F F F  F F F F  T T F F  T F F F  T T T T  T T T T ...


Exercice 7 (cell) +H
----------

 7.1)
 Objet   : me'morisation d'un signal, resynchronisation

 E'nonce': E'crire le processus MyCell qui prend en entre'e un signal E entier
  et un signal B boole'en, et qui fournit en sortie un signal S entier portant
  les me^mes valeurs que E quand E est pre'sent et la dernie`re valeur connue
  pour E quand E est absent mais B est pre'sent et vrai.

 Par exemple :
  E         9     8 7     6      ...
  B   F T F   F T T F T T   F T  ...
  S     0   9   9 8 7 7 7 6   6  ...

 7.2)
 Objet  : test de MyCell

 E'nonce': En Signal, il existe l'ope'rateur cell qui re'alise exactement
  ce qui a e'te' demande' pour le processus MyCell; la syntaxe est :
  S := E cell B init I  (I vaut 0 dans l'exemple ci-dessus).

  E'crire le processus TestCell qui calcule simultane'ment le re'sultat
  de cell et de MyCell sur E et B, et qui les compare pour fournir en sortie
  un boole'en valant vrai ou faux selon le re'sultat de la comparaison.

  Si les horloges dans MyCell ne sont pas correctes, vous obtiendrez des
  "clock constraints" lors de la compilation de TestCell.
  Si les valeurs de sortie de MyCell ne sont pas correctes, vous n'aurez
  pas que des "true" en sortie.

 Contrainte: Encapsuler MyCell dans un module pour ne pas avoir a` le
  recopier dans TestCell.


Exercice 8 (de'compteur) +H
----------

 Objet   : Conditionnement d'une entre'e et cadencement par une sortie.

 E'nonce': E'crire le processus Decompteur prenant en entre'e le signal INI de
  type entier et un signal de sortie N de type entier.
  A l'instant initial, INI et N sont pre'sents simultane'ment et N prend la
  valeur de INI, puis les occurences de N prennent des valeurs de'croissantes.
  La valeur de INI de'termine le nombre d'occurences de N qui doivent e^tre
  ge'ne're'es avant l'occurence suivante de INI.

 Par exemple :
   INI  3     5         1 2   0 7             -2 4       ...
    N   3 2 1 5 4 3 2 1 1 2 1 0 7 6 5 4 3 2 1 -2 4 3 2 1 ...



D. E'nonce's des exercices (pour les bino^mes)
==============================================


Exercice 9 (Dans) +H
----------

 E'nonce' : E'crire un processus qui prend en entre'e 3 e've`nements
  DEBUT, FIN, et EVT, et qui fournit en sortie 4 boole'ens
  FO, FF, OF, et OO qui disent respectivement si EVT est survenu
  dans l'intervalle [DEBUT,FIN[ [DEBUT,FIN] ]DEBUT,FIN] ou ]DEBUT,FIN[ .

 Contrainte : ne pas calculer plusieurs fois la me^me chose.


Exercice 10 (Portier) +H
-----------

 E'nonce' vu en cours (voir re'sume').

 Contraintes :
  - doit pouvoir fonctionner "e'ternellement"
  - doit prendre en compte une ENTREE et une SORTIE simultane'es
  - doit permettre la visualisation d'un e'ventuel de'faut (alarme)


Exercice 11 (Compteur a` partir de) +H
-----------
 E'nonce' vu en td/tp (voir td ou tp1).