Séparer au maximum le combinatoire et le séquentiel

Si dans un processus, on constate un grand nombre d’imbrications de IF (plus de 3) il faut se poser la question de la simplification éventuelle de cette écriture.

WAIT UNTIL rising_edge (clk);
IF condition1 THEN …
IF condition 2 THEN …
IF condition 3 THEN …

On a ici associé à une fonction de mémorisation une fonction combinatoire de condition1, condition 2 etc…
Si cette fonction est combinatoire a t-on décrit toutes les combinaisons possibles ? Cette fonction si elle est trop complexe va créer des retards importants et faire chuter la fréquence maximale du circuit. Enfin, pour la lisibilité de la description, n’aurait-on pas eu intérêt à séparer cette partie combinatoire de la partie purement séquentielle.

Un circuit combinatoire

On privilégie toujours l’écriture en instruction concurrente. C’est plus économique en nombre de lignes et c’est surtout plus lisible. (voir cours VHDL pages 75 et suivantes)
S1 <= e1 OR (e2 AND NOT e3); — une équation

Un contre – exemple

faux_combi : Process ( e1) –ERREUR
BEGIN
IF (e1 OR (e2 AND NOT e3)) = ’1′ THEN
s1 <= ’1′;
ELSE
s1 <= ’0′;
END IF;
END PROCESS;

observations:

  • La liste de sensibilité est équivalente à WAIT ON. Si vous êtes débutant, préférer le WAIT ON explicite, vous vous apercevez tout de suite que le processus décrit est faussement combinatoire. En effet si e2 ou e3 change , la sortie n’est pas affectée. Elle ne le sera que lorsque e1 changera. On a ici affaire à un type de circuit inconnu en conception synchrone. Il y aurait ici un effet mémoire asynchrone.
  • On doit mettre en liste de sensibilité tous les signaux d’entrée si le circuit est combinatoire. L’écriture correcte est alors la suivante:

vrai_combi : Process
BEGIN
WAIT ON e1, e2, e3; — toutes les entrées puisque c’est combinatoire
IF (e1 OR (e2 AND NOT e3)) = ’1′ THEN
s1 <= ’1′;
ELSE
s1 <= ’0′;
END IF;
END PROCESS;

One Response to “Séparer au maximum le combinatoire et le séquentiel”

  1. Salut vhdl33.

    Que de bons conseils du routard du VHDL !!!

    ++
    eddy33

Leave a Reply

You must be logged in to post a comment.