module bitslicer (
    input clk,
    input [23:0] rgb0,
    input [23:0] rgb1,
    input [7:0] pixnum,  // x-value of the pixels we are being fed.
    input start_write,
    output reg [5:0] bitplane_data,
    output [10:0] bitplane_addr,
    output reg bitplane_wren,
    output reg done
);

  reg [2:0] bitplane_bit = 0;
  assign bitplane_addr = {bitplane_bit, pixnum};
  assign bitplane_data = {
    rgb1[bitplane_bit],
    rgb1[bitplane_bit+8],
    rgb1[bitplane_bit+16],
    rgb0[bitplane_bit],
    rgb0[bitplane_bit+8],
    rgb0[bitplane_bit+16]
  };

  reg [3:0] state = StateInit;
  localparam integer StateInit = 0;
  localparam integer StateWriteout = 1;
  localparam integer StateDone = 2;


  always @(posedge clk) begin
    case (state)
      StateInit: begin
        bitplane_bit <= 0;
        done <= 0;
        bitplane_wren <= 0;
        if (start_write) begin
          state <= StateWriteout;
          bitplane_wren <= 1;
        end
      end
      StateWriteout: begin
        // bitplane_data <= {
        //   rgb[1][bitplane_bit],
        //   rgb[1][bitplane_bit+8],
        //   rgb[1][bitplane_bit+16],
        //   rgb[0][bitplane_bit],
        //   rgb[0][bitplane_bit+8],
        //   rgb[0][bitplane_bit+16]
        // };
        bitplane_bit <= bitplane_bit + 1;

        if (bitplane_bit == 7) begin
          state <= StateDone;
          bitplane_wren <= 0;
        end
      end
      StateDone: begin
        done <= 1;  // strobe
        state <= StateInit;
      end
      default: begin
        state <= StateInit;
      end
    endcase
  end
endmodule