• Aucun résultat trouvé

Électronique du calorimètre hadronique semi–digital

2.4 LOGICIELS DE LECTURE DES CARTES DHCAL1 65 FPGA

Accès FPGA et ASICs - Contrôle - Configuration - Pilotage - Lecture Gestion

de l'USB MatérielPilote

Protocole : Commandes + Registres - Configuration - Pilotage / Lecture - Contrôle Statut Données (de configuration ou d'évènements) Interface API Pilote Date N° carte Estampillage 0F59863421 D1B28E4FF Données xx-xx;p0;0 xx-xx;p1;0x2 xx-xx;p2;0x41 configuration Entré es / So rties

Figure 2.19 – Principe de fonctionnement du pilote de la carte DHCAL1. La pile dans le bloc de gestion de l’USB représente le découpage des trames en octets.

USB (« scheduler » en anglais) et du contrôleur hôte. Sous linux, elle fournit une inter- face au démon USB par des appels systèmes en « mode utilisateur ». Les différences dans l’implémentation font que les performances sont inégales (les délais d’accès sous linux sont un peu plus longs). Cette librairie fournit une interface unique pour tous les composants FTDI connectés (au maximum 64). Les différents fils d’exécution (processus légers) et leur synchronisation sont pris en charge par la librairie pthread (POSIX54threads, dont le port

WINDOWS™ utilisé est nommé pthreadWin32), ce qui permet un fonctionnement parallèle et événementiel. Les accès pris en charge sont de type lecture, écriture et paramétrisation (temps limites de la FIFO ou du pilote logiciel, taille de l’unité de mémoire tampon allouée pour les accès, mode de fonctionnement).

Les fonctions USB de la librairie libROC consistent principalement en un encadrement des commandes fournies par la librairie constructeur afin de fournir une interface homogène et modulable selon les paramètres utiles dans notre situation. Deux paramètres définis par la norme USB permettent de faire référence à un composant connecté à l’ordinateur de pilotage : un pointeur mémoire sur 8 caractères hexadécimaux (« handle ») ainsi qu’un entier signé désignant l’ordre de connexion des périphériques (« index »). L’ensemble des commandes ont d’abord été instanciées en référence à cet « index » qui est plus facile à appréhender par un utilisateur (un nombre entier entre 0 et 63). Les paramètres qu’il peut être utile de modifier ont été gardés comme ports d’entrées/sorties et une gestion d’erreur standard a été introduite. Les commandes subsistant consistent donc à lister les composants connectés, à contrôler leur état ainsi qu’à ouvrir, paramétrer, lire, écrire ou fermer l’un d’eux en particulier.

54. Portable Operating System Interface : famille de standards d’API logicielles définie depuis 1988 par l’IEEE, désignée formellement IEEE 1003. Le X exprime l’héritage UNIX de ces interfaces.

2.4.1.2 Entrées/sorties

La gestion des entrées sorties concerne le chargement en mémoire de paramètres de configuration, la vérification d’une chaîne d’octets de configuration par rapport aux valeurs contenues dans un fichier, la navigation parmi les registres selon leur nom et l’affichage de leur contenu à l’écran, ainsi que l’écriture des données reçues dans un fichier. A ceci se rajoute le calcul du CRC pour la vérification de l’intégrité des trames.

Un moyen simple de stocker les paramètres de configuration et de leur donner par là même une mise en forme qui soit compréhensible pour l’utilisateur est de les formater selon le standard CSV55 dont la syntaxe est native aux tableurs. J’ai donc créé un format type

de fichier de configuration structuré de la manière suivante :

Index ;Nom ;Valeur_ASIC_1 ;... ;Valeur_ASIC_n

où Index représente le rang des bits dans la trame de configuration, Nom le nom de ce groupe de bits et Valeur_ASIC_i la valeur de ce groupe de bits pour l’ASIC i. Ce fichier est aisément adaptable pour l’ajout de nouveaux paramètres ou ASICs dans la chaîne de configuration, et est en même temps lisible et synthétique. La seule difficulté pour un utilisateur non averti est l’utilisation des codages binaire ou hexadécimal dans cette première version, ce qui est modifiable dans la routine qui passe à travers le contenu de ce fichier. Le nombre de colonnes attendu est dépendant du nombre d’ASICs qui est précisé dans le fichier d’entête, comme l’est la longueur maximum en nombre de caractères hexadécimaux que peut avoir un mot de données. L’index contient le numéro du bit de poids fort séparé du numéro du bit de poids faible par un signe moins, ce qui permet à l’algorithme d’analyse de la syntaxe du fichier de vérifier que le nombre de caractère hexadécimaux spécifié dans la valeur associée correspond bien. De la même manière, un certain nombre de tests sont effectués sur la syntaxe du fichier pour simplifier la localisation d’une éventuelle erreur. Les valeurs des paramètres lues sont ensuite passées au niveau supérieur sous forme d’une chaîne d’octets qui est le format utilisé pour le transfert des données par l’USB.

Les registres sont instanciés dans un tableau qui contient, outre leur nom et leur adresse, un identifiant logiciel, un masque et les types d’accès autorisés (en lecture seulement, en écriture seulement, ou les deux). Dans l’interface de plus haut niveau, ils sont accédés par leur identifiant (qui est le même que la chaîne de caractère de leur nom mais sous forme de variable) ou par l’intermédiaire de leur nom. Des fonctions existent donc qui permettent de les rechercher selon ce critère. C’est le moyen le plus aisé pour les retrouver dans le cas d’une interface en ligne de commande.

2.4.1.3 Accès direct à la carte et aux ASICs

Le niveau hiérarchique le plus haut de la librairie contient les fonctions d’accès direct à la carte et aux ASICs. L’éventail des commandes a été choisi dans un premier temps pour pouvoir faire évoluer pas à pas les ASICs et vérifier visuellement les transitions (à l’oscilloscope ou dans le registre de statut). Cela correspond également aux besoins d’une « Single Slab DAQ » (cf. 2.3.4). Elles ont été optimisées dans un second temps pour les tests en faisceau où diminuer les temps de transfert s’est révélé nécessaire (cf. 3.2.3.1).

Ces fonctions tiennent compte du fait que les »accès registre » sont libérés lorsqu’une commande est en cours d’exécution dans le FPGA. Des boucles d’accès au registre de statut sont effectuées lorsque nécessaire pour contrôler la fin d’une opération.

55. Comma Separated Values : standard de format de fichier, où les données d’une même ligne sont séparées par des virgules ou des points-virgules.

2.4 LOGICIELS DE LECTURE DES CARTES DHCAL1 67

Outline

Documents relatifs