Полная версия этой страницы:
PCI Интерфейс на ПЛИС
Мне необходимо сделать на Альтере PCI устройство, которое будет передавать внеш данные в комп.
Вроде есть готовые варианты, но я пока новичок, и если чего не заработает, в чужом наверное фиг разберусь...
Вопрос вот в чем, насколько сложно реализовать PCI на плис с нуля?
Это поможет мне лучше освоить программироание ПЛИС и реализацию на них конкретных задач.
Но не слишком ли неподъемная задача для начинающего?
Буду благодарен не только ответам, но и советам!
Dimonira
Jan 27 2005, 06:30
Начинающему, по-моему, лучше для начала всё-таки взять чужое.
Есть Альтеровские родные корки, а есть корки от PLDA (тут на ФТП лежат). Там есть и доки и готовая симуляция, чтобы ознакомиться.
Вот с ознакомления с доками, потом симуляцией и начинай.
А потом реализуешь в железе, запустишь всё и подумаешь: "А нафига мне своё делать, когда уже всё прекрасно работает?"

Удачи.
Работать-то оно работает, но часто не поддерживает некторые функции, без которых не сделать требуемое устройство. Например, не поддерживает PCI Expansion ROM. И из-за этого может появиться необходимость в разработке своего...
Elresearch
Jan 27 2005, 08:12
Если знаете что такое FSM, то не так уж сложно.
Угу, понятно, всем спасибо за помощь, подкинули пищу для ума.
Но все таки хотелось бы узнать, шибко ли запарочно сделать работающий PCI с нуля???
To Elresearch
Я пока начинающий, и что такое FSM Не знаю...
Elresearch
Jan 27 2005, 08:43
Functional State Machine :-) Просто ими в стандарте PCI описывается "как оно работает". так что без этого никак ;-)
Если делаете Target без Burst'а то задача не такая уж и сложная. Возмите спецификацию и тщательно ее изучите для того чтобы отбросить все лишнее и оставить только то что необходимо. кроме того в и-нете полно информации и разного рода примеров реализации.
А я всегда считал что FSM = Finite State Mashine
Elresearch
Jan 28 2005, 09:45
:-D ну главное это State Mashine, а Finite иль Functional неважно. Просто если сказать SM, то могут непрально понять ;-)
CO2040
Jan 28 2005, 14:22
Цитата(M_A @ Jan 27 2005, 09:05)
Мне необходимо сделать на Альтере PCI устройство, которое будет передавать внеш данные в комп.
Вроде есть готовые варианты, но я пока новичок, и если чего не заработает, в чужом наверное фиг разберусь...
Вопрос вот в чем, насколько сложно реализовать PCI на плис с нуля?
Это поможет мне лучше освоить программироание ПЛИС и реализацию на них конкретных задач.
Но не слишком ли неподъемная задача для начинающего?
Буду благодарен не только ответам, но и советам!
Лучше всего начать разбираться с MegaCore PCIT1. Я с этого PCI и осваивал. Потом к этому PCIT1 свой приписал модулек, который позволил получить на выходе ISA-подобный интерфейс. Также там не было поддержки Expansion ROM (хотя в документации декларировалось), а когда понадобилось - внимательно пересмотрел все исходники и нашел нужные сигналы, которые пришлось только "вывести" наружу. Потом прыгал от радости когда на мою часть BIOS передавалось управление...
Все делал тогда именно как начинающий и в одиночку - начиная от разводки платы, изучения AHDL и кончая написанием софта, который позволил этой плате полноценно "задышать", на все ушло около 4 месяцев.
Короче процесс освоения PCI был в кайф. Жалко что теперь это уже никому не нужно и все эти разработки и тестовый софт валяются без дела. Т.е. осваивать какой-либо интерфейс имеет смысл если это востребовано.
У меня то это точно будет востребовано и проработает на благо науки не один год
Artyom
Jan 31 2005, 07:40
У меня Все было просто
когда писалось PCI устройство M/T ....я по просту использовал Альтеровскую корку и МегаДекрипт

Но на изучение этой корки ушло где-то 2 месяца (особо не усердствуя) ... Зато все работает на УРА...... То же самое я советую сделать и тебе...... С Target устройствами все намного проще...... и код меньше..... Дезай......

Могу кинуть MegaDecript если нуна......
Цитата(Artyom @ Jan 31 2005, 10:40)
У меня Все было просто
когда писалось PCI устройство M/T ....я по просту использовал Альтеровскую корку и МегаДекрипт

Но на изучение этой корки ушло где-то 2 месяца (особо не усердствуя) ... Зато все работает на УРА...... То же самое я советую сделать и тебе...... С Target устройствами все намного проще...... и код меньше..... Дезай......

Могу кинуть MegaDecript если нуна......
Можешь выложить на фтп? Пригодится
Esquire
Feb 1 2005, 09:55
На FTP уже есть все, что нужно, см. pub/FPGA/_IPcores_/PCI/

.
PhilipS
Feb 8 2005, 10:30
А насколько это сложно с "програмной" точки зрения ? Кто нибудь писал свой драйвер на PCI ? Нужно будет просто писать/читать несколько регистров как максимум делать это по прерыванию. Готовые решения вроде WinDriver и т.п использовать не хотелось бы. Поделитесь впечатлениями.....
Vjacheslav
Feb 8 2005, 14:55
Если не хочется использовать WinDriver, с его готовым драйвером Kernel-уровня, то возьмите KernelDriver (той же фирмы Jungo) и напишите полностью свой драйвер - с помощью Wizard не представляет никакой сложности, при условии что Вы все-таки владеете некими зачатками программирования.
Для этого Вам понадобится Jungo Kernel Driver + Windows 2003 DDK. Здесь на Ftp все это есть.
Цитата(PhilipS @ Feb 8 2005, 13:30)
А насколько это сложно с "програмной" точки зрения ? Кто нибудь писал свой драйвер на PCI ? Нужно будет просто писать/читать несколько регистров как максимум делать это по прерыванию. Готовые решения вроде WinDriver и т.п использовать не хотелось бы. Поделитесь впечатлениями.....
Я писАл. Под линукс. WinDriver... выкинул эту бяку. Драйвер char-устройства (для платы ЦАП/АЦП, bus master) пишется за пол-недели. С драйвером сетевого устройства сейчас сижу. Спустя 2 месяца начинает работать (долго постигал тонкости сетевой подсистемы линукса).
Лично моё мнение - написание драйверов достаточно простая и тривиальная задача. По крайней мере - для линукса.
Гораздо сложнее сделать само устройство и программу работы с ним

.
PhilipS
Feb 9 2005, 09:29
WinDriver/KernelDriver не хочется использовать только по одной причине - у Заказчика возникнет вопрос: "Куплен ли он официально?" Дело все в том что все ПО которое входит в комплект поставки за должно быть лицензионным даже винда на копьютер с которым все это поставляется покупается официально. Но в любом случае спасибо большое за информацию о ориентировочных сроках - хоть какая то информация для планирования есть !
k_george
Feb 9 2005, 11:23
Хочу задать Уважаемой публике пару вопросов.
Вопрос №1 к ЯдроПисателям:
Не встречал ли кто исходники хорошего TestBench'а для шины на VHDL? Типа как компилёные библиотеки в корке от PLDA.
Вопрос №2 к ДровоПисателям:
Как часто (mS, uS, ... pS ;-) можно прерывать шину под WinNT? Хотелось бы услышать что-нибудь из практического опыта.
Цитата
Как часто (mS, uS, ... pS ;-) можно прерывать шину под WinNT?
На моей махарайке прерывания обслуживались так: драйвер, когда получал от винды управление по приходу прерывания - эти прерывания запрещал, и взводил событие. Приложение, проснувшись по этому событию - в конце своей работы прерывание разрешало. Поэтому вопрос о максимальной частоте прерываний закрвался автоматически - "лишние" прерывания просто не обслуживались, а количество работы, которое необходимо проделать по прерыванию, определяло приложение. Частота прерывний у нас не превышала нескольких десятков Гц в худшем случае.
Максимальная частота прерываний, ИМХО, ограничена временем обработки прервания драйвером. Реакция на них, насколько я понял из бесед с программёрами, минимальна, ибо обслуживаются они на каком-то там высоком уровне привелегий, и если в этот момент не обслуживаются другие прервания - всё происходит практически мгновенно.
k_george
Feb 9 2005, 12:46
Хочу немного пояснить свою траблу. Задача следущая: извне поступает информация, прореживается, накапливается и передаётся в шину, причём хотелось бы передавать её по внешнему событию (условно - шпиндель переместился на 3мм, а это происходит раз в ~ 80 uS ;-). Что касаемо соотношения входного потока и слива результатов в шину, то это примерно 100 к 1, накапливаем 120-150 uS передаём 1-1.2 uS (PCI/66/32). Так вот мои программеры говроят:"Ты накопляй её полдня или хотя бы 10-100 mS, а потом мы заберём, а чаще ВИНДА не успевает и усё виснет", но буфер тоже не резиновый, хотя прерывать можно и на 8, 16 ... событие. Так вот мне хотелось бы знать кто мне тут мозги парит, и где компромис.
Ну уж не знаю, кому верить. Наверняка покажет только эксперимент.
Похоже, что Вам плясать нужно от размеров буфера. Заполнился на половину (примерно), и тогда сливать.
Драйвер сами пишите или используете нечто готовое типа ВыньДривер? В последнем случае заморочки по быстодействию могут иметь место, причём фиг что сделаешь.

Наши то программёры напряглись и написали свой, избавив меня от кучи проблем.
Vjacheslav
Feb 10 2005, 07:36
PhilipS
Windows 2003 DDK не требует никакого лицензирования и поставлялся Microsoft бесплатно - только оплатить 25 $ за доставку. В нем много уже готовых заготовок для разного вида драйверов, на основе которых можно сделать свой и никаких заморочек с лицензированием. Да и Jungo Kernel Driver выдает исходную заготовку, которая в дальнешем компилируется Windows 2003 DDK.
Цитата(Vitus @ Jan 27 2005, 11:46)
Если делаете Target без Burst'а то задача не такая уж и сложная.
А если с Burst ом, то намного сложнее получается? За счет чего?
ALexx_V
Jun 18 2005, 20:24
Сам не програмист, но стал свидетелем того как человек понимающий в этом деле не многим более меня, в частности что такое Visual Studio, написал драйвер обеспечивающий доступ к портам, примерно за 1 месяц. Из этого следует что стоит только захотеть.
dachny
Jun 20 2005, 05:38
Цитата(Vitёk @ Feb 9 2005, 14:47)
Цитата
Как часто (mS, uS, ... pS ;-) можно прерывать шину под WinNT?
На моей махарайке прерывания обслуживались так: драйвер, когда получал от винды управление по приходу прерывания - эти прерывания запрещал, и взводил событие. Приложение, проснувшись по этому событию - в конце своей работы прерывание разрешало. Поэтому вопрос о максимальной частоте прерываний закрвался автоматически - "лишние" прерывания просто не обслуживались, а количество работы, которое необходимо проделать по прерыванию, определяло приложение. Частота прерывний у нас не превышала нескольких десятков Гц в худшем случае.
Максимальная частота прерываний, ИМХО, ограничена временем обработки прервания драйвером. Реакция на них, насколько я понял из бесед с программёрами, минимальна, ибо обслуживаются они на каком-то там высоком уровне привелегий, и если в этот момент не обслуживаются другие прервания - всё происходит практически мгновенно.

Капец!!! С таким же успехом можно сделать в апликации бесконечный цикл со вставленным туда например Sleep(10) и не пользовать никаких прерываний
Но зато гении дровописатели очень напрягались
При первой разработке PCI устройства Я вообще начал с PLX9052, потом создал другую плату уже л на Альтеровской корке 1999г. Использовал ACEX. Новый альтеровский софт 3.2.0 так и не впихнул в кристал, машина зависала. Корка от PLDA 7.0.1 пошла на этой же плате.
7.0.2 не смог дешифрировать.
А вообще удачи в начинаниях.
Особенно если для науки.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.