| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- module MemCtrl (
- input Clk_i,
- input Rst_i,
- input WrReq_i,
- input RdReq_i,
- output reg [5:0] AddrA_o,
- output reg WeA_o,
- output reg [5:0] AddrB_o,
- output reg ReB_o
- );
- reg [2:0] currState;
- localparam IDLE = 2'h0;
- localparam WRITE = 2'h1;
- localparam READ = 2'h2;
- always @(posedge Clk_i) begin
- if (Rst_i) begin
- currState <= IDLE;
- end else begin
- case (currState)
- IDLE: begin
- if (WrReq_i) begin
- currState <= WRITE;
- AddrA_o <= AddrA_o+1;
- WeA_o <= 1'b1;
- end else if (RdReq_i)begin
- currState <= READ;
- AddrB_o <= AddrB_o+1;
- ReB_o <= 1'b1;
- end else begin
- currState <= IDLE;
- AddrA_o <= 0;
- AddrB_o <= 0;
- WeA_o <= 1'b0;
- ReB_o <= 1'b0;
- end
- end
- WRITE:begin
- if (WrReq_i) begin
- currState <= WRITE;
- AddrA_o <= AddrA_o+1;
- WeA_o <= 1'b1;
- end else begin
- currState <= IDLE;
- AddrA_o <= 0;
- WeA_o <= 1'b0;
- end
- end
- READ:begin
- if (RdReq_i) begin
- currState <= READ;
- AddrB_o <= AddrB_o+1;
- ReB_o <= 1'b1;
- end else begin
- currState <= IDLE;
- AddrB_o <= 0;
- ReB_o <= 1'b0;
- end
- end
- endcase
- end
- end
- endmodule
|