Sei sulla pagina 1di 6

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.
A <= c nand d; process(CLK) begin if CLKevent 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

D Q

Loop combinatori
Vanno evitati SEMPRE i loop combinatori!
Il tool di sintesi riporta un errore Si darebbe luogo a bistabili/oscillatori!
D A

I loop combinatori vanno sempre interrotti con un D registro A


B next_B Q D
ARCES-LYRAS Lab University of Bologna

Segnali combinatori
Per permettere a Quartus di tracciare i segnali combinatori cos come sono descritti in VHDL, occorre definire lATTRIBUTO 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 luscita X non funzioni correttamente in simulazione! Che fare?
ciclo di clock Tn X valore atteso di X

Consideriamo la seguente rete (del tutto generale)


H G
ARCES-LYRAS Lab University of Bologna

E F RC1 D D Q

RC2 B C

A RC3 X

Quando le cose non vanno


H G RC1 E F D D Q C Ripercorrere da X allindietro 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

RC2 B

A RC3 X

Ad es. per la rete in figura


1.

A(Tn), B(Tn), C(Tn) E(Tn), F(Tn)

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)

2. 3.

calcolarsi RC2( E(Tn), F(Tn) ). Se questo valore differisce da A(Tn), il problema va ricercato in RC2 verificare che E(Tn) sia coerente con D(Tn-1) e i valori di EN e RES del registro

D(Tn-1), RES_REG, EN_REG

4. G(Tn-1), ARCES-LYRAS LabH(Tn-1) University of Bologna

calcolarsi RC1( G(Tn-1), F(Tn-1) ). Se questo valore differisce da D(Tn-1), il problema va ricercato in RC1

Potrebbero piacerti anche