Alcuni Accorgimenti per lo
Sviluppo in VHDL
Elettronica dei Sistemi Digitali L-A
Aldo Romani
University of Bologna
ARCES-LYRAS Lab
Multiple drivers


Vanno evitati assolutamente i MULTIPLE DRIVERS di un segnale!

Quando lo stesso segnale viene pilotato da più oggetti il risultato è
indeterminato

Il tool segnala errore
Ad es.
D Q
A <= c nand d;
process(CLK)
A
begin
if CLK’event and CLK = ‘1’ then
if RES=‘1’ then A<= ‘0’;
else A <= c;
end if;
end if;
end process;
A <= e or f;
ARCES-LYRAS Lab
University of Bologna
Loop combinatori

Vanno evitati SEMPRE i loop combinatori!

Il tool di sintesi riporta un errore

Si darebbe luogo a bistabili/oscillatori!
D
A
B

C
I loop combinatori vanno sempre interrotti con un
D
registro
A
B
next_B
Q D
ARCES-LYRAS Lab
University of Bologna
C
Segnali combinatori

Per permettere a Quartus di tracciare i segnali
combinatori così come sono descritti in VHDL,
occorre definire l’ATTRIBUTO VHDL syn_keep per
ogni segnale di interesse.
architecture A of my_entity is
signal current_value, next_value: unsigned(7 downto 0);
signal end_count: std_logic;
attribute syn_keep : boolean;
attribute syn_keep of next_value : signal is true;
attribute syn_keep of end_count : signal is true;
begin
[…]
ARCES-LYRAS Lab
University of Bologna
Quando le cose non vanno
Supponiamo che l’uscita X non funzioni
correttamente in simulazione! Che fare?

ciclo di clock Tn
valore atteso di X
X

Consideriamo la seguente rete (del tutto
generale)
E
F
H
G
RC1
D
A
RC2
B
D Q
C
ARCES-LYRAS Lab
University of Bologna
RC3
X
Quando le cose non vanno
E
F
H
G
RC1
D
A
RC2
B
RC3
X
D Q
C

Ripercorrere da X all’indietro la sequenza di generazione dei segnali




Visualizzare nel simulatore i segnali combinatori da cui dipende il segnale X nel
ciclo di clock Tn
Quando X dipende da valori generati da registri, visualizzare i segnali combinatori
in ingresso a questi registri nel ciclo di clock Tn-1.
Verificare le dipendenze combinatorie
Ad es. per la rete in figura
1.
A(Tn), B(Tn), C(Tn) 
2.
E(Tn), F(Tn)  calcolarsi RC2( E(Tn), F(Tn) ). Se questo valore differisce da A(Tn), il
calcolarsi RC3( A(Tn), B(Tn), C(Tn) ). Se questo valore differisce da X, il
problema va ricercato in RC3 (cioè nel PROCESS, o nello statement,
o nel COMPONENT)
problema va ricercato in RC2
3.
D(Tn-1), RES_REG, EN_REG 
4.
G(Tn-1Lab
), H(Tn-1)
ARCES-LYRAS
University of Bologna
verificare che E(Tn) sia coerente con D(Tn-1)
e i valori di EN e RES del registro
 calcolarsi RC1( G(Tn-1), F(Tn-1) ). Se questo valore differisce da D(Tn-1),
il problema va ricercato in RC1
Scarica

Accorgimenti_vhdl