Перейти к содержанию
    

Xilinx Floating point не работает с минимальным порядком???

Всем доброго дня.

Пытаюсь реализовать арифметику FP16 на ядре Floating point от ксайлинкса (vivado 2020.1)

Настройки IP:

image.thumb.png.027bbc698178bc83797eef6dc7d39db4.png

image.thumb.png.b057919d18080051d2131d19d541f845.png

image.thumb.png.d45942b2475da74401fac47ce7963189.png

image.thumb.png.f5f7e27bcd55664f419eb7d951903c8b.png

Проблема такая: если одно из входных чисел минимального порядка (порядок -15, биты 14..10 входного слова = 0), то на выходе 0. Даже если мантисса при этом максимальная. На рисунке ниже входное число 2 = 0x03ff (в десятичной форме 6,10054Е-5). Второй вход равен 0х4900 (это 10), 0х63d0 (это 1000), 0х5640 (это 100). При этом на выходе всегда 0 (и при любой мантиссе порядка -15):

image.thumb.png.2f52387149e33568d585079cd2d013b2.png

А вот картина когда порядок -14, а мантисса минимальная (0х0400, в десятичной форме 6,10352Е-5), перемножаем на те же числа:

image.thumb.png.3a083661554207983c600d0b5b506c1b.png

Видим на выходе нормальный результат: 0x1100 (=6,10352E-4), 0x2bd0 (=6,10352E-2) и 0x1e40 (=6,10352E-3)

Что сделано не так??? Неужто в корке ксайлинса глюк?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

37 минут назад, alexPec сказал:

Пытаюсь реализовать арифметику FP16 на ядре Floating point от ксайлинкса (vivado 2020.1)

А с чего вы решили что фп16 должно работать? Это где то указано в даташите на ядро? По опыту могу сказать что с этим ядром работает фп32, а в хлс получалось еще делать накопитель в дабле - фп64.

Upd. Хотя да - в даташите поддержка типа есть "• binary16 (Half Precision Format) – Uses 16 bits, with an 11-bit fraction and 5-bit exponent."

Попробуйте режим "блокинг" с полными подтверждениями и вывести биты переполнений.

По статусу вы свой - на фтп-и лежат декодированные исходники штатных ядер - можете сами посмотреть что там накручено.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

49 минут назад, fguy сказал:

Попробуйте режим "блокинг" с полными подтверждениями и вывести биты переполнений.

Пробовал, то же самое. Так не хотелось лезть внутрь этой плавучки... Думал хоть тут то без глюков будет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Насколько я помню, эта кора в принципе не поддерживает денормализованные числа(у которых в поле порядка стоит 0), поэтому все они считаются равными нулю, это экономит ресурсы и повышает быстродействие. Так что не глюк, а фича:). Кстати, вы забыли, что числа с минимальным порядком денормализованы, и к ним старшая единица не добавляется, поэтому неправильно переводите в десятичную экспоненциальную форму.

Изменено пользователем Timmy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

21 час назад, alexPec сказал:

(и при любой мантиссе порядка -15)

 

2 часа назад, Timmy сказал:

Кстати, вы забыли, что числа с минимальным порядком денормализованы, и к ним старшая единица не добавляется, поэтому неправильно переводите в десятичную экспоненциальную форму.

Похоже что так - судя по первой табличке в https://en.wikipedia.org/wiki/IEEE_754 указано что минимальный порядок для фп16 доложен быть -14

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...