evocatus
-
Постов
15 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные evocatus
-
-
Опубликовано · Изменено пользователем evocatus · Пожаловаться
Если вдруг в дизайн на Verilog попадает большое IP-ядро (например, MIG или 10GEMAC от Xilinx), то прописывать ручками одни и те же сигналы много раз (в объявлении инстанса ядра, в объявлении подключённых к нему сигналов в модуле верхнего уровня, в объявлении этих сигналов, выходящих из модуля наружу, для тестбенча этого модуля..) очень быстро надоедает,
Поэтому я сделал маленькую программу, которая автоматизирует эти задачи.
Программе для работы нужен установленный интерпретатор Python 2 или 3. Лицензия MIT.
Работает под всеми операционными системами, где есть интерпретатор Python, т.е. Linux, Windows, OS X
Что она умеет?
Генерировать из шаблона инстанса IP-ядра (из .veo файла) или модуля код для объявления подключённых к нему сигналов
Обратная задача - генерировать код для инстанциирования модуля по списку его сигналов
Сопутствующие задачи - массовая смена направления, ширины и типа сигналов.
Краткое описание кнопок:
Clear очищает текстовое поле
Copy копирует его содержимое в буфер обмена
inst. -> ports превращает код для создания экземпляра модуля в код объявления сигналов для него
ports -> inst. - наоборот
Следующие функции работает как с одной строкой текстового поля (на которой сейчас мигает курсор), так и с выделенными несколькими строками (если выделены)
revert меняет input на output и наоборот. Никак не затрагивает inout
make local убирает из объявления сигнала направление
wire меняет тип на wire, reg, соответственно, на reg
bus делает сигнал шиной или меняет ширину шины. Для этого сначала надо ввести желаемую ширину в битах в маленьком окошке справа от кнопки
simgle делает шину одиночным сигналом
Собственно, ссылка: https://github.com/reflechant/veri_ports
прямая ссылка: https://github.com/reflechant/veri_ports/ra...r/veri_ports.py
просьба оставлять сообщения о багах здесь: https://github.com/reflechant/veri_ports/issues
Надеюсь это кому-то пригодится.
-
ISE 14.1 при попытке сделать "Verify UCF and Update Design and UCF" выводит такое:
http://bpaste.net/show/200196/
Как вообще себя вести в таких ситуациях? Есть плата, в её документации описана разводка и приведён UCF-файл, а ISE не хочет его принимать.
-
А package какой (сколько пинов в корпусе). И еще хорошо бы оригинальный UCF
Оригинальный UCF (я так понял это тот, что сгенерировал MIG) я выкладывал выше. Дублирую ссылку.
Корпус FG320
-
Опубликовано · Изменено пользователем evocatus · Пожаловаться
А какой у Вас спартан? Можете UCF выложить?Похоже, что в случае startan-3 второй путь невозможен, т.е. проще всего ему UCF скормить, как вы сказали.
Мой самописный UCF (на базе того, что из документации по плате)
Spartan-3E XC3S500E-4C
-
Два пути:
1. Можно скормить MIGу.
2. Добиться, чтобы MIG сгенерировал UCF-файл с теми же пинами, что и в документации. Мне кажется, это более правильный путь.
Во втором случае, как я понимаю, надо выбрать соотв. банк?
Он и сейчас (когда я его вообще не ограничивал) 3 пина из control/address раскидать не может, я их вручную в один из банков вставлял.
-
Если просто поменять в этом шаблоне пины, то скорее всего работать не будет (так как там учитываются задержки).
Т.е. нужно конечно использовать "add and verify ucf". Но и там кажется, в CoreGene был еще выбор номера банка. Если у Вас Evaluation board, то при выборе банка, к которому подключена DDR, должны сгенериться пины именно для вашей платы.
А еще можно поискать дизайн-примеры для вашей Evaluation board (например, http://www.xilinx.com/products/boards/s3es...nce_designs.htm), и взять оттуда часть UCF для DDR.
UCF я уже написал (он был в документации по плате, это Spartan-3E Starter Kit). Мне теперь просто скормить его MIG'у?
-
Это шаблон, который надо вставить в свой UCF. В Spartan-3 контроллер DDR реализуется на логических ячейках, которые должны быть закреплены на определенных местах. Эти места прописаны в UCF.
А если мне надо поменять назначение пинов? Мне кажется, что менять этот шаблон напрямую - не самая лучшая идея. Вроде у MIG есть функция типа "add and verify ucf" (за точность названия не ручаюсь). Это то, что мне надо?
-
Опубликовано · Изменено пользователем evocatus · Пожаловаться
Решил проблему поставив ISE 14.1 - он корректно генерит ядра для всех вариантов.
Непонятно вот что: как правильно назначить пины для ядра?
При создании ядра генерируется ucf файл (в папке ipcore_dir/ipcorename/user_design/par) с таким содержимым. Он реально используется, или это только шаблон, который мне надо вставлять в свой ucf?
-
ISE: 14.3: MIG: 3.6.1
Надо работать с памятью на плате Spartan-3E Starter Kit. Та память, что там есть (MT46V32M16TG-6TF) в списке ise не значится, поэтому пришлось создать для неё запись вручную на базе MT46V32M16XX-5B, взяв значения из микроновских доков.
Вобще интерфейс 16-битный (ширина шины данных). Но для 16-битного интерфейса ядро даже не создаётся, выводя такую ошибку:
ERROR:sim - Failed to generate 'ddr'.
Wrote CGP file for project 'ddr'.
Core Generator edit command failed.
Пробовал создать ядро для 8-битного интерфейса. Создаётся. Но теперь надо его переконфигурировать под реальную распиновку платы. Создал UCFфайл, но при попытке скормить его MIG'у выводит ошибку:
Reading design libraries of xc3s500e-fg320... successful !
/*******************************************************/
/* Controller 0
/*******************************************************/
ERROR: All the dqs signal(s)/pin(s) are missing.
Помогите, пожалуйста.
-
10G ethernet каким интерфейсом цеплять хотите?
Вы имеете в виду XGMII и т.д.? Впервые с этим всем сталкиваюсь, ещё не разобрался.
Мне сказали, что если подключать сразу PHY, то придётся самому делать линейное кодирование. Но в доках по GTX трансиверам написано, что они сами умеют 8/10. Есть ещё вариант через XGMII и я не знаю что выбрать.
По микроконтроллерам есть сборники типовых решений. Есть ли такое для FPGA? :05: :laughing:
-
ZASADA, а как вы определяете подо что лучше проект ложится?
akorud, можно поподробнее про запитку Kintex-7? Сколько ей напряжений надо? Я правильно понимаю, что она греется меньше, потому что 7-е поколение и другой техпроцесс?
Чтобы определиться окончательно мне нужно понять сколько всё-таки нужно пинов FPGA для подключения 10G Ethernet и одной планочки DDR3
-
goodsoul, спасибо. Смотрел альтеровскую PDF с сравнением SoC ихних и Xilinx. Не знаю сколько там маркетинга, но выглядит, как будто Altera действительно лучше.
Похоже, в SoC действительно нет надобности. Планирую Virtex-6 (из-за 10гигабитных GTX трансиверов).
P.S. Как убедить начальство, что альтера лучше? Раньше её использовали, но потом по малоизвестным мне причинам стали юзать Xilinx. Есть какие-то непредвзятые сравнения ПЛИС?
-
Опубликовано · Изменено пользователем evocatus · Пожаловаться
Плис это когда надо быстро обрабатывать потоки данныхТак их и надо обрабатывать, о чём я написал. Кастомный интерфейс, ~7 Gbit/s. ПЛИС ставить придётся по-любому, потому что от микросхем-приёмников их надо принять, декодировать и отдать компьютеру.
Maverick, спасибо за совет. У контроллера памяти Zynq-7000 адресное пространство всего 1ГБ, а буфер будет больше. В итоге похоже отпадает смысл в использовании именно его. Я подумал о нём чтобы перенести на ARM всё что можно, а уж остальное на ПЛИС. Возможно это только добавит хлопот с отладкой.
-
Опубликовано · Изменено пользователем evocatus · Пожаловаться
Я с FPGA совсем недавно начал работать, а тут грядёт большой проект, поэтому прошу вашего совета, чтобы не налажать ещё на уровне выбора ПЛИС.
Устройство должно принимать около 7 Гбит кастомного интерфейса, отрезать служебные сигналы, буферизовать в DDR2/3 и оттуда слать по 10Gb Ethernet. Подойдёт ли для такой задачи Zynq-7000? Или лучше взять какой-нибудь Virtex?
Программа для автоматизации редактирования Verilog
в Языки проектирования на ПЛИС (FPGA)
Опубликовано · Изменено пользователем evocatus · Пожаловаться
Это ещё быстрее.
Лицензия на Sublime Text стоит 70$. Я знаю, что это просто отличный редактор, но отдавать такие деньги не готов :)