реклама на сайте
подробности

 
 
> как создать RPM из VHDL кода?
cornflyer
сообщение Oct 4 2007, 11:06
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 166
Регистрация: 11-07-06
Из: Dubna
Пользователь №: 18 729



Участвую в разработке большого проекта для 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="";

Закоментирвал первую... Осталась ругань на вторую...
Что делать со второй - не знаю
Похоже он ее не развел...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
cornflyer
сообщение Oct 11 2007, 13:46
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 166
Регистрация: 11-07-06
Из: Dubna
Пользователь №: 18 729



РЕШЕНО : RPM в xilinx ISE 7.1i

1. Cоздаем пустой проект, добавляем в проект свой модуль VHDL - my_module.vhd

2. Добавляем файл аттрибутов my_module.ucf:
NET "bus(0)" S ;
NET "bus(1)" S ;
...
NET "bus(15)" S ;
...
INST "/*/" AREA_GROUP = "AG_my_module" ;
AREA_GROUP "AG_my_module" RANGE = SLICE_X0Y0:SLICE_X12Y20 ;

4. Настраиваем ISE:

Synthesize - XST -> Properties:
"Add I/O Buffers" - DISABLED
"Optimization effort" - HIGH
"Optimization Goal" - Speed

Implement Design -> Properties:
"Creation of I/O Pads from Ports" - DISABLED
"Map Properties -> Trim unconnected Signals" - DISABLED

5. Запускаем синтез проекта:
Запускаем "Implement Design / Place & Route / View/Edit Placed Design (FPGA Floorplanner)"

Проверяем что наш модуль поместился в выбранный диапазон SLICE_X0Y0:SLICE_X12Y20
Т.е. смотрим во вкладке Warnings в самом низу окна ISE
Там должны быть только такие сообщения:
...
WARNING:Par:275 - The signal number_of_channels(0) has no driver
...

ЕСЛИ ТАМ ЕСТЬ ЧТО-ТО ТИПА:
...
...can't ....
...
Значит проект не поместился -> Повторяем пункт 2 с другим диапазоном SLICE

6. В открывшемся окне Floorplanner:
6.1 Выделяем наш модуль
6.2 Floorplan -> Replace All with Placement
6.3 Жмем кнопку Save

В появившемся окошке выбираем наш файл атрибутов my_module.ucf и жмем OK.

7. В среде ISE запускаем "User Constraints -> Edit Constraints (Text)
Видим что в этот файл были добавлены новые строчки типа:
INST "_n00113611" LOC = "SLICE_X3Y18" ;
...

Кликаем правой кнопкой мышки по этому файлу и в выпадающем меню выбираем Select All
Таким образом мы выделили весь текст
Далее меню ISE -> Edit -> Replace...

В появившемся окне в поле "Find what:" пишем LOC
В поле "Replace with:" пишем RLOC
Жмем Replace All

Таким образом мы заменили во всем файле LOC на RLOC.

Теперь повторяем процедуру замены - меняем "SLICE_ на пробел и меняем " ; на ;
Теперь наш файл должен выглядеть следующим образом:
INST "_n00113611" RLOC = X3Y18 ;
...

Далее удаляем из нашего файла все строчки типа:
NET "bus(0)" S ;
NET "bus(1)" S ;
...
NET "bus(15)" S ;
...
INST "/*/" AREA_GROUP = "AG_my_module" ;
AREA_GROUP "AG_my_module" RANGE = SLICE_X0Y0:SLICE_X12Y20 ;

Отсавляем только строчки, добавленыем Floorplanner'ом.

Добавляем к полученному файлу строчку:
INST "/*/" U_SET = "my_module_set" ;

8. Создаем в папке нашего проекта файл make_rpm.bat с текстом:
ngcbuild -uc my_module.ucf my_module my_module_RPM.ngc > error.log

Запускаем это файл.
В результаете создается файл error.log
Этот файл должен выглядеть так:
...
NGCBUILD Design Results Summary:
Number of errors: 0
Number of warnings: 0

Writing NGC file "rpm.ngc" ...

Writing NGCBUILD log file "rpm.blc"...

NGCBUILD done.
...

9. Созданный файл my_module_RPM.ngc является RPM.
Теперь этот модуль можно использовать в других проектах.
Теперь осталось создать для нашего компонента графический модуль:
Design Utilities -> Create Schematic Symbol.
В результате будет создан файл my_module.sym

10. Чтобы использовать этот модуль в другом проекте, напрмер top.sch, необходимо
сделать следующее:

10.1 Копируем в папку проекта файлы my_module_RPM.ngc и my_module.sym

10.2 Synthesize - XST -> Properties:
"Add I/O Buffers" - ENABLED
"Optimization effort" - normal
"Optimization Goal" - Speed

10.3 Implement Design -> Properties:
"Map Properties -> Trim unconnected Signals" - ENABLED

10.4 Добавляем в проект файл my_module_RPM.ngc

10.5 В файл аттрибутов текущего проекта top.ucf добаляем строчки:
INST "my_module_INST" RLOC_ORIGIN = X4Y4 ; # место расположения модуля внутри кристалла ПЛИС
INST "my_module_INST" OPTIMIZE = OFF ;

Запускаем "Implement Design / Place & Route / View/Edit Placed Design (FPGA Floorplanner)"
и видим наш модуль размещенным внутри кристалла ПЛИС.

Сообщение отредактировал cornflyer - Oct 11 2007, 13:51
Go to the top of the page
 
+Quote Post
rloc
сообщение Oct 11 2007, 17:33
Сообщение #3


Узкополосный широкополосник
******

Группа: Свой
Сообщений: 2 316
Регистрация: 13-12-04
Из: Moscow
Пользователь №: 1 462



Цитата(cornflyer @ Oct 11 2007, 17:46) *
РЕШЕНО : RPM в xilinx ISE 7.1i
.....

Сложно все получается, плюс зависимость от версии. Попробовал сам повторить - у меня в голове все извилины переплелись. Лучше следовать документированным и описанным возможностям. wacko.gif
Go to the top of the page
 
+Quote Post
cornflyer
сообщение Oct 12 2007, 06:40
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 166
Регистрация: 11-07-06
Из: Dubna
Пользователь №: 18 729



Цитата(rloc @ Oct 11 2007, 21:33) *
Сложно все получается, плюс зависимость от версии. Попробовал сам повторить - у меня в голове все извилины переплелись. Лучше следовать документированным и описанным возможностям. wacko.gif

Это готовый рабочий способ, если сделать все точно как написано.
Я пытался следовать документированным и описанным возможностям - не получалось.
Ngcbuild ругался что не может найти экземпляр моего компонента, когда я во floorplanner
пытался нажимать Write to UCF file и ставил галочку generate NGC file.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 04:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.01426 секунд с 7
ELECTRONIX ©2004-2016