Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Calcolo logaritmo in VHDL

Telefonia, radio, TV, internet, reti locali...comandi a distanza

Moderatore: Foto Utentejordan20

0
voti

[1] Calcolo logaritmo in VHDL

Messaggioda Foto Utentebaudy » 18 ago 2014, 15:28

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?
Avatar utente
Foto Utentebaudy
28 4
New entry
New entry
 
Messaggi: 85
Iscritto il: 24 dic 2013, 13:28

1
voti

[2] Re: calcolo logaritmo in VHDL

Messaggioda Foto Utentegill90 » 18 ago 2014, 16:00

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?
Avatar utente
Foto Utentegill90
4.146 3 7 12
G.Master EY
G.Master EY
 
Messaggi: 1134
Iscritto il: 1 set 2011, 16:18

0
voti

[3] Re: calcolo logaritmo in VHDL

Messaggioda Foto Utenteboiler » 18 ago 2014, 17:20

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
Avatar utente
Foto Utenteboiler
26,4k 5 9 13
G.Master EY
G.Master EY
 
Messaggi: 5602
Iscritto il: 9 nov 2011, 12:27

0
voti

[4] Re: Calcolo logaritmo in VHDL

Messaggioda Foto Utentebaudy » 19 ago 2014, 10:45

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
Avatar utente
Foto Utentebaudy
28 4
New entry
New entry
 
Messaggi: 85
Iscritto il: 24 dic 2013, 13:28

0
voti

[5] Re: Calcolo logaritmo in VHDL

Messaggioda Foto Utenteboiler » 19 ago 2014, 10:52

baudy ha scritto:PS: il numero di bit è 10/16 al max


Se hai posto, vai di LUT.

Boiler
Avatar utente
Foto Utenteboiler
26,4k 5 9 13
G.Master EY
G.Master EY
 
Messaggi: 5602
Iscritto il: 9 nov 2011, 12:27

0
voti

[6] Re: Calcolo logaritmo in VHDL

Messaggioda Foto Utentebaudy » 19 ago 2014, 11:00

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.
Avatar utente
Foto Utentebaudy
28 4
New entry
New entry
 
Messaggi: 85
Iscritto il: 24 dic 2013, 13:28

0
voti

[7] Re: Calcolo logaritmo in VHDL

Messaggioda Foto Utenteboiler » 19 ago 2014, 11:21

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
Avatar utente
Foto Utenteboiler
26,4k 5 9 13
G.Master EY
G.Master EY
 
Messaggi: 5602
Iscritto il: 9 nov 2011, 12:27

0
voti

[8] Re: Calcolo logaritmo in VHDL

Messaggioda Foto Utentebaudy » 19 ago 2014, 11:27

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
Avatar utente
Foto Utentebaudy
28 4
New entry
New entry
 
Messaggi: 85
Iscritto il: 24 dic 2013, 13:28

0
voti

[9] Re: Calcolo logaritmo in VHDL

Messaggioda Foto Utentebaudy » 19 ago 2014, 11:53

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.
Avatar utente
Foto Utentebaudy
28 4
New entry
New entry
 
Messaggi: 85
Iscritto il: 24 dic 2013, 13:28

0
voti

[10] Re: Calcolo logaritmo in VHDL

Messaggioda Foto Utenteboiler » 19 ago 2014, 12:27

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
Avatar utente
Foto Utenteboiler
26,4k 5 9 13
G.Master EY
G.Master EY
 
Messaggi: 5602
Iscritto il: 9 nov 2011, 12:27

Prossimo

Torna a Telecomunicazioni

Chi c’è in linea

Visitano il forum: Nessuno e 12 ospiti