module if_stage (
	/********** ¥¯¥í¥Ã¥¯ & ¥ê¥»¥Ã¥È **********/
	input  wire				   clk,			// ¥¯¥í¥Ã¥¯
	input  wire				   reset,		// ·ÇÍ¬ÆÚ¥ê¥»¥Ã¥È
	/********** SPM¥¤¥ó¥¿¥Õ¥§©`¥¹ **********/
	input  wire [`WordDataBus] spm_rd_data, // Õi¤ß³ö¤·¥Ç©`¥¿
	output wire [`WordAddrBus] spm_addr,	// ¥¢¥É¥ì¥¹
	output wire				   spm_as_,		// ¥¢¥É¥ì¥¹¥¹¥È¥í©`¥Ö
	output wire				   spm_rw,		// Õi¤ß£¯ø¤­
	output wire [`WordDataBus] spm_wr_data, // ø¤­Þz¤ß¥Ç©`¥¿
	/********** ¥Ð¥¹¥¤¥ó¥¿¥Õ¥§©`¥¹ **********/
	input  wire [`WordDataBus] bus_rd_data, // Õi¤ß³ö¤·¥Ç©`¥¿
	input  wire				   bus_rdy_,	// ¥ì¥Ç¥£
	input  wire				   bus_grnt_,	// ¥Ð¥¹¥°¥é¥ó¥È
	output wire				   bus_req_,	// ¥Ð¥¹¥ê¥¯¥¨¥¹¥È
	output wire [`WordAddrBus] bus_addr,	// ¥¢¥É¥ì¥¹
	output wire				   bus_as_,		// ¥¢¥É¥ì¥¹¥¹¥È¥í©`¥Ö
	output wire				   bus_rw,		// Õi¤ß£¯ø¤­
	output wire [`WordDataBus] bus_wr_data, // ø¤­Þz¤ß¥Ç©`¥¿
	/********** ¥Ñ¥¤¥×¥é¥¤¥óÖÆÓùÐÅºÅ **********/
	input  wire				   stall,		// ¥¹¥È©`¥ë
	input  wire				   flush,		// ¥Õ¥é¥Ã¥·¥å
	input  wire [`WordAddrBus] new_pc,		// ÐÂ¤·¤¤¥×¥í¥°¥é¥à¥«¥¦¥ó¥¿
	input  wire				   br_taken,	// ·Öáª¤Î³ÉÁ¢
	input  wire [`WordAddrBus] br_addr,		// ·ÖáªÏÈ¥¢¥É¥ì¥¹
	output wire				   busy,		// ¥Ó¥¸©`ÐÅºÅ
	/********** IF/ID¥Ñ¥¤¥×¥é¥¤¥ó¥ì¥¸¥¹¥¿ **********/
	output wire [`WordAddrBus] if_pc,		// ¥×¥í¥°¥é¥à¥«¥¦¥ó¥¿
	output wire [`WordDataBus] if_insn,		// ÃüÁî
	output wire				   if_en		// ¥Ñ¥¤¥×¥é¥¤¥ó¥Ç©`¥¿¤ÎÓÐ¿
);

	/********** ÄÚ²¿½Ó¾AÐÅºÅ **********/
	wire [`WordDataBus]		   insn;		// ¥Õ¥§¥Ã¥Á¤·¤¿ÃüÁî

	/********** ¥Ð¥¹¥¤¥ó¥¿¥Õ¥§©`¥¹ **********/
	bus_if bus_if (
		/********** ¥¯¥í¥Ã¥¯ & ¥ê¥»¥Ã¥È **********/
		.clk		 (clk),					// ¥¯¥í¥Ã¥¯
		.reset		 (reset),				// ·ÇÍ¬ÆÚ¥ê¥»¥Ã¥È
		/********** ¥Ñ¥¤¥×¥é¥¤¥óÖÆÓùÐÅºÅ **********/
		.stall		 (stall),				// ¥¹¥È©`¥ë
		.flush		 (flush),				// ¥Õ¥é¥Ã¥·¥åÐÅºÅ
		.busy		 (busy),				// ¥Ó¥¸©`ÐÅºÅ
		/********** CPU¥¤¥ó¥¿¥Õ¥§©`¥¹ **********/
		.addr		 (if_pc),				// ¥¢¥É¥ì¥¹
		.as_		 (`ENABLE_),			// ¥¢¥É¥ì¥¹ÓÐ¿
		.rw			 (`READ),				// Õi¤ß£¯ø¤­
		.wr_data	 (`WORD_DATA_W'h0),		// ø¤­Þz¤ß¥Ç©`¥¿
		.rd_data	 (insn),				// Õi¤ß³ö¤·¥Ç©`¥¿
		/********** ¥¹¥¯¥é¥Ã¥Á¥Ñ¥Ã¥É¥á¥â¥ê¥¤¥ó¥¿¥Õ¥§©`¥¹ **********/
		.spm_rd_data (spm_rd_data),			// Õi¤ß³ö¤·¥Ç©`¥¿
		.spm_addr	 (spm_addr),			// ¥¢¥É¥ì¥¹
		.spm_as_	 (spm_as_),				// ¥¢¥É¥ì¥¹¥¹¥È¥í©`¥Ö
		.spm_rw		 (spm_rw),				// Õi¤ß£¯ø¤­
		.spm_wr_data (spm_wr_data),			// ø¤­Þz¤ß¥Ç©`¥¿
		/********** ¥Ð¥¹¥¤¥ó¥¿¥Õ¥§©`¥¹ **********/
		.bus_rd_data (bus_rd_data),			// Õi¤ß³ö¤·¥Ç©`¥¿
		.bus_rdy_	 (bus_rdy_),			// ¥ì¥Ç¥£
		.bus_grnt_	 (bus_grnt_),			// ¥Ð¥¹¥°¥é¥ó¥È
		.bus_req_	 (bus_req_),			// ¥Ð¥¹¥ê¥¯¥¨¥¹¥È
		.bus_addr	 (bus_addr),			// ¥¢¥É¥ì¥¹
		.bus_as_	 (bus_as_),				// ¥¢¥É¥ì¥¹¥¹¥È¥í©`¥Ö
		.bus_rw		 (bus_rw),				// Õi¤ß£¯ø¤­
		.bus_wr_data (bus_wr_data)			// ø¤­Þz¤ß¥Ç©`¥¿
	);
   
	/********** IF¥¹¥Æ©`¥¸¥Ñ¥¤¥×¥é¥¤¥ó¥ì¥¸¥¹¥¿ **********/
	if_reg if_reg (
		/********** ¥¯¥í¥Ã¥¯ & ¥ê¥»¥Ã¥È **********/
		.clk		 (clk),					// ¥¯¥í¥Ã¥¯
		.reset		 (reset),				// ·ÇÍ¬ÆÚ¥ê¥»¥Ã¥È
		/********** ¥Õ¥§¥Ã¥Á¥Ç©`¥¿ **********/
		.insn		 (insn),				// ¥Õ¥§¥Ã¥Á¤·¤¿ÃüÁî
		/********** ¥Ñ¥¤¥×¥é¥¤¥óÖÆÓùÐÅºÅ **********/
		.stall		 (stall),				// ¥¹¥È©`¥ë
		.flush		 (flush),				// ¥Õ¥é¥Ã¥·¥å
		.new_pc		 (new_pc),				// ÐÂ¤·¤¤¥×¥í¥°¥é¥à¥«¥¦¥ó¥¿
		.br_taken	 (br_taken),			// ·Öáª¤Î³ÉÁ¢
		.br_addr	 (br_addr),				// ·ÖáªÏÈ¥¢¥É¥ì¥¹
		/********** IF/ID¥Ñ¥¤¥×¥é¥¤¥ó¥ì¥¸¥¹¥¿ **********/
		.if_pc		 (if_pc),				// ¥×¥í¥°¥é¥à¥«¥¦¥ó¥¿
		.if_insn	 (if_insn),				// ÃüÁî
		.if_en		 (if_en)				// ¥Ñ¥¤¥×¥é¥¤¥ó¥Ç©`¥¿¤ÎÓÐ¿
	);

endmodule