Comme nous allons être amenés à utiliser principalement l’interface WishBone, voici une description des signaux et des interfaces.
Un signal WishBone est une structure de signaux SystemC. Cette structure rassemble les signaux de données et d’adresse ainsi que les signaux de contrôle.
template < typename wb_param >
class WbSignal {
public:
sc_core::sc_signal MWDAT; // masters output data
sc_core::sc_signal MRDAT; // masters input data
sc_core::sc_signal ADR; // master output address
sc_core::sc_signal ACK; // Acknowledge from slave
sc_core::sc_signal CYC; // cycle valid
sc_core::sc_signal ERR; // error from slave
sc_core::sc_signal LOCK; // lock request
sc_core::sc_signal RTY; // retry from slave
sc_core::sc_signal SEL; // BE
sc_core::sc_signal STB; // commande valid
sc_core::sc_signal WE; // write enable
}Un port maître WishBone est une structure regroupant des ports SystemC.
Les noms des ports ont les suffixes _I et
_O en fonction de leur sens vu par le maître.
Un port maître peut être connecté à :
On ne peut pas connecter un port maître directement à un port esclave sans signal intermédiaire.
template < typename wb_param >
class WbMaster {
public:
sc_core::sc_out DAT_O;
sc_core::sc_in DAT_I;
sc_core::sc_out ADR_O;
sc_core::sc_in ACK_I;
sc_core::sc_out CYC_O;
sc_core::sc_in ERR_I;
sc_core::sc_out LOCK_O;
sc_core::sc_in RTY_I;
sc_core::sc_out SEL_O;
sc_core::sc_out STB_O;
sc_core::sc_out WE_O;
...
}Un port esclave WishBone est une structure regroupant des ports SystemC.
Les noms des ports ont les suffixes _I et
_O en fonction de leur sens vu par l’esclave.
Un port esclave peut être connecté à :
On ne peut pas connecter un port esclave directement à un port maître sans signal intermédiaire.
template < typename wb_param >
class WbSlave {
public:
sc_core::sc_in DAT_I;
sc_core::sc_out DAT_O;
sc_core::sc_in ADR_I;
sc_core::sc_out ACK_O;
sc_core::sc_in CYC_I;
sc_core::sc_out ERR_O;
sc_core::sc_in LOCK_I;
sc_core::sc_out RTY_O;
sc_core::sc_in SEL_I;
sc_core::sc_in STB_I;
sc_core::sc_in WE_I;
...
}Les ports et signaux WishBone sont paramétrables. On peut préciser la largeur du bus de données et du bus d’adresse.
Les données transportées par cette interface sont des
sc_uint de largeur paramétrable.
template < int data_width, int add_width >
class WbParams {
public:
// Constants which can be used externally
static const int DataWidth = data_width;
static const int AddWidth = add_width;
static const int BeWidth = data_width/8;
// Signal types
typedef sc_dt::sc_uint wb_data_t;
typedef sc_dt::sc_uint wb_add_t;
typedef sc_dt::sc_uint wb_sel_t;
...
}Le code source complet est accessible ici:
/comelec/softs/opt/soclib/soclib/communication/wishbone/