175 | | |
| 175 | == 4) Envoi de la configuration du cœur à travers de MWMR == |
| 176 | Les configurations du cœur ne sont pas visibles directement dans le memory map du système. On ne peut pas faire une lecture/écriture à une adresse pour obtenir la valeur à configurer/lire. Pour configurer ces registres, il faut passer par un mécanisme d'indirection mise en place par le wrapper du trx_ofdm. Ce mécanisme permet uniquement de faire des écritures de configuration, on ne peut pas faire de lecture. |
| 177 | |
| 178 | Pour charger les configurations au cœur TRX_OFDM on utilise une FIFO (FIFO d'entrée de configuration) et un registre de configuration (Adresse de configuration: registre @5) de MWMR. La procédure est la suivante: |
| 179 | |
| 180 | * On écrit dans le registre @5 l'adresse de début à configurer. |
| 181 | * On écrit dans la FIFO les données de configuration de maniérer séquentielle. |
| 182 | |
| 183 | Par exemple, si on veut configurer les adresses 10 à 25, on écrit 10 dans le registre @5 et puis on écrit les 15 valeurs de configuration dans la FIFO. |
| 184 | |
| 185 | Avant d'envoyer des données au cœur, on doit s'assurer que tous les paramètres de configuration on été reçus. On doit utiliser la fonction 'mwmr_wait_fifo_empty' pour s'en assurer. |
| 186 | |
| 187 | == 5) Chargement des données dans le cœur == |
| 188 | Le module OFDM travaille avec des paquets de données, par exemple pour une FFT de 1024 données, le paquet de données sont les 1024 valeurs nécessaires pour réaliser la FFT. |
| 189 | |
| 190 | Pour que le module OFDM puisse travailler avec un nouveau paquet de données il faut: |
| 191 | |
| 192 | 1. Ecrire dans le registre SlotID (registre @1) du cœur le numéro de configuration à exécuter. |
| 193 | 2. Reseter à 0 le registre Excute (registre @0). |
| 194 | 3. Ecrire 1 au registre Execute pour démarrer une nouvelle exécution au module. |
| 195 | 4. Charger les données au module à travers des FIFOs |
| 196 | 5. Attendre la fin du chargement avant de charger des nouvelles données. Pour cella, faire du polling sur le registre de EOC (End of Compute, registre status @0) et attendre la valeur 1. |
| 197 | 6. On peut lire la valeur de Status du cœur 0 (registre status @1) pour savoir si tout est bien passé. La valeur 0 signifie que tout c'est bien passé. |
| 198 | |
| 199 | On peut charger un nouveau paquet de données dès que le registre de EOC du paquet précédent vaut 1. Autrement on pourrait écraser l'exécution courante. |
| 200 | |
| 201 | |
| 202 | |
| 203 | |
| 204 | == 6) Démonstrateur du bloc TRX_OFDM == |
| 205 | Le démonstrateur du bloc TRX_OFDM est constitué de : |
| 206 | |
| 207 | * Un processeur MIPS |
| 208 | * Trois bancs mémoire |
| 209 | * Mémoire du programme |
| 210 | * Mémoire données |
| 211 | * Mémoire des objets logiciels MWMR (non caché) |
| 212 | * Une mémoire de locks |
| 213 | * Un TTY |
| 214 | * Un MWMR connecté au TRX_OFDM |
| 215 | |
| 216 | [[Image(jjj)]] |
| 217 | |
| 218 | Les objets logiciels utilisés par le MWMR sont trois: |
| 219 | * FIFO logicielle |
| 220 | * Etat de la FIFO logicielle |
| 221 | * Locks |
| 222 | Nous avons séparé les objets FIFO logiciel et son état dans une mémoire (RAM MWMR) pour pouvoir définir cette mémoire comme non cachée. Autrement, il ne serait possible d'utiliser le MWMR correctement. |
| 223 | |
| 224 | Tout le code nécessaire pour faire fonctionner le bloc TRX_OFDM est embarqué dans le MIPS. Nous avons crée une API (api_trx_ofdm.h) pour permettre une programmation simple de ce bloc. De même, nous avons crée une API (api_mwmr.h et api_mwmr.cpp) pour le MWMR qui intègre toutes les fonctionnalités requises par la API du TRX_OFDM. |
| 225 | |
| 226 | |
| 227 | === 6.1) Organisation des répertoires === |
| 228 | |
| 229 | Le répertoire racine du démonstrateur est: |
| 230 | |
| 231 | ''soclib/platform/topcells/caba-vgmn-trx_ofdm-mipsel'' |
| 232 | |
| 233 | |
| 234 | Ce répertoire contient deux sous-répertoires: |
| 235 | |
| 236 | * soft: contient le logiciel embarqué et les apis de trx_ofdm et mwmr |
| 237 | * appli/trace: contient des informations internes du module trx_ofdm. Indispensable pour pouvoir utiliser le module. |
| 238 | |
| 239 | === 6.2) Objets logiciels pour le MWMR === |
| 240 | |
| 241 | Pour pouvoir utiliser le bloc TRX_OFDM il faut configurer tous les objets logiciels pour le MWMR. Ces objets sont: |
| 242 | |
| 243 | * FIFO logicielle |
| 244 | * Etat de la FIFO logicielle |
| 245 | * Lock de la FIFO logicielle |
| 246 | |
| 247 | On doit configurer tous ces objets pour chacune des FIFOs utilisés: 2 FIFOs d'entrée, 2 FIFOs de sortie et une FIFO de configuration. |
| 248 | |
| 249 | === 6.3) Application du démonstrateur === |
| 250 | |
| 251 | A finir... |
| 252 | |
| 253 | |
| 254 | == 7) Rappel du MWMR == |
| 255 | La mise à jour par le projet SoClib pour le bloc MWMR se trouve: |
| 256 | |
| 257 | [https://www.soclib.fr/trac/dev/wiki/Component/VciMwmrController] |
| 258 | |
| 259 | Ce module a été conçu suite à la thèse d'Etienne Faure: |
| 260 | |
| 261 | "Communications matérielles-logicielles dans les systèmes sur puce orientés télécommunications" |
| 262 | |
| 263 | [ftp://asim.lip6.fr/pub/reports/2007/th.lip6.2007.faure.1.pdf] |
| 264 | |
| 265 | |
| 266 | |
| 267 | |
| 268 | |
| 269 | |
| 270 | |