116 | | ''fifo_lcd_coprocessor.cpp''. |
| 116 | ''fifo_lcd_coprocessor.cpp''. |
| 117 | |
| 118 | Comme pour tout modèle CABA SoCLib, les variables membres de la classe '''FifoLcdCoprocessor sont de trois types : |
| 119 | * '''ports''' : les variables membres représentant les ports d'entrée sortie sont de type ''sc_core::sc_in'' ou ''sc_core::sc_out'', |
| 120 | ou des objets plus complexe (possédant éventuellement un paramètre template) représentant des regroupements de plusieurs ports élémentaires : c'est la cas des types ''soclib::caba::FifoOutput<typename>'' et ''soclib::caba::FifoInput<typename>'' utilisés pour accéder à un cana FIFO. Pour des raisons de lisibilité, il est recommandé que les noms de registre soient préfixé par '''p_'''. On définira 2 ports simples (''p_ck'', ''p_resetn''), et deux ports FIFO (''p_in'' et ''p_out''). Ce sont évidemment des variables publiques. |
| 121 | * '''registres''' : les variables membres représentant les registres sont de type ''sc_core::sc_signal''. Pour des raisons de lisibilité, il est recommandé que les noms de registre soient préfixé par '''r_'''. On définira trois registres ''r_fsm'', ''r_opa'' et ''r_opb''. Ce sont des variables privées. |
| 122 | * '''constantes''' : ces variables membres sont en fait des constantes permettant de stocker les valeurs des paramètres définis comme arguments du constructeur pour les composants matériels génériques. Ces variables membres sont initialisées dans le constructeur, et leur valeur reste constante au cours de la simulation. Pour des raisons de lisibilité, il est recommandé que les noms de constantes soient préfixé par '''m_'''. Ces variables sont toujours privées. Le coprocesseur n'étant pas paramètrable, on ne définira aucune variable de ce type. |
| 123 | |
| 124 | Le constructeur du coprocesseur LCD ne possède qu'un seul argument, qui est le nom d'instance (on a besoin d'un nom d'instance, car il est possible d'avoir plusieurs instances du même coprocesseur dans une architecture). Ce nom d'instance est de type ''sc_core::sc_module_name'', et il est stoké dans une variable membre de la classe ''sc_module'', qui est une classe générique dont héritent tous les modèles de composant SoCLib. |
| 125 | |
| 126 | Enfin, comme tous les modèles CABA de SoCLib, le coprocesseur LCD possède des fonctions membres définissant |
| 127 | le comportement du composant, qui sont de trois types : |
| 128 | * la fonction ''transition()'' est sensible au front montant du port d'etrée CK, et permet de calculer la valeur future des |
| 129 | registres en fonction de la valeur courante des registres et des valeurs présentes sur les autres ports d'entrée. |
| 130 | * la fonction ''genMoore()'' est sensible au front descendant du port d'entrée CK, et permet de calculer la valeur des ports de sortie qui ne dépendent que des valeurs stockées dans les registres. |
| 131 | * les fonctions ''genMealy'' (une ou plusieurs fonction). Chacune de ces fonction est sensible au front descendant du port CK, et à un ensemble particulier de port d'entrée. Elle permettent de calculer la valeur des ports de sorties qui dépendent de façon combinatoire des ports d'entrée. |
| 132 | Les noms de fonction ne sont pas imposés, mais il est recommandé de respecter les noms proposés ci-dessus. |
| 133 | Le coprocesseur LCD se comportant globalement comme un automate de Moore, on n'a pas besoin de définir de fonctions de type ''genMealy()''. |
| 134 | |
| 135 | Les architectures matérielles modélisées avec SoCLib peuvent comporter plusieurs dizaines de modèles différents. |
| 136 | Pour réduire les temps de compilation la plate-forme de modélisation SoCLib exploite le principe de la compilation séparée: Chaque modèle de composant matériel est compilé séparément. |
| 137 | |
| 138 | A titre d'exemple, compilez le modèle du composant '''FifoLcdMaster''', en utilisant le compilateur g++. |
| 139 | Il faut lancer la commande suivante dans votre répertoire de travail TP1 : |
| 140 | {{{ |
| 141 | $ g++ -Wno-deprecated -I. -I/.../systemc/systemc-2.2/include -c -o fifo_lcd_master.o fifo_lcd_master.cpp |
| 142 | }}} |
| 143 | Cette commande doit créer fichier objet ''fifo_lcd_master.o dans le répertoire TP1. |
| 144 | |
| 145 | Vous pouvez utiliser la même commande (en changeant les noms des fichiers) pour compiler... et déboguer le modèle |
| 146 | du composant '''FifoLcdCoprocessor'''. |