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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Помогите с PCI, Схема, размещение, дрова
plis
сообщение Oct 4 2006, 21:59
Сообщение #1


Участник
*

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



Необходимо создать PCI устройство, реализующее обычный UART порт, через шину PCI.

Требования:

использовать ПЛИС.
язык VHDL

Дрова под ДОС

Спецификацию читал.
Нужны советы опытных, а ещё лучше примеры, чем проще тем лучше.
Go to the top of the page
 
+Quote Post
Elresearch
сообщение Oct 6 2006, 09:30
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 214
Регистрация: 29-12-04
Пользователь №: 1 730



простейший вариант PCI это Target. для ознакомления на VHDL можете использовать этот проект http://www.addone.co.kr/a/products/interfa...ci_esy_tar.html
про "обычный UART порт" можно посмотреть здесь http://www.opencores.org/projects.cgi/web/uart16550/overview
Ну а драйвер под дос это просто резидент. можно на Ц можно на Асме http://intel386.narod.ru/doc/asm/index.html
Go to the top of the page
 
+Quote Post
plis
сообщение Oct 8 2006, 18:58
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 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 с детсвта корейский не помню blink.gif
Знаю что нужен таргет, нужен любой пример таргет устройства, ато я запарился спЕСифИкасиЮ читать, на ломовском руском, а на буржуйском долго, но читаю.

Объясните на пальцах, как работать с таргет.
Что нужно что бы его БИОС увидал.
И что нужно задать что бы потом с ним из доса работать.

Насчёт дров тоже знаю что резидент, мне пример нужен как их писать.

А уарт уже давно реализован
Go to the top of the page
 
+Quote Post
Elresearch
сообщение Oct 9 2006, 10:53
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 214
Регистрация: 29-12-04
Пользователь №: 1 730



Цитата(plis @ Oct 8 2006, 22:58) *
По поводу PCI проекта на VHDL с детсвта корейский не помню blink.gif


так там на VHDL, а не на корейском написано ;-)

Цитата
Объясните на пальцах, как работать с таргет.


если по IO, то через команды чтения/записи порта
если через память, то с командами чтения/записи памяти
:-D

Цитата
Что нужно что бы его БИОС увидал.


нужно чтоб Ваша плата "отрабатывала" команды Configuration Read (C/BE[3::0]# =1010) и Configuration Write (1011).

ЗЫ: FAQ http://fpga-faq.narod.ru/
Go to the top of the page
 
+Quote Post
plis
сообщение Oct 16 2006, 07:50
Сообщение #5


Участник
*

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



Цитата(Elresearch @ Oct 9 2006, 14:53) *
если по IO, то через команды чтения/записи порта
если через память, то с командами чтения/записи памяти
:-D


По поводу IO можно поподробней, как это работае, что и в какой последовательности идёт.
И вообще какая разница и что лучше.

Сообщение отредактировал plis - Oct 16 2006, 07:53
Go to the top of the page
 
+Quote Post
Elresearch
сообщение Oct 16 2006, 10:00
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 214
Регистрация: 29-12-04
Пользователь №: 1 730



Цитата
По поводу IO можно поподробней, как это работае, что и в какой последовательности идёт.
И вообще какая разница и что лучше.


Если Вы имеете ввиду драйвера, то Вам знакомы такие команды (асм)

"Команда:
IN приемник, источник

Назначение:
Считать данные из порта

Процессор:
8086

Копирует число из порта ввода-вывода, номер которого указан в источнике, в приемник. Приемником может быть только AL, АХ или ЕАХ. Источник — или непосредственный операнд, или DX, причем можно указывать только номера портов не больше 255.

Команда:
OUT приемник, источник

Назначение:
Записать данные в порт

Процессор:
8086

Копирует число из источника (AL, АХ или ЕАХ) в порт ввода-вывода, номер которого указан в приемнике. Приемник может быть либо непосредственным номером порта, либо регистром DX. На командах IN и OUT строится все общение процессора с устройствами ввода-вывода — клавиатурой, жесткими дисками, различными контроллерами, и используются они, в первую очередь, в драйверах устройств."

Или Вас интересует что происходит в "железке"?
Go to the top of the page
 
+Quote Post
plis
сообщение Oct 17 2006, 18:56
Сообщение #7


Участник
*

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



Что происходит в "железке"? И желательно на всём протяжение работы, т.е. запись/чтение конфигурации и данных, и если устройство работает как PCI то как в программе опрелелить его и какой у него порт или адрес? Устройство используется как I/O девайс.
Go to the top of the page
 
+Quote Post
hobgoblin
сообщение Oct 18 2006, 06:10
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
plis
сообщение Oct 31 2006, 19:26
Сообщение #9


Участник
*

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



А подскажите пожалуйста по поводу конфигурирования, что куда пишеться, что МОЖНО задавать жёстко, а что НУЖНО задавать жёстко???
И ещё какие сигналу НУЖНЫ, какие МОЖНО, и какие НЕНУЖНЫ, просто посоветуйте.
З.Ы.и всё это для железа.
Go to the top of the page
 
+Quote Post
iosifk
сообщение Nov 1 2006, 06:08
Сообщение #10


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(plis @ Oct 31 2006, 23:26) *
А подскажите пожалуйста по поводу конфигурирования, что куда пишеться, что МОЖНО задавать жёстко, а что НУЖНО задавать жёстко???
И ещё какие сигналу НУЖНЫ, какие МОЖНО, и какие НЕНУЖНЫ, просто посоветуйте.
З.Ы.и всё это для железа.


Может Вам на самом деле нужен совет где взять памперсы?
Как Вы хотите, чтобы вам все разжевали и клизмой всунули?
Или просто лень делать курсовик? Дак его Вам за деньги сделают!!!
Нельзя быть настолько ленивым и бездарным! Стыдитесь!
Можно получить ответ взять документацию и с ней работать. Сейчас полно учебников, книг на русском материалов в сети....
Без уважения...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
Elresearch
сообщение Nov 1 2006, 09:37
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 214
Регистрация: 29-12-04
Пользователь №: 1 730



Цитата(plis @ Oct 31 2006, 23:26) *
А подскажите пожалуйста по поводу конфигурирования, что куда пишеться, что МОЖНО задавать жёстко, а что НУЖНО задавать жёстко???
И ещё какие сигналу НУЖНЫ, какие МОЖНО, и какие НЕНУЖНЫ, просто посоветуйте.
З.Ы.и всё это для железа.

я же Вам давал ссылку на vhdl исходники (простейшие) http://www.addone.co.kr/a/products/interfa...ci_esy_tar.html
Вы это смотрели? Вы это моделировали?
http://www.addone.co.kr/a/products/interface/easy_sam.vhd
http://www.addone.co.kr/a/products/interface/pci_t_easy.vhd
Go to the top of the page
 
+Quote Post
plis
сообщение Nov 1 2006, 16:39
Сообщение #12


Участник
*

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



Цитата(Elresearch @ Nov 1 2006, 13:37) *
[я же Вам давал ссылку на vhdl исходники (простейшие) http://www.addone.co.kr/a/products/interfa...ci_esy_tar.html
Вы это смотрели? Вы это моделировали?
http://www.addone.co.kr/a/products/interface/easy_sam.vhd
http://www.addone.co.kr/a/products/interface/pci_t_easy.vhd


Примеры я смотрел, разбирался, и не только эти, но везде по разному где то какието сигналы есть, гдето нет, что то пишеться в конфигурацию, что то жёстко задаёться, в спецификаци, про адресное пространство мало что написано, вот и спаршиваю. И там явно не сказано, что жёстко что можно изменять, про вендор можете не рассказывать, меня интерсует имеено адресные регистры.
Go to the top of the page
 
+Quote Post
Elresearch
сообщение Nov 2 2006, 12:22
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 214
Регистрация: 29-12-04
Пользователь №: 1 730



Цитата
И там явно не сказано, что жёстко что можно изменять, про вендор можете не рассказывать, меня интерсует именно адресные регистры.


Раз уж Вас интересуют BAR-ы, то в случае работы через IO Вам просто надо "сделать" константами биты 0 и 1 равными 1 и 0 соответственно (см. Base Address Register for I/O в спецификации), а остальные биты либо обычные д-триггеры с сбросом в ноль (в них система запишет Вам адрес IO для Вашей платы) либо константа = 0 (этим будет определятся количество адресов IO).
Go to the top of the page
 
+Quote Post
plis
сообщение Nov 2 2006, 15:59
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 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 бит???
Я читал спецификацию, но не доходят некоторые вещи, разбирался в примерах, везде по разному, в одном вообще адрес сравнивают со вторым байтом БАРа или так и должно быть???

у меня просто пока нет железки что бы проверить на компе, а вопросы появляються и появляються ((
объясните пожалуйста на примере вышеуказанного дипазона.
Go to the top of the page
 
+Quote Post
Elresearch
сообщение Nov 3 2006, 09:00
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 214
Регистрация: 29-12-04
Пользователь №: 1 730



Вы не можете задать системе диапазон который Вам нужен, Вы просто указываете сколько портов Вам нужно, с система выделяет сама (из своих меркантильных соображений) диапазон для вашего девайса.
Именно поэтому в примерах, везде по разному (за исключением битов 0 и 1 wink.gif )
В спецификации есть такой пунктик описывающий действия при выделении адресов:
"
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); -- соответственно что там записано то и возвращает

Go to the top of the page
 
+Quote Post

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

 


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


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