L'article précédent vous a présenté deux façons de réaliser un multiplieur complexe, toutes deux proches de la méthode naïve qui consiste à utiliser un circuit arithmétique de base (multiplieur, additionneur, soustracteur) par opération et à les connecter selon l'arbre de calcul. Nous allons maintenant voir comment partager le même circuit arithmétique entre plusieurs opérations.
1. Séquençage
Tout comme dans l'article précédent, notre problème est le suivant : étant donné quatre entrées a, b, c, d, nous devons calculer deux nombres, r = a*c - b*d et i = b*c + d*a (ce qui correspond à une multiplication complexe). Nous travaillons avec des entiers signés sur 9 bits.
Notre implémentation précédente utilise quatre multiplieurs, qui peuvent être une ressource assez coûteuse. Nous allons voir à présent comment n'utiliser qu'un seul multiplieur. Comment ? Exactement comme le font les microprocesseurs, en effectuant à tour de rôle et à chaque cycle chacune des multiplications. Dans un pseudo-langage assembleur, cela donnerait ceci :
mul r1, a, c
mul r2, b, d
sub r, r1, r2
mul r1, b, c
mul r2, d, a
add i, r1, r2
Autrement dit, nous devons séquencer les opérations. On peut bien sûr s'attendre à ce que la bande passante obtenue soit inférieure à celle des circuits précédents, mais c'est...
- Accédez à tous les contenus de Connect en illimité
- Découvrez des listes de lecture et des contenus Premium
- Consultez les nouveaux articles en avant-première