|
Помогите с PCI, Схема, размещение, дрова |
|
|
|
Oct 4 2006, 21:59
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 29-09-06
Пользователь №: 20 821

|
Необходимо создать PCI устройство, реализующее обычный UART порт, через шину PCI.
Требования:
использовать ПЛИС. язык VHDL
Дрова под ДОС
Спецификацию читал. Нужны советы опытных, а ещё лучше примеры, чем проще тем лучше.
|
|
|
|
|
Oct 8 2006, 18:58
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 29-09-06
Пользователь №: 20 821

|
Цитата(Elresearch @ Oct 6 2006, 13:30)  простейший вариант PCI это Target. для ознакомления на VHDL можете использовать этот проект http://www.addone.co.kr/a/products/interfa...ci_esy_tar.htmlПо поводу PCI проекта на VHDL с детсвта корейский не помню Знаю что нужен таргет, нужен любой пример таргет устройства, ато я запарился спЕСифИкасиЮ читать, на ломовском руском, а на буржуйском долго, но читаю. Объясните на пальцах, как работать с таргет. Что нужно что бы его БИОС увидал. И что нужно задать что бы потом с ним из доса работать. Насчёт дров тоже знаю что резидент, мне пример нужен как их писать. А уарт уже давно реализован
|
|
|
|
|
Oct 9 2006, 10:53
|
Местный
  
Группа: Свой
Сообщений: 214
Регистрация: 29-12-04
Пользователь №: 1 730

|
Цитата(plis @ Oct 8 2006, 22:58)  По поводу PCI проекта на VHDL с детсвта корейский не помню  так там на VHDL, а не на корейском написано ;-) Цитата Объясните на пальцах, как работать с таргет. если по IO, то через команды чтения/записи порта если через память, то с командами чтения/записи памяти :-D Цитата Что нужно что бы его БИОС увидал. нужно чтоб Ваша плата "отрабатывала" команды Configuration Read (C/BE[3::0]# =1010) и Configuration Write (1011). ЗЫ: FAQ http://fpga-faq.narod.ru/
|
|
|
|
|
Oct 16 2006, 07:50
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 29-09-06
Пользователь №: 20 821

|
Цитата(Elresearch @ Oct 9 2006, 14:53)  если по IO, то через команды чтения/записи порта если через память, то с командами чтения/записи памяти :-D По поводу IO можно поподробней, как это работае, что и в какой последовательности идёт. И вообще какая разница и что лучше.
Сообщение отредактировал plis - Oct 16 2006, 07:53
|
|
|
|
|
Oct 16 2006, 10:00
|
Местный
  
Группа: Свой
Сообщений: 214
Регистрация: 29-12-04
Пользователь №: 1 730

|
Цитата По поводу IO можно поподробней, как это работае, что и в какой последовательности идёт. И вообще какая разница и что лучше. Если Вы имеете ввиду драйвера, то Вам знакомы такие команды (асм) "Команда: IN приемник, источник Назначение: Считать данные из порта Процессор: 8086 Копирует число из порта ввода-вывода, номер которого указан в источнике, в приемник. Приемником может быть только AL, АХ или ЕАХ. Источник — или непосредственный операнд, или DX, причем можно указывать только номера портов не больше 255. Команда: OUT приемник, источник Назначение: Записать данные в порт Процессор: 8086 Копирует число из источника (AL, АХ или ЕАХ) в порт ввода-вывода, номер которого указан в приемнике. Приемник может быть либо непосредственным номером порта, либо регистром DX. На командах IN и OUT строится все общение процессора с устройствами ввода-вывода — клавиатурой, жесткими дисками, различными контроллерами, и используются они, в первую очередь, в драйверах устройств." Или Вас интересует что происходит в "железке"?
|
|
|
|
|
Oct 17 2006, 18:56
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 29-09-06
Пользователь №: 20 821

|
Что происходит в "железке"? И желательно на всём протяжение работы, т.е. запись/чтение конфигурации и данных, и если устройство работает как PCI то как в программе опрелелить его и какой у него порт или адрес? Устройство используется как I/O девайс.
|
|
|
|
|
Oct 18 2006, 06:10
|

Местный
  
Группа: Свой
Сообщений: 202
Регистрация: 2-10-06
Из: Петербург
Пользователь №: 20 881

|
Цитата(plis @ Oct 17 2006, 22:56)  Что происходит в "железке"? "В стандарт заложены возможности автоматического конфигурирования системных ресурсов (пространств памяти и ввода-вывода и линий запроса прерываний). Автоматическое конфигурирование устройств (выбор адресов и прерываний) поддерживается средствами BIOS и ориентировано на технологию PnP. ...После аппаратного сброса (или при включении питания) устройства PCI не отвечают на обращения к пространству памяти и ввода-вывода, они доступны только для операций конфигурационного считывания и записи. В этих операциях устройства выбираются по индивидуальным сигналам IDSEL и сообщают о потребностях в ресурсах и возможных вариантах конфигурирования. После распределения ресурсов, выполняемого программой конфигурирования (во время теста POST), в конфигурационные регистры устройства записываются параметры конфигурирования. Только после этого к устройствам становится возможным доступ по командам обращения к памяти и портам ввода-вывода". Если вы будете делать свой девайс на ПЛИС, то можете посмотреть пример ping, поставляемый с ядром Xilinx PCI. Он достаточно простой и наглядный, есть там и IO, и память. Если промоделировать в ModelSIM, то увидите что, как и куда пишется и откуда читается при конфигурировании и после. Цитата(plis @ Oct 17 2006, 22:56)  если устройство работает как PCI то как в программе опрелелить его и какой у него порт или адрес? Устройство ищется по Vendor ID, коду класса или чтением конфигурационной информации всех установленных устройств через функции PCI BIOS. Вызываются через прерывание lAh. Более подробно см. в книге В. Кулаков "Программирование на аппаратном уровне" Спб:Питер 2003
|
|
|
|
|
Oct 31 2006, 19:26
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 29-09-06
Пользователь №: 20 821

|
А подскажите пожалуйста по поводу конфигурирования, что куда пишеться, что МОЖНО задавать жёстко, а что НУЖНО задавать жёстко??? И ещё какие сигналу НУЖНЫ, какие МОЖНО, и какие НЕНУЖНЫ, просто посоветуйте. З.Ы.и всё это для железа.
|
|
|
|
|
Nov 1 2006, 06:08
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(plis @ Oct 31 2006, 23:26)  А подскажите пожалуйста по поводу конфигурирования, что куда пишеться, что МОЖНО задавать жёстко, а что НУЖНО задавать жёстко??? И ещё какие сигналу НУЖНЫ, какие МОЖНО, и какие НЕНУЖНЫ, просто посоветуйте. З.Ы.и всё это для железа. Может Вам на самом деле нужен совет где взять памперсы? Как Вы хотите, чтобы вам все разжевали и клизмой всунули? Или просто лень делать курсовик? Дак его Вам за деньги сделают!!! Нельзя быть настолько ленивым и бездарным! Стыдитесь! Можно получить ответ взять документацию и с ней работать. Сейчас полно учебников, книг на русском материалов в сети.... Без уважения...
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Nov 1 2006, 16:39
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 29-09-06
Пользователь №: 20 821

|
Цитата(Elresearch @ Nov 1 2006, 13:37)  Примеры я смотрел, разбирался, и не только эти, но везде по разному где то какието сигналы есть, гдето нет, что то пишеться в конфигурацию, что то жёстко задаёться, в спецификаци, про адресное пространство мало что написано, вот и спаршиваю. И там явно не сказано, что жёстко что можно изменять, про вендор можете не рассказывать, меня интерсует имеено адресные регистры.
|
|
|
|
|
Nov 2 2006, 12:22
|
Местный
  
Группа: Свой
Сообщений: 214
Регистрация: 29-12-04
Пользователь №: 1 730

|
Цитата И там явно не сказано, что жёстко что можно изменять, про вендор можете не рассказывать, меня интерсует именно адресные регистры. Раз уж Вас интересуют BAR-ы, то в случае работы через IO Вам просто надо "сделать" константами биты 0 и 1 равными 1 и 0 соответственно (см. Base Address Register for I/O в спецификации), а остальные биты либо обычные д-триггеры с сбросом в ноль (в них система запишет Вам адрес IO для Вашей платы) либо константа = 0 (этим будет определятся количество адресов IO).
|
|
|
|
|
Nov 2 2006, 15:59
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 29-09-06
Пользователь №: 20 821

|
Спасибо. Цитата(Elresearch @ Nov 2 2006, 16:22)  ... либо константа = 0 (этим будет определятся количество адресов IO). А от сюда можно поподробней, как система узнаёт какой дипазон адресов надо выделить. Например мне нужен диапазон B80 - B87, как система об этом узнает? и что должен сделать я и что ответить система? И ещё ... bar должен быть [31..0] или [31..2] и ещё сравнивать надо bar[31..2]&"00" = address[31..0] или bar[31..2]&"00" = address[29..0] т.е. разрядность регистра bar 32 или 30 бит??? Я читал спецификацию, но не доходят некоторые вещи, разбирался в примерах, везде по разному, в одном вообще адрес сравнивают со вторым байтом БАРа или так и должно быть??? у меня просто пока нет железки что бы проверить на компе, а вопросы появляються и появляються (( объясните пожалуйста на примере вышеуказанного дипазона.
|
|
|
|
|
Nov 3 2006, 09:00
|
Местный
  
Группа: Свой
Сообщений: 214
Регистрация: 29-12-04
Пользователь №: 1 730

|
Вы не можете задать системе диапазон который Вам нужен, Вы просто указываете сколько портов Вам нужно, с система выделяет сама (из своих меркантильных соображений) диапазон для вашего девайса. Именно поэтому в примерах, везде по разному (за исключением битов 0 и 1  ) В спецификации есть такой пунктик описывающий действия при выделении адресов: " Implementation Note: Sizing a 32-bit Base Address Register Example Decode (I/O or memory) of a register is disabled via the command register before sizing a Base Address register. Software saves the original value of the Base Address register, writes 0FFFFFFFFh to the register, then reads it back. Size calculation can be done from the 32-bit value read by first clearing encoding information bits (bit 0 for I/O, bits 0-3 for memory), inverting all 32 bits (logical NOT), then incrementing by 1. The resultant 32- bit value is the memory/I/O range size decoded by the register. Note that the upper 16 bits of the result is ignored if the Base Address register is for I/O and bits 16-31 returned zero upon read. The original value in the Base Address register is restored before reenabling decode in the command register of the device. "Про то каким должен быть BAR я Вам уже написал. Для примера можно разобрать два случая. VARIABLE IO_Q_int: STD_LOGIC_VECTOR (31 downto 5); -- регистр для хранения базового адреса IO if CLR='1' then IO_Q_int:="000000000000000000000000000"; -- по ресету устанавливаем регистр в 0 ...................................................... ...................................................... -- то что возвращаем при чтении из BAR0 CONF_OUT(4 downto 0)<= "00001"; -- указывает на то что BAR у нас для IO + количество IO портов (если не ошибаюсь 32 8-ми битных портов иль 8 32-х битных) CONF_OUT(31 downto 5)<= IO_Q_int(31 downto 5); -- соответственно что там записано то и возвращает
и второй случай VARIABLE IO_Q_int: STD_LOGIC_VECTOR (31 downto 4); -- регистр для хранения базового адреса IO if CLR='1' then IO_Q_int:="0000000000000000000000000000"; -- по ресету устанавливаем регистр в 0 ...................................................... ...................................................... -- то что возвращаем при чтении из BAR0 CONF_OUT(3 downto 0)<= "0001"; -- если не ошибаюсь 16 8-ми битных портов иль 4 32-х битных CONF_OUT(31 downto 4)<= IO_Q_int(31 downto 5); -- соответственно что там записано то и возвращает
|
|
|
|
|
Nov 8 2006, 14:59
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 29-09-06
Пользователь №: 20 821

|
Цитата(Elresearch @ Nov 3 2006, 12:00)  Implementation Note: Sizing a 32-bit Base Address Register Example Спасибо !!! И ещё вопрос, как правильно завершать транзакцую, нужен ли сигнал STOP ???
|
|
|
|
|
Nov 15 2006, 15:27
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 29-09-06
Пользователь №: 20 821

|
Цитата(Elresearch @ Nov 9 2006, 12:15)  смотрите спецификацию пункт Bus Transactions, а для сигнала STOP подпункт Target Initiated Termination в этом то вся соль, если моё устройство ''допустим'' работает без ошибок, нужен мне сигнал STOP или нет, т.е. транзакцию завершает мастер "всегда", вот в чём вопрос? З.Ы. я плохо понимаю по не нашему, поэтому стараюсь читать русское, но у нас в деревне этого мало, да и в нете не много халявного, а с ненашего не всё понимаю что перевожу, опыта маловато, вот и обращаюсь с такими вопросами. З.З.Ы. и ещё в тужу облатсь, я МОГУ обойтись без сигналов perr, serr и par???????????? ну не хоца мне всё это контролировать и проверять, больно уж простое устройство, ДОЛЖНО работать )
|
|
|
|
|
Nov 15 2006, 15:39
|

Гуру
     
Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904

|
Цитата(plis @ Nov 15 2006, 18:27)  Цитата(Elresearch @ Nov 9 2006, 12:15)  смотрите спецификацию пункт Bus Transactions, а для сигнала STOP подпункт Target Initiated Termination
в этом то вся соль, если моё устройство ''допустим'' работает без ошибок, нужен мне сигнал STOP или нет, т.е. транзакцию завершает мастер "всегда", вот в чём вопрос? В принципе, можете. Если Ваше устройство всегда и везде будет отвечать на любые приходящие к нему запросы. Цитата З.З.Ы. и ещё в тужу облатсь, я МОГУ обойтись без сигналов perr, serr и par???????????? ну не хоца мне всё это контролировать и проверять, больно уж простое устройство, ДОЛЖНО работать ) Без SERR и PERR можно, а вот без PAR обойтись не получится, если Ваше устройство поддерживает транзакции чтения, когда оно управляет линиями AD. В стандарте сказано, что наряду с линиями AD устройство должно управлять и линией PAR - Parity Generation.
--------------------
BR, Makc В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
|
|
|
|
|
Nov 28 2006, 09:55
|

Местный
  
Группа: Свой
Сообщений: 435
Регистрация: 8-03-06
Из: степей Украины
Пользователь №: 15 069

|
Цитата(URANst @ Nov 27 2006, 20:21)  Так вот вопрос в следующем: как мне мое PCI устройство (работающее в среде c 3.3 В) подключить к компу ? Все-таки поищите по форуму. Ключевые слова : idt3861, SN74CBTD
|
|
|
|
|
Nov 28 2006, 10:20
|

Местный
  
Группа: Свой
Сообщений: 330
Регистрация: 10-06-05
Из: Россия, Москва
Пользователь №: 5 894

|
Цитата(makc @ Nov 15 2006, 15:39)  Цитата(plis @ Nov 15 2006, 18:27)  Цитата(Elresearch @ Nov 9 2006, 12:15)  смотрите спецификацию пункт Bus Transactions, а для сигнала STOP подпункт Target Initiated Termination
в этом то вся соль, если моё устройство ''допустим'' работает без ошибок, нужен мне сигнал STOP или нет, т.е. транзакцию завершает мастер "всегда", вот в чём вопрос? В принципе, можете. Если Ваше устройство всегда и везде будет отвечать на любые приходящие к нему запросы. Цитата З.З.Ы. и ещё в тужу облатсь, я МОГУ обойтись без сигналов perr, serr и par???????????? ну не хоца мне всё это контролировать и проверять, больно уж простое устройство, ДОЛЖНО работать ) Без SERR и PERR можно, а вот без PAR обойтись не получится, если Ваше устройство поддерживает транзакции чтения, когда оно управляет линиями AD. В стандарте сказано, что наряду с линиями AD устройство должно управлять и линией PAR - Parity Generation. Сигнал STOP в прогстейшем случае дублируется TRDY. Работать без PAR можно, по видимому для обработки ошибок четности нужно программную надстройку делать, сам PCI-host ничего не делает....
|
|
|
|
|
Nov 28 2006, 11:11
|

Местный
  
Группа: Свой
Сообщений: 426
Регистрация: 20-01-05
Из: Зеленоград
Пользователь №: 2 070

|
Цитата(URANst @ Nov 27 2006, 21:06)  Я сделал PCI устройство на FPGA. Все Plis (ALTERA FPGA) питаются от 3,3 В. В компьтере стоит 5 вольтовый разьем, и как я понимаю там будут работать PCI платы с сигналами работающими в 5 вольтовой среде. Так вот вопрос в следующем: как мне мое PCI устройство (работающее в среде c 3.3 В) подключить к компу ? Если твоя альтера имеет 5V tolerance (FLEX10K, KA, KE, ACEX1K) - смело вставляй плату в компьютер, должна работать. Если не имеет (Cyclone) - тогда лучше поставить SN74CBTD, как тебе уже посоветовали. Однако опытное устройство можно воткнуть в компьютер и без них, предварительно проверив уровни сигналов на шине данного конкретного компьютера - они скорее всего не превысят 3.3 вольта. С серийным устройством так делать нельзя - никто не может гарантировать, что рядом с твоей платой не воткнут истинно 5-вольтовую плату, выдающую на шину 5-вольтовые сигналы.
|
|
|
|
|
Nov 28 2006, 11:54
|

Гуру
     
Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874

|
Цитата(o-henry @ Nov 28 2006, 09:55)  Цитата(URANst @ Nov 27 2006, 20:21)  Так вот вопрос в следующем: как мне мое PCI устройство (работающее в среде c 3.3 В) подключить к компу ?
Все-таки поищите по форуму. Ключевые слова : idt3861, SN74CBTD И все равно решение, полностью удовлетворяющее спецификации 5V PCI, неизвестно. Известно только, что так многие делают - и обычно работает.
--------------------
Пишите в личку.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|