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

Ошибка компиляции в Vivado 2016.4

Всем привет.

Проект в Vivado 2016.4

Кристалл Kintex Ultrascale xcku035-ffva1156-2-e.

 

Изначально проект компилировался и успешно работал.

По мере развития проекта добавил модуль (точно без ошибок и правильно работающий) довольно тяжеловесный.

Проект при генерации файла прошивки вылетел с ошибками и критическими варнингами.

5 critical warnings

[Route 35-54] Net: Zaltys_SVN_inst/zaltys_hdrm_demod_toplevel_inst/tim/tim_top/zaltys_hdrm_demod_tim_tint_u/cbPLFRAME_reg[15]_BUFG is not completely routed.

[Route 35-54] Net: Zaltys_SVN_inst/zaltys_hdrm_demod_toplevel_inst/tim/tim_top/zaltys_hdrm_demod_tim_tint_u/cbPLFRAME_reg[15]_BUFG is not completely routed.

[Route 35-8] Design has 3 unrouted pins, that are still reachable.

[Route 35-1] Design is not completely routed. There is 1 net that is not completely routed.

[Timing 38-282] The design failed to meet the timing requirements. Please see the timing summary report for details on the timing violations.

 

write bitstream (2 errors)

[DRC 23-20] Rule violation (RTSTAT-2) Partially routed net - 1 net(s) are partially routed. The problem bus(es) and/or net(s) are Zaltys_SVN_inst/zaltys_hdrm_demod_toplevel_inst/tim/tim_top/zaltys_hdrm_demod_tim_tint_u/cbPLFRAME_reg[15]_BUFG.

[Vivado 12-1345] Error(s) found during DRC. Bitgen not run.

 

Сути ошибки совершенно не понял. Более того сигнал Zaltys_SVN_inst/zaltys_hdrm_demod_toplevel_inst/tim/tim_top/zaltys_hdrm_demod_tim_tint_u/cbPLFRAME_reg[15]_BUFG в исходнике модуля

Zaltys_SVN_inst/zaltys_hdrm_demod_toplevel_inst/tim/tim_top/zaltys_hdrm_demod_tim_tint_u отсутствует. Сигнал cbPLFRAME - это вообще внутренний сигнал совершенно другого модуля, к которому раньше претензий никаких небыло. В общем какая-то чертовщина.

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

Post implementation

LUT 75103 203128 36.973236

LUTRAM 9457 112800 8.383865

FF 64777 406256 15.944873

BRAM 129.5 540 23.981482

DSP 64 1700 3.7647057

IO 51 520 9.807693

GT 4 16 25.0

BUFG 11 480 2.2916667

PLL 1 20 5.0

PCIe 1 2 50.0

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


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

Приветствую!

Всем привет.

Проект в Vivado 2016.4

Кристалл Kintex Ultrascale xcku035-ffva1156-2-e.

... /cbPLFRAME_reg[15]_BUFG ...

Судя по всему синтезатор пытается прилепить региональный BUFG на выход регистра имеющего большой fanout а потом не может развести так как потребители этого BUFG разбросаны по кристаллу где попало в разных clock region.

 

Можно попробовать запретить эти вольности при синтезе атрибутом (* dont_touch="true" *) или (* buffer_type="none" *) для этой цепи ну и ручками попробовтаь расфанаутить (* max_fanout=<number> *)

 

Удачи! Rob.

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


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

Судя по всему синтезатор пытается прилепить региональный BUFG на выход регистра имеющего большой fanout а потом не может развести так как потребители этого BUFG разбросаны по кристаллу где попало в разных clock region.

 

Можно попробовать запретить эти вольности при синтезе атрибутом (* dont_touch="true" *) или (* buffer_type="none" *) для этой цепи ну и ручками попробовтаь расфанаутить (* max_fanout=<number> *)

 

Удачи! Rob.

 

Сигнал cbPLFRAME это внутренний сигнал модуля, 16 бит счетчик. Ему вообще нет смысла подключаться через bufg.

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


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

Приветствую!

Сигнал cbPLFRAME это внутренний сигнал модуля, 16 бит счетчик. Ему вообще нет смысла подключаться через bufg.
Мне от сюда плохо видно что за счетчик у Вас там нарисован и где именно используются выходы из него.

Вы бы открыли post-map/post-palce netlist по вьювере и посмотрели куда идут эти цепи и какие fanout у них.

Удачи! Rob.

 

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


Ссылка на сообщение
Поделиться на другие сайты
Сигнал cbPLFRAME это внутренний сигнал модуля, 16 бит счетчик. Ему вообще нет смысла подключаться через bufg.

А не gated clock или latch ли вы там накодили случайно?

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


Ссылка на сообщение
Поделиться на другие сайты
А не gated clock или latch ли вы там накодили случайно?
Не обязательно. Любые сигналы с очень большим фанаутом могут быть пропущены через BUFG. В Зайлинксе я с таким не сталкивался, а в Альтере было дело.

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


Ссылка на сообщение
Поделиться на другие сайты
Не обязательно. Любые сигналы с очень большим фанаутом могут быть пропущены через BUFG. В Зайлинксе я с таким не сталкивался, а в Альтере было дело.

В Зайлинксе такое бывает только если сигнал где-то используется в качестве такта, либо случайно по ошибке вкрался латч (а он тоже на тактовый вход приходит). Самолично имел дело с сигналами разрешения клока (fanout до нескольких тысяч). Так вот для борьбы с времянками приходилось "вручную" директивами такой fanout "распиливать" на куски по 100 входов. И ни разу не было замечено использования глобальных буферов.

 

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


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

Приветствую!

В Зайлинксе такое бывает только если сигнал где-то используется в качестве такта, либо случайно по ошибке вкрался латч (а он тоже на тактовый вход приходит). Самолично имел дело с сигналами разрешения клока (fanout до нескольких тысяч). Так вот для борьбы с времянками приходилось "вручную" директивами такой fanout "распиливать" на куски по 100 входов. И ни разу не было замечено использования глобальных буферов.
Не повезло Вам ;) так как в Xilinx бывает и такое :

...

According to UG835 this only happens when you specify -bufg_opt to opt_design.

-bufg_opt - (Optional) Perform various optimizations related to global buffers (BUFG/BUFGCE). Insert a buffer on unbuffered clock nets (fanout > 30), insert BUFGs on high fanout nets (fanout > 25k), and perform load-splitting when a high-fanout net drives both combinational and sequential logic: the combinational portion bypasses the BUFG because the added delay is too large.

...

From UG904, bufg insertion is on by default for opt_design. Check table 2-3 at page 52 in below link:

You can restrict the default Optimization by using the command line. Check page 56 in same link.

If you just want to disable the bufg insertion of opt_design use the following command for opt_design:

opt_design -retarget -propconst -sweep -shift_register_opt -bram_power_opt

...

These two thresholds can be modified with the following parameters:

To change the fannout threshold from the default of 50000:

set_param logicopt.thresholdBUFGinsertHFN 20000

To change the threshold of total BUFGs and instantiated BUFHCEs in the design:

set_param logicopt.thresholdBUFGperRegion 15

Note: the parameter name is misleading because the threshold is the total number.

...

А так как в UltaScale BUFG дофига и структура глобальных буферов отличается от предыдущих семейст ( более похожа на древовидную структуру ASIC) то порог использования в качестве драйверов для HF nets может быть ниже.

 

Удачи! Rob.

 

 

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


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

Не повезло Вам ;) так как в Xilinx бывает и такое :

А так как в UltaScale BUFG дофига и структура глобальных буферов отличается от предыдущих семейст ( более похожа на древовидную структуру ASIC) то порог использования в качестве драйверов для HF nets может быть ниже.

 

Удачи! Rob.

 

Всем еще раз привет. С проблемой разобрался. Все дело было в IP-ila (логический анализатор). Закоментировал ila и проект развелся и заработал. Перекомпилировал ila, добавив сигналов и увеличив глубину. Собрал проект и все работает. Вот такие вот ядра у вивады :-)

Тему можно закрывать. Всем спасибо.

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


Ссылка на сообщение
Поделиться на другие сайты
Всем еще раз привет. С проблемой разобрался. Все дело было в IP-ila (логический анализатор). Закоментировал ila и проект развелся и заработал. Перекомпилировал ila, добавив сигналов и увеличив глубину. Собрал проект и все работает. Вот такие вот ядра у вивады :-)

Тему можно закрывать. Всем спасибо.

Недавно наблюдал аналогичную проблему на Kintex. Есть два банка и две корки с сигналами, тактируемыми от региональных буферов RCLK в каждом банке соответственно. Так вот попытка поглядеть в одном ILA сигналы с обеих корок приводит к фейлу при разводке.

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация