Aggiornato il 30/07/2007

 

 

Convertitore numerico VHDL

 

 

E’ comune in VHDl trovare assegnazioni con sfilate di uno e zero del tipo XY <= “010110101010”;

Questo è dovuto alla assoluta rigidità di tipizzazione del linguaggio: le conversioni spesso sono difficili e il linguaggio pretende per l’esadecimale il modulo 4.

Esiste la possibilità di superare la cosa con l’uso delle librerie ma per molti il fatto è oscuro. Come del resto molte cose del VHDL.

 

Stufo di vedere gente che lo faceva mi sono scritto una stupidissima funzione che converte da/a senza troppe storie.

Notare che occorre modificare il codice nel caso di uso di size diversi; potevo superare anche questo ma non ho voluto perdere tempo.

Il codice proposto è proprio quello che mandai a suo tempo in una email agli utilizzatori compreso i commenti.

 

--

-- Conversione hex da 20bit a 18 bit

-- cambiare gli indici per altre conversioni

-- si può automatizzare ma non mi garba

-- meglio passare al Verilog J

--

 function Ct18 (src:bit_vector (19 downto 0)) return bit_vector is

  variable uscita: bit_vector(17 downto 0);

 begin

  for i in uscita'range loop

   case src(i) is

     when '0' => uscita(i) := '0';

     when '1' => uscita(i) := '1';

   end case;

  end loop;

       return uscita;

 end;

 

 

esempio d’uso:    addr18 <= Ct18(X"50A06");

 

Dove addr18 è un bus a 18 bit poco trattabile dal VHDL ma normale in molte architetture.

 

 

 

 

 

Torna all’indice


Paolo Lavacchini 

 

Descrizione: Descrizione: http://www.lsoft.it/maily.gif