Полная версия этой страницы:
Как бороться с оптимизацией
Скажите, есть ли возможность зафиксировать элементы таким образом, что бы при оптимизации они остались в схеме. Задача стоит в том, что мне необходимо сделать задержку сигнала от начала исходных порядка 10нс. Если я ставлю последовательно пару инверторов, то компилятор их оптимизирует. Работаю в FPGAdv через леонардо.
В разных синтезаторах есть аттрибуты навроде keep, dont_touch, preserve, отвечающие за это дело. Leonardo это очень старый синтезатор, я с ним лет 5 назад последний раз дело имел, не помню, как там именно. Еще есть второй, основной вопрос - какой PAR софт используется, он тоже умеет пооптимизировать.
Если речь про альтеру (но для нее путь больно уж череззадавтогенный), то там есть примитив LCELL, не оптимизируемый, показывающий, что в этой точке должен быть выход LUT.
reksar
Mar 31 2009, 09:32
в случае с Xilinx, мне известно есть constraint - OPTIMIZE. который может принимать значения AREA, SPEED, BALANCE, OFF. в случае значения OFF как я понимаю и имеем отключение оптимизации. о его применении более подробно - в Xilinx constraints guide, стр.245(идет в комплекте с ISE, у меня версия 9.2). сам пока еще не пробовал применять.
Methane
Mar 31 2009, 09:47
Цитата(Gantz @ Mar 31 2009, 10:57)

Скажите, есть ли возможность зафиксировать элементы таким образом, что бы при оптимизации они остались в схеме. Задача стоит в том, что мне необходимо сделать задержку сигнала от начала исходных порядка 10нс. Если я ставлю последовательно пару инверторов, то компилятор их оптимизирует. Работаю в FPGAdv через леонардо.
Вы, случайно не хотите таким образом 100 мегагерц получить?
Проект упаковываю в Actel.
Reksar -> Проект оставлять полностью без оптимизации нельзя.
SM -> можно пробовать dont_touch, по описанию подходит. Не подскажете как можно передать параметр. В примере описано как:
attribute <name> of <object> : <class> is <value>,
а необходимо:
dont_touch IX;
Цитата(Methane @ Mar 31 2009, 13:47)

Вы, случайно не хотите таким образом 100 мегагерц получить?

. нет.
Цитата(Gantz @ Mar 31 2009, 13:58)

Не подскажете как можно передать параметр.
Как-то примерно так, плюс-минус:
Код
wire w1 /* synthesis dont_touch = 1 */;
wire w2 /* synthesis dont_touch = 1 */;
assign w1 = !in;
assign w2 = !w1;
или как-то так
Код
inv inv_inst (.in(in_wire), .out(out_wire)) /* synthesis dont_touch = 1 */;
сами ройте доки, я с актелем дел не имел
to Gantz: никто не говорит о глобальном изменении для всего проекта, слишком жирно получится, весь проект без оптимизации оставлять из-за одного-двух инверторов

. этот аттрибут может применяться к отдельным компонентам, с декларированием и указанием параметра либо в самом HDL-описании, либо в UCF. но поскольку проект в Actel...
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.