Advertisement
AnatolySharapov

vga.sv 4 3032a

Oct 8th, 2021
1,149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. `include "../Headers/vga.svh"
  2.  
  3. module vga (  
  4.    
  5.     input logic clk108MHz,  // Input clock
  6.     input logic resetn,     // Global reset - active negative
  7.    
  8.     output logic hsync,
  9.     output logic vsync,
  10.    
  11.     output logic red,
  12.     output logic green,
  13.     output logic blue
  14.    
  15. );
  16.  
  17.    
  18.     // Video Enables
  19.     logic video_en,
  20.           horizontal_en,
  21.           vertical_en;
  22.          
  23.     // Color Signals
  24.     logic red_signal,
  25.           green_signal,
  26.           blue_signal;
  27.          
  28.     //Sync Counters
  29.     logic `CNT_RNG h_cnt,
  30.                    v_cnt;
  31.    
  32.     assign video_en = horizontal_en & vertical_en;
  33.    
  34.     always_ff @(posedge clk108MHz) begin
  35.    
  36.         // -----------------  Horizontal Sync ---------------
  37.        
  38.         // Horizontal Counter
  39.         h_cnt <= !resetn || h_cnt == `WHOLE_LINE_PXLS - 1 ? '0 : h_cnt + 1'b1;
  40.  
  41.         // Generate Horizontal Data
  42.        
  43.         `ifdef RGB
  44.  
  45.             // Rows Of Red
  46.             if (v_cnt >= 0 && v_cnt < `FIRST_HORIZ_BORDER_PXLS) begin
  47.                 red_signal   <= 1'b1;
  48.                 green_signal <= 1'b0;
  49.                 blue_signal  <= 1'b0;
  50.             end;   
  51.            
  52.             // Rows Of Green
  53.             if (v_cnt >= `FIRST_HORIZ_BORDER_PXLS && v_cnt < `SECOND_HORIZ_BORDER_PXLS) begin
  54.                 red_signal   <= 1'b0;
  55.                 green_signal <= 1'b1;
  56.                 blue_signal  <= 1'b0;  
  57.             end;
  58.            
  59.             // Rows Of Blue
  60.             if (v_cnt >= `SECOND_HORIZ_BORDER_PXLS && v_cnt <= `VISIBLE_FRAME_PXLS) begin
  61.                 red_signal   <= 1'b0;
  62.                 green_signal <= 1'b0;
  63.                 blue_signal  <= 1'b1;          
  64.             end;
  65.            
  66.         `else
  67.        
  68.             red_signal   <= 1'b1;
  69.             green_signal <= 1'b1;
  70.             blue_signal  <= 1'b1;        
  71.        
  72.         `endif            
  73.  
  74.         // Generate Horizontal Sync
  75.         hsync <= h_cnt >= `HORIZ_SYNC_PRE_PXLS && h_cnt <= `HORIZ_SYNC_POST_PXLS;
  76.    
  77.         // -----------------  Vertical Sync ---------------
  78.  
  79.         // Reset Vertical Counter
  80.        
  81.         v_cnt <= !resetn ||
  82.                  v_cnt == `VERT_FRAME_PXLS - 1'b1 &&
  83.                  h_cnt == `WHOLE_LINE_PXLS - 1'b1 ? '0 :
  84.                  h_cnt == `WHOLE_LINE_PXLS - 1'b1 ?
  85.                  v_cnt + 1'b1 :
  86.                  v_cnt;
  87.    
  88.         // Generate Vertical Sync
  89.         vsync <= v_cnt > `VERT_SYNC_PRE_PXLS && v_cnt < `VERT_SYNC_POST_PXLS;  
  90.    
  91.         // Generate Horizontal Enable
  92.         horizontal_en <= h_cnt < `VISIBLE_LINE_PXLS;
  93.        
  94.         // Generate Vertical Enable
  95.         vertical_en <= v_cnt < `VISIBLE_FRAME_PXLS;
  96.    
  97.         // Assign Physical Signals To VGA
  98.         red   <= red_signal   & video_en;
  99.         green <= green_signal & video_en;
  100.         blue  <= blue_signal  & video_en;
  101.    
  102.     end // always_ff @(posedge clk108MHz) begin
  103.    
  104. endmodule : vga
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement