Serhiy_UAЦитата
Как-то занимался аппаратным за один такт CORDIC (алгоритм Волдера) для arctg(X/Y) и sqrt(X*X +Y*Y). Для Cyclone III получилось 70 нс для 16-разрядных данных.
Это получается довольно длинная комбинационная цепь, для которой в таймквесте нужно задавать multipath. К тому же, много ресурсов съест. Поэтому я написал итеративные варианты кордика, деления и корня. Не так уж часто они нужны. А если нужны часто, или частота высокая - то развернуть в конвейер всегда можно (для кордика я это делал, для остальных не было необходимости). Свой вариант реализации я недавно выкладывал на форум.
Цитата
По поводу простого софт-процессора, есть 8-разрядный miniByte с системой из 32 команд, для Cyclone III с тактом 100МГц.
Спасибо, гляну.
Цитата
Может есть смысл оптимизировать как-то эту часть проекта? Не понятно откуда такой расход ресурсов, если только у вас не целая куча каналов. Для узкой полосы на Cyclone III FIR для двух квадратур ~500-600 LE, 8 DSP x9 и немного памяти... Всё остальное явно меньше.
1) DDS на основе LUT с коррекцией через разложение в ряд Тейлора первого порядка - 180 ячеек, 1M9K и 6 DSP.
2) CIC дециматор на 250 для двух квадратур (5 секций) - 1300 ячеек.
3) FIR resampler 320 -> 48 kHz 510 порядка для двух квадратур (32-битная арифметика) 600 ячеек, 8 DSP, 4 M9K.
4) 4-х канальная НЧ-часть для двух квадратур, 32-битная арифметика (частотный сдвиг -> дециматор на 5 90 порядка -> фильтр-селектор до 128 порядка -> частотный сдвиг, всё это для 4 каналов, плюс пятый канал-частотомер для измерения допплеровского сдвига) - 3000 ячеек, 8 DSP, 13 M9K. По ячейкам оптимизировать здесь можно, я знаю. Займусь как время будет.
5) есть ещё всякие интерфейсные модули, помимо DDC. Ещё 2000 ячеек.
Цитата
А концепция, предлагаемая альтерой, имеется ввиду Avalon неприемлима в принципе? И размещать и интерконектить всю систему в Qsys? Кроме того свои модули можно делать с поддержкой AXI Lite/AXI Stream, которые просты в реализации (полноценная AXI вам я думаю не нужна), а QSys делает автоматическое согласование шины AXI и Avalon. При этом вы можете сделать как собственный хардверный мастер, так и поставить софтовый проц. Для вашей полосы можно на обычном ниосе делать обработку верхнего уровня, векторные вычисления (Фурье, фильтрация) поддержать в железе, а-ля сопроцессоры.
Мне не нравится использовать GUI и скриптовые генераторы. Я придерживаюсть такого подхода, что нужно досконально знать, что и как в системе работает, ну и люблю красивый код, в котором нет ничего лишнего. Альтеровские генераторы по этому критерию не катят, единственное что я из них на данный момент использую - генератор для floating point functions. Насчёт ниоса я вообще сомневаюсь, слишком уж он огромен и не подходит для DSP. Вообще для систем без внешней памяти 32-bit general purpose CPU - явное расточительство в плане ценной памяти ПЛИС. Если у вас есть опровергающие доводы - готов их выслушать.

Цитата
А можно доку про это какую нибудь, или пример реализации? rolleyes.gif
Вот в этой теме, в конце, выкладывали CORDIC for dummies, ну и мой вариант кордика на SV, сделанный по этой статье.
http://electronix.ru/forum/index.php?showtopic=126481