реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Нужна помощь с IP блоком Cordic v6 от xilinx
YaGo
сообщение Dec 15 2017, 20:58
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 30-07-14
Пользователь №: 82 405



Здравствуйте! Нужна помощь с ядром Cordic v6. Использую Vivado 2017.1. Сделал тестовый проект, в котором одно это ядро. Оно используется для вычисления arctan.
Ядро пробовал настраивать тремя способами:

1) ядро не зависит от clk. Режим без конвейера(no pipelining). Триггеров нет






Результат post-implementation timing simulation для imag = 1, real = 1:





как видно, результат вычислений стал верным через 25,385 нс, но tvalid "поднялся и опустился" гораздо раньше.


2)ядро зависит от clk. Режим без конвейера(no pipelining). частота clk равна 200 МГц. Задержка выхода(latency) равна 3 такта







create_clock -period 5.000 -name clk -waveform {0.000 2.500} [get_ports clk]


При такой конфигурации ядра, проект перестает собираться. [Timing 38-282] The design failed to meet the timing requirements. Please see the timing summary report for details on the timing violations.


3)ядро зависит от clk. Режим с конвейером(pipelining mode - optimal). частота clk равна 200 МГц. Задержка выхода(latency) равна 22 такта







create_clock -period 5.000 -name clk -waveform {0.000 2.500} [get_ports clk]


При такой конфигурации ядра, проект собираться.

Результат post-implementation timing simulation для imag = 1, real = 1:



как видно, результат вычислений стал верным через 22 такта, и сигнал tvalid "поднялся и опустился" синхронно.


Подскажите, пожалуйста, что я делаю не так. Мне нужна конфигурация 2, т.е. задержка выхода 3 такта

Может у кого-нибудь есть модуль для вычисления arctan, лучше чем у xilinx? Задержка выхода должна быть минимальной.


Go to the top of the page
 
+Quote Post
dvladim
сообщение Dec 17 2017, 17:56
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 654
Регистрация: 24-01-07
Из: Воронеж
Пользователь №: 24 737



Т.е. фактически вам нужно получить результат за 3 такта на частоте 200 МГц - те. за 15 нс.
Однако в 1-м случае результат получается минимум за 25.3 нс. И как вы собираетесь получить его быстрее?
Конвейеризация - это способ увеличить пропускную способность, а не снизить задержку.

Теперь по результатам ваших вариантов:
1-й - задержка 25.3 нс (и это видимо минимальная), а сигнал valid в этом случае значения не имеет.
2-й - задержка 3 такта и это естественно не укладывается во временные ограничения.
3-й - задержка 22 такта и во временные ограничения вполне укладывается.
Чтобы оценить минимальную задержку, поставьте по 1-му варианту регистры по входу и выходу и посмотрите минимальную частоту.
Если она не устраивает, меняйте схему: переводите вычисления на таблицы, снижайте разрядность и т.п. Конвейер вам задержку не снизит.
Go to the top of the page
 
+Quote Post
YaGo
сообщение Dec 17 2017, 20:05
Сообщение #3





Группа: Новичок
Сообщений: 3
Регистрация: 30-07-14
Пользователь №: 82 405



Интересные наблюдения, спасибо.

Мне нужно получить за минимальное количество тактов. В данном ядре это 3 такта. В другом может быть иначе

комментарии по Вашим пунктам:

1) как это сигнал valid не важен? как мне определить правильное значение?
2) почему "естественно"? данный режим зачем то же сделали. Не я вводил число 3, оно само так посчиталось
3) 22 такта это самый медленный режим для данного ядра
Go to the top of the page
 
+Quote Post
_Ivan_33
сообщение Dec 18 2017, 09:37
Сообщение #4


fpga designer
****

Группа: Свой
Сообщений: 613
Регистрация: 20-04-08
Из: Зеленоград
Пользователь №: 36 928



По-моему это нереально. Кордик алгоритм итерационный и соответственно пройдет с десяток или два стадий для того чтобы вычислить результат
Если бы это был бы какой-нибудь поворот вектора, что тоже решается кордиком, то можно было бы сделать его умножением и результат был бы выдан быстрее.
Если попробовать сделать на таблицах, но боюсь памяти не хватит или частота пострадает
Хотя таблицы тоже врятли, нужно деление еще...


--------------------
Go to the top of the page
 
+Quote Post
Maverick
сообщение Dec 18 2017, 10:50
Сообщение #5


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



посмотрите это


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
dvladim
сообщение Dec 19 2017, 19:43
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 654
Регистрация: 24-01-07
Из: Воронеж
Пользователь №: 24 737



Цитата(YaGo @ Dec 17 2017, 23:05) *
1) как это сигнал valid не важен? как мне определить правильное значение?
2) почему "естественно"? данный режим зачем то же сделали. Не я вводил число 3, оно само так посчиталось
3) 22 такта это самый медленный режим для данного ядра

1) так как всё делается за 1 такт, то valid каждый такт. Т.е. корректный результат на каждом тактк. Т.е. valid не важен. Рассматривайте свою схему как начинающуюся и заканчивающуюся регистрами.
2) "естественно" потому что 15 нс < 25 нс. Другого смысла я не вкладывал.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 11:52
Рейтинг@Mail.ru


Страница сгенерированна за 0.01411 секунд с 7
ELECTRONIX ©2004-2016