3- Circuit combinatoire
1
Circuit combinatoire
• Un circuit combinatoire est
– Les sorties ne sont qu’une une fonctions des entrées: les
mêmes sorties donnent toujours les mêmes entrées.
– Une généralisation des portes logiques
2
Circuit combinatoire
• Pour tout circuit combinatoire, on peut construire une
table de vérité avec 𝑛 colonnes pour les entrées et 𝑚
colonnes pour les sorties.
• En VHDL, plusieurs approches existent
– Conception à partir de table de vérité
– Conception à partir d’expression logique
– Conception à partir d’ circuit logique
– Conception à partir d’une fonction à réaliser
• On va procédé par des exemples.
3
Table de vérité
Demi additionneur
A B C SUM A SUM
0 0 0 0 B
0 + 0 = 00
0 + 1 = 01 0 1 0 1
1 + 0 = 01 C
1 0 0 1
1 + 1 = 10
1 1 1 0
ҧ + 𝐴𝐵ത = 𝐴 𝑥𝑜𝑟 𝐵
SUM = 𝐴𝐵 SUM <= A XOR B;
C = 𝐴𝐵 C <= A AND B;
4
Table de vérité
Additionneur complet
C’est une addition sur 2 bits, avec une retenu possible
SUM = 𝐴ҧ𝐵𝐶𝑖𝑛
ത ҧ
+ 𝐴𝐵𝐶𝑖𝑛 ത
+ 𝐴𝐵𝐶𝑖𝑛 + 𝐴𝐵𝐶𝑖𝑛
ҧ
Cout =𝐴𝐵𝐶𝑖𝑛+𝐴 ത
𝐵𝐶𝑖𝑛+𝐴ҧ𝐵𝐶𝑖𝑛+𝐴𝐵𝐶𝑖𝑛+𝐴𝐵𝐶𝑖𝑛
ത
A B Cin SUM Cout
0 0 0 0 0
Avec l’algèbre de Bool (ou tableau de Karnaugh) on peut
0 0 1 1 0 simplifier l’expression
0 1 0 1 0
0 1 1 0 1 SUM = 𝐴 ⊕ 𝐵 ⊕ 𝐶𝑖𝑛
1 0 0 1 1 Cout =𝐴. 𝐵 + (𝐶𝑖𝑛. 𝐴 ⊕ 𝐵 )
1 0 1 0 1
1 1 0 0 1 En VHDL
5
4-bit addition
𝑥 = 𝑥3 𝑥2 𝑥1 𝑥0
𝑦 = 𝑦3 𝑦2 𝑦1 𝑦0
𝑧 = 𝑥 + 𝑦 = 𝑐𝑎𝑟𝑟𝑦 𝑜𝑢𝑡 𝑧3 𝑧2 𝑧1 𝑧0
In VHDL:
signal x,y,z : std_logic_vector(3 downto 0);
Z <= x + y;
Combinatorial circuit: 7-seg encoder
hex g f e d c b a
0000 1 0 0 0 0 0 0
0001 1 1 1 1 0 0 1
…
1111 0 0 0 1 1 1 0
B LUT C
Par exemple une mémoire de taille 16 avec chaque
case sur 2 bits, peut remplacer n’importe quel circuit
combinatoire à 4 entrées et deux sorties.
9
Activities on Vivado
Very beginning with VHDL
Activity
Modify your last Vivado project to implement the circuit given in the exercise.
12
[index]
Instruction conditionnelle
Affectation conditionnelle: when – else
sel
2
A
M
B Y
U
C X
4
D
13
[index]
sel
2
A
M
B Y
U
C X
4
D
14
Exercices
15
Exercice
• Tracer la table de vérité d’un demi-additionneur
16
Exemple : ALU
entity ALU is
port (A,B :in std_logic_vector(7 downto 0);
SEL : in std_logic_vector(1 downto 0);
S : out std_logic_vector(7 downto 0));
end ALU;
17
Exemple : Codeur sept-segment
with HEX select
LED<= "1111001" when "0001", --1
"0100100" when "0010", --2
"0110000" when "0011", --3
"0011001" when "0100", --4
"0010010" when "0101", --5
"0000010" when "0110", --6
"1111000" when "0111", --7
"0000000" when "1000", --8
"0010000" when "1001", --9 7
"0001000" when "1010", --A
"0000011" when "1011", --b Circuit
"1000110" when "1100", --C
"0100001" when "1101", --d combinatoire
"0000110" when "1110", --E
"0001110" when "1111", --F 4
"1000000" when others; --0
18
CONCEPTION CIRCUIT NUMÉRIQUE
4- Circuit séquentiel
19
Circuit séquentiel
• Un circuit séquentiel est un circuit qui possède de la mémoire
interne
• Avec les mêmes entrées il peut avoir des sorties différentes
• Exemple bascule D
D EN Q
D
0 0 ?
EN 1 0 ?
Q 0 1 0
1 1 1
20
[index]
Process
• Process est une instruction pour créer une zone séquentielle.
Syntaxe de process :
• label : -- optionnel
process (liste de sensibilité)
{partie déclarative}
begin
suite d’instructions séquentielles
end process;
21
Détails de Process
• Un process peut posséder une liste de sensibilité
• Une fois process réveillé, les instructions sont exécutées une par une et
dans l’ordre
• Au cours d’exécution d’un process, tous les signaux sont constants (ne
change pas de valeur) jusquàà ce que l’exécution soit suspendue
• C’est uniquement quand le process est suspendu que les signaux sont
actualisés
22
Exemple
1
1- process se réveille
Compléter le chronogramme
2- C <= (A and B) = (‘0’ and ‘0’) = ‘0’, mais
ce sera effectif au moment de suspension
Process(A,B)
Begin 3- B <= ‘1’ mais au moment de suspension
C <= A and B; 4- C <= (A or B) = (‘0’ or ‘0’) = ‘0’ mais au
B <= ‘1’; moment de suspension
C <= A or B;
End process; 5- end process (suspension) donc B <= ‘1’,
C <= ‘0’
Variable
• Les variables sont utilisées uniquement dans les process.
• Elles sont déclarées dans le process avant le mot clé « begin »
(begin du process).
• Contrairement aux signaux, les variables sont affectées tout de
suite, on n’a pas besoin d’attendre la suspension du process.
• Affectation se fait par ":=" et non pas par "<=" :
• Var_x := not Var_x;
• Une variable peut avoir le même type qu’un signal
• On peut copier une variable dans un signal ou un signal dans une
variable:
var_x := Sig_x ; Sig_x <= Var_x ;
Instructions conditionnelle
if condition then
sequential statements
[elsif condition then
sequential statements ]
[elsif condition then
sequential statements ]
[else
sequential statements ]
end if;
25
Exemple: multiplexeur 4 voies
Ce circuit combinatoire peut être réalisé par with-select, ou when-else,
mais aussi par un process.
S1 S0
A
entity MUX_4 is
port (S1, S0, A, B, C, D: in std_logic; B
MUX
Z: out std_logic); Z
end MUX_4; C
D
architecture behav_MUX_4 of MUX_4 is
begin
P1: process (S1, S0, A, B, C, D) - - la liste de sensibilité
begin
if (( not S1 and not S0 )=’1’) then Z <= A;
elsif (( not S1 and S0) = ‘1’) then Z <=B;
elsif ((S1 and not S0) =’1’) then Z <=C;
else Z <=D;
end if;
end process P1;
end behav_MUX_4;
26
Remarque
Solution alternative
entity MUX_4 is
port (S1, S0, A, B, C, D: in std_logic;
Z: out std_logic);
end MUX_4;
end behav_MUX_4;
27
[index]
Instruction sélective
Permet de sélectionner une suite d’instructions à exécuter en
fonction de la valeur d’une expression.
case EXPRESSION is
when VAL1 => suite d’instructions séquentielles
when VAL2|VAL3|VAL4 => suite d’instr séquentielles
when VAL5 to VAL7 => suite d’instr séquentielles
when others => suite d’instr séquentielles
end case;
Process
28
Multiplexeur avec case
entity MUX_4 is
port (SEL : in std_logic_vector(1 downto 0);
A, B, C, D: in std_logic; Z: out std_logic);
end MUX_4;
end behav_MUX_4;
29
[index]
Instructions wait
L’exécution des lignes d’un process s’arrête quand on arrive à
la commande « wait », on dit que le process est suspendu ! Le
process pourra redémarrer suivant une condition.
•Wait
• wait on signal;
•wait on A , B
30
Exemple test bench
La génération de l’horloge et en même temps d’un signal Reset.
clock_gen: process
begin
CLK_TB <= '1';
wait for 5 ns;
CLK_TB <= '0'; Instructions
wait for 5 ns; séquentielles
end process;
---------------------------------------
reset_gen: process
begin Instructions
RST_TB <= ‘0’; wait for 5ns; concurrentes
RST_TB <= ‘1’; wait for 15ns;
RST_TB <= ‘0’; Instructions
wait; séquentielles
end process;
---------------------------------------
inst: counter
port map ( CLK => CLK_TB, RST => RST_TB, Q => DATA_OUT );
32
Affectation dans process
• L’affectation à un signal utilisant le signe <=
Évènement
Process (x) sur x
begin
SIG <= '0';
SIG
SIG <= '1';
SIG <= '0';
end process;
SIG
Les mêmes lignes en architecture
serait une erreur (multi source)!
33
[index]
Process combinatoire
34
Circuits combinatoires : équation logique
35
Exemple des Circuits non-combinatoires
36
Conclusion
• Nous avons appris à programmer en VHDL.
37