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

 
 
> как создать 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
Ответов
irum4
сообщение Oct 5 2007, 09:51
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 224
Регистрация: 18-06-04
Пользователь №: 54



Не совсем понятно, зачем создавать графический элемент?


--------------------
Электроника - наука о контактах.
Go to the top of the page
 
+Quote Post
cornflyer
сообщение Oct 5 2007, 11:05
Сообщение #3


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

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



Цитата(irum4 @ Oct 5 2007, 13:51) *
Не совсем понятно, зачем создавать графический элемент?

графический элемент создавать не нужно
но млин все равно при сборке проекта мой модуль mcc.ngc
разрываеца на куски по всей площади кристалла
почему так?
он ведь должен был оставаца "кубиком"

Цитата(rloc @ Oct 5 2007, 15:01) *
Работы провел много, молодец. Для относительно небольших проектов вполне допустимо. По своему личному опыту рекомендую в самом проекте применять RLOC'ки. Преимуществ масса:
1) полный контроль над проектом
2) высокая скорость синтеза и компиляции
3) независимость от версий синтезаторов и компиляторов
4) временные ограничения выполняются вне зависимости от занимаемого объема
5) значительно меньшее энергопотребление за счет коротких связей
6) легко сделать свое IP-core в виде *.edn, *.vhd(wrapped), *.ngc

все равно при сборке проекта мой модуль mcc.ngc
разрываеца на куски по всей площади кристалла
почему так?
он ведь должен был оставаца "кубиком"...
может от того что другие модули у меня в проекте не RPM?
поэтому раздробился и мой "black box"....
Go to the top of the page
 
+Quote Post
rloc
сообщение Oct 5 2007, 11:33
Сообщение #4


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

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



Цитата(cornflyer @ Oct 5 2007, 15:05) *
все равно при сборке проекта мой модуль mcc.ngc
разрываеца на куски по всей площади кристалла
почему так?
он ведь должен был оставаца "кубиком"
может от того что другие модули у меня в проекте не RPM?
поэтому раздробился и мой "black box"....

Другие модули абсолютно не причем. Все зависит от иерархии, выхода здесь два:
1) изначально ищете в опциях синтезатора исключение иерархии и повторяете свой путь заново
2) в уже полученном *.ucf назначаете дополнительно всем инстанциям атрибут U_SET или каждому иерархическому уровню в целом свой отдельный RLOC
Go to the top of the page
 
+Quote Post
cornflyer
сообщение Oct 5 2007, 12:50
Сообщение #5


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

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



Цитата(rloc @ Oct 5 2007, 15:33) *
Другие модули абсолютно не причем. Все зависит от иерархии, выхода здесь два:
1) изначально ищете в опциях синтезатора исключение иерархии и повторяете свой путь заново
2) в уже полученном *.ucf назначаете дополнительно всем инстанциям атрибут U_SET или каждому иерархическому уровню в целом свой отдельный RLOC

млин, хотелось бы поподробнее узнать что делать )))
Go to the top of the page
 
+Quote Post
rloc
сообщение Oct 5 2007, 14:47
Сообщение #6


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

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



Цитата(cornflyer @ Oct 5 2007, 16:50) *
хотелось бы поподробнее узнать что делать )))

Попробую показать на примере, а Вы сами потом попытаетесь это проверить.

Допустим, у нас есть два примитива в *.ucf:

INST "A/A1" RLOC = "R0C0" ;
INST "B/B1" RLOC = "R0C1" ;

или другая, эквивалентная запись:

INST "A/A1" HU_SET = "BLOCK1" ;
INST "A/A1" RLOC = "R0C0" ;
INST "B/B1" HU_SET = "BLOCK1" ;
INST "B/B1" RLOC = "R0C1" ;

где "/" - иерархический символ
В этом случае A1 и B1 будут располагаться, где угодно, потому что принадлежат разным блокам A и B соответственно, даже не смотря на то, что каждому присвоено одинаковое иерархическое имя - "BLOCK1".
Теперь немножко изменим запись на

INST "A/A1" U_SET = "BLOCK1" ;
INST "A/A1" RLOC = "R0C0" ;
INST "B/B1" U_SET = "BLOCK1" ;
INST "B/B1" RLOC = "R0C1" ;

или

INST "A" RLOC = "R0C0" ;
INST "A/A1" HU_SET = "BLOCK1" ;
INST "A/A1" RLOC = "R0C0" ;
INST "B" RLOC = "R0C0" ;
INST "B/B1" HU_SET = "BLOCK1" ;
INST "B/B1" RLOC = "R0C1" ;

или

INST "A" RLOC = "R0C0" ;
INST "A/A1" RLOC = "R0C0" ;
INST "B" RLOC = "R0C0" ;
INST "B/B1" RLOC = "R0C1" ;

Теперь, в первом случае, мы сказали, что A/A1 и B/B1 - это один и тот же блок ("BLOCK1"). Во втором и третьем - просто указали, каким образом скрепить два отдельных блока, в итоге для A/A1 R0C0+R0C0=R0C0, для B/B1 R0C0+R0C1=R0C1.
Более подробно читайте в документе "Constraints Guide", в разделе Constraint Types/Placement Constraints

Если проблема не в этом, будем разбираться дальше.
Go to the top of the page
 
+Quote Post
cornflyer
сообщение Oct 8 2007, 07:00
Сообщение #7


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

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



Цитата(rloc @ Oct 5 2007, 18:47) *
Более подробно читайте в документе "Constraints Guide", в разделе Constraint Types/Placement Constraints


теперь мой файл mcc.ucf
выглядит так:

INST "_n0017<20>421" RLOC = "X5Y5" ;
INST "_n0017<20>421" U_SET="MCC_SET" ;
.... и т.п.

но это не помогло...
в финальном проекте мой компонент опять разбросало по кристаллу...
млин, придеца еще раз прочиать "Constraints Guide"...
нигде в явном виде не написано как делать rpm (???)
чтобы разводка и расположение оставались в неизменном виде...

есть ли такая опция "не трогать этот компонент при разводке"?

Сообщение отредактировал cornflyer - Oct 8 2007, 07:33
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 10:25
Рейтинг@Mail.ru


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