4Close6
DEATHOn the 2022-05-06 at 05:58pm
(tes photos ne sont pas passées)

Si le pipeline et le prefetch fonctionne réellement lors d'accès à la DRAM, alors il y a clairement un manque d'optimisation du fonctionnement. 10 cycles entre 2 accès DRAM ? Sérieux ? Désolé mais c'est injustifiable. De toute façon il y a tellement de latence entre 2 accès que du coup,
le pipeline ne sert à rien puisque le temps que le chargement suivant s'effectue, tout le pipeline est déjà vide.

La 1ere optimisation serait de latcher les données venant du bus dram directement dans le buffer du prefetch, et si possible et si nécessaire de latcher les 1er 16bit dans le 1er étage du pipeline. On gagne plusieurs cycles sur un évènement qui a des chance de se produire fréquemment (prefetch vide, 1er étage du pipeline vide)
D'après ce que tu dis, la logique du contrôleur mémoire DRAM est mal optimisé et il n'y a aucune gestion de prefetch à ce niveau.

Je n'invente rien, c'est le b.a-ba d'un processeur "moderne", et je ne parle pas de prédiction. Il vaut mieux charger au max en avance et de tout jeter si nécessaire, que de passer son temps à attendre.

Pour le 68000 (et d'autres cas d'ailleurs) on peut utiliser un funnel. c'est un circuit logique qui permet de passer d'une taille de bus à une autre sans buffer. C'est utilisé dans le TT par exemple. T'as un bus 64bits d'un coté, de l'autre ça te sort l'octet, le mot, le long mot que tu veux. Et inversement