module Fetch( input clk, input Nrst, output wire [31:0] rd_addr, output wire rd_req, input rd_wait, input [31:0] rd_data, input stall, input jmp, input [31:0] jmppc; output wire bubble, output wire [31:0] insn, output reg [31:0] pc); reg [31:0] prevpc; initial prevpc <= 32'h0; always @(negedge Nrst) prevpc <= 32'h0; always @(*) if (!Nrst) pc <= 32'h0; else if (stall) /* don't change any internal state */ pc <= prevpc; else if (jmp) pc <= jmppc; else pc <= prevpc + 32'h4; assign bubble = stall | rd_wait; assign rd_addr = pc; assign rd_req = !stall; assign insn = rd_data; always @(posedge clk) prevpc <= pc; endmodule