blob: 57a1ded551be9a6332bec6a87c125d5ef6e7fd07 [file] [log] [blame]
module wishbone(
input wb_clk_i,
input wb_rst_i,
input wbs_stb_i,
input wbs_cyc_i,
input wbs_we_i,
input [3:0] wbs_sel_i,
input [31:0] wbs_adr_i,
input [31:0] wbs_dat_i,
output wbs_ack_o,
output [31:0] wbs_dat_o,
output reg [7:0] instr_mem_addr,
output reg [7:0] instr_mem_data,
output reg instr_mem_en
);
// 0x3000_0100 - 0x3000_01FF: IMEM_WRITE
parameter IMEM_WRITE_PREFIX = 24'h3000_01;
wire valid;
wire we;
wire [31:0] rdata;
wire [31:0] wdata;
wire [31:0] addr;
wire sel;
wire reset;
wire clk;
reg ready;
assign valid = wbs_cyc_i & wbs_stb_i;
assign wbs_ack_o = ready;
assign we = wbs_we_i;
assign wbs_dat_o = rdata;
assign wdata = wbs_dat_i;
assign addr = wbs_adr_i;
assign sel = wbs_sel_i;
assign reset = wb_rst_i;
assign clk = wb_clk_i;
always @(posedge clk) begin
if(reset) begin
// reset
ready <= 1'b0;
end else begin
if(ready) begin
ready <= 1'b0;
instr_mem_en <= 1'b0;
end
// Read
if (valid && !ready && !we) begin
//case(addr)
//endcase
ready <= 1'b1;
// Write
end else if (valid && !ready && we) begin
case(addr[31:8])
IMEM_WRITE_PREFIX: begin
instr_mem_addr <= addr[7:0];
instr_mem_data <= wdata[7:0];
instr_mem_en <= 1'b1;
end
endcase
ready <= 1'b1;
end
end
end
endmodule