Documente Academic
Documente Profesional
Documente Cultură
05 Aspecte Legate de Sinteza1
05 Aspecte Legate de Sinteza1
5. Aspecte legate de
Sintez
Slide 2
Slide 3
RAM, ROM,
Circuite aritmetice (ADD, MUL)
MAC (Multiply-Accumulate), adic slice-uri DSP
Automate secveniale
Exist i componente BLACK-BOX! Ex. Microblaze, Ethernet etc
Slide 4
Slide 5
Slide 6
De evitat n atribuirile
procedurale (always)
(Adica ce sa NU facei n
codul Verilog!)
Avertismente de Sintez
Slide 7
PROCESE COMBINAIONALE:
Slide 8
Exemplu:
module NU_ASA(
input A, input B,
input SEL,
output reg Q);
always @ (A or B or SEL)
if (SEL) Q<=A;
endmodule
CAT VA FI VALOAREA LUI Q DACA SEL=0?
Sintetizatorul nu poate determina valoarea lui Q la SEL=0. n
concluzie:
VA REINE VALOAREA LUI Q!!! (implicit n proces consider
else Q<=Q;)
DECI: VA INFERA LATCH TRANSPARENT!
A INFERA A GENERA, A RECUNOATE
Slide 9
Exemplu:
module CORECT1(
input A, input B,
input SEL,
output reg Q);
always @ (A or B or SEL)
Q <=B;
if (SEL) Q<=A;
endmodule
SEMNALELE SE ATRIBUIE LA TERMINAREA
PROCESULUI! (Valoarea lor poate fi citita doar dupa
executia procesului)
In acest caz: pentru codul de mai sus, XST POATE
DETERMINA VALOAREA LUI Q DACA SEL=0, DECI, VA
INFERA MULTIPLEXOR!
module CORECT2(
input A, input B,
input SEL,
output reg Q);
always @ (A or B or SEL)
if (SEL) Q<=A;
else Q <= B;
endmodule
Pentru a descrie logic mai simpla, folosi i assign!
Descrierea e mai scurt
La atribuire incomplet, syntax checker genereaz
eroare: assign Q = (SEL==1) ? A;
Slide 10
module AND_2(
input A, input B,
output reg F);
always @ (A or B)
if (A&&B) F<=1;
else F <= 1; //Trebuia 0!
endmodule
Sintetizatorul MINIMIZEAZ!
Slide 11
Slide 12
Sintetizatorul MINIMIZEAZ!
n general:
Pentru o intrare care nu este CITIT, nu este folosit, se
genereaz avertisment de ctre sintetizator:
WARNING:Xst:647 - Input <B> is never used.
Observaie: Citire nseamn i if (B)., i if (B==1)
nu numai Semnal <= B;
Pentru o ie ire care NU se schimb:
Se genereaz avertisment de ctre sintetizator:
WARNING:Xst:xxxx Output Q never changes
during circuit operation. Q is connected to VCC (sau
GND)
Sau:
WARNING:Xst:xxxx Output Q is constant
Sau:
WARNING:Xst:xxxx The register/latch FDXX hinder
the constant Q cleaning in line XX
Slide 13
Sintetizatorul MINIMIZEAZ!
WARNING:Xst:xxxx The register/latch FDXX hinder the
constant Q cleaning in line XX
Poate aprea n cazul n care Q este iniializat la o anumit
valoare, apoi este setat constant la o alt valoare dect cea
iniial
Exemplu:
reg Q = 0;
always @ (posedge CLK) //chiar i la procese secveniale,
//deoarece Q nu se va schimba, doar o singur dat, adica
la //primul front de tact!
Q <=1;
Q va fi 0 la nceput, apoi dup primul front de tact devine 1
constant
Slide 14
Slide 15
Slide 16
Slide 17
Slide 18
Slide 19
PROCESE COMBINAIONALE:
NU FACEI:
1. ATRIBUIRI INCOMPLETE n Procese Combinaionale
2. Excluderi de semnale pe baza LISTEI DE
SENZITIVITATE
3. Bucle Combinaionale
. ...De ce nu a fost excluse din syntax checker? 1. 2. 3.
Slide 20
Slide 21
Slide 22
n timpul sintezei:
WARNING:Xst:819 - c:/temp/test1/combinational.v line 21: The following
signals are missing in the process sensitivity list:
RECOMANDARE: TOATE SEMNALELE CARE SUNT CITITE N PROCES,
S FIE INTRODUSE N LISTA DE SENZITIVITATE,
Slide 23
PROCESE COMBINAIONALE:
NU FACEI:
1. ATRIBUIRI INCOMPLETE n Procese Combinaionale
2. Excluderi de semnale pe baza LISTEI DE
SENZITIVITATE
3. Bucle Combinaionale
. ...De ce nu a fost excluse din syntax checker? 1. 2. 3.
Slide 24
Exemplu:
module Test(
input [3:0] A,
output reg [3:0] Q);
always @ (A or Q)
Q<=Q + A; //bucla de reactie combinationala
Slide 25
Q<=Q + A;
NS: n cazul unui cod mai lung?
always @ (A or B or C) begin
A<= B &
end
.
always @ (B or Q or C) begin
B<= Q | C |
end
always @ (Q or A or C) begin
..
if (A==) Q<= .
end
.
Slide 26
Slide 27