bogaev_roman 0 20 июня, 2011 Опубликовано 20 июня, 2011 · Жалоба Могут быть новые способы? Знаю только два: напихать в пути регистров и законстрейнить размещение. Да, есть ещё силовой перебор таблиц весов алгоритма размещения и 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]. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться