Цитата(Cosworth @ Sep 19 2014, 03:09)

Ну собственно под "врукопашную" я имел ввиду активное использование LogicLock (что вообще мне всегда казалось не правильным).
Это уже совсем экстремальный случай, за 16 лет работы с ПЛИС мне не разу это не потребовалось, все решалось более простыми методами.
Цитата
А выходит что один фиг, захочет фиттер расположить логику по разным углам, и ничего не остается как самому влезать в разводку.
Если вы прописали все временные ограничения вашего проекта и софт их принял, то синтезатор сделает поправки на синтез (если есть опция Timing-Driven Synthesis), маппер и роутер обязательно их учтут и будут искать решение задачи. В среднем, в современных плис соотношение задержек логики и разводки в плотных проектах от 50/50 до 20/80.
Цитата(Cosworth @ Sep 19 2014, 03:09)

Вот мне тогда не совсем понятно, что значит оптимальный код?
Цитата(johan @ Sep 19 2014, 03:58)

Не поделитесь примеров оптимизации под целевую архитектуру?
Мне казалось, либо ты пишешь оптимально (по частотке или по ресурсам - что тебе важнее), либо нет. Либо под оптимизацией под архитектуру Вы понимаете, что-то относительно низкоуровневое, а ля 6-входовый LUT у Stratix'a, а у Cyclone он 4-х входый? Либо что-то более высокоуровневое?
Оптимальное описание должно учитывать архитектурные возможности целевой ПЛИС. Например :
Под альтеру :
1. приоритет сигналов установки и сброса триггеров и разрешения тактовой
2. Приоритет сигналов синхронной загрузки триггеров (у альтер этот мультиплексор стоит за лютом)
3. Какие именно сигналы LE идут на арифметические блоки
4. Размерность LUT
Под xilinx :
1. Количество и возможности реализации сигналов управления триггером
2. Размерность и количество выходов LUT из связь с выходным триггером(ами), возможности использования их ресурсов LUT (RAMS/RAMD, SRL, LUT, dual LUT)
3. Возможности использования MUXF7, MUXF8 (у них они стоят после LUT)
4. Возможности использования MUCXY, XORCY (тоже стоят после LUT)
Под Lattice и Actel : не в курсе, не работал, это лучше узнать у
SM и
yesВо всех семействах нужно учитывать структуру CLB/LB т.к. внутри нее связи быстрее чем со внешним миром, размер CLB/LB (например у сыклонов 1 он был не 16, а 10 бит) и т.д.
На моих проектах, сокращение занимаемых ресурсов достигало ~2 раза, рост времянки в ~1,5 раза. Все это на уровне поведенческого описания. Хотя в некоторых, особо тяжелых случаях, приходилось руками вставлять примитивы и собирать CLB/LB примитивами (макросы рулят и за их отсутствие мне очень не нравиться VHDL). Но это уже редкость.