module PongRunner ( input i_Clk, input i_UART_RX, input i_Switch_1, input i_Switch_2, input i_Switch_3, input i_Switch_4, output o_VGA_HSync, output o_VGA_VSync, output o_VGA_Red_0, output o_VGA_Red_1, output o_VGA_Red_2, output o_VGA_Grn_0, output o_VGA_Grn_1, output o_VGA_Grn_2, output o_VGA_Blu_0, output o_VGA_Blu_1, output o_VGA_Blu_2 ); localparam TOTAL_COLUMNS = 800; localparam TOTAL_ROWS = 525; localparam ACTIVE_COLUMNS = 640; localparam ACTIVE_ROWS = 480; localparam VIDEO_WIDTH = 3; wire [VIDEO_WIDTH-1:0] w_Red_FromPong, w_Red_FromPorchSync; wire [VIDEO_WIDTH-1:0] w_Green_FromPong, w_Green_FromPorchSync; wire [VIDEO_WIDTH-1:0] w_Blue_FromPong, w_Blue_FromPorchSync; wire w_dataReady; wire w_HSync_Start, w_VSync_Start; wire w_HSync_FromPong, w_VSync_FromPong; wire w_HSync_FromPorchSync, w_VSync_FromPorchSync; wire w_Switch_1_Debounced, w_Switch_2_Debounced, w_Switch_3_Debounced, w_Switch_4_Debounced; UART_RX #( .CLOCKS_PER_SECOND(25000000), .BAUD_RATE(115200) ) MyUART_RX ( .i_Clk(i_Clk), .i_ReceiveBit(i_UART_RX), .o_DataReady(w_dataReady), .o_DataByte() ); VGA_Sync_Pulse_Generator #( .TOTAL_COLUMNS(TOTAL_COLUMNS), .TOTAL_ROWS(TOTAL_ROWS), .ACTIVE_COLUMNS(ACTIVE_COLUMNS), .ACTIVE_ROWS(ACTIVE_ROWS) ) SyncGenerator ( .i_Clk(i_Clk), .o_HSync(w_HSync_Start), .o_VSync(w_VSync_Start), .o_rawX(), .o_rawY() ); Debounce_Filter #( .DEBOUNCE_LIMIT(25000000 / 25000) ) Debounce_Switch_1 ( .i_Clk(i_Clk), .i_Bouncy(i_Switch_1), .o_Debounced(w_Switch_1_Debounced) ); Debounce_Filter #( .DEBOUNCE_LIMIT(25000000 / 25000) ) Debounce_Switch_2 ( .i_Clk(i_Clk), .i_Bouncy(i_Switch_2), .o_Debounced(w_Switch_2_Debounced) ); Debounce_Filter #( .DEBOUNCE_LIMIT(25000000 / 25000) ) Debounce_Switch_3 ( .i_Clk(i_Clk), .i_Bouncy(i_Switch_3), .o_Debounced(w_Switch_3_Debounced) ); Debounce_Filter #( .DEBOUNCE_LIMIT(25000000 / 25000) ) Debounce_Switch_4 ( .i_Clk(i_Clk), .i_Bouncy(i_Switch_4), .o_Debounced(w_Switch_4_Debounced) ); Pong #() MyPong ( .i_Clk(i_Clk), .i_HSync(w_HSync_Start), .i_VSync(w_VSync_Start), .i_GameStart(w_dataReady), .i_Player1_Up(w_Switch_1_Debounced), .i_Player1_Down(w_Switch_2_Debounced), .i_Player2_Up(w_Switch_3_Debounced), .i_Player2_Down(w_Switch_4_Debounced), .o_HSync(w_HSync_FromPong), .o_VSync(w_VSync_FromPong), .o_Red(w_Red_FromPong), .o_Green(w_Green_FromPong), .o_Blue(w_Blue_FromPong) ); VGA_Add_Porches_To_Output #() PorchOutput ( .i_Clk(i_Clk), .i_HSync(w_HSync_FromPong), .i_VSync(w_VSync_FromPong), .i_Red(w_Red_FromPong), .i_Green(w_Green_FromPong), .i_Blue(w_Blue_FromPong), .o_HSync(w_HSync_FromPorchSync), .o_VSync(w_VSync_FromPorchSync), .o_Red(w_Red_FromPorchSync), .o_Green(w_Green_FromPorchSync), .o_Blue(w_Blue_FromPorchSync) ); assign o_VGA_HSync = w_HSync_FromPorchSync; assign o_VGA_VSync = w_VSync_FromPorchSync; assign o_VGA_Red_0 = w_Red_FromPorchSync[0]; assign o_VGA_Red_1 = w_Red_FromPorchSync[1]; assign o_VGA_Red_2 = w_Red_FromPorchSync[2]; assign o_VGA_Grn_0 = w_Green_FromPorchSync[0]; assign o_VGA_Grn_1 = w_Green_FromPorchSync[1]; assign o_VGA_Grn_2 = w_Green_FromPorchSync[2]; assign o_VGA_Blu_0 = w_Blue_FromPorchSync[0]; assign o_VGA_Blu_1 = w_Blue_FromPorchSync[1]; assign o_VGA_Blu_2 = w_Blue_FromPorchSync[2]; endmodule