module chip_top (
	/********** Ê±ÖÓÓë¸´Î» **********/
	input wire				   clk_ref,		  // »ù±¾Ê±ÖÓ
	input wire				   reset_sw		  // È«¾Ö¸´Î»£¬È±Ê¡¶¨ÒåÎª¸ºÂß¼­,¼ûglobal_config.h
	/********** UART **********/
`ifdef IMPLEMENT_UART // UARTÊµÏÖ
	, input wire			   uart_rx		  // UART½ÓÊÕÐÅºÅ
	, output wire			   uart_tx		  // UART·¢ËÍÐÅºÅ
`endif
	/********** Í¨ÓÃI/ O¶Ë¿Ú **********/
`ifdef IMPLEMENT_GPIO // GPIOÊµÏÖ
`ifdef GPIO_IN_CH	 //ÊäÈë½Ó¿ÚÊµÏÖ
	, input wire [`GPIO_IN_CH-1:0]	 gpio_in  // ÊäÈë½Ó¿Ú
`endif
`ifdef GPIO_OUT_CH	 // Êä³ö½Ó¿ÚÊµÏÖ
	, output wire [`GPIO_OUT_CH-1:0] gpio_out // Êä³ö½Ó¿Ú
`endif
`ifdef GPIO_IO_CH	 // ÊäÈëÊä³ö½Ó¿ÚÊµÏÖ
	, inout wire [`GPIO_IO_CH-1:0]	 gpio_io  // ÊäÈëÊä³ö½Ó¿Ú
`endif
`endif
);

	/********** Ê±ÖÓÓë¸´Î» **********/
	wire					   clk;			  	// Ê±ÖÓ
	wire					   clk_;		  		// ·´ÏàÊ±ÖÓ
	wire					   chip_reset;	  	// ¸´Î»
   
	/********** Ê±ÖÓÄ£¿é **********/
	clk_gen clk_gen (
		/**********  Ê±ÖÓÓë¸´Î» **********/
		.clk_ref	  (clk_ref),			  	// »ù±¾Ê±ÖÓ
		.reset_sw	  (reset_sw),			// È«¾Ö¸´Î»
		/********** Éú³ÉÊ±ÖÓ **********/
		.clk		  (clk),				  		// Ê±ÖÓ
		.clk_		  (clk_),				  	// ·´ÏòÊ±ÖÓ
		/********** ¸´Î» **********/
		.chip_reset	  (chip_reset)			// ¸´Î»
	);

	/********** Ð¾Æ¬ **********/
	chip chip (
		/********** Ê±ÖÓÓë¸´Î» **********/
		.clk	  (clk),					  // Ê±ÖÓ
		.clk_	  (clk_),					  // ·´ÏòÊ±ÖÓ
		.reset	  (chip_reset)				  // ¸´Î»
		/********** UART **********/
`ifdef IMPLEMENT_UART
		, .uart_rx	(uart_rx)				  // UART½ÓÊÕÐÅºÅ
		, .uart_tx	(uart_tx)				  // UART·¢ËÍÐÅºÅ
`endif
		/********** GPIO **********/
`ifdef IMPLEMENT_GPIO
`ifdef GPIO_IN_CH  // ÊäÈë½Ó¿ÚÊµÏÖ
		, .gpio_in (gpio_in)				  // ÊäÈë½Ó¿Ú
`endif
`ifdef GPIO_OUT_CH // Êä³ö½Ó¿ÚÊµÏÖ
		, .gpio_out (gpio_out)				  // Êä³ö½Ó¿Ú
`endif
`ifdef GPIO_IO_CH  // ÊäÈëÊä³ö½Ó¿ÚÊµÏÖ
		, .gpio_io	(gpio_io)				  // ÊäÈëÊä³ö½Ó¿Ú
`endif
`endif
	);

endmodule