Re: Быстро поделить 20 бит на 10 бит

Aug 21, 2003 1 Replies

Привет!



"Leha Bishletov"


Посоветуйте, как можно быстро поделить 20-ти битное число на 10-ти

битное?


Сделать это надо максимум за 30мкс. МК с такими возможностями я не знаю.

Банальнейший AMD AM186/ER наример. Мало? Ну тогда на тебе от Advantech EVA-X1630C - RISC 75MHz (до 100), софтварно компатибл с 186 процессором, деление 32- на 16-битное число осуществляет за 16 тактов, т.е. 160 нс. Тебе понадобится два деления плюс пересылки. Итого примерно 400 нс. Много?


formatting link
В качестве бесплатного приложения встроенный Ethernet и два последовательных порта. ;-)


Единственное, что приходит в голову, это отдельная ПЛИС, которая будет
> выполнять деление. Hо я с ними (ПЛИС) ни когда не работал и не могу

оценить


Будет дороже.


насколько это реально и сколько может стоить м/с, позволяющая реализовать

такую


функцию. М.б. есть готовые делители?

С уважением,


Виталий Насенник

LB> Hello all.

LB> Посоветуйте, как можно быстро поделить 20-ти битное число на 10-ти битное? LB> Сделать это надо максимум за 30мкс. МК с такими возможностями я не знаю. LB> Единственное, что приходит в голову, это отдельная ПЛИС, которая будет LB> выполнять деление. Hо я с ними (ПЛИС) ни когда не работал и не могу оценить LB> насколько это реально и сколько может стоить м/с, позволяющая реализовать такую LB> функцию. М.б. есть готовые делители?

Ну сейчас тебе накидают советов :-) По моему небольшому опыту деления, могу посоветовать следующее:

  1. Если надо делить на константу, то для скорости деление можно заменить умножением, подробности есть у Кнута (второй том, кажись). Я когда-то смотрел AN для ARM на этом принципе - там деление 32-бит на 10 занимало то-ли 8, то ли 10 тактов. Еще для прикола там был генератор кода (10-15 строк ассемблера ARM) - вводишь константу деления - на выходе получаешь текст исходного кода для деления.
  2. 20-бит это совсем не круто по нонешним временам. Например, Fujitsu MB90 имеют инструкции деления 32/16 бит, если верить документации - то не более 37 тактов макс + накладные на адресацию (1-4 такта). Про "классику" x86 и упоминать неудобно. Тут, правда, может быть тонкость, что результат в 16-бит не поместится. Но тут можно делить по частям - сначала старшие биты, потом младшие с учетом остатка от старших. Совсем уж для простоты жизни можно взять 32 битный процессор, например ARM, будет круто и относительно дорого.
  3. Новые AVR (до 16 МГц которые, 30 мкс - это 480 тактов), тоже должны бы справится с делением в столбик за такое время - разрядность-то небольшая. Хотя по прикидкам - времени получается впритык.

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required