Projet Accélérateur

Tarik Graba

2022-2024

Présentation

Nous voulons développer un accélérateur matériel qui permettra de chiffrer un ensemble de données contenues en mémoire sans intervention du processeur durant la phase de calcul.

Ce module aura deux interfaces:

De plus, ce module doit pouvoir générer une interruption à la fin de la tâche de chiffrement.

D’un point de vue programmation, utiliser cet accélérateur passe par les étapes suivantes:

  1. Configuration de l’accélérateur:
  2. Démarrer l’accélérateur
  3. Attendre la fin du chiffrement:

L’algorithme à accélérer

L’algorithme de chiffrement que nous utiliserons est PRESENT.

PRESENT est un algorithme de chiffrement symétrique par bloc (comme AES). Il entre dans les catégories des algorithmes légers (light weight block ciphers) destinés aux applications embarquées. Son architecture a été conçue pour permettre des implémentations matérielles compactes et efficaces. C’est un des rares algorithmes légers faisant partie d’un standard ISO.

Pour ce projet, la maitrise détaillée de l’algorithme de PRESENT ni de son architecture interne n’est pas nécessaire.

Les caractéristiques principales qu’il faut retenir:

Une implémentation de cet algorithme est fournie ici.

Le module principal possède l’interface suivante:

module present(
                 input clk,
                 input nrst,
                 input start,
                 output eoc,
                 input [63:0]  plaintext,
                 input [127:0] key,
                 output[63:0]  ciphertext
                );
signal direction rôle
clk entrée l’horloge principale
nrst entrée remise à zéro sur niveau bas
start entrée démarrage du chiffrement
à 1 durant 1 cycle
eoc sortie indique la fin du chiffrement
à 1 durant 1 cycle
plaintext entrée bloc de données à chiffrer
sur 64 bits
key entrée clé de chiffrement
sur 128 bits
ciphertext sortie bloc de données chiffrées
sur 64 bits

Travail à faire

Cette figure montre le schéma de principe du module qu’il faut développer. Ce module possède deux interfaces Avalon:

Ce module devra contenir:

Quand le processeur en donnera l’ordre, le contrôleur ira lire des données en mémoire, les présentera au module de chiffrement, attendra la fin du chiffrement puis finalement écrira le résultat en mémoire. Ces étapes sont répétées jusqu’à atteindre le nombre de blocs souhaités.

N”oubliez pas que l’interface Avalon utilisée est une interface 32 bits, il faudra donc pour chaque bloc, deux lectures puis deux écritures.

Vue programmeur

Les registres de configuration tels que vus par le programmeur devraient être comme suit:

adresse nom taille fonction
0x00 k0 32 bits bits [31:0] de la clé
0x04 k1 32 bits bits [63:32] de la clé
0x08 k2 32 bits bits [95:64] de la clé
0x0c k3 32 bits bits [127:96] de la clé
0x10 src 32 bits adresse en mémoire de la zone source
0x14 dest 32 bits adresse en mémoire de la zone destination
0x18 num 32 bits nombre de blocs de 64 bits à chiffrer
0x1c ctrl 32 bits statut et commande
en écriture
- écrire 1 démarre un chiffrement
- écrire 0 remet à zéro la sortie d’interruption
en lecture
- le bit 0 est à 1 durant un chiffrement sinon 0

Ce qui correspond à une structure de données de la forme:

typedef struct {
    uint32_t k[4];
    uint32_t src;
    uint32_t dest;
    uint32_t num;
    uint32_t ctrl;
} DMA_t;

Environnement de travail

Nous vous proposons l’environnement disponible dans l’archive suivante. Elle contient:

Le module principal implémente déjà la partie cible du module ainsi que les registres de configuration. Le testbench simule la phase d’initialisation et de démarrage du module. L’environnement de simulation contient, en plus du générateur de requêtes Avalon, un modèle de mémoire.

À vous de jouer!

Méthodologie à suivre:

  1. Implémentez la machine à états de la partie initiateur sans intégrer le module cryptographique.
  2. Intégrez le module de chiffrement
  3. Intégrez le module dans Platform Designer
  4. Bonus implémentez un mode CBC

Analyse

Pour les différentes étapes, vous pouvez, dans Quartus, obtenir les informations suivantes:

Une fois l’intégration dans Platform Designer et le test sur la maquette fait, n’hésitez pas à demander de l’aide pour identifier ces différentes informations dans les outils.

Conservez ces différents résultats dans un fichier associé à votre projet.