Jump to content

    

Проблемы с отладкой проекта.

Я занимаюсь ПЛИС уже 2 года, и дошел до сложных проектов, которые просто так не работают на больших частотах.

Вот так выглядит мой проект, он реализует управление РЛС, посредством различных интерфейсов. Его центром является система ЦОС состоящая из КИХ фильтра и NCO, все написано на Verilog.

У меня возникла проблема, на выходе NCO (управляемый генератор синуса) и Фильтра вылезают помехи. Если отделить систему ЦОС от всего проекта, то помехи мне удавалось убрать, я задерживал clk идущий на NCO на 333ps и все отлично работало, в большом проекте я не могу подобрать задержку.

Если с АЦП подать сигнал на фильтр, то на выходе фильтра он будет с помехами. Если снимать сигнал с NCO, то помехи так же присутствуют. Как они выглядят я записал на видео. Бывало, что помехи на фильтре пропадали, а на NCO появлялись и наоборот.

Я понимаю, что проблемы в задержке сигнала, но я никогда не работал с Timing Analysis и не знаю с чего начать. Подскажите как решаются такие проблемы?

 

image.thumb.png.67ad1a2e0114883ab02cda0ba7aaa5b2.pngimage.thumb.png.f3bd9b8824675f9604c7559e6e260c88.png

293716353_.thumb.png.adfe17b55fb92a5f84d8f3f9a7fefb82.png

Вот я задержал clk на NCO, фильтр заработал без помех, но на выходе NCO как-будто один из младших битов не успевает устанавливаться.

Share this post


Link to post
Share on other sites

Странно, за два года вы не узнали про Timing Analyzer. Это же основы. На этом всё и стоит. Сейчас вендоры считают, что если констрейны удовлетворяются, то всё должно работать правильно, и не дают нетлист после разводки, с которым это можно было бы проверить.

Если что-то не работает, то неправильно обконстрейнено.

Share this post


Link to post
Share on other sites

Это у Вас NCO на 5  МГц не работает? Как реализовывали? Если на RAM, то очень странно, если на регистрах, то может действительно не работает, что тоже странно. Что в констрейнах задавали?

А понял, вы генерите 5 МГц, Тогда какую частоту подаёте на NCO?

Edited by EgorT

Share this post


Link to post
Share on other sites
17 minutes ago, andrew_b said:

Сейчас вендоры считают, что если констрейны удовлетворяются, то всё должно работать правильно,

обязательно должно работать)

Share this post


Link to post
Share on other sites
1 hour ago, EgorT said:

Это у Вас NCO на 5  МГц не работает? Как реализовывали? Если на RAM, то очень странно, если на регистрах, то может действительно не работает, что тоже странно. Что в констрейнах задавали?

А понял, вы генерите 5 МГц, Тогда какую частоту подаёте на NCO?

 

5 МГц это частота сигнала, а NCO у меня на RAM и работает от clk 300мГц. Я добивался что бы она работала без помех, но это в тестовом проекте. Когда я интегрирую ее в основной проект она перестает работать без помех даже от clk 50 Мгц.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Вообщем как проект отлаживать то..... ? Я могу сделать 4 клока. clk1, clk2,clk3,clk4. Первый clk1 на NCO без задержек, clk2 подать на фильтр на линию задержки и задержать на четверть периода относительно clk1, clk3 подать на умножители в фильтре и задержать еще на четверть периода относительно clk2, clk4 подать на cумматоры и задержать еще за четверть периода относительно clk3. И тогда данные будут успевать устанавливаться, так кто-нибудь делал? Или когда с сделаю этот sdc файл он сам задержит нужные клоки в нужных местах? как работает этот sdc файл?

Share this post


Link to post
Share on other sites

Макимальная частота, с которой может работать RAM (M10K Block)  в Cyclone V со speed-grade -С6  - 315 МГц, в тестовом проекте вполне возможно вы уложились в это ограничение, в проекте побольше уже не уложились. Попробуйте сначала задать клок в sdc файле, потом посмотреть репорт. И каким образом Вы задерживаете клок?

Edited by EgorT

Share this post


Link to post
Share on other sites
6 minutes ago, Icedevil777228 said:

Или когда с сделаю этот sdc файл он сам задержит нужные клоки в нужных местах?

По крайней мере с этим файлом компилятор будет знать, на какой частоте работает проект (ну и, возможно, другие особенности проекта, если они есть и если описаны в файле) и попытается расположить проект в кристалле так, чтобы проект заработал.

Есть цикл статей Иосифа Каршенбойма по этому вопросу.

Share this post


Link to post
Share on other sites
18 минут назад, Yuri124 сказал:

Есть цикл статей Иосифа Каршенбойма по этому вопросу.

Это не мои статьи, а Дениса Шехалева...  В 9-12 номерах за 2010 год. У des00 см. подпись в любом сообщении и там будет ссылка. :)

Но мне кажется, что ТС на неверном пути. Он приблизился к предельным частотам, но не оптимизировал структуру проекта. Ведь память можно взять бОльшей разрядности, например вдвое и тогда на ней можно понизить тактовую. И еще посмотреть критические пути. Сократить логику... Уменьшить разрядность, при этом данные обрабатывать "на лету"... Ну и так далее...  

Share this post


Link to post
Share on other sites
2 minutes ago, iosifk said:

Это не мои статьи

Извиняюсь, перепутал :) 

У Вас тоже есть интересное.

Share this post


Link to post
Share on other sites
28 minutes ago, Icedevil777228 said:

Вообщем как проект отлаживать то..... Или когда с сделаю этот sdc файл он сам задержит нужные клоки в нужных местах? как работает этот sdc файл?

Если ваш проект до сих пор без sdc файла (и на 300MHz), то нужно идти в ближайшую церковь, ставить побольше свечек и молится, молится, молится ....

Отладка не поможет :crazy:

Share this post


Link to post
Share on other sites

А если посмотреть отчет в папках под строкой "Clocks" - Slow.... и Fast...   - там же будут показаны максимально возможные гарантированные частоты клоков.

Share this post


Link to post
Share on other sites
11 minutes ago, Icedevil777228 said:

В PLL есть функция задержки сигнала.

Ну тогда Вам точно не обойтись без описания констрейнов в sdc файле. Кроме того, добавляя кучу клоков, сдвинутых по фазе, Вы создадите себе еще больше проблем. Начните с sdc файла, почему Вы еще этого не сделали.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now