Цитата(BSV @ Jan 9 2007, 23:11)

1) Lock в последних версиях спецификации (начиная с 2.3 кажется) использовать не рекомендуется
2) Req после снятия сброса должен быть в '1' он свой для каждого устройства на шине.
3) Par драйвить при чтении обязательно!!!! Иначе на некоторых матерях не будет работать. Читайте спецификацию.
4) На Stop пока можно забить, но он понадобится, если нужно будет завершать транзакции по инициативе Target.
5) Есть еще один момент - сигналы STOP, TRDY, IRDY, FRAME являются s/t/s сигналами, т.е. их перед снятием 1 такт нужно в '1' подержать.
6) Есть ошибка в коде:
if irdy='0' then
answer<='1';
else
answer<='0';
write<='0';
end if;
если irdy выставляется не сразу, то write сбросится и будет конфликт на шине.
7) Обращайте особое внимание на Warning'и синтезатора - наверняка он Вам Latch'ей навставлял.
Вы бы это добро помоделировали сначала что-ли, что железо-то зря палить!!! Симулятор - это наше все!!!
Для начала реализуйте автомат Target'a, похожий на тот, что в спецификации описан и им рулите - Вам же будет легче. Все сигналы шины лучше защелкивать в регистрах блоков ввода-вывода как для входных, так и для выходных сигналов, иначе тайминги будет сложно соблюсти.
А если навставлять регистров почем зря, то очень сложно будет добиться адекватной производительности

К сожалению, PCI ядро, особенно мастер, это такой себе огромный клубок компромисов, которые очень сложно соблюсти без наличия достаточного опыта
2 buggyНу, зависаете вы потому, что устанавливаете answer по любому падению на irdy в нуль. Это в свою очередь приводит к появлению логического нуля на trdy и devsel. Так делать нельзя. Прежде чем включать драйвера на trdy и devsel необходимо быть увереным, что транзакция направлена именно вам.
Далее - включить tri-state и задрайвить нуль на выходную шину - очень дохлое занятие - все тайминги идут лесом. Надо включать tri-state, драйвить на нем '1' и только следующим тактом выводить '0'. Это касательно trdy и devsel, аналогично необходимо поступать и с шиной даных. В литературе данный прием по отношению к AD шине называется adress/data stepping.
P.S. Не хочу сбивать ваш боевой настрой, но исходники полнофункционального PCI master ядра на 33MHz в нашем исполнении занимают "всего" 170kB, не считая тест-бенчей, на их написание был потрачен почти месяц рабочего времени двух инженеров с несколькими годами опыта в разработке цифровых схем, их окончательная отладка заняла еще 2 недели. Может, вам попытаться упростить себе задачу? К примеру, ограничиться однотактными пересылками по шине? Не реализовывать мастера?
P.P.S. Неиспользуемые выводы достаточно драйвить константным 'Z' - конфликтов на шине не будет.