University of Bologna ARCES-LYRAS Lab Alcuni Accorgimenti per lo Sviluppo in VHDL Elettronica dei Sistemi Digitali L-A Aldo Romani
ARCES-LYRAS Lab University of Bologna 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 process; A <= e or f; Multiple drivers D Q A
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! I loop combinatori vanno sempre interrotti con un registro D Q A B C D A B C D next_B
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? Consideriamo la seguente rete (del tutto generale) X ciclo di clock Tn valore atteso di X RC3 X A B RC2 D Q RC1 C D H G E F
ARCES-LYRAS Lab University of Bologna Quando le cose non vanno 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 T n Quando X dipende da valori generati da registri, visualizzare i segnali combinatori in ingresso a questi registri nel ciclo di clock T n-1. Verificare le dipendenze combinatorie Ad es. per la rete in figura 1. A(T n ), B(T n ), C(T n ) calcolarsi RC3( A(T n ), B(T n ), C(T n ) ). Se questo valore differisce da X, il problema va ricercato in RC3 (cioè nel PROCESS, o nello statement, o nel COMPONENT) 2. E(T n ), F(T n ) calcolarsi RC2( E(T n ), F(T n ) ). Se questo valore differisce da A(T n ), il problema va ricercato in RC2 3. D(T n-1 ), RES_REG, EN_REG verificare che E(T n ) sia coerente con D(T n-1 ) e i valori di EN e RES del registro 4. G(T n-1 ), H(T n-1 ) calcolarsi RC1( G(T n-1 ), F(T n-1 ) ). Se questo valore differisce da D(T n-1 ), il problema va ricercato in RC1 RC3 X A B RC2 D Q RC1 C D H G E F