Перейти к содержанию
    

Нужна помощь с IP блоком Cordic v6 от xilinx

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

Ядро пробовал настраивать тремя способами:

 

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

 

ip_1.jpg

 

 

ip_2.jpg

 

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

 

 

sim_1.jpg

 

 

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

 

 

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

 

ip_1.jpg

 

 

ip_3.jpg

 

 

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 такта

 

ip_4.jpg

 

 

ip_3.jpg

 

 

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

 

 

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

 

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

 

sim_2.jpg

 

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

 

 

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

 

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

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Т.е. фактически вам нужно получить результат за 3 такта на частоте 200 МГц - те. за 15 нс.

Однако в 1-м случае результат получается минимум за 25.3 нс. И как вы собираетесь получить его быстрее?

Конвейеризация - это способ увеличить пропускную способность, а не снизить задержку.

 

Теперь по результатам ваших вариантов:

1-й - задержка 25.3 нс (и это видимо минимальная), а сигнал valid в этом случае значения не имеет.

2-й - задержка 3 такта и это естественно не укладывается во временные ограничения.

3-й - задержка 22 такта и во временные ограничения вполне укладывается.

Чтобы оценить минимальную задержку, поставьте по 1-му варианту регистры по входу и выходу и посмотрите минимальную частоту.

Если она не устраивает, меняйте схему: переводите вычисления на таблицы, снижайте разрядность и т.п. Конвейер вам задержку не снизит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

 

1) как это сигнал valid не важен? как мне определить правильное значение?

2) почему "естественно"? данный режим зачем то же сделали. Не я вводил число 3, оно само так посчиталось

3) 22 такта это самый медленный режим для данного ядра

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По-моему это нереально. Кордик алгоритм итерационный и соответственно пройдет с десяток или два стадий для того чтобы вычислить результат

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

Если попробовать сделать на таблицах, но боюсь памяти не хватит или частота пострадает

Хотя таблицы тоже врятли, нужно деление еще...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1) как это сигнал valid не важен? как мне определить правильное значение?

2) почему "естественно"? данный режим зачем то же сделали. Не я вводил число 3, оно само так посчиталось

3) 22 такта это самый медленный режим для данного ядра

1) так как всё делается за 1 такт, то valid каждый такт. Т.е. корректный результат на каждом тактк. Т.е. valid не важен. Рассматривайте свою схему как начинающуюся и заканчивающуюся регистрами.

2) "естественно" потому что 15 нс < 25 нс. Другого смысла я не вкладывал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...