Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Qsys User IP
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
doom13
Вопрос, возможно ли на базе компонентов из Qsys создать пользовательское IP-ядро. Т.е. есть система USER_SYSTEM из библиотечных компонентов (SPI_0, GPIO_0, GPIO_1), которая встраивается как компонент в другую систему, для которой уже будут работать не драйвера для SPI_0, GPIO_0, GPIO_1, а драйвера для USER_SYSTEM. Т.е. система верхнего уровня не знает о наличии GPIO и SPI в системе нижнего уровня, а знает о каких-то обобщённых возможностях USER_SYSTEM.
Если это возможно, хотелось бы пример или ссылку, где можно об это почитать.
Спасибо.

Kuzmi4
2 doom13
Возможно это вам поможет. Там как раз есть подсистемы в системе.
Там одна бЯда - прерывания не передать никак, нужно своё чЮдо городить..

Ну или руками всё собирать в кучу cool.gif
serjj
Цитата
Возможно это вам поможет. Там как раз есть подсистемы в системе.
Там одна бЯда - прерывания не передать никак, нужно своё чЮдо городить..

Почему же не передать? В подсистеме сигнальчики IRQ экспортируем и в топ системе тянем их на interrupt receiver попутно назначая приоритеты. С другой стороны, как я понял, подсистемы это не совсем то, что хочет автор rolleyes.gif В случае подсистемы все ее внутренности появятся в system.h в BSP с префиксом подсистемы. По сути это отдельные компоненты, которые вынесены в отдельное окошко Qsys удобства для, а хочется получить законченный IP, собранный полностью в QSys с одним драйвером. Если я правильно понял.
Kuzmi4
2 serjj
тогда может вы подскажете через что вы вытягиваете например AVM от ниоса ? (так чтоб малой кровью - а-ля "export port")
doom13
Цитата(serjj @ Feb 5 2015, 12:03) *
С другой стороны, как я понял, подсистемы это не совсем то, что хочет автор rolleyes.gif В случае подсистемы все ее внутренности появятся в system.h в BSP с префиксом подсистемы. По сути это отдельные компоненты, которые вынесены в отдельное окошко Qsys удобства для, а хочется получить законченный IP, собранный полностью в QSys с одним драйвером. Если я правильно понял.

Да всё правильно поняли, хотелось
Цитата
законченный IP, собранный полностью в QSys с одним драйвером.
,
но решил - подсистемы будет достаточно.
serjj
2 Kuzmi4, у меня в подсистеме были низскоростные интерфейсы и прочая такая штука, AVM из нее не вытягивал, только AVS, он спокойно тянется компонентом Avalon-MM Clock Crossing Bridge, резет заводил через Reset Bridge, а мост на прерывания Qsys поставил сам.
Kuzmi4
Возник тут вопрос по подсистемам, решил написать сюда, раз тут уже было некоторое обсуждение подсистем:
Значит наши головастики решили один Q2 v9 дизайн обновить и раскидать кучу компонентов по подсистемам. Сделали знаит они там разделение:
1) подсистема процессора - nios2-f, boot-rom, tc-data/instruction-mem
2) подсистема периферии - led, sys-timer, jtag-uart, etc.
3) (и так далее, много там всего)
Значит вставили они IRQ Bridge в подсистему процессора, завели туда все прерывания от разных подсистем в топе. Собрал я FPGA design в Q2. И вдруг обнаружил при попытке собрать софт, что прерывания то в system.h все "-1", хотя проверил HDL - роут сигналов до порта у Nios2-f есть, как и CDC. Значит убрал я этот IRQ Bridge и всё собралось без вопросов - прерывания как хотел, так и получил что в HDL что в system.h (в смысле не "-1" а соответствующие номера). И вот тут обнаружилась очередная неприятность: при сборке тестового примера "Hello world" с printf выяснилось, что прерывание от JTAG-UART физически заходит в Nios2-f (разводка и CDC - в топе), а вот нормально обработки этого IRQ нет (в смысле Nios2-f всё честно копирует куда надо, пишет в контрол в JTAG-UART, скопом я вижу сигнал прерывания который взводится и заходит в Nios2-f а вот собственно саму активность в IRQ рутине вообще не наблюдаю). Хотя в коде тестового примера "Hello world" есть регистрация прерывания для JTAG-UART.
То есть получается что прерывание есть и физически заходит в Nios2-f а вот софтварный контроллер прерывания почему то всё игнорит. Никто не сталкивался с такой баго-фичей ?? smile3046.gif
krux
сталкивался с подобным поведением в qsys, когда были "-1".
правил руками - прописывал в system.h номера присвоенных векторов прерываний.

IRQ bridge имхо убрали зря. у вас асинхронщина из-за этого в таймквесте не повылезала?
Kuzmi4
2 krux
IRQ Bridge там расшивку делал дополнительную и всё. А на счёт асинхронщины - я проверил HDL/RTL - для IRQ сигналов идут сначала CDC, потом сборка по номерам в топе, а потом уже заводят на порт Nios2-f. То есть асинхронщины там нет в принципе со стороны Nios2-f.
Сейчас сделаю простенькую тестовую системку (некий аналог интересующего куска системы), если там всё заработает - значит собиральшики Qsys так насобирали.
serjj
Пробовал как-то с этим баловаться, вот выдернул пару qsys файлов из проекта, где это применял, оставил в них самый минимум периферии для наглядности:
Нажмите для просмотра прикрепленного файла
Вроде бы оно работало rolleyes.gif
Kuzmi4
В общем собрал я самый примитивный простой дизайн: [{nios + ram} + {jtag-uart + pio}]
Результат - всё то же самое: "Hello world"-small работает, "Hello world" обычный - нет. CDC и коннект прерываний присутствует. Прерывание -заходит напрямую - без IRQ Bridge, Q2 сам поставил CDC и соединил как надо.
Вот Нажмите для просмотра прикрепленного файла если кому будет интересно поковыряться.

UPD:
в общем, судя по всему, VIC спасёт отца русской демократии.... Хотя это дополнительные ресурсы.....
Kuzmi4
UPD:
или же, если допускается работа напильником и/или очень хочется sw-based IRQ обработку (нужное подчеркнуть) - нужно ставить IRQ Bridge, а потом руками расшивать прерывания в Qsys, и во время генерации всего Nios2 добра согласно Qsys-расшивке патчить system.h (заменять -1 на нужные цифры).
В общем вот такие рецеБты...

(Открыть что ли кейс на альтере wacko.gif потому как вроде бы как баг получается, прерывания Шрёдингера - прерывания вроде есть но их нет...)
serjj
Вот насколько я помню, IRQ bridge руками никогда не ставил, Qsys их умеет сам добавлять. А для того чтобы не было в system.h -1 напротив прерывания, достаточно было подключить авалон, соответствующий данному каналу прерывания... И в примере, который я выложил прерывания между подсистемой и топсистемой ходят. Не понятно в чем тогда проблема.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.