Advertisement
AnatolySharapov

vga.sv

Oct 4th, 2021
838
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. `include "../Headers/vga.svh"
  2. `include "../Headers/RZ-EazyFPGA_A2.2.svh"
  3.  
  4. module vga (  
  5.    
  6.     input logic clk50MHz,   // Input clock
  7.     input logic resetn,     // Global reset - active negative
  8.    
  9.     output logic hsync,
  10.     output logic vsync,
  11.    
  12.     output logic red,
  13.     output logic green,
  14.     output logic blue,
  15.    
  16.     output logic `LEDS_UNPACKED_ARRAY_PINS_RNG led,
  17.    
  18.     output logic clk50MHz4check,
  19.     output logic clk_pll4check
  20.    
  21. );
  22.  
  23.     assign clk50MHz4check = clk50MHz;
  24.  
  25.     logic `LEDS_PACKED_ARRAY_CNT_RNG led_cnt;
  26.     always_ff @(posedge clk_pll4check)
  27.         led_cnt <= !resetn ? '0 : led_cnt + 1'b1;
  28.        
  29.     assign led = led_cnt[`LEDS_PACKED_ARRAY_CNT_WDT-1:
  30.                            `LEDS_PACKED_ARRAY_CNT_WDT-`LEDS_UNPACKED_ARRAY_PINS_WDT];  
  31.  
  32.     logic clk25_175MHz,
  33.           clk108MHz,
  34.           clk;
  35.    
  36.     // Video Enables
  37.     logic video_en,
  38.           horizontal_en,
  39.           vertical_en;
  40.          
  41.     // Color Signals
  42.     logic red_signal,
  43.           green_signal,
  44.           blue_signal;
  45.          
  46.     // Sync Signals      
  47.     logic hsync_signal,
  48.           vsync_signal;
  49.          
  50.     //Sync Counters
  51.     logic `CNT_RNG h_cnt,
  52.                    v_cnt;
  53.                    
  54.    
  55.     `ifdef VGA640X480
  56.    
  57.         vga_640x480_pll vga_640x480_pll_inst (
  58.        
  59.             .inclk0 ( clk50MHz      ),
  60.             .c0     ( clk25_175MHz  )
  61.            
  62.         );
  63.  
  64.         assign clk = clk25_175MHz;
  65.         assign hsync = ~hsync_signal;
  66.         assign vsync = ~vsync_signal;
  67.        
  68.     `elsif VGA1280X1024
  69.    
  70.         vga_1280x1024_pll   vga_1280x1024_pll_inst (
  71.        
  72.             .inclk0 ( clk50MHz      ),
  73.             .c0     ( clk108MHz     )
  74.            
  75.         );  
  76.        
  77.         assign clk = clk108MHz;
  78.         assign hsync = hsync_signal;
  79.         assign vsync = vsync_signal;
  80.  
  81.     `else // defaulf - for test purposes
  82.    
  83.         assign clk = clk50MHz;    
  84.         assign hsync = 1'b1;
  85.         assign vsync = 1'b0;
  86.        
  87.     `endif
  88.  
  89.     lcell lcell_inst (
  90.         .in  ( clk           ),
  91.         .out ( clk_pll4check )
  92.    );    
  93.    
  94.     assign video_en = horizontal_en & vertical_en;
  95.    
  96.     always_ff @(posedge clk) begin
  97.    
  98.         // -----------------  Horizontal Sync ---------------
  99.        
  100.         // Horizontal Counter
  101.         h_cnt <= !resetn || h_cnt == `WHOLE_LINE_PXLS - 1 ? '0 : h_cnt + 1'b1;
  102.  
  103.         // Generate Horizontal Data
  104.        
  105.         `ifdef RGB
  106.  
  107.             // Rows Of Red
  108.             if (v_cnt >= 0 && v_cnt < `FIRST_HORIZ_BORDER_PXLS) begin
  109.                 red_signal   <= 1'b1;
  110.                 green_signal <= 1'b0;
  111.                 blue_signal  <= 1'b0;
  112.             end;   
  113.            
  114.             // Rows Of Green
  115.             if (v_cnt >= `FIRST_HORIZ_BORDER_PXLS && v_cnt < `SECOND_HORIZ_BORDER_PXLS) begin
  116.                 red_signal   <= 1'b0;
  117.                 green_signal <= 1'b1;
  118.                 blue_signal  <= 1'b0;  
  119.             end;
  120.            
  121.             // Rows Of Blue
  122.             if (v_cnt >= `SECOND_HORIZ_BORDER_PXLS && v_cnt <= `VISIBLE_FRAME_PXLS) begin
  123.                 red_signal   <= 1'b0;
  124.                 green_signal <= 1'b0;
  125.                 blue_signal  <= 1'b1;          
  126.             end;
  127.            
  128.         `else
  129.        
  130.             red_signal   <= 1'b1;
  131.             green_signal <= 1'b1;
  132.             blue_signal  <= 1'b1;        
  133.        
  134.         `endif            
  135.  
  136.         // Generate Horizontal Sync
  137.         hsync_signal <= h_cnt >= `HORIZ_SYNC_PRE_PXLS && h_cnt <= `HORIZ_SYNC_POST_PXLS;
  138.    
  139.         // -----------------  Vertical Sync ---------------
  140.  
  141.         // Reset Vertical Counter
  142.        
  143.         v_cnt <= !resetn ||
  144.                  v_cnt == `VERT_FRAME_PXLS - 1'b1 &&
  145.                  h_cnt == `WHOLE_LINE_PXLS - 1'b1 ? '0 :
  146.                  h_cnt == `WHOLE_LINE_PXLS - 1'b1 ?
  147.                  v_cnt + 1'b1 :
  148.                  v_cnt;
  149.    
  150.         // Generate Vertical Sync
  151.         vsync_signal <= v_cnt > `VERT_SYNC_PRE_PXLS && v_cnt < `VERT_SYNC_POST_PXLS;    
  152.    
  153.         // Generate Horizontal Enable
  154.         horizontal_en <= h_cnt < `VISIBLE_LINE_PXLS;
  155.        
  156.         // Generate Vertical Enable
  157.         vertical_en <= v_cnt < `VISIBLE_FRAME_PXLS;
  158.    
  159.         // Assign Physical Signals To VGA
  160.         red   <= red_signal   & video_en;
  161.         green <= green_signal & video_en;
  162.         blue  <= blue_signal  & video_en;
  163.    
  164.     end // always_ff @(posedge clk25_175MHz) begin
  165.    
  166. endmodule : vga      
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement