Vous êtes sur la page 1sur 8

UNIVERSITÉ DE CARTHAGE

ECOLE NATIONALE DES SCIENCES ET


TECHNOLOGIES AVANCÉES À BORJ
CÉDRIA

Compte rendu TP5 VHDL

Prise en main du logiciel MODELSIM

Réalisé par
KERFAHI Achref (SETP1)
REGAYA Mariem (SETP1)
GHARBI Med Amine (SIC1)

M. KERMANI ENSTAB Encadrant


Marwen

Année Universitaire : 2015/2016


I. Objectif du TP
L’objectif de ce TP est de prendre en main un compilateur et un simulateur pour le langage VHDL.

Il s’agit du logiciel ModelSim de Mentor Graphics. On présente les différentes étapes pour aboutir à la
simulation d’un design électronique et par la suite savoir décrire et valider par simulation les
caractéristiques de ce design.

II. Le langage VHDL


VHDL est un langage de description de matériel destiné à représenter le comportement ainsi que
l'architecture d’un système électronique numérique. Son nom complet est VHSIC Hardware Description
Language.

L'intérêt d'une telle description réside dans son caractère exécutable : une spécification décrite en VHDL
peut être vérifiée par simulation, avant que la conception détaillée ne soit terminée. En outre, les outils de
conception assistée par ordinateur permettant de passer directement d'une description fonctionnelle en
VHDL à un schéma en porte logique ont révolutionné les méthodes de conception des circuits numériques,
ASIC ou FPGA.

Le but d'un langage de description matériel tel que le VHDL est de faciliter le développement d'un circuit
numérique en fournissant une méthode rigoureuse de description du fonctionnement et de l'architecture
du circuit désirée. L'idée est de ne pas avoir à réaliser un composant réel, en utilisant à la place des outils
de développement permettant de vérifier le fonctionnement attendu. Ce langage permet en effet d'utiliser
des simulateurs, dont le rôle est de tester le fonctionnement décrit par le concepteur.

L'étape suivante consiste à synthétiser cette description matérielle pour obtenir un composant réalisant les
fonctions désirées, à l'aide d'éléments logiques concrets (portes logiques, bascules ou registres). Ceux-ci
seront implémentés, selon la technologie utilisée, soit directement en transistors (dans le cas d'un ASIC), ou
en se basant sur les éléments programmables des FPGA. Après la synthèse viennent les phases de :

Placement : on choisit l'emplacement physique des différents éléments ;

Routage : on détermine les connexions entre éléments.

Ces deux opérations doivent prendre en compte les ressources disponibles sur l'ASIC (surface) ou dans le
FPGA (unités programmables).

Le VHDL ayant une double fonction (simulation et synthèse), une partie seulement du VHDL est
synthétisable, l'autre existant uniquement pour faciliter la simulation (écriture de modèles
comportementaux et de test benches). Selon le support matériel et le logiciel de synthèse utilisés, cette
partie pourra être plus ou moins étendue. De manière à obtenir du VHDL synthétisable et portable, il est
donc nécessaire de se limiter à des constructions simples, dont la transcription en portes et bascules est
simple à réaliser. La norme 1076.6 a été initiée pour tenter de définir un sous-ensemble de VHDL « de
synthèse ».
III. Le logiciel ModelSim 6.5 SE
Le Logiciel ModelSim SE est dédié à la conception d'ASIC et de FPGA, permet la simulation temporelle au
niveau RT (transfert de registre) ou au niveau porte, à partir des langages VHDL ou Verilog.

IV. Quelques exemples


1. Module demi additionneur
a. Code VHDL testbench demi additionneur
LIBRARY ieee;
use ieee.std_logic_1164.all;

entity testbench_demi_add is
end testbench_demi_add;

architecture testbench of testbench_demi_add is


component demi_add is
port (A,B: in bit;
Som, Ref: out bit);
end component;

signal A: bit;
signal B: bit;
signal Som: bit;
signal Ref: bit;

begin
C1: demi_add port map (A,B,Som,Ref);
A<='0', '1' after 20 ns , '0' after 40 ns ,'1' after 60 ns, '0' after 80 ns;
B<='0', '0' after 20 ns , '0' after 40 ns ,'1' after 60 ns, '1' after 80 ns;
end testbench;

b. Code VHDL demi addtionneur


LIBRARY ieee;
use ieee.std_logic_1164.all;

entity demi_add is
port (A,B: in bit;
Som, Ref: out bit);
end demi_add;
architecture arch_demi_add of demi_add is
begin
Som<= A xor B;
Ref <= A and B;
end arch_demi_add;
c. Simulation

2. Exemple 1 du TP

1) F=(A.B+C) xor non(A)


2)

A B C F

0 0 0 1

0 0 1 0

0 1 0 1

0 1 1 0

1 0 0 0

1 0 1 1

1 1 0 1

1 1 1 1

a. Code testbench exemple 1


LIBRARY ieee;
use ieee.std_logic_1164.all;

entity testbench_exemple1 is
end testbench_exemple1;

architecture testbench of testbench_exemple1 is


component exemple1 is
port (A,B,C: in bit;
F: out bit);
end component;

signal A: bit;
signal B: bit;
signal C: bit;
signal F: bit;

begin
C1: exemple1 port map (A,B,C,F);
A<='0', '0' after 20 ns , '0' after 40 ns ,'0' after 60 ns, '1' after 80 ns ,'1' after 100 ns , '1' after
120 ns;
B<='0', '0' after 20 ns , '1' after 40 ns ,'1' after 60 ns, '0' after 80 ns ,'1' after 100 ns , '1' after
120 ns;
C<='0', '1' after 20 ns , '0' after 40 ns ,'1' after 60 ns, '0' after 80 ns ,'0' after 100 ns , '1' after
120 ns;
end testbench;

b. Code VHDL exemple 1


library ieee;
use ieee.std_logic_1164.all;
entity exemple1 is port (A,B,C : in bit; F : out bit);
end exemple1;
architecture arch_exemple1 of exemple1 is
signal S1, S2 : bit;
begin
S1<= A and B;
S2<= S1 or C;
F<= S2 XOR (Not A) ;
end arch_exemple1 ;

c. Simulation
3. Multiplexeur 8 entrées 1 sortie
a. Code VHDL testbench MUX8_1
library ieee ;
use ieee.std_logic_1164.all;
use work.mux8_1;
entity test_mux8_1 is
end test_mux8_1;
architecture test of test_mux8_1 is component mux8_1
port(x0,x1,x2,x3,x4,x5,x6,x7,a0,a1,a2:in bit ; s:out bit ) ;
end component;
signal x0,x1,x2,x3,x4,x5,x6,x7,s:bit ;
signal a0,a1,a2:bit ;
begin
c1: mux8_1 port map (x0,x1,x2,x3,x4,x5,x6,x7,a0,a1,a2,s);
x0<='1', '0' after 20 ns , '0' after 40 ns ,'0' after 60 ns ,'1' after 80 ns ;
x1<='0', '1' after 20 ns , '0' after 40 ns ,'0' after 60 ns ,'0' after 80 ns ;
x2<='0', '0' after 20 ns , '1' after 40 ns ,'0' after 60 ns ,'0' after 80 ns ;
x3<='0', '0' after 20 ns , '0' after 40 ns ,'1' after 60 ns ,'0' after 80 ns ;
x4<='0', '0' after 20 ns , '0' after 40 ns ,'1' after 60 ns ,'0' after 80 ns ;
x5<='0', '0' after 20 ns , '0' after 40 ns ,'1' after 60 ns ,'0' after 80 ns ;
x6<='0', '0' after 20 ns , '0' after 40 ns ,'1' after 60 ns ,'0' after 80 ns ;
x7<='0', '0' after 20 ns , '0' after 40 ns ,'1' after 60 ns ,'0' after 80 ns ;
a0<='0', '0' after 20 ns , '0' after 40 ns ,'0' after 60 ns ,'1' after 80 ns ,'1' after 100 ns ,'1'
after 120 ns ,'1' after 140 ns;
a1<='0', '0' after 20 ns , '1' after 40 ns ,'1' after 60 ns ,'0' after 80 ns ,'0' after 100 ns ,'1'
after 120 ns ,'1' after 140 ns;
a2<='0', '1' after 20 ns , '0' after 40 ns ,'1' after 60 ns ,'0' after 80 ns ,'1' after 100 ns ,'0'
after 120 ns ,'1' after 140 ns;
end test ;

b. Code VHDL MUX8_1


library ieee;
use ieee .std_logic_1164.all;
entity mux8_1 is
port (x0,x1,x2,x3,x4,x5,x6,x7,a0,a1,a2 : in bit ;
s : out bit );
end mux8_1;
architecture arch_mux8_1 of mux8_1 is
signal adress : bit_vector (2 downto 0 ) ;
begin
adress <= a2&a1&a0;
s <= x0 when (adress = "000" ) else
x1 when (adress ="001" ) else
x2 when (adress="010" ) else
x3 when (adress ="011" ) else
x4 when (adress ="100" ) else
x5 when (adress ="101" ) else
x6 when (adress ="110" ) else
x7;
end arch_mux8_1;

c. Simulation

4. Bascule D

a. Code VHDL testbench bascule D


b. Code VHDL Bascule D

c. Simulation

Vous aimerez peut-être aussi