Document Details

FeasibleLightYear

Uploaded by FeasibleLightYear

ENSEA

Laurent Fiack

Tags

VHDL FPGA Logic Design Digital Circuits

Summary

This document is a presentation on the basics of VHDL, a hardware description language for designing digital circuits. It covers topics such as VHDL structures, libraries, entities, architectures, and includes examples for multiplexer, combinational and sequential circuits, and also the design of basic parts in a FPGA.

Full Transcript

LINUX FPGA Bases de VHDL Laurent Fiack – [email protected] Bureau D212 Sommaire 1 Bases de VHDL 2 Le multiplexeur 3 Combinatoire vs Séquentiel 4 La bascule D synchrone 5 Instanciation et Design hierarchique 6 Base du testbench 7 TD : algorithme simple...

LINUX FPGA Bases de VHDL Laurent Fiack – [email protected] Bureau D212 Sommaire 1 Bases de VHDL 2 Le multiplexeur 3 Combinatoire vs Séquentiel 4 La bascule D synchrone 5 Instanciation et Design hierarchique 6 Base du testbench 7 TD : algorithme simple RTOS 2 / 56 Bases de VHDL Bases de VHDL Structure d’un composant Fichier VHDL généralement constitué de 3 zones Inclusion de librairies On peut créer nos propres packages entity Définit les entrées et les sorties Et les éventuels paramètres architecture Définit l’intérieur du composant Rattachée à une entity Il peut y avoir plusieurs architecture pour une entity Généralement description comportementale 1 composant par fichier ! C’est plus simple si le fichier porte le nom du composant RTOS 4 / 56 Bases de VHDL 1. Les librairies Ensemble de packages standards dans la librairie IEEE Institute of Electrical and Electronics Engineers Normalise plein de trucs (wifi, bluetooth, float, POSIX...) library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; Attention ! La librairie std_logic_arith n’est pas standard ! Mieux vaut éviter de l’utiliser. Utilisez numeric_std à la place. RTOS 5 / 56 Bases de VHDL 2. entity -- Ceci est un commentaire. Comme toujours, c'est bien d'en mettre ! entity nom_composant is port ( i_clk : in std_logic; i_rst_n : in std_logic; i_pb : in std_logic_vector(1 downto 0); o_led : out std_logic_vector(7 downto 0) ); end entity nom_composant; 5 directions : in, out, inout, buffer, linkage inout pour des signaux bidir (eg. I2C SDA) RTOS 6 / 56 Bases de VHDL Petit apparté : Les types en VHDL std_ulogic/std_logic 'U', 'X', '0', '1', 'Z', 'W', 'L', 'H', '-' std_logic_vector Vecteur (= tableau) de std_logic. Il faut définir la range du tableau eg. (7 downto 0) integer Sur 32 bits par défaut On peut spécifier des limites avec une range eg. integer range 0 to 255 À ne pas confondre avec la range du std_logic_vector natural Sous groupe d’integer positif ou nul positive Sous groupe de natural strictement positif Et les flottants ? RTOS 7 / 56 Bases de VHDL std_logic 'U': uninitialized. This signal hasn’t been set yet. 'X': unknown. Impossible to determine this value/result. '0': logic 0 '1': logic 1 'Z': High Impedance 'W': Weak signal, can’t tell if it should be 0 or 1. 'L': Weak signal that should probably go to 0 'H': Weak signal that should probably go to 1 '-': Don’t care. RTOS 8 / 56 Bases de VHDL 2. entity avec paramètres generic -- Ceci est un commentaire. Comme toujours, c'est bien d'en mettre ! entity nom_composant is generic ( PB_BUS_WIDTH : positive := 2; LED_BUS_WIDTH : positive := 8 ); port ( i_clk : in std_logic; i_rst_n : in std_logic; i_pb : in std_logic_vector(PB_BUS_WIDTH-1 downto 0); o_led : in std_logic_vector(LED_BUS_WIDTH-1 downto 0) ); end entity nom_composant; RTOS 9 / 56 Bases de VHDL 3. architecture architecture nom_archi of nom_composant is -- Constantes : Il *faut* initialiser une constante constant c_name : natural := 12; -- Signaux : Il *ne faut pas* initialiser un signal signal s_name : integer; -- Registres : C'est *mieux* d'initialiser un registre signal r_name : std_logic := '0'; begin o_led(0)

Use Quizgecko on...
Browser
Browser