`timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // Company: // Engineer: // // Create Date: 10/02/2015 02:05:19 AM; comments added 7/24/2018 // Design Name: // Module Name: xvga // Project Name: // Target Devices: // Tool Versions: // Description: // // Revision: // Revision 1.0 - File Created // Additional Comments: // ////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // // xvga: Generate XVGA display signals (1024 x 768 @ 60Hz) // vga: 640x480 verilog is also included by commented out // //////////////////////////////////////////////////////////////////////////////// module xvga(input vclock, output reg [10:0] hcount, // pixel number on current line output reg [9:0] vcount, // line number output reg vsync,hsync, output reg blank); // horizontal: 1344 pixels total // display 1024 pixels per line reg hblank,vblank; wire hsyncon,hsyncoff,hreset,hblankon; assign hblankon = (hcount == 1023); assign hsyncon = (hcount == 1047); assign hsyncoff = (hcount == 1183); assign hreset = (hcount == 1343); // vertical: 806 lines total // display 768 lines wire vsyncon,vsyncoff,vreset,vblankon; assign vblankon = hreset & (vcount == 767); assign vsyncon = hreset & (vcount == 776); assign vsyncoff = hreset & (vcount == 782); assign vreset = hreset & (vcount == 805); // sync and blanking wire next_hblank,next_vblank; assign next_hblank = hreset ? 0 : hblankon ? 1 : hblank; assign next_vblank = vreset ? 0 : vblankon ? 1 : vblank; always @(posedge vclock) begin hcount <= hreset ? 0 : hcount + 1; hblank <= next_hblank; hsync <= hsyncon ? 0 : hsyncoff ? 1 : hsync; // active low vcount <= hreset ? (vreset ? 0 : vcount + 1) : vcount; vblank <= next_vblank; vsync <= vsyncon ? 0 : vsyncoff ? 1 : vsync; // active low blank <= next_vblank | (next_hblank & ~hreset); end // assign at_display_area = ((hcount >= 0) && (hcount < 1024) && (vcount >= 0) && (vcount < 768)); endmodule /* module clock_quarter_divider(input clk100_mhz, output reg clock_25mhz = 0); reg counter = 0; // VERY BAD VERILOG // VERY BAD VERILOG // VERY BAD VERILOG // But it's a quick and dirty way to create a 25Mhz clock // Please use the IP Clock Wizard under FPGA Features/Clocking // // For 1 Hz pulse, it's okay to use a counter to create the pulse as in // assign onehz = (counter == 100_000_000); // be sure to have the right number of bits. always @(posedge clk100_mhz) begin counter <= counter + 1; if (counter == 0) begin clock_25mhz <= ~clock_25mhz; end end endmodule module vga(input vclock, // clock is now 25Mhz for 640x480 output reg [10:0] hcount = 0, // extra bit for compatibility output reg [9:0] vcount = 0, // line number output reg vsync, hsync, output reg blank); // Comments applies to XVGA 1024x768, left in for reference // horizontal: 1344 pixels total // display 1024 pixels per line reg hblank,vblank; wire hsyncon,hsyncoff,hreset,hblankon; assign hblankon = (hcount == 639); // active H 1023 assign hsyncon = (hcount == 655); // active H + FP 1047 assign hsyncoff = (hcount == 751); // active H + fp + sync 1183 assign hreset = (hcount == 799); // active H + fp + sync + bp 1343 // vertical: 806 lines total // display 768 lines wire vsyncon,vsyncoff,vreset,vblankon; assign vblankon = hreset & (vcount == 479); // active V 767 assign vsyncon = hreset & (vcount ==490 ); // active V + fp 776 assign vsyncoff = hreset & (vcount == 492); // active V + fp + sync 783 assign vreset = hreset & (vcount == 523); // active V + fp + sync + bp 805 // sync and blanking wire next_hblank,next_vblank; assign next_hblank = hreset ? 0 : hblankon ? 1 : hblank; assign next_vblank = vreset ? 0 : vblankon ? 1 : vblank; always @(posedge vclock) begin hcount <= hreset ? 0 : hcount + 1; hblank <= next_hblank; hsync <= hsyncon ? 0 : hsyncoff ? 1 : hsync; // active low vcount <= hreset ? (vreset ? 0 : vcount + 1) : vcount; vblank <= next_vblank; vsync <= vsyncon ? 0 : vsyncoff ? 1 : vsync; // active low blank <= next_vblank | (next_hblank & ~hreset); end endmodule */