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

64-битные вычисления на 32-битном DSP ?

после некоторых математических ухищрений выяснилось, что минимально допустимый формат коэффициентов цифрового БИХ-фильтра 1.1.20, а лучше 1.1.25 (с фиксированной запятой, ваш кэп). Вариант с плавающей запятой не рассматривается. Входные данные имеют разрядность 14 бит, а так как точность терять не хотелось бы, то в 32-битный формат мы явно не умещаемся.

 

собственно, вопрос в заголовке:

64-битные вычисления на 32-битном DSP - это реально и насколько усложняет жизнь?

 

Например, я подозреваю, что вместо каждого умножения придётся придётся делать по 4 "крест-накрест", и на операцию "умножение с накоплением" можно также не рассчитывать.

Какие ещё подводные камни я не вижу?

И, если не лень описывать, то как может быть реализован фильтр в таких условиях?

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


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

И, если не лень описывать, то как может быть реализован фильтр в таких условиях?

..не разбираюсь в цифровых фильтрах - но всегда думал что 32 битный результат уже даст динамический диапазон в 190 дБ.

Сколько же вам надо?

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


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

Какие ещё подводные камни я не вижу?

32 бита * 32 бита = 64 битный результат в регистровой паре.

Разве нет?

 

У вас 1 + 26 + 14 = 41 бит. Если использовать умножение с накоплением в регистровой паре 64 бит, то для накопления еще много места остается.

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


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

32 бита * 32 бита = 64 битный результат в регистровой паре.

Думаю, автор имеет в виду, что MAC-операций с регистровыми парами не бывает - команд требуется больше.

 

Какие ещё подводные камни я не вижу?

И, если не лень описывать, то как может быть реализован фильтр в таких условиях?

Так же, как и в условиях 32 бит ;)

Математика она от разрядности не зависит.

Несколько лет назад реализовывал 32-битный БИХ-фильтр на 16-битном DSP (C5502). Конечно пришлось попотеть, израсходовать больше команд ;)

но результат был достигнут.

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


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

Думаю, автор имеет в виду, что MAC-операций с регистровыми парами не бывает - команд требуется больше.

Наверное, нужно было озвучить DSP.

 

В Cortex-M4F есть такая целочисленная инструкция:

SMLAL RdLo, RdHi, Rn, Rm - Signed multiply with accumulate (32 x 32 + 64), 64-bit result, RdHi:RdLo += Rn x Rm

хотя есть и 32-битный аналог:

MLA Rd, Rn, Rm, Ra - Multiply with accumulate, 32-bit result, Rd = (Rn x Rm) + Ra

 

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


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

Несколько лет назад реализовывал 32-битный БИХ-фильтр на 16-битном DSP (C5502). Конечно пришлось попотеть, израсходовать больше команд ;)

но результат был достигнут.

спасибо. собственно, именно этот ответ мне и был нужен )

и он обнадёживает - ситуацию понимаю правильно

 

 

Наверное, нужно было озвучить DSP.

хотелось бы, но не могу, т.к. вопрос темы появился именно в процессе выбора DSP. Импортозамещение, чтоб его.

за примеры команд отдельное спасибо

 

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


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

хотелось бы, но не могу, т.к. вопрос темы появился именно в процессе выбора DSP. Импортозамещение, чтоб его.

за примеры команд отдельное спасибо

Такие команды есть даже в Cortex-M3, но нет в Cortex-M0.

И отечественные Cortex-M3 есть.

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


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

Импортозамещение, чтоб его.

Вероятно, в таком случае, можно рассмотреть реализацию на Воронежских FPGA. Там уж точно сделаете ту разрядность, которая нужна.

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


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

..не разбираюсь в цифровых фильтрах - но всегда думал что 32 битный результат уже даст динамический диапазон в 190 дБ.

Сколько же вам надо?

может дать, а может и не дать. зависит от реализации.

надо чем больше, тем лучше, но не менее 70дБ.

 

 

Такие команды есть даже в Cortex-M3, но нет в Cortex-M0.

И отечественные Cortex-M3 есть.

какие отечественные можете подсказать? частота следования отсчётов примерно 15кГц, БИХ-фильтров второго порядка штук 12. Понятно, что нет пределов совершенству, поэтому чем проще тем лучше. Пока смотрим на НТЦ Модуль и Миландр...

 

Вероятно, в таком случае, можно рассмотреть реализацию на Воронежских FPGA. Там уж точно сделаете ту разрядность, которая нужна.

Думали об этом, но по моим ощущениям они слабоваты для нас. Может, сделаю пока на альтеровской отладочной, а там посмотрим, сколько логики понадобится. А вдруг.

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


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

Ну еще у нас делается немало процессоров на архитектуре SPARC v8 - там есть инструкции умножения 32x32->64 и деления 64:32->32, а кортексы-м курят нервно в стороне против спарка. С ними, разве, кортекс-а посоперничает, и то, местами.

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


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

Ну еще у нас делается немало процессоров на архитектуре SPARC v8 - там есть инструкции умножения 32x32->64 и деления 64:32->32, а кортексы-м курят нервно в стороне против спарка. С ними, разве, кортекс-а посоперничает, и то, местами.

 

эльбрусы что ли? круто, но... короче слишком круто для наших задач)

кроме эльбрусов что ещё на спарке есть?

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


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

эльбрусы что ли? круто, но...

Ну почти, недоэльбрус, МЦСТ R500

Еще мипсы были, навроде 1892ВМ3Т, даж в QFP

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


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

Например, я подозреваю, что вместо каждого умножения придётся придётся делать по 4 "крест-накрест", и на операцию "умножение с накоплением" можно также не рассчитывать.

Кстати - при операциях типа "крест-накрест" (если разрядности операции умножения не хватает), достаточно 3 операций, так как умножение младших частей можно отбросить :rolleyes:

Вам ведь всё равно понадобится только старшая половина результата.

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


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

Вам ведь всё равно понадобится только старшая половина результата.

Это когда как... Младшая часть влияет при накоплении на какой-то кол-во младших бит старшей части.

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


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

Это когда как... Младшая часть влияет при накоплении на какой-то кол-во младших бит старшей части.

как то необходимо было с 16 разрядными величинами работать, обычный бих 16 итный коэф. с накопителем MAC результата в 16 бит давал приличный шум - несколько бит, при амплитудах сигнала в 2-3 бита фильтр работал из ряда вон плохо...

сделал в фильтре накопитель MAC на 32 разряда, все стало лучше, правда размер ПП вырос раза в 4 также и скорость вычислений упала также примерно, зато результат порадовал - даже 1 битный сигнал проходил через фильтр как следует и никаких шумов.

проц 16 бит, язык - асм.

так что все реализуемо, вам вероятнее всего даже хватит только разрядность накопителе MAC увеличить.

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


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

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

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

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

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

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

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

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

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

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