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

Временной анализ в Quartus II, описание временных ограничений

Начну с основной проблемы. Потребовалось выполнить несколько операций ЦОС на ПЛИС. Разобравшись с языками описания цифровых схем были созданы три модуля: для БПФ, для взаимной корреляции сигнала и ещё один математический. По отдельности они проходили проверку работоспособности в железе на столе, но иногда всё разваливалось: бывали неудачные случаи разводки и результаты были неадекватные. После объединения всех трёх модулей в один проект работоспособная прошивка и вовсе перестала получаться. Почитав форумы и статьи понял, что может помочь задание временных ограничений на пути прохождения сигнала. (Например: "Если временные требования не заданы, то компилятор не производит оптимизацию задержек и они имеют произвольные значения и большой разброс." Источник: Lab1.pdf (spbstu.ru)) Я начал заниматься описанием временных ограничений, вижу на Chip Planer, что пути меняются, но какие-либо выводы по этому сделать не могу. Поэтому хотелось бы получить совет от тех, кто уже этим успешно занимался. Правильно ли вычислена ошибка? В верном ли направлении двигаюсь? Правильно ли мной описаны временные задержки блока БПФ: я описал прохождение сигнала из входной памяти (FFT:inst2, FFT:inst4 проекта) на бабочку (FFT:inst23), с результата вычисления бабочки до буферной памяти (FFT:inst21, FFT:inst22) и из буферной памяти до входа в бабочку при условии, что выполнение бабочки и установка адресов памяти выполняется не дольше, чем за 80 нс?

Весь проект для Quartus II 13.0.1: MainDD3.zip — RGhost — файлообменник 

Ниже прикреплён файл временных ограничений sdc.

 

P.S. Разработка ведётся под ПЛИС 5578ТС024. Для её конфигурирования используется прилагающееся к ПЛИС ПО и список цепей vqm из Quartus. Собственное ПО ПЛИС – одна из причин почему не использовалась мегафункция БПФ. Также для одного и того же списка цепей ПО может выдать как работоспособную прошивку, так и нет. В ПО есть возможность подгрузки файла временных ограничений, но тоже со своими особенностями.

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

MainDD3.sdc

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


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

Обычно имеет смысл отдельно описывать 3 временных константы.
1. От входов до входных триггеров.
2. От выходных триггеров до выходов.
3. Задать частоту работы схемы. 

Вот как я понимаю в вашем случае главное задать частоту работы схемы. Это автоматом заставить софт рассчитать вашу схему включая все задержки и выдать ответ может ли она работать на этой частоте или нет. Т.е. 80 нс = 12.5Мгц. Результатом который нужно смотреть являются не линии в Chip Planer а текстовый отчёт о том получилось ли у софта то о чём вы его просили или нет. Если получилось то всё хорошо схема будет железно работать на данной частоте. Если не получилось проблема. Нужно заняться оптимизацией.

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


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

13 minutes ago, Holy Priest said:

ПО может выдать как работоспособную прошивку, так и нет

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

Посмотрите после разводки - какая частота допустима с точки зрения софта, и какая на самом деле. Для начала - хотя бы так.

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


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

1 hour ago, Holy Priest said:

Весь проект для Quartus II 13.0.1: MainDD3.zip — RGhost — файлообменник

File is unavailable

 

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


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

16.06.2021 в 10:53, MegaVolt сказал:

Обычно имеет смысл отдельно описывать 3 временных константы.
1. От входов до входных триггеров.
2. От выходных триггеров до выходов.
3. Задать частоту работы схемы. 

Вот как я понимаю в вашем случае главное задать частоту работы схемы. Это автоматом заставить софт рассчитать вашу схему включая все задержки и выдать ответ может ли она работать на этой частоте или нет. Т.е. 80 нс = 12.5Мгц. Результатом который нужно смотреть являются не линии в Chip Planer а текстовый отчёт о том получилось ли у софта то о чём вы его просили или нет. Если получилось то всё хорошо схема будет железно работать на данной частоте. Если не получилось проблема. Нужно заняться оптимизацией.

 

16.06.2021 в 11:04, Yuri124 сказал:

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

Посмотрите после разводки - какая частота допустима с точки зрения софта, и какая на самом деле. Для начала - хотя бы так.

Благодарю за ответы. Клоки в sdc файле я описал, вижу в квартусе, что в простом проекте слаков нет, частота позволяет (один из сигналов ActualData не поспевает за клоком, но он не принципиален для работы, так как может быть заменён комбинаторной схемой, а не описан регистрами). С анализом отчётов в TimeQuest я разобрался, но, как мне кажется, проблема возникает тогда, когда размещать на кристалле начинает ПО для 5578ТС024, а не квартус. ПО тоже выдаёт отчёты в формате sdf, там имеются ключевые слова временного анализа: setup, hold и прочие, но как их анализировать, мне не совсем ясно. (Пример таких отчётов для проекта MainDD3: https://disk.yandex.ru/d/05xt2or9yqhtSQ, https://disk.yandex.ru/d/HI6Ux3u4ehiaAg)

В ТУ указано, что микросхема может работать на частотах 100 МГц, хотя обычный счётчик на 14 бит, требующийся для смены адресов памяти, сбоил: пропускал отсчёты (..., 1023, 16338, 1026, 1027, ...), тогда я подумал, что какой-либо из битов при переключении не успевает доходить до счётчика или регистра, поэтому и стал разбираться во временных задержках и том, как сравнять пути прохождения сигнала. К слову, при выполнения лабораторных работ из файла в первом посте я наблюдал, что время распространения сигнала уравнялось между битами (был разброс 15-17 нс, после задания временных ограничений – стал 16,5-16,8).

16.06.2021 в 12:13, Raven сказал:

File is unavailable

 

Вот ссылка на Яндекс.Диск с проектом: https://disk.yandex.ru/d/gwF-TyFheBNaZg 

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


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

13 minutes ago, Holy Priest said:

В ТУ указано, что микросхема может работать на частотах 100 МГц

Это говорит всего лишь о том, что триггеры внутри ПЛИС могут переключаться с такой частотой.

Тот же счетчик многоразрядный - можно реализовать внутри ПЛИС по-разному, и частота работы будет сильно отличаться. 

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

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


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

43 минуты назад, new123 сказал:

Двухбайтные счетчики я уже на две половинки делю, чтобы времянка не просела. 

А как быть, если счётчик используется в качестве формирователя адресов? Например, мне требуется записать 4000 значений. Я делал две памяти: первая записывала нечётные отсчёты, вторая – чётные. Это улучшило работу схемы, но размерность счётчика уменьшилась же всего на один бит.

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


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

17 minutes ago, Holy Priest said:

А как быть, если счётчик используется в качестве формирователя адресов? Например, мне требуется записать 4000 значений. Я делал две памяти: первая записывала нечётные отсчёты, вторая – чётные. Это улучшило работу схемы, но размерность счётчика уменьшилась же всего на один бит.

если доступ линейный, то та делать. собирать нужный из групп по 4/8 бит, перенос через триггер. А вот если случайный доступ, то никак.

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


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

14 минут назад, des00 сказал:

если доступ линейный, то та делать. собирать нужный из групп по 4/8 бит, перенос через триггер. А вот если случайный доступ, то никак.

Правильно ли я понял, что для линейного доступа предлагается сделать несколько счётчиков, запускающихся друг за другом, и каждый из них подавать на вход адреса своей памяти размером с разрядность счётчиков? То есть, скажем, четыре счётчика на 8 бит и к ним четыре памяти на 256 значений.

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


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

11 minutes ago, Holy Priest said:

Правильно ли я понял, что для линейного доступа предлагается сделать несколько счётчиков, запускающихся друг за другом, и каждый из них подавать на вход адреса своей памяти размером с разрядность счётчиков? То есть, скажем, четыре счётчика на 8 бит и к ним четыре памяти на 256 значений.

это один счетчик, просто сложение делается по группам. например вот так

logic [15 : 0] cnt;
logic pipa;

always_ff @(posedge iclk) begin
  pipa        <= (cnt[0 +: 8] == 254);
  cnt[0 +: 8] <= cnt[0 +: 8] + 1'b1;
  cnt[8 +: 8] <= cnt[8 +: 8] + pipa[0];
end

группы можно дробить произвольно. 4 оптимальная для LUT4 архитектуры. если адрес у вас 16 бит, то и память нужна вам 2^16. Ну и чем меньше дробление, тем больше ресурсов у вас уйдет на look-ahead carry.

ЗЫ. Времянка при делении 32-х битного счетчика на 2 по 16

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


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

1 hour ago, Holy Priest said:

Это улучшило работу схемы, но размерность счётчика уменьшилась же всего на один бит.

хотел вам замечательную статью дать с примером, но вам уже ее дали ). Как только ее прочитал, всегда счетчики стал так делать. Очень помогает

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


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

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

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

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

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

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

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

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

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

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