Sei sulla pagina 1di 2

HINTS_ON__rd_io_logic.

c 27/03/2020

// Appunti sulla gestione dei segnali in uscita del blocco RD_IO_LOGIC:


// 27/03/2020

// La parte finale del "Discrete Update" del blocco RD_IO_LOGIC su cui


occorre fare attenzione viene riportata
// qui sotto:

xD[6] = xD[0]; // A
xD[7] = xD[2]; // B
xD[0] = (int)shift_idx_rd;
xD[1] = (int)shift_counter_rd;
xD[2] = (char)(rd_bits_out_masked);
xD[3] = (char)(rd_en);
xD[4] = idx_LUT_MASK_OUT;
xD[5] = idx_LUT_IO;
xD[8] = counter_x_LUT_rd;

if ((EN[0] == 0))// && (masking_pending == 0))


{
if (masking_pending == 1)
masking_pending = 0;
else
{
xD[6] = xD[0]; // C
xD[7] = xD[2]; // D

}
}

// COSA FA E COME SI GESTISCE QUESTO IF (da riga 17 a riga 27) IN VHDL?

// Controlla, nel caso che EN sia a zero, se effettivamente i segnali da


dare in output
// (xD[6] ed xD[7], che sono rispettivamente: reg_idx_rd[0] e MASK_OUT[0],
{si vede dalla sezione di Output della S-Function}) siano:
//
// * quelli assegnati sopra (A,B) in cui xD[0] e xD[2] sono segnali
interni, in vhdl, che chiameremo ad esempio (shift_idx_rd_d e
rd_bits_out_masked_d)
// e che tengono il valore del colpo di clock (ancora) precedente,
// OPPURE:
// ** quelli il cui valore xD[0], e xD[2] e' stato appena aggiornato
(quindi shift_idx_rd e rd_bits_out_masked)
//

// Come si potrebbe risolve in VHDL ?

// La maniera piu' "elegante" secondo me e':

// 1) Crearsi DUE variabili, che chiameremo ad esempio: reg_idx_rd_var (che


sara' xD[6]) e MASK_OUT_var (che sara' xD[7])

// 2) Procedere all'assegnazione delle variabili, in testa:


// quindi sostituire le righe // A e //B con:
// reg_idx_rd_var := xD[0] (ossia, se in vhdl, xD[0] e' il segnale
shift_idx_rd_d => reg_idx_rd_var := shift_idx_rd_d )
// MASK_OUT_var := xD[2] (ossia, se in vhdl, xD[2] e' il segnale
rd_bits_out_masked => MASK_OUT_var := rd_bits_out_masked_d )

// 3) Scrivere le assegnazioni delle variabili nel ciclo "else" dell'if di


sotto (vedi // C e // D) con i segnali in **
// ossia
// // C reg_idx_rd_var := shift_idx_rd
// // D MASK_OUT_var := rd_bits_out_masked

// 4: Assegnare finalmente queste variabili ai veri segnali di uscita,

1
HINTS_ON__rd_io_logic.c 27/03/2020

xD[6] ed xD[7], ossia:

// reg_idx_rd[0] <= reg_idx_rd_var;


// MASK_OUT[0] <= MASK_OUT_var;

// P.S. Non essendo un esperto di VHDL, spero che:


// - Non abbia scritto cavolate
// - Non ti abbia confuso ulteriormente

// Comunque il "messaggio" che vorrei trasmettere e' quello di ragionare ed


utilizzare la testa su situazioni analoghe a queste,
// qualora si dovessero (ri)presentare.

// cicu :-)