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