Xilinx, Spartan6, Synplify, ISE. Я использую библиотечный модуль ICAP, который нужен для управления прошивками в конф флешке. Его инстанцирование выглядит так:
ICAP_SPARTAN6
ICAP_SPARTAN6
(
.CLK ( CLK ), // <-
.CE ( icap_c ), // <-
.WRITE ( icap_c ), // <-
.BUSY ( ), // ->
.I ( icap_i ), // <- [15:0]
.O ( ));// -> [15:0]
Оптимизатор в Synplify удаляет нахрен этот ICAP, потому что в инстансе не используются выходы. В реальности этот ICAP присоединен к загрузочной флешке и еще к каким то кишкам внутри контроллера загрузки fpga, и очень нужен. Но синтезатор это не видит, дурак он..
Мне приходится использовать выход BUSY, тянуть его по проекту и подключать куда то, где он почти не будет мешать и не сможет оптимизироваться в никуда.
Должно же быть более изящное решение! Я знаю, есть директивы /* synthesis syn_keep = 1 syn_preserve = 1*/. Я уже делал так, не помогло:
ICAP_SPARTAN6/* synthesis syn_keep = 1 syn_preserve = 1*/
ICAP_SPARTAN6/* synthesis syn_keep = 1 syn_preserve = 1*/
(
.CLK ( CLK ), // <-
.CE ( icap_c ), // <-
.WRITE ( icap_c ), // <-
.BUSY ( ), // ->
.I ( icap_i ), // <- [15:0]
.O ( ));// -> [15:0]
Что делать? Спасите.