SystemC problème

Fermé
simerab14 Messages postés 3 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 11 août 2008 - 7 août 2008 à 21:16
simerab14 Messages postés 3 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 11 août 2008 - 11 août 2008 à 14:25
Bonjour,

je désire affecter le résultat d'une opération à un signal. voici le programme :

sc_uint<37> fifo; // signal sur qui sera effectuée l'opération.
sc_uint<32> msb; // signal qui recevra le résultat de l'opération

// affichage résultat sans affectation, cet affichage donne le résultat attendu
std::cout << std::hex
<< (sc_uint<32>) ((fifo >> 4) & 0xFF000000);


// affectation puis affichage
msb = (sc_uint<32>) ((fifo >> 4) & 0x00FF000000);

std::cout << std::hex
<< msb;

// l'affichage de msb après affectation du résultat de l'opération, n'est pas correct, car msb contient 0.

Comment se fait-il que la même opération donne un résultat différent, selon qu'on l'affiche directement ou qu'on l'affecte ? Ce qui m'intéresse, c'est comment récupérer le résultat correct et l'affecter à un signal tel que msb ?

Merci à tous ceux qui peuvent m'aider.

2 réponses

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
8 août 2008 à 08:09
Salut ne sacahnt pas ce qu'est sc_uint, je ne sais comment te répondre.
Par exemple, si c'est un pointeur, ça ne m'étonne pas. Exemple, un char* cout t'affichera la chaine qu'il contient (et non la valeur du pointeur) par contre, lors d'une affectation il prendra bien en compte la valeur du pointeur.
Bref, pour dire que l'opérateur << de cout n'a pas forcément les même comportement que l'opérateur d'assignement '='.
En plus, vu que sc_uint a tout l'air d'une classe, il y a des chance que cet opérateur ait été surchargé.
-1
simerab14 Messages postés 3 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 11 août 2008
11 août 2008 à 14:25
Résolu !!!

Merci sniper, mais ce n'était pas ça le problème.

En fait, msb étant un signal (registre), sa valeur n'est mise à jour qu'au prochain front de l'horloge (cycle).
Par contre, pour les variables, la mise à jour est instantanée.
-1