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