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

 
 
> pci интерфейс по шагам
sergey sva
сообщение Aug 30 2011, 18:59
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Возникла необходимость изучить интерфейс pci и vhdl, прочитал спецификацию несколько раз, набрал исходников, но логические цепочки в моем мозгу не собираются. Информации много не знай с чего начать. Одна голова хорошо а много лучше, пословица старая и мудрая.
Прошу помочь в этом деле, если тема пойдет может будет еще кому полезна решившего освоить pci.
Цель сделать счетчик 64 разряда, интерфейс pci target 32 бита,плата с spartan3e есть,
выведенные пины ad0-32;c/be0-3;par;serr;perr;stop;devsel;trdy;irdy;frame;idsel;req;gnt;clk;rst;inta
устройство должно считать импульсы на входе плис по переднему фронту, а программа через драйвер должна читать и обнулить это значение.
Прошу просто руководить банкетом по шагам sm.gif буду делать как скажите и выкладывать код.
Первые шаги сделал, установил xilinx ISE настроил кабель связь есть, прочитал несколько раз спецификацию sm.gif , создал проект и добавил
VHDL module в нем описал интерфейс
Код
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;

-- Uncomment the following library declaration if instantiating
-- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
--*******************************************************************************
entity PciInterf  is
    port (
      RST          : in    std_logic;                      -- Reset    
      CLK          : in    std_logic;                      -- Clock    
      AD           : inout std_logic_vector(31 downto 0);  -- Address/Data Bus
      CBE          : in std_logic_vector(3 downto 0);      -- Command/Byte Enable
      PAR          : inout std_logic;                      -- Parity
      FRAME        : in std_logic;                            -- Transaction Frame
      IRDY         : in std_logic;                            -- Initiator Ready
      TRDY         : inout std_logic;                        -- Target Ready
      DEVSEL       : inout std_logic;                      -- Device Select
      STOP         : inout std_logic;                        -- Stop transaction
      IDSEL        : in    std_logic;                      -- Chip Select
      PERR         : inout std_logic;                        -- Parity Error (s/t/s)
      SERR         : inout std_logic;                        -- System Error (o/d)
      INTA         : inout std_logic;                      -- Interrupt pin (o/d)
        
        COUNTPIN     : in std_logic                          --

    );
end PciInterf;
--*******************************************************************************
architecture Behavioral of PciInterf is

begin


end Behavioral;
--*******************************************************************************

В ucf файле связал интерфейс с пинам на микросхеме
Код
NET "AD<0>"     LOC = "P50"  | IOSTANDARD = PCI33_3;
NET "AD<10>"    LOC = "P34"  | IOSTANDARD = PCI33_3;
NET "AD<11>"    LOC = "P33"  | IOSTANDARD = PCI33_3;
NET "AD<12>"    LOC = "P31"  | IOSTANDARD = PCI33_3;
NET "AD<13>"    LOC = "P30"  | IOSTANDARD = PCI33_3;
NET "AD<14>"    LOC = "P29"  | IOSTANDARD = PCI33_3;
NET "AD<15>"    LOC = "P28"  | IOSTANDARD = PCI33_3;
NET "AD<16>"    LOC = "P25"  | IOSTANDARD = PCI33_3;
NET "AD<17>"    LOC = "P24"  | IOSTANDARD = PCI33_3;
NET "AD<18>"    LOC = "P23"  | IOSTANDARD = PCI33_3;
NET "AD<19>"    LOC = "P22"  | IOSTANDARD = PCI33_3;
NET "AD<1>"     LOC = "P49"  | IOSTANDARD = PCI33_3;
NET "AD<20>"    LOC = "P19"  | IOSTANDARD = PCI33_3;
NET "AD<21>"    LOC = "P18"  | IOSTANDARD = PCI33_3;
NET "AD<22>"    LOC = "P16"  | IOSTANDARD = PCI33_3;
NET "AD<23>"    LOC = "P15"  | IOSTANDARD = PCI33_3;
NET "AD<24>"    LOC = "P12"  | IOSTANDARD = PCI33_3;
NET "AD<25>"    LOC = "P11"  | IOSTANDARD = PCI33_3;
NET "AD<26>"    LOC = "P9"   | IOSTANDARD = PCI33_3;
NET "AD<27>"    LOC = "P8"   | IOSTANDARD = PCI33_3;
NET "AD<28>"    LOC = "P5"   | IOSTANDARD = PCI33_3;
NET "AD<29>"    LOC = "P4"   | IOSTANDARD = PCI33_3;
NET "AD<2>"     LOC = "P48"  | IOSTANDARD = PCI33_3;
NET "AD<30>"    LOC = "P3"   | IOSTANDARD = PCI33_3;
NET "AD<31>"    LOC = "P2"   | IOSTANDARD = PCI33_3;
NET "AD<3>"     LOC = "P47"  | IOSTANDARD = PCI33_3;
NET "AD<4>"     LOC = "P42"  | IOSTANDARD = PCI33_3;
NET "AD<5>"     LOC = "P41"  | IOSTANDARD = PCI33_3;
NET "AD<6>"     LOC = "P40"  | IOSTANDARD = PCI33_3;
NET "AD<7>"     LOC = "P39"  | IOSTANDARD = PCI33_3;
NET "AD<8>"     LOC = "P36"  | IOSTANDARD = PCI33_3;
NET "AD<9>"     LOC = "P35"  | IOSTANDARD = PCI33_3;

NET "CBE<0>"    LOC = "P60"  | IOSTANDARD = PCI33_3;
NET "CBE<1>"    LOC = "P62"  | IOSTANDARD = PCI33_3;
NET "CBE<2>"    LOC = "P202" | IOSTANDARD = PCI33_3;
NET "CBE<3>"    LOC = "P199" | IOSTANDARD = PCI33_3;

NET "CLK"       LOC = "P186" | IOSTANDARD = PCI33_3;
NET "DEVSEL"    LOC = "P68"  | IOSTANDARD = PCI33_3;
NET "FRAME"     LOC = "P203" | IOSTANDARD = PCI33_3;
NET "IDSEL"     LOC = "P14"  | IOSTANDARD = PCI33_3;
NET "INTA"      LOC = "P193" | IOSTANDARD = PCI33_3;
NET "IRDY"      LOC = "P200" | IOSTANDARD = PCI33_3;

NET "PAR"       LOC = "P45"  | IOSTANDARD = PCI33_3;
NET "PERR"      LOC = "P64"  | IOSTANDARD = PCI33_3;
NET "RST"       LOC = "P194" | IOSTANDARD = PCI33_3;
NET "SERR"      LOC = "P63"  | IOSTANDARD = PCI33_3;
NET "STOP"      LOC = "P65"  | IOSTANDARD = PCI33_3;
NET "TRDY"      LOC = "P205" | IOSTANDARD = PCI33_3;


NET "COUNTPIN"  LOC = "P20"  | IOSTANDARD = PCI33_3;

Что дальше сделать подскажите ?

Сообщение отредактировал sergey sva - Aug 30 2011, 19:04
Go to the top of the page
 
+Quote Post
3 страниц V   1 2 3 >  
Start new topic
Ответов (1 - 14)
vitan
сообщение Aug 30 2011, 19:18
Сообщение #2


не указал(а) ничего о себе.
******

Группа: Свой
Сообщений: 3 325
Регистрация: 6-04-06
Пользователь №: 15 887



Счетчик отдельно, а PCI отдельно. Напишите уж сначала счетчик, сигналы управления от него выведите на PCI. Лучше, видимо, для этого придумать некий регистр управления, который будет доступен со стороны PCI. Битики в регистре придумайте. Скачайте с opencores pci_target. Ну и т.п....
Go to the top of the page
 
+Quote Post
XVR
сообщение Aug 31 2011, 04:29
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Если вы хотите, что бы ваше устройство увидела ОС, то одним регистром вам не отделаться.

Вам необходимо будет так же реализовать Config Space с BAR0 (как минимум)

Собственно корку можно поделить на 3 части -

1). Front End - общение с протоколом PCI и выделение отдельных транзакций (запись/чтение, Config/BAR0). Возможно проверка ошибок.

2) Обработка запросов к Configuration Space. Все необходимые регистры (и BAR0)

3) Собственно декодер адреса на BAR0 (может быть во Fromt End'e) и ваш конечный регистр



Я когда то писал PCI Target, но он так и остался недоотлаженным, увы. (На Verlog'е). Могу поделится, если надо (~1000 строк Verilog'а)
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Aug 31 2011, 06:26
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Цитата
Я когда то писал PCI Target, но он так и остался недоотлаженным, увы. (На Verlog'е). Могу поделится, если надо (~1000 строк Verilog'а)

Буду очень благодарен asv-lab@yandex.ru
Цитата
сигналы управления от него выведите на PCI. Лучше, видимо, для этого придумать некий регистр управления, который будет доступен со стороны PCI.

Добавить в интерфейс CVALUE ?
Код
entity PciInterf  is
    port (
      RST          : in    std_logic;                      -- Reset    
      CLK          : in    std_logic;                      -- Clock    
      AD           : inout std_logic_vector(31 downto 0);  -- Address/Data Bus
      CBE          : in std_logic_vector(3 downto 0);      -- Command/Byte Enable
      PAR          : inout std_logic;                      -- Parity
      FRAME        : in std_logic;                            -- Transaction Frame
      IRDY         : in std_logic;                            -- Initiator Ready
      TRDY         : inout std_logic;                        -- Target Ready
      DEVSEL       : inout std_logic;                      -- Device Select
      STOP         : inout std_logic;                        -- Stop transaction
      IDSEL        : in    std_logic;                      -- Chip Select
      PERR         : inout std_logic;                        -- Parity Error (s/t/s)
      SERR         : inout std_logic;                        -- System Error (o/d)
      INTA         : inout std_logic;                      -- Interrupt pin (o/d)

     CVALUE    : out std_logic_vector(7 downto 0);   -- value of counter





Простенький счетчик может конечно что не так, поправьте
Код
--*******************************************************************
entity Counter is
   port (
      RESET, COUNTPIN   : in  std_logic;
      CVALUE            : out std_logic_vector(7 downto 0)
    );      
end Counter;
--*******************************************************************
architecture beh of Counter is
   signal COUNT_VALUE : std_logic_vector(7 downto 0);
begin
    process(RESET,COUNTPIN)
    begin
        if(RESET = '1')then
            COUNT_VALUE <= 0;
        else if(COUNTPIN'event and COUNTPIN = '1') then
            COUNT_VALUE <= COUNT_VALUE +1;
        end if;

    end
CVALUE <= COUNT_VALUE;
end beh;
--*******************************************************************



Сообщение отредактировал sergey sva - Aug 31 2011, 06:40
Go to the top of the page
 
+Quote Post
iosifk
сообщение Aug 31 2011, 06:36
Сообщение #5


Гуру
******

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



Цитата(sergey sva @ Aug 30 2011, 22:59) *
Возникла необходимость изучить интерфейс pci и vhdl, прочитал спецификацию несколько раз, набрал исходников, но логические цепочки в моем мозгу не собираются. Информации много не знай с чего начать.
...
Что дальше сделать подскажите ?


Сергей, Вы уж извините, но что за детский сад Вы здесь развели! Вам надо изучить что-то и Вы готовы всю конференцию превратить в собственную няньку.
Сейчас не конец 90-х. Литературы, даже на русском полно. Читайте про интерфейсы у Гука.
В каждой третьей книге именно PCI проект описан и разжеван.. Открытых проектов - полно. Посмотритте сначала их, а уже потом заводите игры в конференции.
А уж про счетчик так и вовсе писать стыдно! И в Ксайлинсовском ИСЕ и в Квартусе и в Моделсиме есть шаблоны. И шаблоны счетчиков в том числе. И вообще, на кой он Вам дался, счетчик. Сделайте просто константу и читайте ее через PCI.


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Aug 31 2011, 06:50
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Можно миллион книг прочитать и толку будет мало.
Цитата
А уж про счетчик так и вовсе писать стыдно!

Где стыд был теперь микросхема ))
iosifk ,посмотрел вашу страничку, вам приходилось разрабатывать устройства с pci, просто вам показался вопрос слишком простыми и поэтому тема вызвала такую реакцию.


Сообщение отредактировал sergey sva - Aug 31 2011, 07:46
Go to the top of the page
 
+Quote Post
iosifk
сообщение Aug 31 2011, 08:32
Сообщение #7


Гуру
******

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



Цитата(sergey sva @ Aug 31 2011, 10:50) *
Можно миллион книг прочитать и толку будет мало.


А вот это - не правда. Что же, все авторы идиоты?

Пытался загрузить PCI System Arhitecture by don andersen. Но это 7 Мег, многовато...
И еще "Сергей Петров, PCI, PCI express. Архитектура, дизайн, принципы функционирования"...

Я то вообще делал свой проект, когда не то что книг, а даже стандарт в сети с трудом нашли... Так что ищите книги и смотрите AN у Альтеры и у Ксайлинкса, Актела...

Приложенный файлик - это пример. Я его не проверял. Но на opencores должны быть проекты...
Прикрепленные файлы
Прикрепленный файл  PCI.ZIP ( 469.07 килобайт ) Кол-во скачиваний: 46
 


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Aug 31 2011, 08:51
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



спасибо, Петрова не читал сейчас поищу.
Go to the top of the page
 
+Quote Post
iosifk
сообщение Aug 31 2011, 09:03
Сообщение #9


Гуру
******

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



Цитата(sergey sva @ Aug 31 2011, 10:50) *
... просто вам показался вопрос слишком простыми....


Да, кстати, я еще тогда напоролся на такой прикол. В качестве материнки была взята плата пром-PC от Адвантеча. Так вот она упорно не воспринимала мою карту, хотя все было верно и регистры читались по непосредственным адресам... А в обычной, бытовой материнке эта же карта работала. Думаю, что Адвантечевская плата не признавала "чужие" карты...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
XVR
сообщение Aug 31 2011, 17:00
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Обещанные сорцы (хотя они вряд ли помогут - коментариями они не избалованны да и баги могут быть)

Прикрепленный файл  pci.zip ( 9.48 килобайт ) Кол-во скачиваний: 118
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Aug 31 2011, 18:30
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Цитата
Обещанные сорцы (хотя они вряд ли помогут - коментариями они не избалованны да и баги могут быть)

Спасибо, помогут есть в чем разбираться уже хорошо ))
Go to the top of the page
 
+Quote Post
tAmega
сообщение Sep 1 2011, 02:13
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 474
Регистрация: 20-01-09
Из: НН
Пользователь №: 43 639



Вот две корки и небольшая статья.
Корки рабочие, одна с opencores другая наша, обе не мои.
За pci_target автор говорил что стопудово рабочая корка.
Корка с open cores также идет под грифом "FPGA proven".


--------------------
пользователь отключен
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Sep 1 2011, 04:30
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



спасибо, сейчас посмотрю.
Как можно проверить в каком состоянии pci мастер, или что может вызывать такое: если плата (устройство taerget) стерто компьютер включается нормально, но если загрузить прошивку то при включении не появляется даже стартовый экран, просто работают вентиляторы,если плату вытащить в этот момент(знаю так делать не желательно) то компьютер начинает загружаться появляется стартовый экран? (какие сигналы это могут вызвать)

Сообщение отредактировал sergey sva - Sep 1 2011, 04:32
Go to the top of the page
 
+Quote Post
iosifk
сообщение Sep 1 2011, 04:40
Сообщение #14


Гуру
******

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



Цитата(sergey sva @ Sep 1 2011, 08:30) *
спасибо, сейчас посмотрю.
Как можно проверить в каком состоянии pci мастер, или что может вызывать такое: если плата (устройство taerget) стерто компьютер включается нормально, но если загрузить прошивку то при включении не появляется даже стартовый экран, просто работают вентиляторы,если плату вытащить в этот момент(знаю так делать не желательно) то компьютер начинает загружаться появляется стартовый экран? (какие сигналы это могут вызвать)

Это значит, что какой то из сигналов не снялся и остался активным. Чтобы плату н дергать сделайте кнопку или джампер, который бы сбрасывал автомат таргета в исходное и тристейтил бы ответные сигналы. А вообще то надо подцепить осцилл и смотреть конкретно... Либо прицепить пяток светодиодов на плату и на них вывести ваши сигналы...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Sep 1 2011, 05:37
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



С vhdl еще не освоился простой вопрос в папке pcitarget несколько файлов как определить какой должен быть TOP и их достаточно добавить в проект что то типа include как в си не нужно?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 00:05
Рейтинг@Mail.ru


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