novartis 0 4 июня, 2018 Опубликовано 4 июня, 2018 · Жалоба Есть проект под Аррию 10. Данные в плис поступают через два трансивера, задействованы Altera Native Phy ядра. Так же задействовано ip ядро pcie. После компиляции проекта наблюдаю в Chip Planner, что логика в основном сосредоточена в одной области, четко видны границы сверху и снизу. Я так понимаю, что это области "действия" клоков трансиверов. И та логика, что крутится на частотах из трансиверов, размещается квартусом именно в эти области. Хотелось бы указать квартусу использовать весь кристалл для разводки логики, как это сделать? И еще вопрос, ядро Altera Transceiver Native Phy выдает клок rx_pma_clkout, как то можно узнать, какой это клок - глобальный, региональный...? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 4 июня, 2018 Опубликовано 4 июня, 2018 · Жалоба Хотелось бы указать квартусу использовать весь кристалл для разводки логики, как это сделать?А вам не всё равно, как там всё разлеглось, если констрейны выполнились? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 4 июня, 2018 Опубликовано 4 июня, 2018 · Жалоба Есть проект под Аррию 10. Данные в плис поступают через два трансивера, задействованы Altera Native Phy ядра. Так же задействовано ip ядро pcie. Возможно что в ip ядрах сделана привязка к определенным областям кристалла. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
novartis 0 4 июня, 2018 Опубликовано 4 июня, 2018 · Жалоба А вам не всё равно, как там всё разлеглось, если констрейны выполнились? Ну вот я хочу добавить еще модулей для работы с данными на этих частотах, квартус туда же все пихает и констрейны перестают выполняться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Inanity 1 4 июня, 2018 Опубликовано 4 июня, 2018 · Жалоба Ну вот я хочу добавить еще модулей для работы с данными на этих частотах, квартус туда же все пихает и констрейны перестают выполняться. А если перейти в другой домен через двухклоковое фифо? Частота та же, но домен другой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 6 июня, 2018 Опубликовано 6 июня, 2018 · Жалоба Ну вот я хочу добавить еще модулей для работы с данными на этих частотах, квартус туда же все пихает и констрейны перестают выполняться. Посмотрите как квартус развел клоки - может он их региональными сделал или периферийными (скрипты некоторых корок автоматом прописывают эти ограничения). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
novartis 0 7 июня, 2018 Опубликовано 7 июня, 2018 · Жалоба Нагуглил, где можно посмотреть список глобальных, региональных клоков: Fitter > Resource Section > Global & Other fast signals Получается, что клок из трансивера - периферийный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 7 июня, 2018 Опубликовано 7 июня, 2018 · Жалоба Получается, что клок из трансивера - периферийный. Для Вас это неожиданностью стало? Посмотрите теперь каким клоком тактируется логика, которая плохо разводится. Если эта тактовая - периферийная, то можно попробовать ее сделать глобальной через assignment editor, но не переусердствуйте - глобальные дорожки ценный ресурс. Лучше добавить одну новую общую частоту, сделать ее глобальной и перетактировать логику (не зная архитектуру проекта сложно что-либо посоветовать точнее, самый главный вопрос - каким образом Вы параллельные данные используете на выходе приемника - на какой частоте). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
novartis 0 8 июня, 2018 Опубликовано 8 июня, 2018 · Жалоба Для Вас это неожиданностью стало? Посмотрите теперь каким клоком тактируется логика, которая плохо разводится. Если эта тактовая - периферийная, то можно попробовать ее сделать глобальной через assignment editor, но не переусердствуйте - глобальные дорожки ценный ресурс. Лучше добавить одну новую общую частоту, сделать ее глобальной и перетактировать логику (не зная архитектуру проекта сложно что-либо посоветовать точнее, самый главный вопрос - каким образом Вы параллельные данные используете на выходе приемника - на какой частоте). Да не то чтобы неожиданностью, раньше не задумывался над этим, мне было всё равно, как там всё разлеглось, если констрейны выполнились. Логика, которая плохо разводится, тактируется клоками из трансиверов, эти клоки - периферийные. Я пробовал сделать эти клоки глобальными, в итоге разводится равномерно, где то по середине между pcie и трансиверами, но при этом появляются отрицательные слаки в путях параллельных данных от трансиваеров. Сейчас поступил так: разделил проект на две части, одну часть тактирую клоками из трансивера, эти клоки периферийные, здесь происходит первоначальная обработка параллельных данных; другую часть тактирую клоком из pll (глобальный клок), здесь уже следующая стадия обработки параллельных данных. Переход между клоковыми доменами сделал через двухклоковое фифо. Все разводится отлично, констрейны выполнены. Но мне надо избавиться от фифо. По идеи, есть rx_clk0 из трансивера, это периферийный клок. Можно как то создать другой клок gl_clk0 на основе rx_clk0, назначить его глобальным, и сделать переход от клокового домена rx_clk0 в клоковый домен gl_clk0 просто путем задержки на один такт? gl_clk0 <= rx_clk0; -- rx_clk0 останется периферийным, gl_clk0 - в sdc файле назначу глобальным process (rx_clk0) begin if (rising_edge(rx_clk0)) then data <= ....; -- эти данные тактируются rx_clk0 end if; end process; process (gl_clk0) begin if (rising_edge(gl_clk0)) then data_new <= data; -- эти данные уже тактируются глобальным клоком gl_clk0 end if; end process; Вот такой вариант будет корректно работать? Я конечно сам попробую так сделать, но уже завтра только смогу проверить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 9 июня, 2018 Опубликовано 9 июня, 2018 · Жалоба По идеи, есть rx_clk0 из трансивера, это периферийный клок. Можно как то создать другой клок gl_clk0 на основе rx_clk0, назначить его глобальным, и сделать переход от клокового домена rx_clk0 в клоковый домен gl_clk0 просто путем задержки на один такт? С точки зрения архитектуры этот новый клок должен пройти через клокконтрол (или как там его), и задержка у него будет приличная. Возможно придется после этого добавить в ограничениях мультицикл (условно для задержки на один такт сделать анализ по setup=2, а hold=1). Но вот вопрос - если у Вас несколько трансиверов будет, для каждого создавать новый клок? Вот такой вариант будет корректно работать? Я vhdl не знаю, но насколько понимаю, описание некорректно. gl_clk0 <= rx_clk0; Если это комбинаторика, то квартус по умолчанию новый клок выкинет за ненадобностью и ограничения поставить не получится, потребуется корку ставить (altclkctrl, раньше так называлась, могу ошибаться). Ну и по процессам написал выше - ограничения по умолчанию из-за большой задержки не будут выполняться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
novartis 0 9 июня, 2018 Опубликовано 9 июня, 2018 · Жалоба Но вот вопрос - если у Вас несколько трансиверов будет, для каждого создавать новый клок? Два трансивера, больше не предвидится. По документации на чип - имеется 32 глобальных линии клока, 16 региональных, 384 Small periphery clock, 24 Large periphery clock (думаю это как раз мои клоки из трансиверов). Так что пару глобальных линий можно и потратить. gl_clk0 <= rx_clk0; это комбинаторика, это я по быстрому сообщение писал, не подумал, так то конечно квартус выкинет. altclkctrl я ставил, там в настройках ядра указывается для какой цели задается клок - ставил for global cljck. Даже ничего в sdc прописывать не надо. На тот момент я сделал глобальным клок для всей логики, от этого констрейны для параллельных данных от трансиверов перестали выполняться. Сейчас пытаюсь собрать проект, в котором часть логики (предварительная обработка параллельных данных из трансиверов) тактируется клоками из трансиверов (периферийными клоками), а уже дальнейшая логика тактируется клоками из pll, сгенеренными от тех же кварцев, что используются для трансиверов. С переходом через двухклоковое фифо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 9 июня, 2018 Опубликовано 9 июня, 2018 · Жалоба Сейчас пытаюсь собрать проект, в котором часть логики (предварительная обработка параллельных данных из трансиверов) тактируется клоками из трансиверов (периферийными клоками), а уже дальнейшая логика тактируется клоками из pll, сгенеренными от тех же кварцев, что используются для трансиверов. С переходом через двухклоковое фифо. При работе с трансиверами я именно так и делаю. Но Вы же хотели избавиться от фифо? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться