Участвую в разработке большого проекта для FPGA Xilinx Spartan 3.
Мне поручили разработать модуль многоканального счетчика в виде RPM (Relationally Placed Macros).
Он должен быть в виде файла mcc.ngc
При финальной сборке проекта этот модуль не должен перекомпилироватся.
Т.е. его можно двигать внутри кристалла без изменения внутренней разводки этого модуля.
1. Я создал пустой проект, написал реализацию на VHDL.
Топ модуль у меня - схема - top.sch
2. Создал графический элемент и поместил его в top.sch
3. На ноги компонента повесил пады
и обозвал их в файле top.ucf с аттрибутом S (SAVE) типа:
...
NET "mcc_data(0)" S;
...
Т.е. в конфигурационном файле top.ucf прописал аттрибуты сохранения,
иначе синтезатор выкидывает всю логику
4. Настроил синтезатор:
"Optimization Goal" - Area
"Add I/O Buffers" - DISABLED
"Keep Hierarchy" - YES
"Enable autofloorplaning" - Incremental design
"Synthesis constraints file" - mcc.xcf
в этом файле всего одна строчка:
MODEL "mcc" incremental_synthesis = yes ;
"Creation of I/O Pads from Ports" - DISABLED
5. Далее запустил Implement design-> View/Edit Routed Design (FPGA Editor)
вижу размещенные компоненты
Запускаю Route -> Auto Route All
...
"Completed route status: 0 of 95 nets are fully routed."
6.Tools -> Directed Routing Constraints
Тут 3 опции:
First Setting Option: Do not generate Placement Constraint
This setting will generate a constraint for the routing only. It is designed to be used with existing RPMs.
Second Setting Option: Use Relative Location Constraint
This setting will generate an RPM for the source and load components along with the routing constraint.
The RPM can be relocated around the device letting the Placer make the final decision on placement.
Third Setting Option: Use Absolute Location Constraint
This setting will cause the source and load components attached to the target net to be locked in place.
Выбираю 2-ю опцию: Use Relative Location Constraint
Ставлю галочку "Append directed routing constarints to a file"
И жму Apply
Делается аппенд(вставка) в файл top.ucf
коментирую свои аттрибуты типа: NET "mcc_data(0)" S;
оставляю незакоменированными аттрибуты которые сгенерил FPGA editor
7. Запускаю Implement чтобы используя новый top.ucf синтезировать
mcc.ngc, т.е. RPM файл, который можно будет подцепить к любому проекту....
Но синтезатор ругаеца на эти строчки:
NET "GLOBAL_LOGIC0"
ROUTE="";
NET "XLXI_1/channel_addr_cnt<0>/XLXI_1/channel_addr_cnt<0>.C1VDD.1"
ROUTE="";
Закоментирвал первую... Осталась ругань на вторую...
Что делать со второй - не знаю
Похоже он ее не развел...