ik heb een flashcontroller aangepast, die eerst 16 bits waardes uit een flash haalde en op een 16 bits uitgang zette, maar ik heb een 8 bits flash, dus ik moet de 8 bits omzetten naar 16 bits. ik dacht dat het wel handig was om met de MSB van het adres te kiezen tussen de bovenste en onderste byte. maar nu moet de data nog weer in elkaar gezet worden. ik neem er nu 2 clockcycles voor, de 2e cycle wordt cyccomplete hoog gemaakt. updown spreekt voor zich. reg0 en reg1 zijn de hoge en lage byte van de word.
bij de plekken waar ik wat heb aangepast heb ik het erachter gezet.


module flash_cntrl (
    // Wishbone slave interface
    input             wb_clk_i,
    input             wb_rst_i,
    input      [15:0] wb_dat_i,
    output     [15:0] wb_dat_o,
    input      [17:1] wb_adr_i,
    input             wb_we_i,
    input             wb_tga_i,
    input             wb_stb_i,
    input             wb_cyc_i,
    output reg        wb_ack_o,

    // Pad signals
    output reg [21:0] flash_addr_,
    input      [7:0]  flash_data_,
    output            flash_we_n_,
    output reg        flash_ce2_
  );

  // Registers and nets
  reg  [11:0] base;
  reg  [7:0]  reg0, reg1;
  wire        op;
  wire        opbase;
  reg 		  cyccomplete;
  wire		  updown;

  // Continuous assignments
  assign flash_we_n_ = 1'b1;
  assign op          = wb_cyc_i & wb_stb_i;
  assign opbase      = op & wb_tga_i & wb_we_i;
  assign flash_addr_[21] = updown;   //aangepast

  // Behaviour
  // flash_addr, 21 bits
  always @(posedge wb_clk_i)
    flash_addr_[20:0] <= wb_tga_i ? { 1'b1, base, wb_adr_i[8:1] }
                            : { 5'h0, wb_adr_i[17],
                                      wb_adr_i[15:1] };

  always @(posedge wb_clk_i) flash_ce2_ <= op;
  always @(posedge wb_clk_i) wb_ack_o   <= op & cyccomplete;
  
  always @(posedge wb_clk_i) wb_dat_o <= {reg1, reg0}; //aangepast
  
  always @(posedge wb_clk_i)      //dit blokje heb ik er in gezet.
	if (updown == 1'b0)
	 begin
		 reg0 <= flash_data_;
		 updown <= 1'b1;
		 cyccomplete <= 1'b0;
	 end
	else
	 begin
		reg1 <= flash_data_;
		updown <= 1'b0;
		cyccomplete <= 1'b1;
	 end
  
  // base
  always @(posedge wb_clk_i)
    base <= wb_rst_i ? 12'h0: ((opbase) ? wb_dat_i[11:0] : base);
endmodule

de vraag is nu: gaat dit werken? vooral dat updown meteen wordt geinverteerd en weer aan de ingang van de flipflop wordt aangeboden als gekeken is welke waarde hij heeft?
het duurt trouwens bijna 1 clockcycle voordat de data van het adres aan de flash ook op de uitgangen staat.

bonkerdebonkbonkbonkk bonk bommelde bom bommelebom .. ( ik val van de trap )

miljaar wa is me dat zeg..


module flash_cntrl (
    // Wishbone slave interface
    input              wb_clk_i,
    input              wb_rst_i,
    input       [15:0] wb_dat_i,
    output  reg [15:0] wb_dat_o,
    input       [17:1] wb_adr_i,
    input              wb_we_i,
    input              wb_tga_i,
    input              wb_stb_i,
    input              wb_cyc_i,
    output reg         wb_ack_o,

    // Pad signals
    output reg [21:0] flash_addr_,
    input      [7:0]  flash_data_,
    output            flash_we_n_,
    output reg        flash_ce2_
  );

reg cycle;
always @ posedge (wb_clk_i)
    cycle    <= ~cycle;
    wb_ack_o <= 1'b0;
    flash_addr <= {3'b0,wb_adr_i,cycle};  // aanpassen van breedte
    if   (~cycle) wb_dat_o[7:0] <= flash_data;
    else wb_dat_o[15:0] <=flash_data;
    if wb_cyc (cycle <=1'b0) // lanceer een cycle
end;
endmodule

maar er klopt iets niet. er moet nog een handshake signaal zijn. ik veronderstel dat wb_cyc een aanvraag is tot lezen en dat je wanneer de data klaar is de ACK moet geven ?

heb je de timing van die bus ?

ik had eerlijk gezegd een verhaal over draken verwacht, maar een trap is weer ens wat anders.
die bus zit toch wel enigzins complex in elkaar, maar ik zal dat wat jij hebt veranderd invlooien in wat er was, en dan testen maar.