Ajout d'un esclave WB

Ajouter un esclave WishBone à votre HelloWorld

Ajout d'un esclave WB

Cette section présente la façon avec la quelle vous pouvez ajouter un esclave à la structure du SoC et donne un exemple simple de modèle d'esclave WishBone.

Ajouter l'esclave au HelloWorld:

Pour commencer on vous propose un esclave simple, celui-ci contient un compteur de requêtes qui s'incrémente à chaque écriture. On peut récupérer la valeur de ce compteur en lisant à n'importe quelle adresse dans la plage d'adresses réservées à l'esclave WishBone.

Dans le sous dossier IPs/wb_simple_slave vous trouverez les trois fichiers suivants:

  • Un .h fichier d'en-tête où le module est déclaré
  • Un fichier .cpp contenant le code du module
  • Un fichier .sd contenant la description des dépendances pour l'outilsoclib-cc.

Modification du fichier top.cpp:

  1. Premièrement, il ajoutez le fichier d'en-tête
#include "wb_simple_slave.h"
  1. Ajoutez une entrée à la table d'adressage, par exemple:
maptab.add(Segment("wb_slave"  , WBS_BASE  , WBS_SIZE  , IntTab(3), false));

N'oubliez pas de définir les adresses dans le fichier segmentation.h.

  1. Ajoutez un signal Wishbone pour relier le module esclave.
 soclib::caba::WbSignal<wb_param> signal_wb_slave("signal_wb_slave");
  1. Ajoutez un esclave à l'interconnect en augmentant le nombre d'esclave:
soclib::caba::WbInterco<wb_param> wbinterco("wbinterco",maptab, 1,4);
  1. Enfin, instanciez et reliez ses port aux signaux prévus ainsi qu'à l'interconnect
soclib::caba::WbSimpleSlave<wb_param> simple_slave ("WB_simple_slave");
simple_slave.p_clk              (signal_clk);
simple_slave.p_resetn           (signal_resetn);
simple_slave.p_wb               (signal_wb_slave);

...

wbinterco.p_to_slave[3](signal_wb_slave);

Modification du fichier de description de plateforme:

Il faut modifier le fichier de description de plateforme utilisé par soclib-cc (platform_desc) en y ajoutant l'esclave à la liste des modules utilisé.

Uses('caba:wb_simple_slave'),

Le nom du module pour soclib-cc est celui qui est indiqué dans le fichier .sd.

De plus, pour que l'outil soclib-cc le retrouve, il faut donner le chemin vers le répertoire qui contient le fichier .sd de l'esclave. Ceci peut être fait en lui passant le chemin avec l'option -I. soclib-cc cherche récursivement aussi dans les sous répertoires.

Modifiez éventuellement le Makefile où une variable SOCLIB_INCLUDES est déjà prévue.

Accéder à l'esclave à partir du lm32:

Pour tester l'esclave WishBone, vous pouvez modifier le fichier le programme principale (soft/main.c).

Faites des lectures/écritures aux adresses réservées à l'esclave et observez le résultat sur la console et sur les traces de simulation.

Vous pouvez par exemple:

  • Écriture:
*((volatile unsigned int*) WB_TARGET) = valeur;
  • Lecture:
valeur = *((volatile unsigned int*) WB_TARGET);

N'oubliez pas de définir WB_TARGET à partir de WBS_BASE et WBS_SIZE.