Цитата(jojo @ Jun 18 2011, 21:35)

Могут быть новые способы? Знаю только два: напихать в пути регистров и законстрейнить размещение.
Да, есть ещё силовой перебор таблиц весов алгоритма размещения и seed-ов. Сильно помогает на высоких частотах.
Никто не говорил про новые методы, по крайней мере я. Просто у каждого разработчика есть свои набитые блоки, с которыми он когда-то намучился и теперь это эффективно использует. Я говорил про следующие вещи:
1. Мультиплексор 18-1 считается что все валидности взаимоисключаемы, разрядность - 1 бит, стратикс4. Вопрос - сколько ALUT будет использовано при таком описании?
Код
assign out_data= (val0&data0|val1&data1|val2&data2)|
(val3&data3|val4&data4|val5&data5)|
(val6&data6|val7&data7|val8&data8)|
(val9&data9|val10&data10|val11&data11)|
(val12&data12|val13&data13|val14&data14)|
(val15&data15|val16&data16|val17&data17);
У меня получается два уровня логики и 7, при использовании case в лоб получается 4 уровня и 18 ALUT. Понятно, что пример притянут за уши, но все-таки четко показывает 6-входовую архитектруру.
2. Требуется получить сигнал о состоянии пустоты буфера, например так
Код
(wa-ra)==4'd0?
Можно использовать сдвиговый регистр (хотя будет проигрыш по ресурсам):
Код
always @(posedge clk) case ({we,re})
2'b10: sh_full<= {1'b1,sh_full[15:1]};
2'b01: sh_full<= {sh_full[14:0],1'b0};
default: sh_full<= sh_full;
endcase
И использовать сразу выход триггера sh_full[0].