module bus
(inout [7:0] bus
,input nWr
,input nCS
);
wire nWr_i;
IB33 IB33_nWr (.PAD(nWr), .Y(nWr_i));//входной буфер - зависит от кристалла
wire nCS_i;
IB33 IB33_nCS (.PAD(nCS), .Y(nCS_i));
wire [7:0] bus_i;
wire [7:0] bus_o;
wire bus_en;
IOB33PN IOB33PN_bus0 (.PAD(bus[0]), .A(bus_o[0]), .EN(bus_en), .Y(bus_i[0]));//двунаправленный буфер
IOB33PN IOB33PN_bus1 (.PAD(bus[1]), .A(bus_o[1]), .EN(bus_en), .Y(bus_i[1]));
IOB33PN IOB33PN_bus2 (.PAD(bus[2]), .A(bus_o[2]), .EN(bus_en), .Y(bus_i[2]));
IOB33PN IOB33PN_bus3 (.PAD(bus[3]), .A(bus_o[3]), .EN(bus_en), .Y(bus_i[3]));
IOB33PN IOB33PN_bus4 (.PAD(bus[4]), .A(bus_o[4]), .EN(bus_en), .Y(bus_i[4]));
IOB33PN IOB33PN_bus5 (.PAD(bus[5]), .A(bus_o[5]), .EN(bus_en), .Y(bus_i[5]));
IOB33PN IOB33PN_bus6 (.PAD(bus[6]), .A(bus_o[6]), .EN(bus_en), .Y(bus_i[6]));
IOB33PN IOB33PN_bus7 (.PAD(bus[7]), .A(bus_o[7]), .EN(bus_en), .Y(bus_i[7]));
reg [7:0] data;
always @(negedge nCS_i)
if (~nWr_i)
data <= bus_i;
assign bus_o = data;
assign bus_en = (~nCS_i & nWr_i);
endmodule