[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
>Содержит ли ли сразу после этого BAR0 нормальный изначальный адрес?
да и доступ к памяти разрешён
>Возможно, причина в сигналах IDSEL
поправил - непомогло
хех, буду смотреть дальше, хотя печалит отсутствие логанализатора (только хп54645д)
приведу небольшой кусок проги на андл (надеюсь не сильно утомит :) )
idle = _frame and _irdy; -- признак входа в состояние IDLE (frame,irdy неактивны)
-- три последовательных фазы с началом цикла (по frame'у)
afase0=dff(vcc,frame,!afase,); -- этот импульс проходит чуть раньше afase (до фронта clk вместе с frame)
afase=dffe(1,clk,!afase1,,afase0); -- генерируем 1 импульс для защёлкивания адреса и команды (адресная фаза)
afase1=dff(afase,clk,,); -- этот импульс проходи после afase, длина - один цикл
-- защёлкиваем входные сигналы
ee=dffe(1,clk,!(rst or %idle%(idle and !afase)),,afase0); -- разрешение защёлкивания
a[].d=ad[]; a[].ena=!ee; -- появившийся адрес (через latch)
cmd[].d=cbe[]; cmd[].ena=!ee; -- защёлкиваем появившуюся команду цикла
sel.d=idsel; sel.ena=!ee; -- защёлкиваем сигнал выборки устройства (слота)
-- признак выборки нашего устройства
-- при доступе к конфигурационному пространству
configm_sel=(sel and (a[10..8]==b"000") and (a[1..0]==b"00") and (cmd[3..1]==b"101"));
-- при доступе к пространству памяти
adr_compare=((a[31..24]==bar0[31..24]) and (cmd[3..1]==b"011") and control_mem_ena and (a[1..0]==gnd)) or configm_sel;
-- защёлкиваем выборку
cs=dffe(adr_compare,clk,!(idle and !afase),,afase0); -- по приходу нашей адресной фазы, а сбрасываем по устловию IDLE (frame и irdy неактивны)
Константин.
E-mail: info@telesys.ru