Verilog HDL VGA Driver for Xilinx Nexys 4 适用于Nexys4的VGA驱动

/*
 * Function:    VGA Timing Generator
 * Author:      Liutianchen
 * Date:        2016-12-5
 * Version:     6.0
 * Environment: Verilog HDL with Vivado 2016.3
 */
 
 `timescale 1ns / 1ps
 
/*
    PARAMETER:
        0: Sync
        1: Sync + Back porch
        2: Sync + Back porch + Display Area
        3: Sync + Back porch + Display Area + Front Porch
*/

module vga_time_gen(
        input clk,
        input rst,
        input ena,
        output VGA_HS,
        output VGA_VS,
        output reg Ready,
        output [15:0] HCounter,
        output [15:0] VCounter);
    
    reg [15:0] cntH=0,cntV=0;
    
    reg [15:0] Hpara [0:3];
    reg [15:0] Vpara [0:3];
    
    initial begin
        ///Parameter Announcement
        
        /// 1280 x 1024@60hz    108MHz
        Hpara[0]=112;
        Hpara[1]=112+248;
        Hpara[2]=112+248+1280;
        Hpara[3]=112+248+1280+48;
        
        Vpara[0]=3;
        Vpara[1]=3+38;
        Vpara[2]=3+38+1024;
        Vpara[3]=3+38+1024+1;
        
        ////800x600@60hz        40MHz
//      Hpara[0]=128;
//      Hpara[1]=128+88;
//      Hpara[2]=128+88+800;
//      Hpara[3]=128+88+800+40;
//      
//      Vpara[0]=4;
//      Vpara[1]=4+23;
//      Vpara[2]=4+23+600;
//      Vpara[3]=4+23+600+1;
        
        ////1024x768@85hz       94.6MHz
//      Hpara[0]=96;
//      Hpara[1]=96+208;
//      Hpara[2]=96+208+1024;
//      Hpara[3]=96+208+1024+48;
//        
//      Vpara[0]=3;
//      Vpara[1]=3+36;
//      Vpara[2]=3+36+768;
//      Vpara[3]=3+36+768+1;
    end
    
    ///////////////Horizontal Scanning///////////////////
    
    always@(posedge clk or posedge rst) begin
        if(rst)
            cntH<=0;
        else if(cntH==Hpara[3])
            cntH<=0;
        else
            cntH<=cntH+1;
    end
    
    ///////////////Vertical Scanning/////////////////////
    
    always@(posedge clk or posedge rst) begin
        if(rst)
            cntV<=0;
        else if(cntV==Vpara[3])
            cntV<=0;
        else if(cntH==Hpara[3])
            cntV<=cntV+1;
    end
    
    ///////////////Displaying Area Ready?///////////////
    
    always@(posedge clk or posedge rst) begin
        if(rst)
            Ready<=0;
        else if(cntH>Hpara[1] && cntH<Hpara[2] &&
                cntV>Vpara[1] && cntV<Vpara[2])
            Ready<=1;
        else
            Ready<=0;
    end
    
    
    ///////////////////Output Sync Signal///////////////
    
    assign VGA_HS=cntH<=Hpara[0]?(ena?1:0):0;
    assign VGA_VS=cntV<=Vpara[0]?(ena?1:0):0;
    
    ///////////////////Ouput Position////////////////////
    
    assign HCounter=cntH-Hpara[1];
    assign VCounter=cntV-Vpara[1];
    
endmodule

VGA端口时序发生器,适用于Xilinx公司Nexys4开发板。

Nexys4开发板支持4096色RGB显示输出。

请使用时钟IP核发生VGA显示需要的时钟频率。频率对应的时序参数表可从Tiny VGA网站查阅。

转载请注明出处。

原文地址:http://www.cnblogs.com/liutianchen/p/6292721.html

如果你还没选课那请选张志峰别问为什么。。。

原文地址:https://www.cnblogs.com/liutianchen/p/6292721.html