La semaine précédente (ou cette semaine pour les retardataires) nous avons calculé PI. Dans cette version un nouvel IP rdm a été inséré dans le MASTER HoMade et le code pour le calcul de PI a utilisé certains des IPs fournis en bibliothèques afin de construire la boucle Monté Carlo avec un appel à chaque itération de cet IP rdm $8810, où X=0, Y=1 et IPcode = $010.
En optimisant notre processeur HoMade nous aurions pu nous limiter à instanciés seulement les IPs suivant:
Je vous propose d'utiliser deux autres critères d'efficacité afin de caractériser l'allocation de ressources nécessaires pour votre design.
En sélectionnant SYNTHESIS>Report Utilization vous pourrez observer le nombre de LUT et le nombre de registre utilisés pour votre design.
Pour chacun des cas suivants vous garderez ces 2 valeurs ainsi que le nombre de cycles pour le même calcul de PI/4. Ils vous permettrons de calculer le facteur d'accélération par rapport à la version logicielle réalisée précédemment mais aussi d'estimer le surcoût matériel qui en découle.
IMPLEMENTATION>Report Utilization est encore plus visuel, il vous montre les ressources utilisées:
a) Mesure de référence
Le première mesure ce fera sur la version utilisée lors du TP8 avec le .zip fourni . Pour chaque étape il faudra remplir un tableau de ce type ( ratio par rapport à la solution a.)
b) HoMade nettoyé ;
Cette fois en n'instanciant que les IPs nécessaires , il suffit de commenter le code ou mieux dans IPcode placez un "0' dans la constant correspondante afin de ne pas implanter.
constant GenM_xxxxxxxxx : std_logic :='0'
c) Moins de hard pour gérer les boucles
L'IP Datastack est implicitement utilisé par l’assembleur Hasm.
d) Un nouvel IP rdm
L’algorithme que je vous ai proposé produit un nombre aléatoire de 32 bits puis par calcul à l'aide des opérateurs implémentés dans ALU vous en avez extrait 2 mots de 12 bits chacun, poids fables puis les 12 poids forts suivants. Construire un IP qui générerait directement ces 2 mots de 12 bits à partir de votre précédent code est assez trivial . Les envoyer en même temps pour les ranger en même temps sur les deux sommets de la pile d'exécution d 'HoMade ne l'est pas moins. Il faut ici utiliser un bus de sortie Nout de 32 bits qui sera en 'Z' par défaut, idem à Tout. Bien sur il faut mettre à jour votre entity, votre composant et votre instanciation en fonction de ce nouveau port Nout.
e) Plus de MUL16
Dans un même IP on peut en même temps calculer les deux MUL16 en parallèle puis leur somme.
En vous aidant du code de l'IP mul16, construire un nouvel IP square2 qui instancie deux multiply et fait la somme des deux résultats, Vous pourrez utiliser le même codeIP que l'IP mul16 avec les bons X et Y si vous commentez l'instanciation de celui-ci dans le master.
f) Et si on supprimait l'ALU!
L'ALU permet de faire beaucoup de chose bien que l'on utilise assez peu des fonctionnalités offertes. De plus les opérations implantées sont exécutées séquentiellement.
Proposez un solution sans ALU avec quelques IP dédiés à cette application, par exemple
Faite-vous votre propre idée sur l'effort de développement à fournir pour ce design....
peut on tout faire en un seul cycle ??? A vous de jouer pour rattraper des points ;-)