Vascom 0 13 декабря, 2016 Опубликовано 13 декабря, 2016 · Жалоба Задача сперва сделать set_false_path большому числу сигналов, а затем часть из них исключить. Но Vivado 2016.2 не умеет делать reset_path. Подскажите, как быть? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vascom 0 14 декабря, 2016 Опубликовано 14 декабря, 2016 · Жалоба Неужели ни кто не сталкивался? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
FakeDevice 0 14 декабря, 2016 Опубликовано 14 декабря, 2016 · Жалоба может, просто при задании set_false_path сразу исключить неприкасаемые сигналы? слышал, вивада умеет парсить регулярные выражения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vascom 0 14 декабря, 2016 Опубликовано 14 декабря, 2016 · Жалоба Да, парсить умеет. Только выдаёт кучу ворнингов наподобие WARNING: [Constraints 18-401] set_false_path: 'decoders_inst/ldpc_0/ldpc_graph_inst/pnp_gen[8].pnp__58_i_5/S[1]' is not a valid endpoint. [/my_prj/sim/fpga/gnss_dsp_impl.xdc:51] Resolution: A valid end point is a data pin of a sequential cell or a primary output or inout port. Please validate that all the objects returned by your query belong to this list. Проект огромный, таких невалидных endpoint, наверное, сотни тысяч. Поскольку мне надо сделать false path на ресет к регистрам, то все "не регистры" выдают этот ворнинг. Лог конечно затыкается на 100 ворнингов, но это же не дело. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 14 декабря, 2016 Опубликовано 14 декабря, 2016 · Жалоба Проект огромный, таких невалидных endpoint, наверное, сотни тысяч. Поскольку мне надо сделать false path на ресет к регистрам, то все "не регистры" выдают этот ворнинг. А что Вы хотите сделать в общем случае? Закрыть пути для анализа от локального сброса до асинхронного сброса регистров? Если локальный сброс регистр - то банальным: set_false_path -from [get_registers {soft_rst*}] Или Вы используете сброс еще в какой-то комбинационной логике? Если так, то в общем случае я такого лично нигде не видел. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vascom 0 14 декабря, 2016 Опубликовано 14 декабря, 2016 · Жалоба Почти. Закрыть все пути кроме нескольких. Там важен момент старта счётчика. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 14 декабря, 2016 Опубликовано 14 декабря, 2016 · Жалоба Почти. Закрыть все пути кроме нескольких. Там важен момент старта счётчика. Пояснили бы часть алгоритма. Сброс внешний или используете пересинхронизацию на внутренней логике? Если вариант второй, то может имеет смыл продублировать логику и пустить на те регистры, которые не требуется закрывать для анализа. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vascom 0 14 декабря, 2016 Опубликовано 14 декабря, 2016 · Жалоба Есть три синхронных клока, грубо говоря clk_1, clk_2, clk_4. Частота clk_2 и clk_4 соответственно в 2 и 4 раза меньше, чем clk_1. Ресет снимается по negedge clk_1 изнутри при определённом положении этих клоков - когда clk_2 и clk_4 в единице. При снятии ресета начнёт щёлкать счётчик, важно чтобы он начинал отсчёт именно при таком расположении клоков. Но это лирика. Про дублирование ресета думал, однако не хотелось бы ради этого изменять дизайн. Регистры, которые не требуется закрывать для анализа находятся внутри иерархии модулей. Странно, что вивадо не умеет делать исключения из констрейнов или оверрайды констрейнов определённых ранее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tausinov 0 14 декабря, 2016 Опубликовано 14 декабря, 2016 · Жалоба Если клоки используются только в таком контексте, то возможно есть смысл вместо кратных клоков использовать valid_en2 и valid_en4, совпадающий c фронтом соответствующих клоков или же с полупериодом, когда они равны 1, в зависимости от того, что нужно. А так, да, искать по маске, как уже писали выше: set_false_path -through[get_cells{*}] - типа такого что-то Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vascom 0 14 декабря, 2016 Опубликовано 14 декабря, 2016 · Жалоба Нет, клоки реальные и идут дальше на логику. В том-то и дело, что мне надо не задать false path по маске, а задать на всё, но исключить часть путей. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 14 декабря, 2016 Опубликовано 14 декабря, 2016 · Жалоба В том-то и дело, что мне надо не задать false path по маске, а задать на всё, но исключить часть путей. Каким образом в вивадо это сделать конкретно я Вам ответить не могу. А вообще похоже на какое-то шаманство - сброс по срезу, работа по фронту. Нет, клоки реальные и идут дальше на логику. Идут они извне или на одном DCM формируются (или как клок визард в последних версиях называется)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vascom 0 14 декабря, 2016 Опубликовано 14 декабря, 2016 · Жалоба Сброс по срезу, работа по фронту - это нормальный асинхронный ресет, а не шаманство. always @(posedge clk or negedge rstn) if (!rstn) reg0 <= 1'b0; else ... Клоки формируются на одном PLL. Не надо на этом зацикливаться. Дизайн правильный, отличный, проверенный, соответствует стандартам и гайдлайнам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tausinov 0 14 декабря, 2016 Опубликовано 14 декабря, 2016 · Жалоба Кстати, вот. -reset_path - (Optional) Reset the timing path before setting false path. This clears all exception-based timing constraints from the defined timing path. Это ключик к set_false_path. Идут они извне или на одном DCM формируются (или как клок визард в последних версиях называется)? Корка так и называется - ClockWizard, а в результате получается MMCM или PLL Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 14 декабря, 2016 Опубликовано 14 декабря, 2016 · Жалоба Сброс по срезу, работа по фронту - это нормальный асинхронный ресет, а не шаманство. Я применительно к этой фразе про шаманство Ресет снимается по negedge clk_1 изнутри при определённом положении этих клоков - когда clk_2 и clk_4 в единице Ну т.е. я понял так - есть клоки, которые идут по глобальным шинам, а потом они же используются в комбинационной логике, просто нигде такого не встречал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vascom 0 14 декабря, 2016 Опубликовано 14 декабря, 2016 · Жалоба Кстати, вот. -reset_path - (Optional) Reset the timing path before setting false path. This clears all exception-based timing constraints from the defined timing path. Это ключик к set_false_path. Да, только мне надо не до set_false_path, а после него. Чтобы отменить его действие. Я применительно к этой фразе про шаманство Ну т.е. я понял так - есть клоки, которые идут по глобальным шинам, а потом они же используются в комбинационной логике, просто нигде такого не встречал. Да, это грязный хак. Обычно так делать не следует в FPGA, но если очень хочется, то можно с небольшим количеством логики :) Это самое простое чтобы выставить ресет в нужный мне момент. Тут всё успевает по таймингам, проблем нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться