|
Реализация Cordic алгоритма на ПЛИС, Разбор статьи с kit-e.ru |
|
|
|
Apr 13 2016, 07:46
|
Частый гость
 
Группа: Свой
Сообщений: 82
Регистрация: 6-11-14
Пользователь №: 83 540

|
Добрый день! Решил повторить реализацию Cordic алгоритма из kit-e.ru/assets/files/pdf/2011_12_36.pdf на ПЛИС. Проект состоит из 5 модулей (структурная схема во вложении): 1) reset_block.v - аппаратный сброс и установка всех регистров в начальное положение. 2) step_control.v - модуль. формирующий шаг фазы для вычисления синуса и косинуса, а так же четверть в которой находится выходной сигнал 3) Cordic.v - модуль, формирующий конвейер из блоков, вычисляющих выходные значения синуса и косинуса. 4) rotator[0-15].v - модуль, поворачивающий вектор на заданный угол. 5) select_quarter.v - модуль, подводящий вычисленное значение синуса и косинуса под весь диапазон АЦП.
В модуле step_control.v значение фазы Angle задает значение выходной частоты. В статье сказано, что значение Angle в 3216 соответствует фазе в 90 градусов, т.е увеличивая каждый такт значение Angle на 1, на выходе мы получим частоту равную f.out=F.clk/3216/4 (на 4 делится, чтобы получить полный период, а не только до 90 градусов). Откуда взято, что значение Angle в 3216 соответствует фазе в 90 градусов?
|
|
|
|
|
 |
Ответов
|
Apr 22 2016, 07:29
|

Профессионал
    
Группа: Участник
Сообщений: 1 072
Регистрация: 11-12-12
Пользователь №: 74 815

|
Цитата(~Elrond~ @ Apr 21 2016, 21:08)  Corner Принципиальная разница в том, что в LUT для генерации синуса лежит четверть периода единичной окружности, а при обратном преобразовании для общего случая нужно хранить единичный квадрат. Если взять хотя бы 10-битную точность, получаем необходимость хранить 2^(10*2) = 2^20 точек. Не многовато ли? А CORDIC, если делать две итерации за такт, сделает преобразование такой точности за 5-6 тактов. Совершенно не так. Если делать аппроксимацию прямой, нужно только 1024 точки. Если сделать таблицу поправок на эллиптичность, то нужно 2 таблицы на 256 точек. Если верить статье в начале топика, то для точности ~0,4 градуса надо 8 итераций. Это очень медленно. Задача решенная в лоб делением и двумя таблицами, работает на 200 МГц (Спартан 6) в потоке с 18 тактным конвейером и имеет точность ~0,006 градуса. Ваш Кордик нервно курит в углу.
|
|
|
|
|
Apr 22 2016, 07:59
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(Corner @ Apr 22 2016, 14:29)  работает на 200 МГц (Спартан 6) в потоке с18 тактным конвейером и имеет точность ~0,006 градуса. Ваш Кордик нервно курит в углу. на 0.0069/0,0035 градусов, потребуется 13/14 тактов + 1 такт по входу на определение квадранта. Итого 15 тактов латентности и тактовая, на спартане 6, будет под 250-280МГц. Не совсем понял, что именно вы имели в виду про курение. ЗЫ. Плюсы кордика - отсутствие умножителей, памяти, простая параметризуемость. Минусы - размер при однотактном варианте и несимметричность результатов, в зависимости от квадранта.
--------------------
|
|
|
|
|
Apr 22 2016, 12:16
|

Профессионал
    
Группа: Участник
Сообщений: 1 072
Регистрация: 11-12-12
Пользователь №: 74 815

|
Цитата(des00 @ Apr 22 2016, 10:59)  на 0.0069/0,0035 градусов, потребуется 13/14 тактов + 1 такт по входу на определение квадранта. Итого 15 тактов латентности и тактовая, на спартане 6, будет под 250-280МГц. Не совсем понял, что именно вы имели в виду про курение.
ЗЫ. Плюсы кордика - отсутствие умножителей, памяти, простая параметризуемость. Минусы - размер при однотактном варианте и несимметричность результатов, в зависимости от квадранта. У вас 15 итераций. А не потоковый конвейер. У меня приходит 125 МСэмплов и выдается 125 Муглов с задержкой на 18 тактов. Кордик, который такое делает, съест всю плисину. Если использовать умножители в алгоритме быстрого деления, тактов станет 10. Никакой асимметрии от квадранта и точность 0,006 градуса получена с избытком. Просто удобно на выходе имет 16 битный угол = 360/65536.
|
|
|
|
Сообщений в этой теме
verali Реализация Cordic алгоритма на ПЛИС Apr 13 2016, 07:46 D.I.M.A Может быть значение pi приведено к формату fract и... Apr 13 2016, 07:59 des00 координаты автора есть в статье. почему бы его не ... Apr 13 2016, 07:59 verali Цитата(D.I.M.A @ Apr 13 2016, 07:59) Може... Apr 13 2016, 08:51 Corner Немного оффтопа:
Короткий табличный метод с линейн... Apr 20 2016, 15:05 ~Elrond~ Corner
ЦитатаКороткий табличный метод с линейной а... Apr 20 2016, 22:00 Corner Цитата(~Elrond~ @ Apr 21 2016, 01:00) Cor... Apr 21 2016, 08:13    des00 Цитата(Corner @ Apr 22 2016, 19:16) У вас... Apr 22 2016, 12:25     Corner Цитата(des00 @ Apr 22 2016, 15:25) не зна... Apr 22 2016, 12:42
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|