Pagina 1 di 2

Calcolo logaritmo in VHDL

MessaggioInviato: 18 ago 2014, 15:28
da baudy
Ciao ragazzi, vorrei sapere se e come è possibile realizzare la funzione log in VHDL per implementazione su FPGA.
Il mio problema è che devo mandare in ingresso ad una FPGA dei segnali quantizzati in modo uniforme da matlab ma poi avrei bisogno di lavorare in dBm per il processing. In pratica avrei in ingresso i valori di tensione e dovrei lavorare in dBm per comodità, è possibile e conveniente una cosa del genere in VHDL?

Re: calcolo logaritmo in VHDL

MessaggioInviato: 18 ago 2014, 16:00
da gill90
Ciao,
per evitare complicazioni direi di spostare il problema a monte: puoi usare un amplificatore logaritmico con il seguente schema



In questo circuito la relazione ingreso uscita è V_o=-V_{th}\ln(\frac{V_i}{RI_s}), dove V_{th} è la ben nota \frac{KT}{q}\approx 26mV a temperatura ambiente e I_s è la corrente di saturazione inversa del diodo. Potrebbe fare al caso tuo?

Re: calcolo logaritmo in VHDL

MessaggioInviato: 18 ago 2014, 17:20
da boiler
La risposta dipende un po' dalle condizioni di contorno...

Potresti calcolare il logaritmo in base 2 semplicemente determinando quale è il bit piú a sinistra con valore 1. Questo ti dà un'approssimazione all'intero inferiore del logaritmo.

Devi poi prendere il resto è scalarlo in modo che vada sempre a finire in un intervallo definito e applicare una LUT.

A questo punto scalare il logaritmo di 2 al logaritmo che piú ti fa comodo è questione di una moltiplicazione.

Oppure, se il numero di bits non è eccessivo, vai di forza bruta e usa per tutto quanto una LUT.

C'è IEEE.math_real e potresti essere tentato di usarla :cool:
Va bene per calcolare per esempio i generics quando compili, ma non è sintetizzabile, quindi non fa al caso tuo.

Ciao Boiler

Re: Calcolo logaritmo in VHDL

MessaggioInviato: 19 ago 2014, 10:45
da baudy
il mio problema è proprio quello di passare da volt in dBm perché gli algoritmi a valle lavorano con i livelli in dB. L'amplificatore logaritmico è gia modellato a monte ma il problema principale è proprio la conversione volt dBm ma da come ho capito non è una soluzione ottimale.
PS: il numero di bit è 10/16 al max

Re: Calcolo logaritmo in VHDL

MessaggioInviato: 19 ago 2014, 10:52
da boiler
baudy ha scritto:PS: il numero di bit è 10/16 al max


Se hai posto, vai di LUT.

Boiler

Re: Calcolo logaritmo in VHDL

MessaggioInviato: 19 ago 2014, 11:00
da baudy
vediamo se ho capito quello che intendete:
io esco da matlab con i quanti segnale (1024 oppure 65536 livelli) poi genero un'array con i valori di conversione quanti dBm e li memorizzo in una tabella in memoria?
Non essendo molto pratico ancora di VHDL e FPGA non mi rendo conto se questi possano essere valori troppo elevati da memorizzare potreste darmi voi un parere; dovrei lavorare su una stratix 3 di Altera.

Re: Calcolo logaritmo in VHDL

MessaggioInviato: 19 ago 2014, 11:21
da boiler
Ho sempre lavorato con Xilinx, non conosco le Altera Stratix, ma a naso direi che dovrebbe starci. Ad ogni modo lo vedi quando fai il build del tuo progetto, alla fine vedi le percentuali di risorse occupate sulla FPGA.

Non instanziare una RAM per poi caricarci i valori. Definiscili fissi nel tuo codice VHDL, in questo modo dai la possibilità al compiler di fare delle ottimizzazioni.

Usa un case-statement:

Codice: Seleziona tutto
case Quanto is
  when "0000000000" => DbmSignal <= x;
  when "0000000001" => DbmSignal <= y;
  when others => DbmSignal <= z;
end case;


Questo è un esempio per il caso che il quanto abbia 10 bit.
Puoi togliere l'assegnazione per il caso others se sei sicuro di aver coperto tutti gli altri casi, altrimenti non sintetizzi correttamente!
Adatta i valori assegnati a quello che hai calcolato, compatibilmente con il tipo di DbmSignal.
Per non impestare il codice, metti il tutto in un processo, che infilerai in un'entità (io la chiamerei DbmConverter, o qualcosa del genere). Questa la instanzierai poi nel tuo codice principale come black-box e non dovrai piú curarti di quello che succede al suo interno.

Saluti Boiler

Re: Calcolo logaritmo in VHDL

MessaggioInviato: 19 ago 2014, 11:27
da baudy
ma questo vorrebbe dire però istanziare tutto a mano? cioè finché sono 10 bit ok ma per 16 bit dovrei scrivere 65000 combinazioni?
Io intendevo creare in matlab due array con una semplice formula di conversione e copiarla in memoria

Re: Calcolo logaritmo in VHDL

MessaggioInviato: 19 ago 2014, 11:53
da baudy
Da quanto vedo sei molto esperto in materia per cui magari puoi darmi un suggerimento su come inviare i dati da matlab alla scheda, soprattutto come cacciare il livello dei quanti in formato a 10 bit. Poiché di certo matlab utilizzerà un formato suo fissato per elaborazione dati per cui io dovrei in qualche modo forzare i dati in strutture predefinite (registri) a 10 o 16 bit.

Re: Calcolo logaritmo in VHDL

MessaggioInviato: 19 ago 2014, 12:27
da boiler
Si può fare sia in matlab, sia in C, ed è una cosa rapida rapida.
Con la funzione fprintf all'interno di un loop for puoi generarti direttamente il codice!

Boiler