Код
entity pci_test is
port( CLK: in std_logic;
RST_n: in std_logic;
IDSEL: in std_logic;
FRAME_n: in std_logic;
CBE: in std_logic_vector(3 downto 0);
AD8: in std_logic_vector(7 downto 0);
AD_out: out std_logic_vector(7 downto 0));
end entity;
architecture rtl of pci_test is
signal FRAME_p: std_logic;
begin
process(CLK, RST_n) is
begin
if RST_n = '0' then
AD_out<=(others => '0');
elsif rising_edge(CLK) then
FRAME_p<=FRAME_n;
if IDSEL = '1' and CBE="1010" and FRAME_p = '1' and FRAME_n = '0' then
AD_out<=not AD8;
end if;
end if;
end process;
end architecture;
port( CLK: in std_logic;
RST_n: in std_logic;
IDSEL: in std_logic;
FRAME_n: in std_logic;
CBE: in std_logic_vector(3 downto 0);
AD8: in std_logic_vector(7 downto 0);
AD_out: out std_logic_vector(7 downto 0));
end entity;
architecture rtl of pci_test is
signal FRAME_p: std_logic;
begin
process(CLK, RST_n) is
begin
if RST_n = '0' then
AD_out<=(others => '0');
elsif rising_edge(CLK) then
FRAME_p<=FRAME_n;
if IDSEL = '1' and CBE="1010" and FRAME_p = '1' and FRAME_n = '0' then
AD_out<=not AD8;
end if;
end if;
end process;
end architecture;
Для тех, кто не знаком с ВХДЛ объясняю - устройство сидит на шине и по фронту CLK проверяет сигналы FRAME_n, IDSEL, CBE. Если оно видит команду конфигурационного чтения (1010), обращенного к своему слоту(IDSEL в единице, FRAME_n - 0, предыдущее значение 1) то оно зажигает 8 светодиодов в соответствии со знчением первых восьми бит шины AD. При этом получается интересая вещ - первый адрес, который выставляет хост при обращении к слоту моей платы - 04h. Это меня немного удмвило. Я думал, что хост сначала опрашивает 0-й регистр конфигурационного пространства, где хранится номер вендора и девайса и, получив недопустимое значение перестает общаться с этим слотом. Но как показывает мой опыт, первый регистр, к которому идет обращение - отнюдь не первый, и пытается обратиться к плате несколько раз по разным адресам.
Если кому-то не сложно - объясните пожалуйста, как же происходит конфигурирование устройства или скажите, где это подробно описано. Заранее всем большое спасибо
