<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Articles on ENSEIRB-MATMECA</title><link>https://emmk-73cb1c.gitlab.io/fr/posts/</link><description>Recent content in Articles on ENSEIRB-MATMECA</description><generator>Hugo -- gohugo.io</generator><language>fr</language><lastBuildDate>Wed, 11 Feb 2026 00:00:00 +0200</lastBuildDate><atom:link href="https://emmk-73cb1c.gitlab.io/fr/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Architecture des processeurs 0: Introduction</title><link>https://emmk-73cb1c.gitlab.io/fr/posts/hw_cpu/0_intro/</link><pubDate>Wed, 11 Feb 2026 00:00:00 +0200</pubDate><guid>https://emmk-73cb1c.gitlab.io/fr/posts/hw_cpu/0_intro/</guid><description>&lt;p>Les processeurs modernes sont des systèmes complexes, résultat de plusieurs décennies de travaux.
Les plus avancés intègrent de nombreux mécanismes permettant de répondre aux besoins, notamment en performances, de multiples applications.&lt;/p>
&lt;h2 id="organisation-du-cours">Organisation du cours&lt;/h2>
&lt;div class="toc-container" style="font-size:16pt; margin-left: 50px;">
&lt;li>0 - &lt;a href="https://emmk-73cb1c.gitlab.io/fr/posts/hw_cpu/0_intro/">Introduction&lt;/a>&lt;/li>
&lt;li>1 - &lt;a href="https://emmk-73cb1c.gitlab.io/fr/posts/hw_cpu/1_sim/">Simulation de microarchitectures&lt;/a>&lt;/li>
&lt;li>2 - &lt;a href="https://emmk-73cb1c.gitlab.io/fr/posts/hw_cpu/2_exec/">Exécution d'un programme&lt;/a>&lt;/li>
&lt;li>3 - &lt;a href="https://emmk-73cb1c.gitlab.io/fr/posts/hw_cpu/3_riscv/">ISA RISC-V&lt;/a>&lt;/li>
&lt;li>4 - &lt;a href="https://emmk-73cb1c.gitlab.io/fr/posts/hw_cpu/4_pipe/">Pipeline&lt;/a>&lt;/li>
&lt;li>5 - &lt;a href="https://emmk-73cb1c.gitlab.io/fr/posts/hw_cpu/5_br/">Prédiction de branchement&lt;/a>&lt;/li>
&lt;li>6 - &lt;a href="https://emmk-73cb1c.gitlab.io/fr/posts/hw_cpu/6_cache_1/">Mémoire cache&lt;/a>&lt;/li>
&lt;/div>
&lt;h2 id="simulation">Simulation&lt;/h2></description></item><item><title>Architecture des processeurs 1: Simulateur de microarchitectures RISC-V</title><link>https://emmk-73cb1c.gitlab.io/fr/posts/hw_cpu/1_sim/</link><pubDate>Wed, 11 Feb 2026 00:00:00 +0200</pubDate><guid>https://emmk-73cb1c.gitlab.io/fr/posts/hw_cpu/1_sim/</guid><description>&lt;p>Lors de l&amp;rsquo;étude du fonctionnement des processseurs, il peut être utile de voir cycle par cycle comment évolue une exécution afin de comprendre l&amp;rsquo;impact des différents mécanismes.
Cela s&amp;rsquo;applique aussi bien pour l&amp;rsquo;étude de la microarchitecture des processeurs, que pour d&amp;rsquo;autres expérimentations comme par exemple pour de la sécurité matérielle.
Ainsi, un simulateur de microarchitectures est mis à disposition sur GitLab: &lt;a href="https://gitlab.com/escou64-emmk/riscv-sim.git" target="_blank" rel="noopener">https://gitlab.com/escou64-emmk/riscv-sim.git&lt;/a>.
Il permet de simuler l&amp;rsquo;exécution de différents programmes sur des processeurs implémentant le jeu d&amp;rsquo;instructions RISC-V.
Les différents modèles de simulation sont en fait des exécutables générés directement à partir de description RTL de processeurs.&lt;/p></description></item><item><title>Architecture des processeurs 2: Exécution d'un programme</title><link>https://emmk-73cb1c.gitlab.io/fr/posts/hw_cpu/2_exec/</link><pubDate>Wed, 11 Feb 2026 00:00:00 +0200</pubDate><guid>https://emmk-73cb1c.gitlab.io/fr/posts/hw_cpu/2_exec/</guid><description>&lt;p>Dans un système informatique, un programme ou un logiciel est une suite d&amp;rsquo;opérations plus ou moins simples décrivant le fonctionnement attendu.
Ces opérations sont transmises sous la forme d&amp;rsquo;instructions que le processeur pourra interpréter avant d&amp;rsquo;effectuer les tâches correspondantes.
Quelque soit le jeu d&amp;rsquo;instructions ou le type de processeur, ce fonctionnement reste toujours le même.&lt;/p>
&lt;p>Sur cette page, nous allons voir comment un programme est exécuté sur un processeur et certains des éléments nécessaires à la compilation.
Pour cela, l&amp;rsquo;objectif sera également de prendre en main l&amp;rsquo;environnement de simulation de processeurs RISC-V.
L&amp;rsquo;ensemble des expérimentations, sur cette page et les suivantes, seront réalisés à partir de plusieurs modèles de microarchitectures simulées.&lt;/p></description></item><item><title>Architecture des processeurs 3: ISA RISC-V</title><link>https://emmk-73cb1c.gitlab.io/fr/posts/hw_cpu/3_riscv/</link><pubDate>Wed, 11 Feb 2026 00:00:00 +0200</pubDate><guid>https://emmk-73cb1c.gitlab.io/fr/posts/hw_cpu/3_riscv/</guid><description>&lt;p>Avant même de commencer à commencer à concevoir un processeur, il est nécessaire de définir l&amp;rsquo;architecture de jeu d&amp;rsquo;instructions (ISA) qu&amp;rsquo;il implémentera.
Cet élément est essentiel afin de définir comment les parties matérielles et logicielles du système pourront intérragir.
C&amp;rsquo;est à ce niveau que sont définies les instructions (et doc opérations) disponibles, la taille des données manipulées, le nombre de registres &lt;em>etc.&lt;/em>
Différents types d&amp;rsquo;architectures de jeux d&amp;rsquo;instructions existent, avec leurs outils et écosystèmes respectifs.&lt;/p></description></item><item><title>Architecture des processeurs 4: Pipeline</title><link>https://emmk-73cb1c.gitlab.io/fr/posts/hw_cpu/4_pipe/</link><pubDate>Tue, 13 Jan 2026 00:00:00 +0200</pubDate><guid>https://emmk-73cb1c.gitlab.io/fr/posts/hw_cpu/4_pipe/</guid><description>&lt;p>Les capacités de calcul (ou performances) d&amp;rsquo;un processeur sont généralement la principale caractéristique à prendre en compte lors de la conception.
Comme pour tout système numérique, l&amp;rsquo;une des solutions pour augmenter le débit de calculs réalisés est d&amp;rsquo;augmenter la fréquence d&amp;rsquo;horloge.
Pour cela, un mécanisme essentiel est alors implémenté : le pipeline.&lt;/p>
&lt;p>Sur cette page, nous allons étudier le fonctionnement d&amp;rsquo;un pipeline dans un processeur.
Notamment, nous verrons comment il impacte l&amp;rsquo;exécution des programmes.
Également, nous étudierons les différents aléas susceptibles de pénaliser le débit final.&lt;/p></description></item><item><title>Architecture des processeurs 5: Prédiction de branchement</title><link>https://emmk-73cb1c.gitlab.io/fr/posts/hw_cpu/5_br_1/</link><pubDate>Tue, 13 Jan 2026 00:00:00 +0200</pubDate><guid>https://emmk-73cb1c.gitlab.io/fr/posts/hw_cpu/5_br_1/</guid><description>&lt;link rel="stylesheet" href="https://emmk-73cb1c.gitlab.io/css/vendors/admonitions.5bbb5ba8ed2a1a08fa75ad9197534b803de632cb2c8df129d462d6e07250e6ca.css" integrity="sha256-W7tbqO0qGgj6da2Rl1NLgD3mMsssjfEp1GLW4HJQ5so=" crossorigin="anonymous">
&lt;div class="admonition warning">
&lt;div class="admonition-header">&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">&lt;path d="M256 32c14.2 0 27.3 7.5 34.5 19.8l216 368c7.3 12.4 7.3 27.7 .2 40.1S486.3 480 472 480L40 480c-14.3 0-27.6-7.7-34.7-20.1s-7-27.8 .2-40.1l216-368C228.7 39.5 241.8 32 256 32zm0 128c-13.3 0-24 10.7-24 24l0 112c0 13.3 10.7 24 24 24s24-10.7 24-24l0-112c0-13.3-10.7-24-24-24zm32 224a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z"/>&lt;/svg>
&lt;span>Environnement de simulation&lt;/span>
&lt;/div>
&lt;div class="admonition-content">
&lt;p>Pour effectuer les différentes simulations de cette page, ouvrez l&amp;rsquo;ensemble du répertoire &lt;code>riscv-sim&lt;/code> avec &lt;em>Visual Studio Code&lt;/em>.
Dans le terminal de l&amp;rsquo;IDE, configurez l&amp;rsquo;&lt;a href="https://emmk-73cb1c.gitlab.io/fr/posts/hw_cpu/1_sim/#configuration-de-lenvironnement">environnement du simulateur&lt;/a> puis placez-vous dans le répertoire &lt;code>sw/uarch/br&lt;/code>.&lt;/p></description></item><item><title>Architecture des processeurs 6: Mémoire cache</title><link>https://emmk-73cb1c.gitlab.io/fr/posts/hw_cpu/6_cache_1/</link><pubDate>Tue, 13 Jan 2026 00:00:00 +0200</pubDate><guid>https://emmk-73cb1c.gitlab.io/fr/posts/hw_cpu/6_cache_1/</guid><description>&lt;p>Le processeur ne correspond qu&amp;rsquo;à la partie opérationnelle du système.
Ainsi, pour avoir un système pleinement fonctionnel, il est également nécessaire de l&amp;rsquo;associer à une ou plusieurs mémoires afin de stocker les différentes instructions et données.
Généralement, ces composants sont bien plus lents que le processeur lui-même, ce qui peut impacter les performances de l&amp;rsquo;ensemble du système.&lt;/p>
&lt;p>Sur cette page, nous allon étudier le fonctionnement des mémoires caches, des mémoires intermédiaires permettant de réduire les limitations de la mémoire principale.
À l&amp;rsquo;aide de simulations, nous verrons comment les temps d&amp;rsquo;accès peuvent varier selon les opérations effectuées.
Nous verrons également l&amp;rsquo;impact du placement des données en mémoire, par exemple lors de la manipulation de tableaux ou matrices.&lt;/p></description></item><item><title>Programmation de microcontrôleurs STM32: GPIO</title><link>https://emmk-73cb1c.gitlab.io/fr/posts/stm32/gpio/</link><pubDate>Tue, 06 Jan 2026 00:00:00 +0200</pubDate><guid>https://emmk-73cb1c.gitlab.io/fr/posts/stm32/gpio/</guid><description>&lt;div class="alert note">&lt;p>Cette page vise à présenter une première utilisation des GPIO sur un microcontrôleur STM32.
À la suite de cette page, un développeur logiciel doit être capable:&lt;/p>
&lt;ul>
&lt;li>De trouver les informations nécessaires dans une datasheet pour l&amp;rsquo;utilisation des GPIO,&lt;/li>
&lt;li>De programmer les différents registres pour différentes utilisations des GPIO (LED, bouton-poussoir &lt;em>etc.&lt;/em>)&lt;/li>
&lt;/ul>&lt;/div>
&lt;div class="alert danger">&lt;strong>Version des outils&lt;/strong>
Les différentes étapes utilisent la version &lt;em>&lt;strong>v1.12.0&lt;/strong>&lt;/em> du logiciel &lt;a href="https://www.st.com/en/development-tools/stm32cubeide.html#st_description_sec-nav-tab" target="_blank" rel="noopener">&lt;em>&lt;strong>STM32CubeIDE&lt;/strong>&lt;/em>&lt;/a>.
Certaines variations au niveau des captures d&amp;rsquo;écrans peuvent apparaître si vous utilisez des versions différentes.
De même, la carte utilisée est la &lt;em>&lt;strong>Nucleo-F446RE&lt;/strong>&lt;/em>.&lt;/div>
&lt;h2 id="clignotement-dune-led">Clignotement d&amp;rsquo;une LED&lt;/h2>
&lt;p>Pour la première partie, on se propose de concevoir un programme faisant clignoter la LED d&amp;rsquo;une carte.
Notamment, la carte &lt;em>&lt;strong>Nucleo-F446RE&lt;/strong>&lt;/em> dispose d&amp;rsquo;une LED directement intégrée sur la carte.
Elle est connectée sur la broche (&lt;em>pin&lt;/em>) 5 du port GPIO A.&lt;/p></description></item><item><title>Programmation de microcontrôleurs STM32: Interruptions</title><link>https://emmk-73cb1c.gitlab.io/fr/posts/stm32/irq/</link><pubDate>Tue, 06 Jan 2026 00:00:00 +0200</pubDate><guid>https://emmk-73cb1c.gitlab.io/fr/posts/stm32/irq/</guid><description>&lt;div class="alert note">&lt;p>Cette page vise à présenter une première utilisation des interruptions sur un microcontrôleur STM32.
À la suite de cette page, un développeur logiciel doit être capable:&lt;/p>
&lt;ul>
&lt;li>De trouver les informations nécessaires dans une datasheet pour l’utilisation des interruptions,&lt;/li>
&lt;li>De programmer les différents registres pour l’utilisation d’une interruption,&lt;/li>
&lt;li>De comprendre le fonctionnement pour différentes sources d’interruption.&lt;/li>
&lt;/ul>&lt;/div>
&lt;div class="alert danger">&lt;strong>Version des outils&lt;/strong>
Les différentes étapes utilisent la version &lt;em>&lt;strong>v1.12.0&lt;/strong>&lt;/em> du logiciel &lt;a href="https://www.st.com/en/development-tools/stm32cubeide.html#st_description_sec-nav-tab" target="_blank" rel="noopener">&lt;em>&lt;strong>STM32CubeIDE&lt;/strong>&lt;/em>&lt;/a>.
Certaines variations au niveau des captures d&amp;rsquo;écrans peuvent apparaître si vous utilisez des versions différentes.
De même, la carte utilisée est la &lt;em>&lt;strong>Nucleo-F446RE&lt;/strong>&lt;/em>.&lt;/div>
&lt;h2 id="détection-dun-évènement">Détection d&amp;rsquo;un évènement&lt;/h2>
&lt;p>&lt;a href="https://emmk-73cb1c.gitlab.io/fr/posts/stm32/gpio/">Précédemment&lt;/a>, nous avons utilisé un bouton poussoir pour déclencher l’allumage d’une LED.
La détection de l’état du bouton était alors faite de manière scrutative: le programme vérifiait régulièrement l’état du registre correspondant.
Bien que fonctionnel, ce type de fonctionnement est peu efficace: le microcontrôleur exécute en boucle des opérations pour détecter le changement d&amp;rsquo;état.
Ainsi, il ne peut exécuter aucune autre tâche utile pendant ce temps d&amp;rsquo;attente, en plus de continuer à consommer en réalisant les calculs.&lt;/p></description></item><item><title>Programmation de microcontrôleurs STM32: Timer</title><link>https://emmk-73cb1c.gitlab.io/fr/posts/stm32/timer/</link><pubDate>Tue, 06 Jan 2026 00:00:00 +0200</pubDate><guid>https://emmk-73cb1c.gitlab.io/fr/posts/stm32/timer/</guid><description>&lt;div class="alert note">&lt;p>Cette page vise à présenter une première utilisation des interruptions sur un microcontrôleur STM32.
À la suite de cette page, un développeur logiciel doit être capable:&lt;/p>
&lt;ul>
&lt;li>De trouver les informations nécessaires dans une datasheet pour l’utilisation des timers,&lt;/li>
&lt;li>De programmer les différents registres pour différentes utilisations des timers (LED, bouton-poussoir etc.),&lt;/li>
&lt;li>D’adapter le fonctionnement d’un timer à l’utilisation d’un capteur externe.&lt;/li>
&lt;/ul>&lt;/div>
&lt;div class="alert danger">&lt;strong>Version des outils&lt;/strong>
Les différentes étapes utilisent la version &lt;em>&lt;strong>v1.12.0&lt;/strong>&lt;/em> du logiciel &lt;a href="https://www.st.com/en/development-tools/stm32cubeide.html#st_description_sec-nav-tab" target="_blank" rel="noopener">&lt;em>&lt;strong>STM32CubeIDE&lt;/strong>&lt;/em>&lt;/a>.
Certaines variations au niveau des captures d&amp;rsquo;écrans peuvent apparaître si vous utilisez des versions différentes.
De même, la carte utilisée est la &lt;em>&lt;strong>Nucleo-F446RE&lt;/strong>&lt;/em>.&lt;/div>
&lt;h2 id="détection-dun-obstacle">Détection d’un obstacle&lt;/h2>
&lt;p>Dans cette partie, l&amp;rsquo;objectif va être de concevoir un système de détection d&amp;rsquo;obstacle.
Le fonctionnement recherché sera le suivant: faire clignoter une LED de plus en plus rapidement selon la distance d&amp;rsquo;un obstacle.
Pour cela, nous allons décomposer le problème en trois sous-arties:&lt;/p></description></item><item><title>Programmation de microcontrôleurs STM32: UART</title><link>https://emmk-73cb1c.gitlab.io/fr/posts/stm32/uart/</link><pubDate>Tue, 06 Jan 2026 00:00:00 +0200</pubDate><guid>https://emmk-73cb1c.gitlab.io/fr/posts/stm32/uart/</guid><description>&lt;div class="alert note">&lt;p>Cette page vise à présenter une première utilisation des interruptions sur un microcontrôleur STM32.
À la suite de cette page, un développeur logiciel doit être capable:&lt;/p>
&lt;ul>
&lt;li>De trouver les informations nécessaires dans une datasheet pour l’utilisation du protocole UART,&lt;/li>
&lt;li>De programmer les différents registres,&lt;/li>
&lt;li>D’envoyer des informations octet par octet vers un ordinateur.&lt;/li>
&lt;/ul>&lt;/div>
&lt;div class="alert danger">&lt;strong>Version des outils&lt;/strong>
Les différentes étapes utilisent la version &lt;strong>&lt;em>v1.12.0&lt;/em>&lt;/strong> du logiciel &lt;a href="https://www.st.com/en/development-tools/stm32cubeide.html#st_description_sec-nav-tab" target="_blank" rel="noopener">&lt;strong>&lt;em>STM32CubeIDE&lt;/em>&lt;/strong>&lt;/a>.
Certaines variations au niveau des captures d&amp;rsquo;écrans peuvent apparaître si vous utilisez des versions différentes.
De même, la carte utilisée est la &lt;strong>&lt;em>Nucleo-F446RE&lt;/em>&lt;/strong>.&lt;/div>
&lt;h2 id="transmissionréception-uart">Transmission/Réception UART&lt;/h2>
&lt;p>Lors de la conception d&amp;rsquo;un système à base de microcontrôleur, il est souvent utile de pouvoir échanger des informations avec un autre système.
Par exemple, c&amp;rsquo;est le cas lorsque l&amp;rsquo;on souhaite envoyer des données vers un ordinateur responsable du traitement ou du contrôle.
Un protocole de transmission permet alors de mettre en place une interface commune pour l&amp;rsquo;échange de ces données.
Selon les applications, il existe de multiples types de protocoles.
Dans le cadre de cet exercice, nous allons nous intéresser au protocole UART.&lt;/p></description></item><item><title>Programmation de microcontrôleurs STM32: Utilisation de l'IDE</title><link>https://emmk-73cb1c.gitlab.io/fr/posts/stm32/ide/</link><pubDate>Tue, 06 Jan 2026 00:00:00 +0200</pubDate><guid>https://emmk-73cb1c.gitlab.io/fr/posts/stm32/ide/</guid><description>&lt;div class="alert note">&lt;p>Cette page vise à présenter une première utilisation du logiciel &lt;strong>STM32CubeIDE&lt;/strong> pour la programmation de microcontrôleurs STM32.
En la suivant pas-à-pas, un développeur logiciel doit être capable:&lt;/p>
&lt;ul>
&lt;li>de créer un projet,&lt;/li>
&lt;li>de savoir où ajouter son programme (simple) en langage C,&lt;/li>
&lt;li>de connaître quelles informations sont mises à disposition par l&amp;rsquo;outil pour le débogage et comprendre à quoi elles servent.&lt;/li>
&lt;/ul>&lt;/div>
&lt;div class="alert danger">&lt;strong>Version des outils&lt;/strong>
Les différentes étapes utilisent la version &lt;em>&lt;strong>v1.12.0&lt;/strong>&lt;/em> du logiciel &lt;a href="https://www.st.com/en/development-tools/stm32cubeide.html#st_description_sec-nav-tab" target="_blank" rel="noopener">&lt;em>&lt;strong>STM32CubeIDE&lt;/strong>&lt;/em>&lt;/a>.
Certaines variations au niveau des captures d&amp;rsquo;écrans peuvent apparaître si vous utilisez des versions différentes.
De même, la carte utilisée est la &lt;em>&lt;strong>Nucleo-F446RE&lt;/strong>&lt;/em>.&lt;/div>
&lt;h2 id="créer-un-projet">Créer un projet&lt;/h2>
&lt;p>Pour créer un projet sur STM32CubeIDE, différentes étapes sont nécessaires.
Celles-ci sont présentées ci-dessous.&lt;/p></description></item><item><title>Sécurité matérielle: Mémoires caches</title><link>https://emmk-73cb1c.gitlab.io/fr/posts/hw_sec/cache/</link><pubDate>Fri, 12 Dec 2025 00:00:00 +0200</pubDate><guid>https://emmk-73cb1c.gitlab.io/fr/posts/hw_sec/cache/</guid><description>&lt;p>Dans les tutoriels sur la &lt;a href="https://emmk-73cb1c.gitlab.io/fr/posts/hw_sec_2026/power/exec/">récupération du flot d&amp;rsquo;exécution par la consommation&lt;/a>, nous avons vu que des décalages temporels entre plusieurs exécutions pouvaient être observés par le biais des canaux auxiliaires.
Notamment, cela engendrait de grandes différences dans l&amp;rsquo;évolution de la consommation ou du temps global d&amp;rsquo;exécution.&lt;/p>
&lt;p>Dans ce tutoriel, nous allons à présent nous intéresser à l&amp;rsquo;observation des variations temporelles dûes à la microarchitecture des processeurs.
Notamment, nous allons voir comment les mémoires caches, pourtant essentielles pour les performances de nombreux systèmes, peuvent aussi représenter une source de fuite.&lt;/p></description></item><item><title>Sécurité matérielle: FPGA</title><link>https://emmk-73cb1c.gitlab.io/fr/posts/hw_sec/fpga/</link><pubDate>Tue, 25 Nov 2025 00:00:00 +0200</pubDate><guid>https://emmk-73cb1c.gitlab.io/fr/posts/hw_sec/fpga/</guid><description>&lt;!--{{ partial "math.html" . }}-->
&lt;p>Lors de l&amp;rsquo;&lt;a href="https://emmk-73cb1c.gitlab.io/fr/posts/hw_sec/intro/">introduction&lt;/a>, nous avons vu les principes de l&amp;rsquo;analyse de la consommation des système matérielles.
Ces principes ont été appliqués dans un environnement guidé (Jupyter) sur des systèmes dont l&amp;rsquo;utilisation est bien maîtrisée, mais dont la microarchitecture interne reste, &lt;em>au moins en partie&lt;/em>, inconnue (un microcontrôleur STM32).&lt;/p>
&lt;p>À présent, nous allons voir comment cibler un système dont toute l&amp;rsquo;organisation interne est disponible.
Pour cela, l&amp;rsquo;objectif sera d&amp;rsquo;implémenter un &lt;a href="https://emmk-73cb1c.gitlab.io/fr/posts/calf/">processeur RISC-V&lt;/a> sur une cible FPGA.&lt;/p></description></item><item><title>Sécurité matérielle: Introduction</title><link>https://emmk-73cb1c.gitlab.io/fr/posts/hw_sec/intro/</link><pubDate>Wed, 12 Nov 2025 00:00:00 +0200</pubDate><guid>https://emmk-73cb1c.gitlab.io/fr/posts/hw_sec/intro/</guid><description>&lt;p>Dans cette introduction, l&amp;rsquo;objectif est de se familiariser en pratique avec les problématiques de sécurité matérielle et avec l&amp;rsquo;environnement &lt;a href="https://github.com/newaetech/chipwhisperer" target="_blank" rel="noopener">ChipWhisperer&lt;/a>.
L&amp;rsquo;ensemble des exercices est basé sur cet environnement et sur la plateforme matérielle du même nom.&lt;/p>
&lt;h2 id="préparation">Préparation&lt;/h2>
&lt;p>ChipWhisperer est le nom d&amp;rsquo;une plateforme fournissant un environnement logiciel (essentiellement en Python) permettant de reproduire des attaques matérielles.
Pour cela, différentes cibles matérielles sont disponibles, avec aussi bien des microcontrôleurs que des FPGA.
L’intérêt majeure de cette plateforme est sa simplicité d’utilisation: l’ensemble de la chaîne peut-être
automatisé à l’aide de scripts Python, de la mesure de consommation par un ADC jusqu’au traitement
des données.
Ainsi, elle représente un moyen idéale pour une première approche des problématiques de
sécurité.&lt;/p></description></item><item><title>Plateforme CALF: Organisation mémoire</title><link>https://emmk-73cb1c.gitlab.io/fr/posts/calf/mem/</link><pubDate>Mon, 01 Sep 2025 00:00:00 +0200</pubDate><guid>https://emmk-73cb1c.gitlab.io/fr/posts/calf/mem/</guid><description>&lt;h2 id="adresses">Adresses&lt;/h2>
&lt;p>Au sein de la plateforme CALF, les adresses émises par le processeur sont utilisées pour rediriger les requêtes.
Ainsi, selon les valeurs, certaines sont envoyées vers la mémoire RAM, les registres GPIO8, l&amp;rsquo;UART &lt;em>etc.&lt;/em>
La table ci-dessous présente les valeurs définies par défaut.
Celles-ci peuvent être modifiées lors de la configuration du matériel (aussi bien dans la version &lt;a href="https://gitlab.com/escou64-emmk/calf/-/blob/main/src/main/vhd/top/sys.vhd?ref_type=heads" target="_blank" rel="noopener">VHDL&lt;/a> que &lt;a href="https://gitlab.com/escou64-emmk/calf/-/blob/main/src/main/scala/top/params.scala?ref_type=heads" target="_blank" rel="noopener">Chisel&lt;/a>).&lt;/p>
&lt;center>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">Nom&lt;/th>
&lt;th style="text-align: center">Début&lt;/th>
&lt;th style="text-align: center">Taille&lt;/th>
&lt;th style="text-align: center">Type&lt;/th>
&lt;th style="text-align: left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">&lt;strong>RAM&lt;/strong>&lt;/td>
&lt;td style="text-align: center">&lt;code>0x00000000&lt;/code>&lt;/td>
&lt;td style="text-align: center">&lt;code>0x00000000&lt;/code>&lt;/td>
&lt;td style="text-align: center">&lt;code>RWX&lt;/code>&lt;/td>
&lt;td style="text-align: left">Mémoire générale du système, utilisée pour les instructions et les données.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">&lt;strong>GPIO8&lt;/strong>&lt;/td>
&lt;td style="text-align: center">&lt;code>0x00000800&lt;/code>&lt;/td>
&lt;td style="text-align: center">&lt;code>0x00000010&lt;/code>&lt;/td>
&lt;td style="text-align: center">&lt;code>RW-&lt;/code>&lt;/td>
&lt;td style="text-align: left">Registres de configuration des entrées et sorties génériques.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">&lt;strong>UART&lt;/strong>&lt;/td>
&lt;td style="text-align: center">&lt;code>0x00000840&lt;/code>&lt;/td>
&lt;td style="text-align: center">&lt;code>0x00000020&lt;/code>&lt;/td>
&lt;td style="text-align: center">&lt;code>RW-&lt;/code>&lt;/td>
&lt;td style="text-align: left">Registres de configuration de l&amp;rsquo;UART.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/center>
&lt;h2 id="mémoire">Mémoire&lt;/h2>
&lt;h2 id="périphériques">Périphériques&lt;/h2>
&lt;h3 id="gpio8">GPIO8&lt;/h3>
&lt;p>&lt;strong>GPIO8&lt;/strong> est un périphérique basique permettant de contrôler l&amp;rsquo;état de 8 entrées/sorties.
Pour cela, il utilise 3 registres de 8 bits: &lt;code>ENO&lt;/code>, &lt;code>IN&lt;/code> et &lt;code>OUT&lt;/code>.
Chaque bit &lt;em>b&lt;/em> de ces registres correspond à l&amp;rsquo;entrée/sortie &lt;em>b&lt;/em>.&lt;/p></description></item><item><title>Plateforme CALF: Processeur</title><link>https://emmk-73cb1c.gitlab.io/fr/posts/calf/core/</link><pubDate>Mon, 01 Sep 2025 00:00:00 +0200</pubDate><guid>https://emmk-73cb1c.gitlab.io/fr/posts/calf/core/</guid><description>&lt;p>&lt;img src="https://emmk-73cb1c.gitlab.io/fr/posts/calf/core/fig/core.fr.svg"
alt="Microarchitecture du processeur CALF"
width="500"
class="center"
>
&lt;/br>&lt;/p>
&lt;p>Le processeur CALF est un processeur libre et ouvert basé sur l&amp;rsquo;architecture RISC-V.
Au sein de la plateforme CALF, il est responsable de l&amp;rsquo;exécution des programmes permettant la réalisation d&amp;rsquo;application.
La microarchitecture du processeur est conçu autour d&amp;rsquo;une machine d&amp;rsquo;états finis.
Il réalise donc une implémentation multi-cycle de l&amp;rsquo;exécution des opérations, pouvant aller de 4 à 7 cycles selon le type d&amp;rsquo;instructions et des paramètres utilisés.&lt;/p></description></item><item><title>Plateforme CALF: Système global</title><link>https://emmk-73cb1c.gitlab.io/fr/posts/calf/sys/</link><pubDate>Mon, 01 Sep 2025 00:00:00 +0200</pubDate><guid>https://emmk-73cb1c.gitlab.io/fr/posts/calf/sys/</guid><description>&lt;p>&lt;img src="https://emmk-73cb1c.gitlab.io/fr/posts/calf/core/fig/sys.fr.svg"
alt="Vue globale du système CALF"
width="400"
class="center"
>
&lt;/br>&lt;/p>
&lt;p>CALF (pour &lt;em>Core Architecture to Learn Fundamentals&lt;/em>) est une plateforme numérique conçue pour des projets pédagogiques et de recherche.
Elle intègre tous les composants nécessaires pour l&amp;rsquo;implémentation d&amp;rsquo;un microcontrôleur minimaliste, sur FPGA ou ASIC:&lt;/p>
&lt;ul>
&lt;li>Un processeur RISC-V responsable de l&amp;rsquo;exécution des programmes.&lt;/li>
&lt;li>Une mémoire RAM paramétrable pour le code et les données.&lt;/li>
&lt;li>Un &lt;em>bootloader&lt;/em> pour l&amp;rsquo;initialisation de la mémoire au démarrage. Il est directement connecté au module UART pour la réception des données.&lt;/li>
&lt;li>Un module UART pour les communications externes.&lt;/li>
&lt;li>Un module GPIO8 pour le pilotage de 8 entrées / sorties.&lt;/li>
&lt;/ul>
&lt;p>Le système est disponible en 2 versions RTL: une décrite en Chisel et une autre en VHDL.
L&amp;rsquo;intérêt majeur est de faciliter le passage d&amp;rsquo;un langage à un autre en fournissant des exemples de blocs aux fonctionnalités identiques.&lt;/p></description></item><item><title>Plateforme CALF: Utilisation</title><link>https://emmk-73cb1c.gitlab.io/fr/posts/calf/usr/</link><pubDate>Mon, 01 Sep 2025 00:00:00 +0200</pubDate><guid>https://emmk-73cb1c.gitlab.io/fr/posts/calf/usr/</guid><description>&lt;h2 id="installation">Installation&lt;/h2>
&lt;h3 id="téléchargement">Téléchargement&lt;/h3>
&lt;p>Pour commencer, il est nécessaire de télécharger le projet.
Celui-ci utilise &lt;em>git&lt;/em> comme gestionnaire de versions et est hébergé sur &lt;a href="https://gitlab.com/escou64-emmk/calf" target="_blank" rel="noopener">Gitlab&lt;/a>.
Pour le télécharger, utiliser les commandes suivantes:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># Avec SSH configuré sur Gitlab&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> git clone git@gitlab.com:escou64-emmk/calf.git
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># Ou sans SSH: git clone https://gitlab.com/escou64-emmk/calf.git&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># Déplacement dans le répertoire&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> cd calf
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># Utilisation de la branche riscv&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> git checkout riscv
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="configuration-de-lenvironnement">Configuration de l&amp;rsquo;environnement&lt;/h3>
&lt;p>Pour la simulation et l&amp;rsquo;implémentation de la plateforme, plusieurs outils sont nécessaires et doivent être installés:&lt;/p></description></item></channel></rss>