• Aucun résultat trouvé

CHAPITRE 4 OUTIL DE VÉRIFICATION PROPOSÉ

4.5 Module contrôleur, spécifications et architecture

4.5.1 Spécifications du contrôleur

Le bloc contrôleur est un module qui enregistre ou lit des mesures de l‘analyseur logique (via le bus sample) dans une mémoire externe de type DDR2. Un bloc d‘interface physique généré par Xilinx Core Generator est utilisé : le MCB (Memory Controller Bloc). Ce dernier gère les opérations de communication avec la mémoire externe. Il est contrôlé par des FIFOs (First In First Out) de commandes et de données qui permettent d‘échanger des données entre la mémoire et le reste du système à des fréquences différentes (Figure 4.28). En résumé, l‘objectif du module contrôleur est de s‘interfacer avec les différentes FIFOs du MCB de Xilinx.

4.5.1.1 Bloc MCB (Memory Controller Bloc)

On présente un résumé du principe de fonctionnement du MCB (Figure 4.29), ainsi que les caractéristiques choisies pour ce design. Toutes les informations proviennent de la fiche technique du MCB [43].

Figure 4.29 : Schéma d‘exemple d‘un MCB (Memory Controller Bloc) obtenu avec Core Generator (tiré de [43]).

Le bloc MCB joue le rôle d‘intermédiaire entre l‘interface physique DDR2 (signaux à droite de la figure) et l‘interface de contrôle de l‘utilisateur (signaux à gauche de la figure). Le MCB dispose d‘un nombre de ports de données variable en fonction des applications (bande passante de 128 bits bidirectionnels), le choix s‘est tourné vers deux ports bidirectionnels de 64 bits. La taille des ports de données a été choisie pour permettre jusque 64 canaux en entrée tout en respectant les spécifications de l‘ensemble des modules (1 bit par canal). Dans cette version, un seul port sera utilisé pour la lecture et l‘écriture. L‘objectif à long terme est d‘utiliser un port en entrée et l‘autre en sortie afin de permettre la lecture et l‘écriture simultanée en mémoire. Le MCB dispose d‘un port de commande pour chaque port de donnée. Enfin, tous les ports sont des FIFOs (FIFO

de commande ou FIFO de donnée) pour permettre un fonctionnement à deux domaines d‘horloge.

4.5.1.1.1 Principe de fonctionnement du MCB de Xilinx

Le principe de fonctionnement du MCB de Xilinx, tel qu‘il est utilisé, est simple. Le module attend qu‘une commande soit écrite dans la FIFO de commande. Ensuite, il utilise la FIFO de données comme une source pour une écriture ou comme une destination dans le cas d‘une lecture.

4.5.1.1.2 Contrôle des FIFOs de commande

On donne le rôle des signaux principaux de contrôle des FIFOs de commande (« X » désigne l‘index du port) :

 pX_cmd_instr[2:0], code d‘instruction, voir le Tableau 4.15

 pX_cmd_addr[29:0], bus d‘adresse

 pX_cmd_bl[5:0], ce signal indique le nombre de mots manipulés lors d‘une opération de lecture ou d‘écriture

 pX_cmd_en, ce signal permet d‘écrire la commande dans la FIFO de commande Tableau 4.15 : Instructions des FIFOs de commande du MCB de Xilinx. Instruction pX_cmd_instr[2:0] Description

Écriture 000

Écriture du nombre de mots spécifié dans le signal pX_cmd_bl[5:0] à partir de l‘adresse spécifiée

par pX_cmd_addr[29:0]

Lecture 001

Lecture du nombre de mots spécifié dans le signal pX_cmd_bl[5:0] à partir de l‘adresse spécifiée

par pX_cmd_addr[29 :0]

Écriture avec précharge 010

Non utilisé. Instruction similaire à l‘écriture, mais le MCB optimise la gestion de la mémoire pour les accès

On donne un exemple d‘écriture de commande dans la FIFO de commande sur la Figure 4.30.

Figure 4.30 : Exemple du déroulement temporel de l‘écriture d‘une commande de lecture dans la FIFO de commande (tiré de [43]).

4.5.1.1.3 Contrôle des FIFOs de données

On donne le rôle des signaux principaux de contrôle des FIFOs de données (« X » désigne l‘index du port) :

 pX_wr_data[63:0], bus d‘entrée de données (écriture) de la FIFO de données

 pX_wr_en, ce signal permet d‘écrire une donnée dans la FIFO de données

 pX_rd_data[63:0], bus de sortie de données (lecture) de la FIFO de données

 pX_rd_en, ce signal permet de lire une donnée dans la FIFO de données

Les bus de données sont de la taille choisie pour les ports, 64 bits dans notre cas. Les Figure 4.31 et Figure 4.32 donnent des exemples d‘écriture et de lecture dans la FIFO de données.

Lecture avec précharge 011

Non utilisé. Instruction similaire à la lecture, mais le MCB optimise la gestion de la mémoire pour les accès

aléatoires.

Rafraichissement 1XX Non utilisé. Rafraichissement commandé (non

Figure 4.31 : Exemple du déroulement temporel de l‘écriture de données dans la FIFO de données (tiré de [43]).

Figure 4.32 : Exemple du déroulement temporel de la lecture de données dans la FIFO de données (tiré de [43]).

4.5.1.1.4 Caractéristiques de la mémoire DDR2

Les caractéristiques de l‘interface et de la mémoire DDR2 sont les suivantes :

 Mémoire Micron MT47H64M16-25 de 1 Gbit DDR2 (64 millions d‘adresses de 16 bits de données)

 Fréquence de la mémoire : 625 MHz

 2 ports de données bidirectionnels de 64 bits

4.5.1.2 Bloc Contrôleur

Le bloc contrôleur a pour objectif d‘interfacer le système avec le MCB, et donc la mémoire externe. Deux signaux permettent de contrôler le bloc contrôleur : rw et run (Tableau 4.16). Tableau 4.16 : Modes de fonctionnement du bloc contrôleur

Remarque : le contrôleur ne permet pas une lecture et une écriture simultanée dans ce projet. La variable n correspond à la variable générique n_channel_obs.

Les ports de lecture/écriture du MCB sont de 64 bits. Le contrôleur doit alors attendre plusieurs séries de données du bus d‘entrée (ou de la FIFO de données pour la lecture) avant de remplir 64 bits. Ce nombre dépend du nombre de canaux d‘observations n_channel_obs. On a :

 Nombre de séries pour remplir 64 bits = 64 / n_channel_obs (division entière)

 Nombre de bits inutiles par paquet de 64 bits = 64 % n_channel_obs (reste). Plus cette valeur est grande et plus l‘espace mémoire inutilisé sera grand, car les informations ne sont pas fragmentées entre les paquets de 64 bits.

Exemple avec 20 canaux d‘observation (Figure 4.33) :

Nombre de séries pour remplir 64 bits = 64 / 20 = 3 donc 3 cycles seront nécessaire pour envoyer ou pour lire un paquet de 64 bits

rw run Description

0 0 Idle

0 1 Écriture : copie des données du bus d‘entrée sample (n bits) vers la mémoire. Se termine quand run passe à 0 ou si la mémoire est pleine.

1 0 Lecture : lecture de toutes les données qui ont été écrites en mémoire depuis la dernière lecture. Copie des données lues en mémoire sur le bus de sortie

mem_data (n bits).

Nombre de bits inutiles par paquet de 64 bits = 64 % 20 = 4 (reste) donc les 4 derniers bits de chaque paquet écrit ou lu sera toujours inutile

Figure 4.33 : Schéma de l‘interface des données entre les bus sample/mem_data (n bits) et le port de données du MCB (64 bits) — Exemple avec n=20.