L’interface WishBone

Comme nous allons être amenés à utiliser principalement l’interface WishBone, voici une description des signaux et des interfaces.

Signal WishBone

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
        }

Port maître WishBone

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;

                ...
        }

Port esclave WishBone

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 paramètres WishBone

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/

Retour au sommaire