0% ont trouvé ce document utile (0 vote)
95 vues7 pages

Chapitre III 2

Transféré par

kerarma2017
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
95 vues7 pages

Chapitre III 2

Transféré par

kerarma2017
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Université des Sciences et de la Technologie d’Oran « USTO » Année 2023-2024

AII /2ème Année Master FPGA et programmation VHDL

Chapitre III. Synthèse logique en Verilog


Structure d'un module dans Verilog

module demo(A, B, C, Y);


input A;
input B;
Le type de ports
input C;
output Y;
wire a_or_b; signaux internes
assign a_or_b = A | B;
assign Y = a_or_b & (~C);
endmodule;

Circuits combinatoires – assign


Utilisation d'affectations simultanées et d'opérations bit à bit simples :
~ not, & and, ^ xor, ~^ xnor , | or

Structures de contrôle

if (condition) instruction;

if (condition) instruction;
else if (condition) instruction;
else instruction;

case (expression)
constante : instruction;
constante, constante : instruction;

default : instruction;
endcase

for ( initialisation; condition; progression ) instruction;

while ( condition ) instruction;

1
repeat (nombre_de_repetitions) instruction;

forever instruction;

Opérateurs
Opérateurs entre mots binaires

~ ~m Inverser tous les bits de m

& m&n ET entre tous les bits de m et tous les bits de n

| m|n OU entre les bits de m et les bits de n

^ m^n OU-EXCLUSIF entre les bits de m et les bits de n

~^ m ~^ n NON-OU-EXCLUSIF entre les bits de m et les bits de n

<< m << n décalage de m, de n bits à gauche, complété par des zeros à droite

>> m >> n décalage de m, de n bits à droite, complété par des zeros à gauche

Opérateurs unaires de réduction

& &m ET de tous les bits de m ensemble (résultat sur un bit)

~& ~&m NAND de tous les bits de m ensemble (résultat sur un bit)

| |m OU de tous les bits de m ensemble (résultat sur un bit)

~| ~|m NOR de tous les bits de m ensemble (résultat sur un bit)

^ ^m OU-EXCLUSIF de tous les bits de m ensemble (résultat sur un bit)

~^ ~^m NON-OU-EXCLUSIF de tous les bits de m ensemble (résultat sur un bit)

Opérateurs logiques

! !m m est-il faux ? (Résultat sur un bit Vrai/Faux)

&& m && n m et n sont-ils tous les deux vrais ? (Résultat sur un bit Vrai/Faux)

|| m || n l’un au moins parmi m et n est-il vrai ? (Résultat sur un bit Vrai/Faux)

Opérateurs relationnels

== m== n m est-il égal à n ? (Résultat sur un bit Vrai/Faux)

!= m != n m est-il différent de n ? (Résultat sur un bit Vrai/Faux)

< m<n m est-il plus petit que n ? (Résultat sur un bit Vrai/Faux)

> m>n m est-il plus grand que n ? (Résultat sur un bit Vrai/Faux)

<= m <= n m est-il inférieur ou égal à n ? (Résultat sur un bit Vrai/Faux)

>= m >= n m est-il supérieur ou égal à n ? (Résultat sur un bit Vrai/Faux)

2
Opérateurs arithmétiques

+ m+n somme de m et n

- m-n soustraction de n à m

- -m opposé de n (en complément à 2)

* m*n produit de n et m

/ m/n quotient de la division entière de m par n

% m % n reste (modulo) de la division entière de m par n

** m**n élévation de m à la puissance n (Verilog-2001)

<<< m <<< n décalage de n bits à gauche de m, complété par des zéros à droite.(Verilog-2001)

>>> m >>> n décalage de n bits à droite de m, complété par des zéros à gauche si m est non signé, par le poids
fort (signe) si m est signé. (Verilog-2001)

Délais

# # n instruction ; instruction est exécutée après le délai n. Le delai est un entier ou un réel, il n’y a pas à
préciser d’unité. (L’unité est définie par la directive timescale. )

# #n; introduit un délais de n unités de temps dans un bloc procédural.

Circuits combinatoire quelconque :

Circuit 1 : Décodeurs : « Chapitre I-Doc1-Page1 »

Code Verilog HDL :

module decod_7Seg(a,b,c,d,e,f,g,E0,E1,E2,E3);
input E0,E1,E2,E3;
output a,b,c,d,e,f,g;
assign a =~E1 & (~E0 & E2 | E0 & ~E2 & ~E3);
assign b = E2 & (E0 ^ E1);
assign c =~E0 & E1 & ~E2;
assign d = (E2 & (E0 ~^ E1)) | (E0 & ~E1 & ~E2 & ~E3);
assign e = E0 | (~E1 & E2);
assign f = (E0 & E1) | (E1 & ~E2) | (E0 & ~E2 & ~E3);
assign g = (~E1 & ~E2 & ~E3) | (E0 & E1 & E2);
endmodule;

3
Circuit 2 : Additionneur binaire : « Chapitre I-Doc1-Page3 »

1) Demi-additionneur :

module Demi_Add(S,r,A,B);

input A,B;
output S,r;

assign S = A ^ B;
assign r = A & B;

endmodule;

2) Additionneur complet

module Add_Comp(S,r_out,A,B,r_in);

input A,B,r_in;
output S,r_in;
wire s_1,r_1,r_2;

Demi_Add1(s_1,r_1,A,B);
Demi_Add2(S,r_2,s_1,r_in);
assign r_out = r_1 | r_2;

endmodule;

La décomposition de l'addition de deux nombres binaires de quatre bits.

module Add_4bit(S0,S1,S2,S3,r3,a0,a1, a2,a3,b0,b1,b2,b3);

input a0,a1,a2,a3,b0,b1,b2,b3;
output S0,S1,S2,S3,r3;
wire r0,r1,r2;

Demi_Add0(S0,r0,a0,b0);
Add_Comp1(S1,r1,a1,b1,r0);
Add_Comp2(S2,r2,a2,b2,r1);
Add_Comp3(S3,r3,a3,b3,r2);

endmodule;

Circuits Séquentielle quelconque :

Bascule RS asynchrone:

module bascul_rs (Q,Q_b,r,s);

input r,s;
output reg Q,Q_b;

always @(r , s )
begin
Q=~s & Q_b;
Q_b=~r & Q;
end
endmodule

4
Application Grafcet :

Les équations d’activation :

Les équations inactivation :

Sys_Auto :

module Sys_Auto (Q0,Q1,Q2,Q3,a,b,Da,Db);

input a,b,Da,Db;
output Q0,Q1,Q2,Q3;
wire S0,S1,S2,S3,R0,R1,R2,R3,Q0_b,Q1_b,Q2_b,Q3_b;

bascul_rs0 (Q0,Q0_b,R0,S0);
bascul_rs1 (Q1,Q1_b,R1,S1);
bascul_rs2 (Q2,Q2_b,R2,S2);
bascul_rs3 (Q3,Q3_b,R3,S3);

assign S0=Q3 & a; assign S1=Q0 & Da & a;


assign S2=Q1 & b; assign S3=Q2 & Db & b;

assign R0=~Q1_b; assign R1=~Q2_b;


assign R2=~Q3_b; assign R3=~Q0_b;

endmodule

5
Bascule D synchrone:

module bascul_D (Q,D,clk,reset);


input D,clk,reset;
output reg Q;

always @(posedge clk or posedge reset )


begin
if (reset == 1) Q <= 0;
else Q <= D;
end
endmodule

Registre de mémorisation 4 bits :

module Registre_4bit (S,E,clk,reset);


input clk,reset;
input [3:0] E;
output reg [3:0] S;
always @(posedge clk or posedge reset )
begin
if (reset == 1) S <= 0;
else S <= E;
end
endmodule

Compteurs synchrone « Chapitre I-Doc3-Page4 »»

6
module compt_synch (Q,clk,reset);
input clk,reset;
output reg [3:0] Q;
wire [3:0] D;

always @(posedge clk , posedge reset )


begin
if (reset == 1) Q <= 0;
else Q <= D;
end

assign D[0]=~Q[0];
assign D[1]=Q[0]^Q[1];
assign D[2]=( Q[0] & Q[1] & ~Q[2] ) | ( Q[2] & ( Q[0]|~Q[1]) );
assign D[3]=( Q[0] & Q[1] & ~Q[2] ) | ( Q[3] & ( ~Q[0]|~Q[1]|~Q[2]) );

endmodule

Vous aimerez peut-être aussi