Sunteți pe pagina 1din 27

Slide 1

5. Aspecte legate de
Sintez

Sintetizatorul (Synthesis Tool):

Slide 2

1. Verific corectitudinea ierarhiei codurilor HDL:


Conexiuni la porturi nepermise (de ex. Output la Output)
Dimensiunile porturilor care se conecteaz
Atenie, assign de dimensiuni diferite e permis, conexiune nu e permis!
La assign: fiecare sintetizator aliniaz dup propriul stil la stnga sau
dreapta
Atribuiri de semnal multiple (vezi: Error: Multi-Source Unit on Q_Cnt<3> etc)
Dac oricare dintre verificrile de mai sus eueaz, atunci ERROR
Dac trece, continu

2. Flatten sau pstreaz ierarhia:


Depinde de opiunile de sintetizare

3. Transform codurile HDL ntr-o schem (descris mai departe n


HDL!) format din pori logice i regitri:
Un pic mai detaliat

Sintetizatorul (Synthesis Tool):

Slide 3

3. Transform codurile HDL ntr-o schem (descris mai departe n


HDL!) format din pori logice i regitri:
Aceast descriere se numete RTL (REGISTER TRANSFER LEVEL)
Teoretic, este portabil. Practic, pot exista specifica ii de target (FGPA
Xilinx dintr-o anumit familie, sau Altera Actel, Asic etc)
Exemplu: XST (Xilinx Synthesis Tool), respectiv Vivado Synthesis Tool
recunosc (Infer, adic face Inference) n mod automat coduri de:
Regitri i de deplasare
Numrtoare

RAM, ROM,
Circuite aritmetice (ADD, MUL)
MAC (Multiply-Accumulate), adic slice-uri DSP
Automate secveniale
Exist i componente BLACK-BOX! Ex. Microblaze, Ethernet etc

Toate aceste componente sunt automat optimizate pentru tehnologia int


(mai pe englezete: Target Technology
Exist opiuni de sintez care pot invalida inferena anumitor componente

Sintetizatorul (Synthesis Tool):

Slide 4

3. Transform codurile HDL ntr-o schem (descris mai departe n


HDL!) format din pori logice i regitri:
Alte instrumente de sintez mai cunoscute:
Leonardo Spectrum (Preluat de Menthor Graphics)
Synopsis Cadence etc.
Unele pot infera chiar i DIVIZOARE, sau uniti pe virgul
flotant (FLOAT32)!
Transform codurile HDL ntr-o schem (descris mai departe n HDL!)
format din pori logice i regitri RTL

Sintetizatorul (Synthesis Tool):

Slide 5

4. MINIMIZEAZ codul HDL:


NU E VORBA NUMAI DE MINIMIZARE Karnaugh/Veitch sau pe arbore
binar!
Intrrile NECONECTATE la un modul sunt automat legate la GND
Intrrile NEFOLOSITE n cod sunt automat terse
Ce nseamn intrare nefolosit vs. neconectat?
Ieirile NECONECTATE sunt terse

Ieirile NEATRIBUITE sunt terse


Semnalele CITITE, dar NEATRIBUITE, sunt conectate la GND
Semnalele ATRIBUITE, dar NECITITE sunt terse
Constantele ascunse: Warning, dar pstrate
Vezi Warning pentru fiecare caz:
Cnd nu ne intereseaz (prea mult) Warning? i cnd da?
Vezi exemple

Slide 6

De evitat n atribuirile
procedurale (always)
(Adica ce sa NU facei n
codul Verilog!)
Avertismente de Sintez

Slide 7

PROCESE COMBINAIONALE:

Nu Facei (DO NOT):


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

1. ATRIBUIRI INCOMPLETE n 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

1. ATRIBUIRI INCOMPLETE n Procese Combinaionale:

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!

1. Atribuiri Incomplete n Procese Combinaionale:


LA FEL SI IN CAZUL DE MAI JOS (VARIANTA MAI
CUNOSCUT)
Exemplu:

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

1. Atribuiri Incomplete n Procese Combinaionale:


Este atribuire incomplet i urmtoarea atribuire!
Exemplu:

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

1. Atribuiri Incomplete n Procese Combinaionale:

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

1. Atribuiri Incomplete n Procese Combinaionale:

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

1. Atribuiri Incomplete n Procese Combinaionale:

Slide 14

Atribuirile de mai sus sunt simple, i greeala


(atribuirea incomplet) e uor vizibil
Dar n cazul n care ai folosi instruciuni if pe mai
multe nivele?
Exemplu:
always @ * begin
if (A)
if (B) begin
if ( C ) Q<=3b010;
end
else Q <=3b000; //la care if este atribuit else?
//ce se ntmpl dac C = 0? - LATCH
else if (B) Q<=3b111;
else if .
Mai bine: concatenat A, B, C ntr-o magistral i descris
cu assign sau cu case

1. Atribuiri Incomplete n Procese Combinaionale:

Slide 15

Atribuiri incomplete pot aprea frecvent n


instruciuni CASE
Exemplu: logica de tranziii a unui automat
secvenial
always @ * begin
case (StC) // Adic Starea Curent
Idle: if (In1) StN <= St1;
else StN <= Idle;
St1: if (!In1) StN <=St2; //DE AICI A FOST UITAT ELSE!
//VA REZULTA LATCH PENTRU StN
St2: StN <= St3;
St3: if (In2) StN <= St2;
else StN <= Idle;
endcase

1. Atribuiri Incomplete n Procese Combinaionale:

Slide 16

Atribuiri incomplete pot aprea frecvent n


instruciuni CASE
Soluie care rezolv problema i asigur scriere
mai compact
always @ * begin
StN <= StC; // by default, automatul secvenial rmne
// n starea curent
case (StC)
Idle: if (In1) StN <= St1;
St1: if (!In1) StN <=St2;
St2: StN <= St3;
St3: if (In2) StN <= St2; //aici e bifurcaie, este nevoie de else
else StN <= Idle;
default: StN <= Idle; // default NU REZOLV PROBLEMA
// ATRIBUIRILOR INCOMPLETE!! AJUT DOAR LA
// IMPLEMENTAREA SAFE A AUTOMATULUI SECVENIAL!
endcase

1. Atribuiri Incomplete n Procese Combinaionale:

Slide 17

Pot duce la INFERENA DE LATCH NEDORIT


LATCH INFERAT:
Este un motiv principal pentru care simularea
behavioral poate indica valori dorite, iar cel
post-route NU (post-route Mai Real)
Sintetizatorul genereaz avertisment:
WARNING:Xst:xxxx Found x-bit latch for the
signal StN
Motiv: LATCH este asincron prin definiie. XST
nu sprijin circuitele asincrone.
Dac intenia proiectantului era de a genera
latch, atunci avertismentul poate fi ignorat

Dac nu, atunci trebuie revizuit codul

Observaie: Atribuiri Incomplete n Procese


Secveniale:
Exemplu:

Slide 18

always @ (posedge CLK)


if (Reset) Q <= 0;
else if (CE) Q<=Q+1;
Ce se ntmpl dac Reset = 0 i CE = 0?
Numrtorul va sta, adic i va menine starea
Astfel pentru Q nu se va genera Latch, deoarece oricum se
genereaz registru (Bistabil D de un bit)
Atribuirile incomplete sunt permise n procesele
secveniale ele sunt folosite pentru a descrie clar rolul
semnalului (semnalelor) de tip Clock Enable

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

Excluderi de semnale pe baza LISTEI DE SENZITIVITATE


Atentie! NU folosii lista de senzitivitate pentru excluderea unui
semnal!
Exemplu: Dorim s citim valoarea unui semnal DOAR cnd se
schimb un alt semnal: (Valoarea lui B s se citeasc doar cnd A
se schimb)
always @ (A or C) //Procesul nu se declan eaz
//cnd B se schimb
Q<=(!C) | (A AND B);
Rezultatul Simulrii Behavioral:

B=0, i totui Q=1


SE POATE INS PRACTIC REALIZA UN ASTFEL DE CIRCUIT? FR
ELEMENT DE MEMORARE (adic BISTABIL)?

Slide 21

Excluderi de semnale pe baza LISTEI DE SENZITIVITATE


Atenie! NU folosii lista de senzitivitate pentru excluderea unui semnal!
Exemplu: Dorim s citim valoarea unui semnal DOAR cand se schimb
un alt semnal: (Valoarea lui B s se citeasc doar cnd A se schimb)

always @ (A or C) //Procesul nu se declan eaz


//cnd B se schimb
Q<=(!C) | (A & B);
Rezultatul Sintezei:

Rezultatul Simulrii Post-Translate

Slide 22

Excluderi de semnale pe baza LISTEI DE SENZITIVITATE


Atenie! NU folosii lista de senzitivitate pentru excluderea unui semnal!
Exemplu: Dorim s citim valoarea unui semnal DOAR cand se schimb
un alt semnal: (Valoarea lui B s se citeasc doar cnd A se schimb)

always @ (A or C) //Procesul nu se declan eaz


//cnd B se schimb
Q<=(!C) | (A & B);
Rezultatul Sintezei:

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,

conditie NECESAR ca simularea Behavioral s


corespund cu simularea Post-PAR

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.

Bucle de reacie n procesele combinaionale

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

Procesul ruleaza n bucl infinit (dup terminare, se modific Q,


deci se lanseaz din nou).
Daca A nu este 0, atunci Q ajunge imediat la valoarea maxima.
Simulatorul n simulare Behavioral genereaz eroare
Procesul ns ESTE SINTETIZABIL, chiar fara warning!!!
Circuitul generat ns nu poate fi utilizat (bistabil ascuns ?)
Simularea Post-Translate i Post-Place and Route nu poate
determina valoarea lui Q: indic valoare necunoscuta (XXXX)

EVITAI BUCLELE COMBINAIONALE !!!

Bucle de reacie n procesele combinaionale

Slide 25

Oricine evit un cod vizibil ca i mai jos:

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
.

ncercai s descriei logica CLAR, ca s evita i Buclele


Combinaionale!

Bucle de reacie n procesele combinaionale

Slide 26

Observaie: Bucla poate fi realizat n proces secvenial. Astfel se infer regitri


pentru pstrarea valorii lui Q:

always @ (posedge CLK) begin


Q<=Q + A;
Rezultatul sintezei:

Rezultatul simulrii behavioral i post-translate: numrtor cu incrementarea


A

Slide 27

Review (Ce gsii n prezentarea curent?)


Procese Combinaionale
Ce s EVITAI?
1. ATRIBUIRILE INCOMPLETE
2. EXCLUDERI DE SEMNALE PE BAZA LISTEI
DE SENZITIVITATE
3. BUCLE COMBINAIONALE

S-ar putea să vă placă și