Mno?enie liczb w kodzie U2

Mar 25, 2015 8 Replies

Witam,



Robię demodulator AM na FPGA i mam pewien dylemat przy miksowaniu. Mam dwie 12-to bitowe liczby ze znakiem (U2). Pakuję to do multiplikatora i na wyjściu generuje mi 24-bitowy iloczyn C=A*B. Problem jest w tym, że jedna z tych liczb, powiedzmy B=sin(omega*t) jest reprezentowana jako liczba 12-bitowa z zakresu <-2048,+2047>.Tymczasem wiadomo, że sinus jako funkcja przyjmuje wartości <-1,+1>. Na wyjściu tego miksera potrzebuję jednak tylko 12 bitów najbardziej znaczących. Które bity teraz z tych 24 wybrać? Gdyby to było w naturalnym kodzie binarnym, nie było by sprawy. A w U2, to mi się już samemu we łbie miksuje :))


Użytkownik napisał w wiadomości

I tu mamy pewien problem z liczba +1, ktora niewatpliwie wystepuje.

Jesli sygnal tez ma zakres +/-2047, to uzyteczny wynik masz na bitach

22:11 (z 23:0) 11 uzytecznych bitow jednej liczby plus 11 uzytecznych bitow z drugiej liczby daje nam 22 bity wyniku mnozenia (21:0).

Ale znak tez jest uzyteczny i trzeba go w wyniku zawrzec. A on sie w U2 duplikuje na dwoch najstarszych bitach. Tylko trzeba przemyslec co z tym +/-1, czy jak kto woli 2048.

A w ogole to w FPGA mozesz sobie jakis ciekawszy multiplikator zrobic - np taki co policzy wynik 12 bit i to beda od razu najstarsze bity. Albo w ogole znaki osobno policzy...

J.

Co drugi... ;-) Jeżeli masz k*sin(t)*A, to przez jakie k należy podzielić?

Zrób tak, by Twój sinus przyjmujował wartości wartości z przedziału (-1,1), np. mnożąc go przez 0,999..9 i problem będzie trywialny: górne 12 bitów.

Pozdrawiam, Piotr

Pozbyć się przez skalowanie.

Ale po co, skoro dziś standardem są gotowe sprzętowe bloki mnożące 18x18 bitów?

Pozdrawiam, Piotr

W dniu środa, 25 marca 2015 15:49:12 UTC+1 użytkownik J.F. napisał:

Jakby się dało, to bym Ci wysłał mejlem dużego browara. Działa! Dzięki!

Jak po co? Sygnał z ADC mam 12-to bitowy i tyle. A generator IP i tak wykorzystuje te sprzętowe multiplikatory 18x18.

Po co Jarek chce to rzeźbić ręcznie, skoro ma makroblok...

Toteż...

Pozdrawiam, Piotr

Zeby mozna bylo uzyc tanszej kosci, zeby mniej pradu zzeralo, zeby te multpikatory do wazniejszych zadan wykorzystac itp :-)

Mnozenie zmiennoprzecinkowych robi sie nieco inaczej niz calkowitych, o ile oczywiscie Stachowi to odpowiada.

J.

Nawet najtańsze Spartany to mają, to dziś standard.

Pajęczynka z logiki programowalnej od _sprzętowego_ bloku mnożącego przy porównywalnej liczbie bitów? :-)

Ale ich jest dużo... :-)

Akurat mnożenie to się robi tak samo (+suma wykładników), to z dodawaniem i odejmowaniem są problemy, bo trzeba wyrównywać mantysy.

Pozdrawiam, Piotr

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required