|
pci интерфейс по шагам |
|
|
|
Aug 30 2011, 18:59
|
Гуру
     
Группа: Свой
Сообщений: 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 устройство должно считать импульсы на входе плис по переднему фронту, а программа через драйвер должна читать и обнулить это значение. Прошу просто руководить банкетом по шагам  буду делать как скажите и выкладывать код. Первые шаги сделал, установил xilinx ISE настроил кабель связь есть, прочитал несколько раз спецификацию  , создал проект и добавил 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
|
|
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 30)
|
Aug 31 2011, 06:26
|
Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Aug 31 2011, 06:36
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(sergey sva @ Aug 30 2011, 22:59)  Возникла необходимость изучить интерфейс pci и vhdl, прочитал спецификацию несколько раз, набрал исходников, но логические цепочки в моем мозгу не собираются. Информации много не знай с чего начать. ... Что дальше сделать подскажите ? Сергей, Вы уж извините, но что за детский сад Вы здесь развели! Вам надо изучить что-то и Вы готовы всю конференцию превратить в собственную няньку. Сейчас не конец 90-х. Литературы, даже на русском полно. Читайте про интерфейсы у Гука. В каждой третьей книге именно PCI проект описан и разжеван.. Открытых проектов - полно. Посмотритте сначала их, а уже потом заводите игры в конференции. А уж про счетчик так и вовсе писать стыдно! И в Ксайлинсовском ИСЕ и в Квартусе и в Моделсиме есть шаблоны. И шаблоны счетчиков в том числе. И вообще, на кой он Вам дался, счетчик. Сделайте просто константу и читайте ее через PCI.
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Aug 31 2011, 06:50
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
Можно миллион книг прочитать и толку будет мало. Цитата А уж про счетчик так и вовсе писать стыдно! Где стыд был теперь микросхема )) iosifk ,посмотрел вашу страничку, вам приходилось разрабатывать устройства с pci, просто вам показался вопрос слишком простыми и поэтому тема вызвала такую реакцию.
Сообщение отредактировал sergey sva - Aug 31 2011, 07:46
|
|
|
|
|
Aug 31 2011, 08:32
|
Гуру
     
Группа: Модераторы
Сообщений: 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
|
|
|
|
|
Sep 1 2011, 07:38
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
С этим разобрался, например в одном файле Код package CFGSPACE_SET is ...... а в другом чтобы использовать Код use WORK.CFGSPACE_SET.all; поправьте если ошибаюсь. А какой файл должен быть top set пока не понял.
|
|
|
|
|
Sep 2 2011, 02:55
|
Местный
  
Группа: Свой
Сообщений: 474
Регистрация: 20-01-09
Из: НН
Пользователь №: 43 639

|
Не собирал проект pci_target, поэтому показать свою версию не могу. Судя по сообщению, он пишет "ничем не ограниченный вход", а поскольку Вы делаете контроллер для шины PCI, которая предполагает выбросы, софт советует подключить либо резисторы, либо clamp диоды, которые не позволят выбросам быть больше чем размах питания. Почитайте аппноты по PCI для данного софта. И у Альтеры и у Xilinx есть корки PCI, и там же можно посмотреть как именно они разбираются с пинами в ucf файле. Или качните самопальные проекты из сети, которые хотя бы компилятся, там увидите как настроить внешний интерфейс.
--------------------
пользователь отключен
|
|
|
|
|
Sep 2 2011, 04:28
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
Вход P14 в документации написано не имеет не диодов ни резисторов и работает только на вход Из документации Цитата nrestricted, general-purpose input-only pin. This pin does not have an output structure, differential termination resistor, or PCI clamp diode Подозреваю где-то в проекте как то связано с входом IDSEL_p что вызывает такую ошибку,может ошибаюсь, где посмотреть нет мыслей. подкиньте мысль))
Сообщение отредактировал sergey sva - Sep 2 2011, 04:31
|
|
|
|
|
Sep 2 2011, 15:55
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
Порты IP, для чего они обычно используются? вызывает ошибку(в 22 посте) мапинг Код component IBUF is port( I: in std_logic; O: out std_logic ); end component;
IB2: IBUF port map(I => IDSEL_p, O => IDSELil); Любой другой порт не IP, привязанный к IDSEL_p не вызывает ошибки. Что можно сделать?
Сообщение отредактировал sergey sva - Sep 2 2011, 19:05
|
|
|
|
|
Sep 4 2011, 17:59
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
Взял пример c opencores pci32tlite_oc_R03 все собралось без ошибок, загрузил ,комп тоже стал запускаться. dmidecode ведь должен показать vendorID deviceID ? в коде задан Код generic ( vendorID : std_logic_vector(15 downto 0) := x"4150"; deviceID : std_logic_vector(15 downto 0) := x"0001"; revisionID : std_logic_vector(7 downto 0) := x"90"; subsystemID : std_logic_vector(15 downto 0) := x"0000"; subsystemvID : std_logic_vector(15 downto 0) := x"1172"; classcodeID : std_logic_vector(23 downto 0) := x"068000"; -- BAR&WB_CFG (dont delete)
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|