Приветствую специалистов.
Сделали мы с одногрупgником плату простого PCI контроллера (Разводка во вложенном файле в Gerber, ошибки в питании и подтяжках на ПЗУ устранены поверхностным монтажом :) ) в рамках курсового. SPARTAN конфигурится и работает. Стали подымать PCI и зашили мы в неё следующее для пробы:
entity pci_interface is
port(
AD: inout std_logic_vector(31 downto 0);
CBE: in std_logic_vector(3 downto 0);
clk: in std_logic;
frame: in std_logic;
irdy: inout std_logic;
devsel, interrupt: out std_logic;
trdy: inout std_logic;
par, serr, stop, perr, req, gnt, lock: inout std_logic;
rst, idsel: in std_logic;
led1,led2,led3: out std_logic
);
end pci_interface;
architecture Behavioral of pci_interface is
signal adr_ok, read, write, cfg1, cfg2, cfg3, cfg4, cfg5,cfg6,cfg7:std_logic;
signal dout, din: std_logic_vector(31 downto 0);
signal DATA:std_logic_vector(31 downto 0);
signal state:std_logic_vector(2 downto 0);
signal cfg_reg00:std_logic_vector(31 downto 0);
signal cfg_reg04:std_logic_vector(31 downto 0);
signal cfg_reg08:std_logic_vector(31 downto 0);
signal cfg_reg10:std_logic_vector(31 downto 0);
signal reg_adress:std_logic_vector(5 downto 0);
signal answer:std_logic;
begin
--U1:
--IBUF port map (I=>rst, O=>irst);
par<='Z';
serr<='Z';
stop<='Z';
perr<='Z';
req<='Z';
gnt<='Z';
lock<='Z';
interrupt<='Z';
--led2_sig<='0';
---devsel<='Z';
process(clk)
begin
if clk'event and clk='1' then
if cfg1='1' then
state<="001";
DATA<="10011011110110111001101111011011";
end if;
if cfg2='1' then
state<="010";
DATA<="00000000000000000000000000000001";
end if;
if cfg3='1' then
state<="011";
DATA<="11111111000000000000000000000001";
end if;
if cfg4='1' then
state<="100";
DATA<="11111111111111111111111111111001";
end if;
if cfg5='1' and cfg1='0' and cfg2='0' and cfg3='0'and cfg4='0' then
state<="101";
DATA<="00000000000000000000000000000000";
end if;
if cfg6='1' or cfg7='1' then
state<="110";
write<='1';
end if;
if irdy='0' then
answer<='1';
else
answer<='0';
write<='0';
end if;
if write='1' and answer='1' then
DATA<=AD;
state<="111";
end if;
--if rst='0' then
--state<="000";
---cfg_reg00<="10011011110110111001101111011011";
--cfg_reg04<="00000000000000000000000000000001";
--cfg_reg08<="11111111000000000000000000000001";
--cfg_reg10<="11111111111111111111111111111001";
--adr_ok<='0';
--read<='0';
--write<='0';
--cfg<='0';
--else
--end if;
---end if;
--if irst'event and irst='0' then
--reset<=irst;
--end if;
---if irst'event and irst='1' then
end if;
end process;
--ad<=din when adr_ok<='1' and irdy='0' and read='1' else "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ";
--devsel<='0' when read='1' or write='1' else 'Z';
--trdy<='0' when read='1' or write='1' else 'Z';
cfg1<='1' when idsel='1' and frame='0' and CBE="1010" and AD(7 downto 2)="000000" else '0';
cfg2<='1' when idsel='1' and frame='0' and CBE="1010" and AD(7 downto 2)="000100" else '0';
cfg3<='1' when idsel='1' and frame='0' and CBE="1010" and AD(7 downto 2)="001000" else '0';
cfg4<='1' when idsel='1' and frame='0' and CBE="1010" and AD(7 downto 2)="010000" else '0';
cfg5<='1' when idsel='1' and frame='0' and CBE="1010" else '0';
cfg6<='1' when idsel='1' and frame='0' and CBE="1011" and AD(7 downto 2)="010000" else '0';
cfg7<='1' when idsel='1' and frame='0' and CBE="1011" else '0';
devsel<='0' when answer='1' else 'Z';
trdy<='0' when answer='1' else 'Z';
AD<=DATA when answer='1' and write='0' else "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ";
led1<=state(2);
led2<=state(1);
led3<=state(0);
end Behavioral;
Плата вроди бы как конфигурится, но после последней транзакции CFG_WRITE комп висит мёртво и материнка не пищит о том что в ней не стоит VGA. Мы делали разводку с расчётом на то что будем делать Master и подключили выводы ПЛИС к par, serr, stop, perr, req, gnt, lock разъема PCI. Если я на данный момент не использую эти выводы то если при конфигурации ПЛИС указать что неиспользуемые выводы оставить FLOAT они будут в состоянии 'Z'? ИЛИ сразу надо писать весь CORE целиком :cranky: ? Не судите строго - это моя первая плата . Я наверное облажался, что не включил SPARTAN в цепь JTAG? Теперь для отладки есть только три диода (не 4 - вывод P3 теперь подключен к AD(27) -B23, проводом =)). Помогите советом, а я PCI core в GPL выложу =).
pcb.zip