Cours/TD VHDL OPERATEURS ARITHMETIQUES 1) Recopier ...
7 pages

Cours/TD VHDL OPERATEURS ARITHMETIQUES 1) Recopier ...

-

Le téléchargement nécessite un accès à la bibliothèque YouScribe
Tout savoir sur nos offres
7 pages
Le téléchargement nécessite un accès à la bibliothèque YouScribe
Tout savoir sur nos offres

Description

Cours/TD  VHDL  OPERATEURS  ARITHMETIQUES  1)  Recopier,  compiler,  écrire  le  testbench    et  simuler  le  code  du  composant  décrit  ci-­dessous  :   ----------------------------------- library ieee; use ieee.std_logic_1164.all; entity add4 is port (r0:in std_logic; a,b: in std_logic_vector ( 3 downto 0); s: out std_logic_vector (4 downto 0)); end add4; architecture archi of add4 is signal r: std_logic_vector(
  • intervalle   de   définition
  •  une  astuce
  •  de  bits
  •  droite  et
  •  est  la
  •  bit  de
  • lieu   d'instancier   des   blocs
  • ­dessous  
  • end process

Sujets

Informations

Publié par
Nombre de lectures 101

Extrait

Cours/TDVHDL
OPERATEURSARITHMETIQUES
1)Recopier,compiler,écrireletestbenchetsimulerlecodeducomposantdécrit
ci-dessous:
-----------------------------------
library ieee;
use ieee.std_logic_1164.all;

entity add4 is
port (r0:in std_logic;
a,b: in std_logic_vector ( 3 downto 0);
s: out std_logic_vector (4 downto 0));
end add4;

architecture archi of add4 is

signal r: std_logic_vector(4 downto 0);

component c2
port(a,b,rin: in std_logic; s, rout: out std_logic);
end component;

begin

r(0)<=r0;
s(4)<=r(4);

boucle:for i in 0 to 3 generate
inst: c2 port map (rin =>r(i) , a=> a(i), b=> b(i), rout=>r(i+1), s=>s(i));
end generate;

end archi;
-----------------------------------

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity add4_tb is
end add4_tb;

architecture archi of add4_tb is

signal rin: std_logic;
signal entree1, entree2: std_logic_vector(3 downto 0);
signal sortie: std_logic_vector(4 downto 0);

component add4
port (r0:in std_logic;
a,b: in std_logic_vector ( 3 downto 0);
s: out std_logic_vector (4 downto 0));
end component;

begin

uut: add4 port map (a=> entree1, b => entree2, r0 => rin, s => sortie);

rin <= '0';

entree2<="1011";

stimuli: process
begin
entree1 <= "0000";
wait for 50 ns; loop
entree1 <= entree1 + 1;
wait for 50 ns;
end loop;
end process;

end archi;
-----------------------------------

-Quelleestlastructuredecetteentité?


-Quesignifie«std_logic_vector»?

C’est un vecteur de «std_logic», c’est à dire un bus. La taille de ce bus est
obligatoirementspécifiée.

-Quesignifie«downto»?

signal s : std_logic_vector(3 downto 0) ;

Celasignifiequesestunvecteur(bus)de«std_logic»de4bits,lebitdepoidsfortétant
situéàgaucheetlebitdepoidsfaibleàdroite.

s <="1000"; --correspond à la valeur 8 en base 10 (non-signé)

IlestpossibleenVHDLd’écrirelesvecteursdanslesensinverse(bitdepoidsfortà
droiteetbitdepoidsfaibleàgauche).

Exemple:
s : std_logic_vector(0 to 3) ;
s <="1000"; --correspond à la valeur 1 en base 10 (non-signé)

-Aquoisertle«for…generate»?
Ilpermetdanscecasdesimplifierl’écritureduportmapparuneboucle.Commeilest
nécessairedefaire4instanciationsdec2,plutôtquedel’écrire4fois,onfaituneboucle
avecunevariableivariantde0à3.

-Quelleestlafonctionnalitédecetteentité?

Ils’agitd’unadditionneur4bits.

-Pourquoilasortieestsur5bitsalorsquelesentréessontsur4?

èmeLe5 bitestlebitdecarry(retenue).

-Quellealternativeaurait-onpuutiliserpourconcevoirlamêmefonctionnalité?

Onauraitpuimplantercecircuitdirectementàl’aidedeporteslogiquessansréutiliser
des composants prédéfinis tel que nous l’avons fait ici. La réutilisation permet de
simplifierlaconceptiondescircuitsencréanteshiérarchiesdecomposants.

2)Recopier,compiler,écrireletestbenchetsimulerlecodeducomposantdécrit
ci-dessous:
-----------------------------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity addN is
generic(N: integer := 4);
port ( a,b: in std_logic_vector ( N-1 downto 0);
s: out std_logic_vector (N-1 downto 0));
end addN;

architecture archi of addN is

begin
--process(a,b)
--begin
s <= a + b ;
--end process ;

end archi;
-----------------------------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity addN_tb is
generic( N: integer:=3);
end addN_tb;

architecture archi of addN_tb is

signal entree1, entree2, sortie: std_logic_vector(N-1 downto 0);

component addN
generic(N: integer := 4);
port (a,b: in std_logic_vector ( N-1 downto 0);
s: out std_logic_vector (N-1 downto 0));
end component;

begin
uut: addN generic map (N => N) port map (a=> entree1, b => entree2, s => sortie);

stimuli_entree1: process
begin
entree1 <= (others => '0');
wait for 50 ns;
loop
entree1 <= entree1 + 1;
wait for 50 ns;
end loop;
end process;

stimuli_entree2: process
variable temp: integer;
begin
temp:=1;
for i in 1 to N loop
temp:= temp * 2;
end loop;

for i in 0 to temp-1 loop
entree2 <= (others => '0');
wait for 50 ns;
end loop;

loop
entree2 <= entree2 + 1;
for i in 0 to temp-1 loop
wait for 50 ns;
end loop;
end loop;

end process;

end archi;
-----------------------------------

-Quellessontlesdifférencesentrecettedescriptionetcelledu1)?

Lesentrées/sortiesontsurlemêmenombredebits.Parconséquentonperdlanotion
deretenue(«carry»).
Aulieud’instancierdesblocscontenantdesporteslogiques,onréalisedirectement
l’additionarithmétiqueentreles2vecteursdebits.

-Supprimerles«--»des3lignesencommentaireetsimulervotredesign:qu’est-
cequevousobservez?

Onobserveexactementlesmêmesrésultats.

-Lalistedessignauxentreparenthèsesaprès«process»s’appellelalistede
sensibilité:enleveraoubdecettelisteetsimulezvotrecircuit.Quepeutsignifier
alors«listedesensibilité»?

Sionenlève‘a’parexemple,leprocessnesedéclenchepluslorsqu’ilyaunévénement
(changementdevaleur)quiseproduitsurceport.
Lalistedesensibilité,c’estlalistedessignaux(et/ouports)auxquelsleprocessdoit
réagirlorsqu’ilyaunévénement.

-ModifiezlavaleurdeNetexpliquezl’intérêtde«generic»?
Ce terme, ajouté à une interface de composant, permet de rendre une description
paramétrable.Danslecasdel’additionneur,leparamètreestN,lalargeurdesbus
d’entrées/sortie(nombredebits).
Dansletestbench,onaajoutéégalementunparamètregénériquequivapermettrede
fixerlatailledetouslessignauxutilisés.
Un«genericmap»estégalementajoutéàl’instanciationdeaddNafinde«connecter»
leNdutestbenchauNdeaddN.EnmodifiantsimplementlavaleurdeNdansle
testbench,onpeutpasserd’unadditionneur3bitsàunadditionneur16bits.
Notezégalementles2processdegestiondesstimulisurlessignaux«entree1»et
«entree2»...

3)Recopier,compiler,écrireletestbenchetsimulerlecodeducomposantdécrit
ci-dessous:
--------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;

entity sig_var is
port( d1, d2, d3: in std_logic;
res1, res2: out std_logic);
end sig_var;

architecture behv of sig_var is
signal sig_s1: std_logic;
begin
proc1: process(d1,d2,d3)
variable var_s1: std_logic;
begin
var_s1 := d1 and d2;
res1 <= var_s1 xor d3;
end process;


proc2: process(d1,d2,d3)
begin
sig_s1 <= d1 and d2;
res2 <= sig_s1 xor d3;
end process;

end behv;
--------------------------------------------------------

Question:

-Quelleestladifférenceentreun«signal»etune«variable»enVHDL?

- unsignalpeuts’utiliserhorsoudansunprocess
- unevariablenes’utilisequedansunprocess
- l’intérêtd’unevariableestdestockerdesrésultatsdecalculstemporairesque
l’onveutréinjecterdansd’autrescalculs
- L’affectationd’unevaleuràunevariableestimmédiatealorsquel’affectation
d’unevaleuràunsignalnes’effectue,dansunprocess,quelorsquecelui-ciest
suspendu(c’estàdirelorsqu’ilarriveàun«wait»ouà«endprocess»)

Dansl’exempleducomposantsig_var,onobserveeffectivementquelessortiesres1
etres2sontdifférentes,alorsquecesontlesmêmescalculsquisonteffectués.Dansle
èmecasdu2 process,sortie2estlerésultatd’unxorentresig_s1etd3.Lesignalsig_s1n’étantaffectéquelorsqueleprocessestsuspendu,lasortieres2prendlavaleurde
sig_s1retardéed’uncycled’exécution.



4)Recopier,compiler,écrireletestbenchetsimulerlecodeducomposantdécrit
ci-dessous:
--------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity adder is
port( a,b: in std_logic_vector ( 3 downto 0);
s: out std_logic_vector ( 3 downto 0);
cf, ovf: out std_logic);
end adder;

architecture archi of adder is
begin
p

  • Univers Univers
  • Ebooks Ebooks
  • Livres audio Livres audio
  • Presse Presse
  • Podcasts Podcasts
  • BD BD
  • Documents Documents