Citation:
Eh si!! L'algo pour la division est quasiment le même!
Oui mais non. C'est l'une des complexité quand on pense HDL: ca n'est pas du soft. Ca a l'air idiot comme remarque, mais cela a toute son importance car c'est ce qui rend les instructions à microcode plus lentes et moins gourmand en portes logiques que les instruction directement encodées dans le matériel.
En soft tout est séquentiel et c'est lent. En HDL tout est massivement parallèle. Les mêmes algorithmes ne s'appliquent pas forcément à l'un et à l'autre.
L'algo de division est séquentiel. Le tour suivant attends le résultat complet de l'étape antérieure avant de pouvoir décider si tel nombre est plus grand ou plus petit que tel autre (ce qui permet de savoir si le bit du diviseur est à 0 ou 1). Il lui faut donc beaucoup de temps pour obtenir tous les bits. Remarquons aussi que c'est le cas de la multiplication classique telle qu'implémentée dans les vieux CPUs comme le 6809/6309 aussi.
Par contre l'opération de multiplication peut être massivement parallélisée au point de pouvoir la réaliser en nettement moins de temps qu'il y a de bits à produire. En effet les additions étant commutatives, leur ordre n'importe pas. On peut les regrouper comme on veut, par exemple 3 par 3, 4 par 4, et utiliser
additionneur s'épargnant la retenue (carry-save adder) pour avoir le résultat de l'addition de plusieurs nombre dans sensiblement le temps que prendrait une seule addition avec retenue classique.
Ceci explique que même sur des CPU super modernes comme le mc68060, la division reste nettement plus lente qu'une multiplication.
Citation:
Quant au problème de signe, j'ai déjà dit qu'il suffisait de le stocker dans un drapeau, sachant qu'un -par - donne un + et qu'un + par + donne un -, il suffit de faire un XOR sur le signe (1 xor 1 1xor 0 etc)
Oui, mais tu passe à coté de l'ensemble du calcul. Ce n'est pas tout de décider le signe final. Ce qui coute aussi est de passer à la valeur absolue des entrées et appliquer le signe à la sortie et faire le produit au milieu. Ca fait pas mal d'étapes plus coûteuses qu'un xor. Heureusement, pour les multiplications signées il y a des algorithmes efficaces qui font mieux que ca:
Booth algorithm ou d'
autres.
sam (oui je sais ca fait beaucoup d'indiens à
cette heure, mais qu'on se rassure chez Motorola on utilise surtout des Big Endians
)