Доброго времени!
Было вот так:
SUBDESIGN prob
(
AD[WIDTH-1..0] : BIDIR;
AM[WIDTH-1..0], /RD, ALE : INPUT;
AL[WIDTH-1..0] : OUTPUT;
D7_0_in[WIDTH-1..0], D5_0_in[WIDTH-1..0] : INPUT;
D7_1_in[WIDTH-1..0] : INPUT;
)
VARIABLE
AL_[WIDTH-1..0] : DFFE;
D7_0[WIDTH-1..0] : DFFE;
D7_1[WIDTH-1..0] : DFFE;
D5_1[WIDTH-1..0] : DFFE;
AD_OUT[WIDTH-1..0] : TRI;
BEGIN
CASE (AM[],AL[]) IS
WHEN (D7_1_ADDR) => AD_OUT[].IN = D7_1[].Q; AD_EN=VCC;
WHEN (D5_1_ADDR) => AD_OUT[].IN = D5_1[].Q; AD_EN=VCC;
WHEN (D7_0_ADDR) => AD_OUT[].IN = D7_0[].Q; AD_EN=VCC;
WHEN OTHERS => AD_EN = GND;
END CASE;
AD_OUT[].OE = (AD_EN AND !/RD);
AD[] = AD_OUT[].OUT;
...
Потом добавил еще одну 8-разрадную защелку и переписал CASE:
D5_0[WIDTH-1..0] : DFFE;
CASE (AM[],AL[]) IS
WHEN (D7_1_ADDR) => AD_OUT[].IN = D7_1[].Q; AD_EN=VCC;
WHEN (D5_1_ADDR) => AD_OUT[].IN = D5_1[].Q; AD_EN=VCC;
WHEN (D7_0_ADDR) => AD_OUT[].IN = D7_0[].Q; AD_EN=VCC;
WHEN (D5_0_ADDR) => AD_OUT[].IN = D5_0[].Q; AD_EN=VCC;
WHEN OTHERS => AD_EN = GND;
END CASE;
И вылезла такая вот шляпа:
Warning: Macrocell buffer inserted after node "AD_OUT[2]~45"
По ресурсам - еще осталось 12 свободных пинов и 121 макроячейка из 256. В какую сторону хоть копать?
Константы адресов в кейзе - 16-разрядные