Électronique Numérique et Conception (ENC) - Semestre 3


PART A - Présentation Générale du Cours

Contexte et objectifs

L’ENC (Électronique Numérique et Conception) au S3 ENOC approfondit la conception de systèmes numériques programmables (FPGA/CPLD) en VHDL. Deux projets majeurs : développement de bibliothèque de composants IP et conception complète d’une platine électronique intégrant un FPGA.

Objectifs :

Prérequis


PART B: EXPÉRIENCE, CONTEXTE ET FONCTION

Module 1 : VHDL avancé

Structures algorithmiques :

Blocs réutilisables :

Interfaces de communication :

Module 2 : FPGA/CPLD

Architecture FPGA (ex: Cyclone IV, Spartan-6) :

CPLD vs FPGA :

Outils de conception :

Module 3 : Simulation et validation

Testbench VHDL :

entity tb_uart is end;
architecture behavior of tb_uart is
  signal clk, rst, tx_start : std_logic;
  signal tx_data : std_logic_vector(7 downto 0);
begin
  uut: entity work.uart_tx port map(...);
  
  clk_process: process
  begin
    clk <= '0'; wait for 10 ns;
    clk <= '1'; wait for 10 ns;
  end process;
  
  stimulus: process
  begin
    rst <= '1'; wait for 100 ns;
    rst <= '0';
    tx_data <= X"A5";
    tx_start <= '1'; wait for 20 ns;
    tx_start <= '0';
    wait;
  end process;
end;

Simulation :


PART C: ASPECTS TECHNIQUES

Projet Composants VHDL

Bibliothèque IP à développer :

  1. UART configurable (baud rate générique)
  2. SPI master/slave
  3. I2C master
  4. Contrôleur VGA (synchronisation H/V, pixel pipeline)
  5. Contrôleur LCD HD44780
  6. Interface PS/2 clavier

Livrables :

Projet Platine FPGA

Architecture système :

Schéma électrique (KiCad/Altium) :

PCB 4 couches :

Programmation et test :


PART D: ANALYSE ET RÉFLEXION

Évaluation

Compétences développées

Débouchés

📚 Contenu du cours

VHDL avancé

Structures de base

Structures algorithmiques

Processus (process) :

Conditions :

Boucles :

Conception structurelle

Machines à états (FSM)

Moore :

Mealy :

Encodage :

Architectures numériques

Blocs de base

Compteurs :

Registres :

Diviseurs de fréquence :

Générateurs PWM :

Blocs arithmétiques

Additionneurs :

Multiplieurs :

ALU (Arithmetic Logic Unit) :

Mémoires

RAM :

ROM :

FPGA et CPLD

Architecture FPGA

Familles de FPGA

Xilinx :

Intel/Altera :

CPLD vs FPGA

CPLD :

FPGA :

Outils de conception

Synthèse

Implémentation

Simulation

Fonctionnelle :

Temporelle (post-route) :

Contraintes

Timing :

Placement :

I/O :

🛠️ Projets pratiques

Projet Composants VHDL

Objectif

Développement de bibliothèque de composants réutilisables

Composants à réaliser :

Livrables :

Projet Platine avec FPGA

Description

Conception complète d’une carte avec FPGA/CPLD

Spécifications typiques :

Étapes :

  1. Choix du composant
  2. Schématique complet
  3. PCB multicouche (4 ou 6)
  4. Fabrication
  5. Assemblage et test
  6. Programmation et validation

Considérations techniques

Alimentation :

Configuration :

Signaux d’horloge :

I/O :

💻 Outils utilisés

Environnements de développement

Simulation

Conception PCB

📊 Évaluation

🔗 Liens avec d’autres cours

📐 Exemple d’architecture VHDL

Diviseur de fréquence

entity freq_divider is
    generic (
        DIV_FACTOR : integer := 1000
    );
    port (
        clk_in  : in  std_logic;
        reset   : in  std_logic;
        clk_out : out std_logic
    );
end freq_divider;

architecture rtl of freq_divider is
    signal counter : integer range 0 to DIV_FACTOR-1;
    signal clk_temp : std_logic;
begin
    process(clk_in, reset)
    begin
        if reset = '1' then
            counter <= 0;
            clk_temp <= '0';
        elsif rising_edge(clk_in) then
            if counter = DIV_FACTOR-1 then
                counter <= 0;
                clk_temp <= not clk_temp;
            else
                counter <= counter + 1;
            end if;
        end if;
    end process;
    
    clk_out <= clk_temp;
end rtl;

Machine à états (FSM)

type state_type is (IDLE, START, DATA, STOP);
signal state, next_state : state_type;

-- State register
process(clk, reset)
begin
    if reset = '1' then
        state <= IDLE;
    elsif rising_edge(clk) then
        state <= next_state;
    end if;
end process;

-- Next state logic
process(state, inputs)
begin
    case state is
        when IDLE =>
            if start = '1' then
                next_state <= START;
            else
                next_state <= IDLE;
            end if;
        when START =>
            next_state <= DATA;
        when DATA =>
            if done = '1' then
                next_state <= STOP;
            else
                next_state <= DATA;
            end if;
        when STOP =>
            next_state <= IDLE;
    end case;
end process;

💡 Bonnes pratiques VHDL

Horloges et resets

Synthétisabilité

Timing

Organisation code

📖 Compétences développées

🎯 Ressources FPGA typiques

Exemple : Cyclone IV EP4CE15

Exemple : Spartan-6 LX9

⚠️ Pièges courants

VHDL

FPGA

PCB