Как это нельяз если это просто ключ? ВОт щас код без ифов накидал - весь на тригерах. Работает как надо... VARIABLE
-- данные и адрес ОЗУ по SPI
Qspi : lpm_shiftreg WITH (LPM_WIDTH = 16, LPM_DIRECTION = "LEFT");
Aspi : lpm_shiftreg WITH (LPM_WIDTH = 18, LPM_DIRECTION = "LEFT");
BankReady : NODE; -- готовность банка к переключению
-- тригер для двунаправленной шины данных
buf0Q[15..0] : TRI_STATE_NODE;
buf1Q[15..0] : TRI_STATE_NODE;
buf0A[17..0] : TRI_STATE_NODE;
buf1A[17..0] : TRI_STATE_NODE;
buf0fA[17..0] : TRI_STATE_NODE;
buf1fA[17..0] : TRI_STATE_NODE;
buf0fQ[15..0] : TRI_STATE_NODE;
buf1fQ[15..0] : TRI_STATE_NODE;
BEGIN
-- это тригер-разветвитель шина адреса от МК на два банка
FOR i IN 0 TO 17 GENERATE
buf0A[i] = TRI(Aspi.q[i], NOT uBank); -- адрес выкидывается на активный банк
buf1A[i] = TRI(Aspi.q[i], uBank);
END GENERATE;
-- это тригер-разветвитель шина адреса от флехи на два банка
FOR i IN 0 TO 17 GENERATE
buf0fA[i] = TRI(fA[i], uBank); -- адрес выкидывается на неактивный банк
buf1fA[i] = TRI(fA[i], NOT uBank);
END GENERATE;
-- цепляем мультиплицированную шину адреса на банки
r0A[] = buf0fA[] AND buf0A[];
r1A[] = buf1fA[] AND buf1A[];
-- это тригер-разветвитель шины данных от МК на банки
FOR i IN 0 TO 15 GENERATE
buf0Q[i] = TRI(Qspi.q[i], uRW AND (NOT uBank)); -- пока не читаем память, выход тригера открыт
buf1Q[i] = TRI(Qspi.q[i], uRW AND uBank);
END GENERATE;
r0Q[] = buf0Q[];
r1Q[] = buf1Q[];
-- это тригер-мультиплексор шины данных от банков на флеху
FOR i IN 0 TO 15 GENERATE
buf0fQ[i] = TRI(r0Q[i], uBank);
buf1fQ[i] = TRI(r1Q[i], NOT uBank);
END GENERATE;
fQ[] = buf0fQ[] AND buf1fQ[];
...