
Brunni (./59) :
Ca c'est sûr, j'aimerais bien savoir le faire ^^
D'ailleurs il ressemble à quoi?
Flanker (./61) :Brunni (./59) :
Ca c'est sûr, j'aimerais bien savoir le faire ^^
D'ailleurs il ressemble à quoi?
RISC 16 bits, chaque instruction est conditionnée par 3 bits (mais 8 conditions, ça fait peu), il y a 5 bits pour le code d'instruction (32 au total), 1 bit signale si le SR est mis à jour, et 7 bits sont utilisés numéroter les registres (on a un processeur de type 1 adresse)
Godzil (./62) :Flanker (./61) :Brunni (./59) :
Ca c'est sûr, j'aimerais bien savoir le faire ^^
D'ailleurs il ressemble à quoi?
RISC 16 bits, chaque instruction est conditionnée par 3 bits (mais 8 conditions, ça fait peu), il y a 5 bits pour le code d'instruction (32 au total), 1 bit signale si le SR est mis à jour, et 7 bits sont utilisés numéroter les registres (on a un processeur de type 1 adresse)
marrant tu (enfin est-ce toi qui a fait cet exo a la base?) a un CPU qui reprend des principes de l'ARM ^^
Flanker (./61) :
7 bits sont utilisés numéroter les registres (on a un processeur de type 1 adresse)
$main BLDCTL_OR(BLDCTL_NONE) ; configure le blending BG0CTL_OR(BGXCTL_MODE(0) | BGXCTL_MAPBASEBLOCK(0) | BGXCTL_CHARBASEBLOCK(0)) ; configure BG0 DISPCTL_OR(DISPCTL_BG0_ENABLE) ; active BG0
Brunni (./65) :Flanker (./61) :
7 bits sont utilisés numéroter les registres (on a un processeur de type 1 adresse)
Hmm je comprends pas cette partie... les registres source/dest? Y a pas de zone pour la constante? Et c'est quoi un processeur de type 1 adresse?
Sinon t'as carrément des bits de statut?
En tous cas le mien n'a rien de tout ça, il ressemble plus à un MIPS downgradé en fait. Il est d'ailleurs pas super performant, des fois je me dis que j'aurais dû faire à la THUMB: 3 opérandes avec accès seulement aux 8 premiers registres, et pour les autres on les utilise comme une "pile" rapide avec une instruction dédiée. Ou alors peut être en ayant plusieurs jeux de registres... mais il en faudrait toujours qui soient fixes (pc et at au moins, après on peut discuter sur lr et sp), du coup on est limité
Je viens de voir que sur un autre forum où j'ai posté mon truc (ici) y a un type qui s'est amusé avec, en plus avec la release où le CPU était à 8 kHz. Ca n'a pas l'air de fonctionner si mal en fait, il a fait plein de macros et tout, il a pas dû s'amuser$main BLDCTL_OR(BLDCTL_NONE) ; configure le blending BG0CTL_OR(BGXCTL_MODE(0) | BGXCTL_MAPBASEBLOCK(0) | BGXCTL_CHARBASEBLOCK(0)) ; configure BG0 DISPCTL_OR(DISPCTL_BG0_ENABLE) ; active BG0
Une question: c'est dur d'implémenter un CPU comme celui que tu as fait sur une FPGA?
(par dur j'entends pour qqn qui a des bases comme moi en info mais à peu près aucun souvenir de VHDL)
Et tu pourrais faire tourner un tel CPU à quelle vitesse?
Brunni (./65) :
Hmm je comprends pas cette partie... les registres source/dest? Y a pas de zone pour la constante? Et c'est quoi un processeur de type 1 adresse?
Sinon t'as carrément des bits de statut?
Une question: c'est dur d'implémenter un CPU comme celui que tu as fait sur une FPGA?
(par dur j'entends pour qqn qui a des bases comme moi en info mais à peu près aucun souvenir de VHDL)
Et tu pourrais faire tourner un tel CPU à quelle vitesse?
Flanker (./67) :Brunni (./65) :Un processeur 1 adresse, c'est que les opérations ne précisent qu'une seule opérande. Pour les opérations binaires, l'autre opérande est dans un registre fixe.
Hmm je comprends pas cette partie... les registres source/dest? Y a pas de zone pour la constante? Et c'est quoi un processeur de type 1 adresse?
; a := b + c ; LOAD c ld r0, :c push r0 ; LOAD b ld r0, :b push r0 ; ADD pop r0, r1 add r0, r1 push r0 ; STORE a pop r0 st r0, :a
squalyl (./78) :
d'après ce que j'ai compris on teste des réordonnancements d'instructions pour trouver la config qui améliore l'allocation, en calculant un "score" a chaque essai, en faisant des "mutations" de la config courante, puis on relance le programme et on cherche ce qui améliore le score.
je crois. peut être c'est ça.
Brunni (./79) :
Hmm je vois. Pour la coloration ça ok c'est un autre problème. A priori j'aurais tendance à tenter une heuristique SLS, faudrait voir ce que ça donne.
Mais concernant le graphe en lui même il faut donc créer un sommet pour toute variable (incluant les constantes au sens registre = constante) et ensuite relier d'un arc celles qui sont modifiées alors qu'une autre peut toujours être utilisée par la suite, c'est ça?
Ensuite si on trouve plus de n couleurs (pour n registres sur la machines) alors il faut commencer à déterminer quels registres peuvent être "lâchés" (dans le cas de constantes on peut les recharger facilement) ou poussés dans la pile (recalculer la valeur contenue prendrait plus de temps qu'empiler / désempiler ou bien aurait des effets de bord). C'est ça?
Après le réordonnancement ça je trouve bizarre de tout tester comme un bourrin, surtout qu'il y a une énormité de combinaisons possibles non?
geogeo (./76) :
Oui mais le calcul reste toujours NP-complet ?