Test de la fonction modulo « MOD »

Lorsqu’elle s’applique à des nombres entiers positifs, la fonction « modulo » est simple à comprendre. Il s’agit du reste de la division d’un dividende par un diviseur, de telle sorte qu’on puisse écrire:

Modulo = dividende – partie entière de (dividende / diviseur), avec dans ce cas modulo <  diviseur

voir à ce sujet: modulo(informatique) wikipedia

En écriture VHDL, on dispose de cette fonction de multiples fois en surcharge dans les bibliothèques telles que ieee.numeric_std et la syntaxe est par exemple :

Modulo <= dividende MOD quotient;

Avec des types non signés ou natural, on va ainsi constater que : 200 Mod 200 retourne 0, mais que 210 MOD 200 retourne 10.

Le cas des nombres entiers signés est plus délicate et il est bon de faire un petit programme de test afin de se faire une idée de la façon dont est calculé le modulo.

Le fichier test_modulo.vhd permet de mieux cerner le fonctionnement du modulo.

On y constate, en particulier que le modulo VHDL  est toujours du même signe que le diviseur

ainsi :  2444 MOD 200 retourne 44 mais 2444 MOD -200 reourne -44.

La fonction MOD n’est pas reconnue synthétisable telle quelle sauf si le quotient est une puissance de 2 car cette opération revient à un décalage de bits. Ainsi dividende MOD 128 est synthétisable.  L’opération équivalente étant de ne garder que les 7 bits de poids faible de dividende. Ainsi 232 MOD 128 = 232 -128 = 104, opération qui ne coute rien en termes de ressource lors de la synthèse.

Leave a Reply

You must be logged in to post a comment.