Professional Documents
Culture Documents
Plan
Modle de producteur/consommateur
Multiplicateur srie:
Source: Wikipdia
33
Contrle
Entres de contrle
tat
Unit de contrle
Sorties de contrle
Machine distributrice
Moteurs des plateaux
Clavier
M
M
M
M
Processeur
tat
Grer largent
Grer linventaire
actuateurs
pour rendre
la monnaie
senseur de
pices
affichages
entres
lments
mmoire
prochain tat
tat prsent
horloge
Dans une machine de Moore, les sorties ne sont fonctions que de ltat
prsent.
Dans une machine de Mealy, les sorties sont fonctions de ltat prsent ainsi
que des entres.
circuit combinatoire
sorties de Moore
entres
fonction de sortie (Mealy)
lments mmoire
tat prsent
horloge
sorties de Mealy
prochain tat
Plan
Modle de producteur/consommateur
Multiplicateur srie:
CLK
Q'
Z
X
CLK
CLK
Q'
Conception et implmentation des systmes numriques
4. Diagramme dtats:
entre
tat prochain
sortie
A+
B+
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
0
1
1
1
1
0
0
1
1
0
1
1
1
0
1
1
1
0
0
0
0
0
0
CLK
tat 0: AB = 00
tat 1: AB = 01
tat 2: AB = 10
tat 3: AB = 11
reset
(tat
initial)
CLK
CLK
Sortie: 1
Sortie: 0
1
1
tat 3
Sortie: 0
Z
tat 1
Q'
X
tat 0
Q'
Conception et implmentation des systmes numriques
tat 2
Sortie: 0
Plan
Modle de producteur/consommateur
Multiplicateur srie:
Approche adquate:
CLK
Q'
Z
X
CLK
CLK
Q'
identifier les tats, les conditions de transition et les sorties pour chaque tat
pas besoin dquations dtats
reset
plus lisible, robuste, facile maintenir
tat 0
(tat
initial)
process(CLK, reset) is
begin
if (reset = '0') then
etat <= 0;
elsif (rising_edge(CLK)) then
case etat is
when 0 =>
etat <= 1;
when 1 =>
if x = '0' then etat <= 2; else etat <= 3; end if;
when 2 =>
etat <= 3;
when 3 =>
if x = '0' then etat <= 0; else etat <= 1; end if;
end case;
end if;
end process;
Sortie: 1
Sortie: 0
1
1
tat 3
Sortie: 0
-
tat 2
Sortie: 0
tat 1
reset
S1
Sortie = 1
S3
Sortie = 0
S2
Sortie = 1
S4
Sortie = 0
Autres observations:
machine de Moore (sortie dfinie seulement par ltat)
sortie spcifie dans la condition de rinitialisation
sortie avec registre
Un type peut tre dfini avec une numration dlments dans une liste.
Lordre dnumration dfinit un indice pour chaque lment partir de 0. Les
oprateurs relationnels sappliquent entre les lments selon cet ordre.
Exemples: dfinitions dans le package standard, disponible dans le manuel de
rfrence du langage VHDL, norme 1076-2002
http://www.ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=1003477
package STANDARD is
type BOOLEAN is (FALSE, TRUE);
type BIT is ('0', '1');
type CHARACTER is (
NUL, SOH, STX, ETX, EOT, ENQ, ACK, BEL, BS, HT, LF, VT,
FF, CR, SO, SI, DLE, DC1, DC2, DC3, DC4, NAK, SYN, ETB,
CAN, EM, SUB, ESC, FSP, GSP, RSP, USP, ' ', '!', '"', '#',
'$', '%', '&', ''', '(', ')', '*', '+', ',', '-', '.',
'/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
':', ';', '<', '=', '>', '?', --- etc.
sorties de Moore
entres
fonction de sortie (Mealy)
lments mmoire
tat prsent
horloge
sorties de Mealy
prochain tat
S1
Sortie = 1
S3
Sortie = 0
S2
Sortie = 1
S4
Sortie = 0
un pour les sorties (peut tre remplac par des noncs concurrents)
architecture deuxprocessus of cctsequentielex2 is
type type_etat is (S1, S2, S3, S4);
signal etat : type_etat := S1;
begin
process(CLK, reset) is
begin
if (reset = '0') then
etat <= S1;
elsif (rising_edge(CLK)) then
case etat is
when S1 =>
if x = '0' then
etat <= S3;
else
etat <= S2;
end if;
when S2 | S3 =>
etat <= S4;
when S4 =>
etat <= S1;
end case;
end if;
end process;
process(etat)
Machine de Moore
begin
case etat is
when S1 | S2 => sortie <= '1';
when S3 | S4 => sortie <= '0';
end case;
end process;
end deuxprocessus;
X
reset
S1
Sortie = 1
S3
Sortie = 0
S2
Sortie = 1
S4
Sortie = 0
un pour les sorties (peut tre remplac par des noncs concurrents)
reset
(tat
initial)
process(CLK, reset) is
begin
if (reset = '0') then
etat <= 0;
0
elsif (rising_edge(CLK)) then
case etat is
when 0 =>
etat <= 1;
when 1 =>
if x = '0' then etat <= 2; else etat <= 3; end if;
when 2 =>
etat <= 3;
when 3 =>
if x = '0' then etat <= 0; else etat <= 1; end if;
end case;
end if;
end process;
z <= '1' when etat = 0 else '0';
end arch2;
Conception et implmentation des systmes numriques
tat 0
tat 1
Sortie: 1
Sortie: 0
1
1
tat 3
Sortie: 0
tat 2
Sortie: 0
end troisprocessus;
Pour les processus dcrivant des bascules: placer seulement clk et reset
dans la liste de sensitivit
process(CLK, A)
begin
if rising_edge(CLK) then
Z <= A;
end if;
end process;
process(A, B)
begin
T1 <= A and B;
T2 <= not(T1);
end process;
Plan
Modle de producteur/consommateur
Multiplicateur srie:
dbuter avec une description de la relation dsire entre les entres et les
sorties;
Procdure traditionnelle
oui
oui
oui
non
oui
pas obligatoire
peut simplifier la documentation
et la clart du code
oui
oui
oui
oui
oui
Cette approche nest plus vraiment utilise depuis ladoption des HDL.
Vrifier le diagramme pour viter les tats quivalents (deux tats qui
mnent aux mmes prochains tats et qui ont les mmes sorties pour les
mmes entres).
Donnez un diagramme dtats pour une machine de Mealy qui doit reconnatre
la squence 1101
Donnez un circuit qui doit reconnatre la squence 1101 laide dun registre
dcalage.
Solution :
Registre dcalage - 4 bascules
Les squences imbriques sont correctement dtectes.
entity rs232txsimple is
generic (
nStartBits : positive := 1; -- nombre de bits de dpart
nDataBits : positive := 8; -- nombre de bits de donnes
nStopBits : positive := 1 -- nombre de bits d'arrt
);
port(
reset_n : in std_logic;
bitClk : in std_logic; -- horloge des bits
lecaractere : in std_logic_vector(nDataBits - 1 downto 0); -- caractre transmettre
load : in std_logic; -- signal de contrle pour lire le caractre et dbuter la transmission
ready : out std_logic; -- indique que le systme est prt transmettre un nouveau caractre
rs232_tx_data : out std_logic -- signal de transmission RS-232
);
end rs232txsimple;
architecture arch of rs232txsimple is
constant startBit : std_logic := '0';
constant stopBit : std_logic := '1';
Deux processus:
-un pour les lments mmoire
-un pour la logique combinatoire pour les signaux
de sortie
Machine
principale
Go1
Fini1
sorties
entres
Go2
Fini2
Sousmachine #2
Solution 1:
Une seule machine
Solution 2:
Dcomposition en trois machines
EP1
EP
C-1
EC
module
EP
C0
SC
Epn-1
EC
module
C1
SC
EP
Cn-2
EC
module
SP
SP
SP
SP0
SP1
SPn-1
Cn-1
SC
Y0
X1
Y1
Xn-1
Yn-1
X Y
comp1
EGs
EGe
Egalite
Si les entres sont disponibles en format srie et que lon est prt accepter les
sorties principales en format srie aussi, alors il existe une version squentielle
du mme circuit qui est trs simple et qui ncessite trs peu de matriel.
Exemple pour un comparateur itratif:
Les entres X et Y sont des entres srie synchronises avec le signal dhorloge
CLK. Lentre init doit tre active au dbut pour fixer le contenu de la bascule
la valeur 1, tel que montr la Figure :
X Y
comp1
D
CLK
CLK
set
init
Plan
Modle de producteur/consommateur
Multiplicateur srie:
1101
1101
1101
0110
0110
0110
0110
0000
00000
011010
1001110
+ 0000
+ 11010
+ 110100
+ 0000000
00000
011010
1001110
01001110
1101.
011[ 0].
1101.
001[1].
1101.
000[1].
1101.
000[ 0].
0000.
+ 0000.
0000.0
+ 1101.
0110.10
+ 1101.
1001.110
+ 0000.
00000.
01101.0
10011.10
01001.110
0000.0
0110.10
1001.110
0100.1110
entree
chargeMultiplicande
multiplicande
chargeFacteur
decaleFacteur
clk
facteur
clk
/W
facteur(0)
additioneur
/W+1
chargeProduit
decaleProduit
initProduit
clk
produit
/
W
addition
fini <= 0
attente
compteur <= W 1
fini <= 1
compteur /= 0
reset
compteur = 0
dcalage
compteur <=
compteur 1
fini <= 0
-- signaux de sortie
F <= produit(2 * W - 1 downto 0);
fini <= '1' when etat = attente else '0';
-- signaux de contrle
chargeMultiplicande <= '1
when etat = attente and chargeA = '1' else '0';
chargeFacteur <= '1
when etat = attente and chargeB = '1' else '0';
decaleFacteur <= '1
when etat = decalage else '0';
chargeProduit <= '1
when etat = addition and facteur(0) = '1' else '0';
decaleProduit <= '1
when etat = decalage else '0';
initProduit <= '1
when etat = attente and go = '1' else '0';