module fpga_spram(
  A,
  CEN,
  CLK,
  D,
  Q,
  BWEN   
);

parameter  DATAWIDTH = 32;
parameter  ADDRWIDTH = 17;
parameter  MEMDEPTH  = 2**(ADDRWIDTH);

input   [(ADDRWIDTH-1) :0]  A;
input           CEN;
input           CLK;
input   [(DATAWIDTH-1):0]  D;
input   [3:0]        BWEN;
output  [(DATAWIDTH-1):0]  Q;

wire     [(DATAWIDTH-1):0]  Q;

fpga_byte_spram #(ADDRWIDTH,8,MEMDEPTH) x_fpga_byte0_spram(
  .A(A),
  .CEN(CEN),
  .CLK(CLK),
  .D(D[7:0]),
  .Q(Q[7:0]),
  .WEN(BWEN[0])   
);

fpga_byte_spram #(ADDRWIDTH,8,MEMDEPTH) x_fpga_byte1_spram(
  .A(A),
  .CEN(CEN),
  .CLK(CLK),
  .D(D[15:8]),
  .Q(Q[15:8]),
  .WEN(BWEN[1])   
);

fpga_byte_spram #(ADDRWIDTH,8,MEMDEPTH) x_fpga_byte2_spram(
  .A(A),
  .CEN(CEN),
  .CLK(CLK),
  .D(D[23:16]),
  .Q(Q[23:16]),
  .WEN(BWEN[2])   
);

fpga_byte_spram #(ADDRWIDTH,8,MEMDEPTH) x_fpga_byte3_spram(
  .A(A),
  .CEN(CEN),
  .CLK(CLK),
  .D(D[31:24]),
  .Q(Q[31:24]),
  .WEN(BWEN[3])   
);

endmodule