Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Floating point in Motorola 56300
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Jools
Привет.

Пользуюсь исходниками программы под Motorola 56300. Самому лень искать да и время нету. Может кто подскажет алгоритм перевода чисел с плавающей точкой от этого проца в нормальный (человеческий) вид. Ну или хотя бы pdf с описанием формата чисел с плавающей точкой для этого проца.


Большое спасибо.
Jools
Вопрос еще актуальный.
Неужели никто не работал с данной серией процов?
Wild
96002 использовал вот этот стандарт http://steve.hollasch.net/cgindex/coding/ieeefloat.html
56300 наверно такой же.
Jools
К сожалению, у него свой формат, а не стандартный, на который Вы указали.
И с налету, я не могу найти по этому процу информацию.
С DSPшниками никогда не работал - не знаю где искать.
ek74
А у какого DSP56300 Вы видели плавующую точку?
Насколько я в курсе, родное (аппаратное) представление данные у них: дробные 24 или 48- разрядные числа с фиксированной точкой, да ещё и в дополнительном коде.
Правда есть библиотеки которые программно реализует плавующую точку. Но это исключительно программная реализация и в каком виде там представляются данные зависит исключительно от разработчиков этой библиотеки.
Мне на глаза попадалась одна такая библиотека, называется FPLIB - MOTOROLA DSP56300 FLOATING POINT SOFTWARE SUBROUTINE LIBRARY. Там имется следующее представление данных (см. файл Fpdef-hlp.txt в комплекте библиотеки):
Код
FPLIB "SINGLE EXTENDED" PRECISION FLOATING POINT FORMAT

Floating point number - (m,e) including mantissa sign
        Decimal value = m * ( 2 ** ( e - ebias ))

        23_____________________0    23_______________________0
        | s .      m           |    |    0            e .    |
        |______________________|    |________________________|

m = 24 bit mantissa (two's complement, normalized fraction)
        23 bit mantissa precision plus 1 bit mantissa sign gives
        precision of approximately 7 decimal digits.  The 24 bit
        mantissa was chosen to maximize precision with efficient
        use of the DSP56300 MPY and MAC instructions.
        A hidden leading 1 is not implemented in this format.

        Binary encoding:  s.xxxxxxx xxxxxxxx xxxxxxxx
        Bit weight:       0  -1                      -23
                        -2  2                       2

        Largest positive mantissa    $7FFFFF = +0.99999988079071044921875
        Smallest positive mantissa   $400000 = +0.5
        Floating point zero mantissa $000000 = 0
        Smallest negative mantissa   $BFFFFF = -0.50000011920928955078125
        Largest negative mantissa    $800000 = -1.0
        Reserved mantissas           $000001 through $3FFFFF
                                     $C00000 through $FFFFFF

        Note that all reserved mantissas are illegal since they
        represent denormalized mantissas.

e = 14 bit exponent (unsigned integer, biased by ebias = +8191)
        Stored as a 24 bit unsigned integer with 10 leading zeros.
        Exponent arithmetic is generally done with 16 bit precision.
        The 14 bit exponent format was chosen to maximize dynamic
        range with efficient detection of exponent overflow and
        exponent underflow.

        Binary encoding:  00000000 00xxxxxx xxxxxxxx.
        Bit weight:                   13            0
                                     2             2

        Largest exponent             $003FFF = 2 ** +8192
        Assumed fixed point exponent $001FFF = 2 ** +0 = +1.0
        Smallest exponent            $000000 = 2 ** -8191
        Reserved exponents           $004000 through $FFFFFF

                        14
        If bit weight  2   is set, exponent overflow has occured.
                        15
        If bit weight  2   is set, exponent underflow has occured.

        Note that no distinct exponents are reserved for plus infinity,
        minus infinity, Not a Number (IEEE NaN), minus zero or
        denormalized numbers.

Если у Вас такая библиотека то в нормальньное представление можно перевести например так (пример на паскале):
Код
type
  Float48 = packed record
    exponent: longint;
    mantissa: longint;
  end;

function Float48ToDouble(Value: Float48): double;
var
  i: integer;
  Mask, Shift: longword;
begin
  if (Value.mantissa and $800000)=$800000) then Result:=-1 else Result:=0;
  Mask:=$400000; Shift:=2;
  for i:=1 to 23 do
  begin
    if ((Value.mantissa and Mask)=Mask) then Result:=Result+1/Shift;
    Mask:=Mask shr 1; Shift:=Shift shl 1;
  end;
  Result:=Ldexp(Result, (Value.exponent-8191));
end;

Если представление данных в используемой библиотеки другоё, то тут надо смотреть её исходнии и разбираться.
Jools
Цитата(ek74 @ Jun 1 2006, 13:40) *
А у какого DSP56300 Вы видели плавующую точку?
Насколько я в курсе, родное (аппаратное) представление данные у них: дробные 24 или 48- разрядные числа с фиксированной точкой, да ещё и в дополнительном коде.

Я в этом деле не шарю! У меня есть исходники под этот проц, на основе которых будет создаваться FPGA-проект. И в этих исходниках есть таблица, числа которой представлены как floating point (из двух 24-битных слов). А как там это происходит работа с плавающей точкой - программно или аппаратно, мне на данный момент неинтересно. rolleyes.gif

Цитата(ek74 @ Jun 1 2006, 13:40) *
Если у Вас такая библиотека то в нормальньное представление можно перевести например так (пример на паскале):


Помоему это как раз то, что мне надо a14.gif !
Большое спасибо! cheers.gif
ek74
Цитата(Jools @ Jun 1 2006, 16:40) *
Помоему это как раз то, что мне надо a14.gif !
Большое спасибо! cheers.gif


Будут вопросы - спрашивайте, только единственное но: с завтрешнего дня я ухожу на две недели в отпуск (у меня дочь родилась и хочу первое время побыть с ней wub.gif ). Если для Вас время ответа не очень критично, то по возвращении из отпуска отвечу на все Ваши накопившиеся вопросы blush.gif
Jools
Цитата(ek74 @ Jun 2 2006, 14:54) *
Будут вопросы - спрашивайте, только единственное но: с завтрешнего дня я ухожу на две недели в отпуск (у меня дочь родилась и хочу первое время побыть с ней wub.gif ). Если для Вас время ответа не очень критично, то по возвращении из отпуска отвечу на все Ваши накопившиеся вопросы blush.gif


Нет не критично.
Ну и поздравляю с рождением дочери.
Здоровья ребенку, радости родителям, счастья Вашей семье.
ek74
Я появился и готов ответить на Ваши вопросы.

Цитата(Jools @ Jun 15 2006, 16:52) *
Ну и поздравляю с рождением дочери.
Здоровья ребенку, радости родителям, счастья Вашей семье.


Спасибо !
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.