Jump to content

    
Sign in to follow this  
ilo

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

Recommended Posts

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

 

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

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

 

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

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

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

Share this post


Link to post
Share on other sites
И, если не лень описывать, то как может быть реализован фильтр в таких условиях?

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

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

Share this post


Link to post
Share on other sites
Какие ещё подводные камни я не вижу?

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

Разве нет?

 

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

Share this post


Link to post
Share on other sites
32 бита * 32 бита = 64 битный результат в регистровой паре.

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

 

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

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

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

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

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

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

Share this post


Link to post
Share on other sites
Думаю, автор имеет в виду, что 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

 

Share this post


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

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

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

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

 

 

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

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

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

 

Share this post


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

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

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

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

Share this post


Link to post
Share on other sites
Импортозамещение, чтоб его.

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

Share this post


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

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

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

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

 

 

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

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

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

 

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

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

Share this post


Link to post
Share on other sites

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

Share this post


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

 

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

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

Share this post


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

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

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

Share this post


Link to post
Share on other sites
Вам ведь всё равно понадобится только старшая половина результата.

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

Share this post


Link to post
Share on other sites
Это когда как... Младшая часть влияет при накоплении на какой-то кол-во младших бит старшей части.

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

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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this