module bus (
	/********** ¥¯¥í¥Ã¥¯ & ¥ê¥»¥Ã¥È **********/
	input  wire				   clk,		   // ¥¯¥í¥Ã¥¯
	input  wire				   reset,	   // ·ÇÍ¬ÆÚ¥ê¥»¥Ã¥È
	/********** ¥Ð¥¹¥Þ¥¹¥¿ÐÅºÅ **********/
	// ¥Ð¥¹¥Þ¥¹¥¿¹²Í¨ÐÅºÅ
	output wire [`WordDataBus] m_rd_data,  // Õi¤ß³ö¤·¥Ç©`¥¿
	output wire				   m_rdy_,	   // ¥ì¥Ç¥£
	// ¥Ð¥¹¥Þ¥¹¥¿0·¬
	input  wire				   m0_req_,	   // ¥Ð¥¹¥ê¥¯¥¨¥¹¥È
	input  wire [`WordAddrBus] m0_addr,	   // ¥¢¥É¥ì¥¹
	input  wire				   m0_as_,	   // ¥¢¥É¥ì¥¹¥¹¥È¥í©`¥Ö
	input  wire				   m0_rw,	   // Õi¤ß£¯ø¤­
	input  wire [`WordDataBus] m0_wr_data, // ø¤­Þz¤ß¥Ç©`¥¿
	output wire				   m0_grnt_,   // ¥Ð¥¹¥°¥é¥ó¥È
	// ¥Ð¥¹¥Þ¥¹¥¿1·¬
	input  wire				   m1_req_,	   // ¥Ð¥¹¥ê¥¯¥¨¥¹¥È
	input  wire [`WordAddrBus] m1_addr,	   // ¥¢¥É¥ì¥¹
	input  wire				   m1_as_,	   // ¥¢¥É¥ì¥¹¥¹¥È¥í©`¥Ö
	input  wire				   m1_rw,	   // Õi¤ß£¯ø¤­
	input  wire [`WordDataBus] m1_wr_data, // ø¤­Þz¤ß¥Ç©`¥¿
	output wire				   m1_grnt_,   // ¥Ð¥¹¥°¥é¥ó¥È
	// ¥Ð¥¹¥Þ¥¹¥¿2·¬
	input  wire				   m2_req_,	   // ¥Ð¥¹¥ê¥¯¥¨¥¹¥È
	input  wire [`WordAddrBus] m2_addr,	   // ¥¢¥É¥ì¥¹
	input  wire				   m2_as_,	   // ¥¢¥É¥ì¥¹¥¹¥È¥í©`¥Ö
	input  wire				   m2_rw,	   // Õi¤ß£¯ø¤­
	input  wire [`WordDataBus] m2_wr_data, // ø¤­Þz¤ß¥Ç©`¥¿
	output wire				   m2_grnt_,   // ¥Ð¥¹¥°¥é¥ó¥È
	// ¥Ð¥¹¥Þ¥¹¥¿3·¬
	input  wire				   m3_req_,	   // ¥Ð¥¹¥ê¥¯¥¨¥¹¥È
	input  wire [`WordAddrBus] m3_addr,	   // ¥¢¥É¥ì¥¹
	input  wire				   m3_as_,	   // ¥¢¥É¥ì¥¹¥¹¥È¥í©`¥Ö
	input  wire				   m3_rw,	   // Õi¤ß£¯ø¤­
	input  wire [`WordDataBus] m3_wr_data, // ø¤­Þz¤ß¥Ç©`¥¿
	output wire				   m3_grnt_,   // ¥Ð¥¹¥°¥é¥ó¥È
	/********** ¥Ð¥¹¥¹¥ì©`¥ÖÐÅºÅ **********/
	// ¥Ð¥¹¥¹¥ì©`¥Ö¹²Í¨ÐÅºÅ
	output wire [`WordAddrBus] s_addr,	   // ¥¢¥É¥ì¥¹
	output wire				   s_as_,	   // ¥¢¥É¥ì¥¹¥¹¥È¥í©`¥Ö
	output wire				   s_rw,	   // Õi¤ß£¯ø¤­
	output wire [`WordDataBus] s_wr_data,  // ø¤­Þz¤ß¥Ç©`¥¿
	// ¥Ð¥¹¥¹¥ì©`¥Ö0·¬
	input  wire [`WordDataBus] s0_rd_data, // Õi¤ß³ö¤·¥Ç©`¥¿
	input  wire				   s0_rdy_,	   // ¥ì¥Ç¥£
	output wire				   s0_cs_,	   // ¥Á¥Ã¥×¥»¥ì¥¯¥È
	// ¥Ð¥¹¥¹¥ì©`¥Ö1·¬
	input  wire [`WordDataBus] s1_rd_data, // Õi¤ß³ö¤·¥Ç©`¥¿
	input  wire				   s1_rdy_,	   // ¥ì¥Ç¥£
	output wire				   s1_cs_,	   // ¥Á¥Ã¥×¥»¥ì¥¯¥È
	// ¥Ð¥¹¥¹¥ì©`¥Ö2·¬
	input  wire [`WordDataBus] s2_rd_data, // Õi¤ß³ö¤·¥Ç©`¥¿
	input  wire				   s2_rdy_,	   // ¥ì¥Ç¥£
	output wire				   s2_cs_,	   // ¥Á¥Ã¥×¥»¥ì¥¯¥È
	// ¥Ð¥¹¥¹¥ì©`¥Ö3·¬
	input  wire [`WordDataBus] s3_rd_data, // Õi¤ß³ö¤·¥Ç©`¥¿
	input  wire				   s3_rdy_,	   // ¥ì¥Ç¥£
	output wire				   s3_cs_,	   // ¥Á¥Ã¥×¥»¥ì¥¯¥È
	// ¥Ð¥¹¥¹¥ì©`¥Ö4·¬
	input  wire [`WordDataBus] s4_rd_data, // Õi¤ß³ö¤·¥Ç©`¥¿
	input  wire				   s4_rdy_,	   // ¥ì¥Ç¥£
	output wire				   s4_cs_,	   // ¥Á¥Ã¥×¥»¥ì¥¯¥È
	// ¥Ð¥¹¥¹¥ì©`¥Ö5·¬
	input  wire [`WordDataBus] s5_rd_data, // Õi¤ß³ö¤·¥Ç©`¥¿
	input  wire				   s5_rdy_,	   // ¥ì¥Ç¥£
	output wire				   s5_cs_,	   // ¥Á¥Ã¥×¥»¥ì¥¯¥È
	// ¥Ð¥¹¥¹¥ì©`¥Ö6·¬
	input  wire [`WordDataBus] s6_rd_data, // Õi¤ß³ö¤·¥Ç©`¥¿
	input  wire				   s6_rdy_,	   // ¥ì¥Ç¥£
	output wire				   s6_cs_,	   // ¥Á¥Ã¥×¥»¥ì¥¯¥È
	// ¥Ð¥¹¥¹¥ì©`¥Ö7·¬
	input  wire [`WordDataBus] s7_rd_data, // Õi¤ß³ö¤·¥Ç©`¥¿
	input  wire				   s7_rdy_,	   // ¥ì¥Ç¥£
	output wire				   s7_cs_	   // ¥Á¥Ã¥×¥»¥ì¥¯¥È
);

	/********** ¥Ð¥¹¥¢©`¥Ó¥¿ **********/
	bus_arbiter bus_arbiter (
		/********** ¥¯¥í¥Ã¥¯ & ¥ê¥»¥Ã¥È **********/
		.clk		(clk),		  // ¥¯¥í¥Ã¥¯
		.reset		(reset),	  // ·ÇÍ¬ÆÚ¥ê¥»¥Ã¥È
		/********** ¥¢©`¥Ó¥È¥ì©`¥·¥ç¥óÐÅºÅ **********/
		// ¥Ð¥¹¥Þ¥¹¥¿0·¬
		.m0_req_	(m0_req_),	  // ¥Ð¥¹¥ê¥¯¥¨¥¹¥È
		.m0_grnt_	(m0_grnt_),	  // ¥Ð¥¹¥°¥é¥ó¥È
		// ¥Ð¥¹¥Þ¥¹¥¿1·¬
		.m1_req_	(m1_req_),	  // ¥Ð¥¹¥ê¥¯¥¨¥¹¥È
		.m1_grnt_	(m1_grnt_),	  // ¥Ð¥¹¥°¥é¥ó¥È
		// ¥Ð¥¹¥Þ¥¹¥¿2·¬
		.m2_req_	(m2_req_),	  // ¥Ð¥¹¥ê¥¯¥¨¥¹¥È
		.m2_grnt_	(m2_grnt_),	  // ¥Ð¥¹¥°¥é¥ó¥È
		// ¥Ð¥¹¥Þ¥¹¥¿3·¬
		.m3_req_	(m3_req_),	  // ¥Ð¥¹¥ê¥¯¥¨¥¹¥È
		.m3_grnt_	(m3_grnt_)	  // ¥Ð¥¹¥°¥é¥ó¥È
	);

	/********** ¥Ð¥¹¥Þ¥¹¥¿¥Þ¥ë¥Á¥×¥ì¥¯¥µ **********/
	bus_master_mux bus_master_mux (
		/********** ¥Ð¥¹¥Þ¥¹¥¿ÐÅºÅ **********/
		// ¥Ð¥¹¥Þ¥¹¥¿0·¬
		.m0_addr	(m0_addr),	  // ¥¢¥É¥ì¥¹
		.m0_as_		(m0_as_),	  // ¥¢¥É¥ì¥¹¥¹¥È¥í©`¥Ö
		.m0_rw		(m0_rw),	  // Õi¤ß£¯ø¤­
		.m0_wr_data (m0_wr_data), // ø¤­Þz¤ß¥Ç©`¥¿
		.m0_grnt_	(m0_grnt_),	  // ¥Ð¥¹¥°¥é¥ó¥È
		// ¥Ð¥¹¥Þ¥¹¥¿1·¬
		.m1_addr	(m1_addr),	  // ¥¢¥É¥ì¥¹
		.m1_as_		(m1_as_),	  // ¥¢¥É¥ì¥¹¥¹¥È¥í©`¥Ö
		.m1_rw		(m1_rw),	  // Õi¤ß£¯ø¤­
		.m1_wr_data (m1_wr_data), // ø¤­Þz¤ß¥Ç©`¥¿
		.m1_grnt_	(m1_grnt_),	  // ¥Ð¥¹¥°¥é¥ó¥È
		// ¥Ð¥¹¥Þ¥¹¥¿2·¬
		.m2_addr	(m2_addr),	  // ¥¢¥É¥ì¥¹
		.m2_as_		(m2_as_),	  // ¥¢¥É¥ì¥¹¥¹¥È¥í©`¥Ö
		.m2_rw		(m2_rw),	  // Õi¤ß£¯ø¤­
		.m2_wr_data (m2_wr_data), // ø¤­Þz¤ß¥Ç©`¥¿
		.m2_grnt_	(m2_grnt_),	  // ¥Ð¥¹¥°¥é¥ó¥È
		// ¥Ð¥¹¥Þ¥¹¥¿3·¬
		.m3_addr	(m3_addr),	  // ¥¢¥É¥ì¥¹
		.m3_as_		(m3_as_),	  // ¥¢¥É¥ì¥¹¥¹¥È¥í©`¥Ö
		.m3_rw		(m3_rw),	  // Õi¤ß£¯ø¤­
		.m3_wr_data (m3_wr_data), // ø¤­Þz¤ß¥Ç©`¥¿
		.m3_grnt_	(m3_grnt_),	  // ¥Ð¥¹¥°¥é¥ó¥È
		/********** ¥Ð¥¹¥¹¥ì©`¥Ö¹²Í¨ÐÅºÅ **********/
		.s_addr		(s_addr),	  // ¥¢¥É¥ì¥¹
		.s_as_		(s_as_),	  // ¥¢¥É¥ì¥¹¥¹¥È¥í©`¥Ö
		.s_rw		(s_rw),		  // Õi¤ß£¯ø¤­
		.s_wr_data	(s_wr_data)	  // ø¤­Þz¤ß¥Ç©`¥¿
	);

	/********** ¥¢¥É¥ì¥¹¥Ç¥³©`¥À **********/
	bus_addr_dec bus_addr_dec (
		/********** ¥¢¥É¥ì¥¹ **********/
		.s_addr		(s_addr),	  // ¥¢¥É¥ì¥¹
		/********** ¥Á¥Ã¥×¥»¥ì¥¯¥È **********/
		.s0_cs_		(s0_cs_),	  // ¥Ð¥¹¥¹¥ì©`¥Ö0·¬
		.s1_cs_		(s1_cs_),	  // ¥Ð¥¹¥¹¥ì©`¥Ö1·¬
		.s2_cs_		(s2_cs_),	  // ¥Ð¥¹¥¹¥ì©`¥Ö2·¬
		.s3_cs_		(s3_cs_),	  // ¥Ð¥¹¥¹¥ì©`¥Ö3·¬
		.s4_cs_		(s4_cs_),	  // ¥Ð¥¹¥¹¥ì©`¥Ö4·¬
		.s5_cs_		(s5_cs_),	  // ¥Ð¥¹¥¹¥ì©`¥Ö5·¬
		.s6_cs_		(s6_cs_),	  // ¥Ð¥¹¥¹¥ì©`¥Ö6·¬
		.s7_cs_		(s7_cs_)	  // ¥Ð¥¹¥¹¥ì©`¥Ö7·¬
	);

	/********** ¥Ð¥¹¥¹¥ì©`¥Ö¥Þ¥ë¥Á¥×¥ì¥¯¥µ **********/
	bus_slave_mux bus_slave_mux (
		/********** ¥Á¥Ã¥×¥»¥ì¥¯¥È **********/
		.s0_cs_		(s0_cs_),	  // ¥Ð¥¹¥¹¥ì©`¥Ö0·¬
		.s1_cs_		(s1_cs_),	  // ¥Ð¥¹¥¹¥ì©`¥Ö1·¬
		.s2_cs_		(s2_cs_),	  // ¥Ð¥¹¥¹¥ì©`¥Ö2·¬
		.s3_cs_		(s3_cs_),	  // ¥Ð¥¹¥¹¥ì©`¥Ö3·¬
		.s4_cs_		(s4_cs_),	  // ¥Ð¥¹¥¹¥ì©`¥Ö4·¬
		.s5_cs_		(s5_cs_),	  // ¥Ð¥¹¥¹¥ì©`¥Ö5·¬
		.s6_cs_		(s6_cs_),	  // ¥Ð¥¹¥¹¥ì©`¥Ö6·¬
		.s7_cs_		(s7_cs_),	  // ¥Ð¥¹¥¹¥ì©`¥Ö7·¬
		/********** ¥Ð¥¹¥¹¥ì©`¥ÖÐÅºÅ **********/
		// ¥Ð¥¹¥¹¥ì©`¥Ö0·¬
		.s0_rd_data (s0_rd_data), // Õi¤ß³ö¤·¥Ç©`¥¿
		.s0_rdy_	(s0_rdy_),	  // ¥ì¥Ç¥£
		// ¥Ð¥¹¥¹¥ì©`¥Ö1·¬
		.s1_rd_data (s1_rd_data), // Õi¤ß³ö¤·¥Ç©`¥¿
		.s1_rdy_	(s1_rdy_),	  // ¥ì¥Ç¥£
		// ¥Ð¥¹¥¹¥ì©`¥Ö2·¬
		.s2_rd_data (s2_rd_data), // Õi¤ß³ö¤·¥Ç©`¥¿
		.s2_rdy_	(s2_rdy_),	  // ¥ì¥Ç¥£
		// ¥Ð¥¹¥¹¥ì©`¥Ö3·¬
		.s3_rd_data (s3_rd_data), // Õi¤ß³ö¤·¥Ç©`¥¿
		.s3_rdy_	(s3_rdy_),	  // ¥ì¥Ç¥£
		// ¥Ð¥¹¥¹¥ì©`¥Ö4·¬
		.s4_rd_data (s4_rd_data), // Õi¤ß³ö¤·¥Ç©`¥¿
		.s4_rdy_	(s4_rdy_),	  // ¥ì¥Ç¥£
		// ¥Ð¥¹¥¹¥ì©`¥Ö5·¬
		.s5_rd_data (s5_rd_data), // Õi¤ß³ö¤·¥Ç©`¥¿
		.s5_rdy_	(s5_rdy_),	  // ¥ì¥Ç¥£
		// ¥Ð¥¹¥¹¥ì©`¥Ö6·¬
		.s6_rd_data (s6_rd_data), // Õi¤ß³ö¤·¥Ç©`¥¿
		.s6_rdy_	(s6_rdy_),	  // ¥ì¥Ç¥£
		// ¥Ð¥¹¥¹¥ì©`¥Ö7·¬
		.s7_rd_data (s7_rd_data), // Õi¤ß³ö¤·¥Ç©`¥¿
		.s7_rdy_	(s7_rdy_),	  // ¥ì¥Ç¥£
		/********** ¥Ð¥¹¥Þ¥¹¥¿¹²Í¨ÐÅºÅ **********/
		.m_rd_data	(m_rd_data),  // Õi¤ß³ö¤·¥Ç©`¥¿
		.m_rdy_		(m_rdy_)	  // ¥ì¥Ç¥£
	);

endmodule