• 单色VGA显示verilogHDL通用代码


      今天做VGA,真是拼凑了好久啊。唉,总算完成了。

      本来想偷懒移植,最后还是自己写的代码。

     1 //2015/12/13
     2 //designer : pengxiaoen 
     3 //function : vga control
     4 /*备注:
     5     1,三个test pin 是用来测试pll是否工作
     6     2,r,g,b 三色分别对应三个不同的key 以及三个led进行显示
     7     3,因为这个板子的 r ,g ,b  分别只有一个pin ,显示色彩有限
     8 */
     9 module vga_top (
    10                 clock ,
    11                 rst_n ,
    12                 key_r,key_g,key_b ,
    13                 
    14                 clk_vga ,clk_board, clk_500k ,  //test pin  
    15                 led_r ,led_g,led_b ,
    16                 
    17                 vga_hs ,vga_vs,vga_r,vga_g,vga_b 
    18                 
    19                 );
    20 input clock ; 
    21 input rst_n ; 
    22 input key_r,key_g,key_b ; 
    23 
    24 output vga_hs ; 
    25 output vga_vs ; 
    26 output vga_r ; 
    27 output vga_g ; 
    28 output vga_b ; 
    29 
    30 output  clk_vga ; 
    31 output  clk_board ; 
    32 output  clk_500k ; 
    33 output  led_r,led_g,led_b ; 
    34 
    35 wire clk_65m ; 
    36 
    37 altera_pll_peng  pll_U(
    38                         .areset (!rst_n),
    39                         .inclk0 (clock),
    40                         .c0  (clk_65m),
    41                         .c1  (clk_500k)
    42                         );
    43                             
    44                             
    45 
    46  vga_driver vga_dri_U
    47                 (
    48                 .pix_clk  (clk_65m),
    49                 .rst_n    (rst_n),
    50                 .key_r      (key_r),
    51                 .key_g    (key_g),
    52                 .key_b    (key_b),
    53                 
    54                 .vga_r    (vga_r),
    55                 .vga_g    (vga_g),
    56                 .vga_b    (vga_b),
    57                 .vga_hs   (vga_hs),
    58                 .vga_vs   (vga_vs)
    59                 ); 
    60 
    61                 
    62 // for  test  or display
    63 assign clk_board = clock ; 
    64 assign clk_vga = clk_65m ; 
    65 assign led_r = key_r ; 
    66 assign led_g = key_g ; 
    67 assign led_b = key_b ; 
    68 
    69 endmodule 


    子模块

     1 module vga_driver
     2                 (
     3                 pix_clk ,
     4                 rst_n ,
     5                 key_r,
     6                 key_g,
     7                 key_b,
     8                 
     9                 vga_r,
    10                 vga_g,
    11                 vga_b,
    12                 vga_hs,
    13                 vga_vs
    14                 ); 
    15 input   pix_clk ;   // VGA像素时钟
    16 input   rst_n ;      // 异步复位信号
    17 input     key_b,key_g,key_r ; 
    18 
    19 output      vga_r ; 
    20 output      vga_g ;
    21 output      vga_b ; 
    22 output   vga_hs ;  // VGA管脚 行同步
    23 output   vga_vs ;  // VGA管脚 场同步
    24 
    25 //定义VGA_1024_768_65M_60HZ显示协议标准 
    26 //  pix_clk  65m
    27 
    28 parameter H_SYNC  = 16'd136;   // 同步脉冲      vga_hs
    29 parameter H_BACK  = 16'd160;    // 显示后沿 
    30 parameter H_DISP  = 16'd1024;   // 显示时序
    31 parameter H_FRONT = 16'd24;    // 显示前沿
    32 parameter H_TOTAL = 16'd1344;  // 时序帧长   ---hs_cnt 
    33 
    34 parameter V_SYNC  = 16'd6;     // 同步脉冲      vga_vs
    35 parameter V_BACK  = 16'd29;    // 显示后沿
    36 parameter V_DISP  = 16'd768;   // 显示时序 
    37 parameter V_FRONT = 16'd3;    // 显示前沿
    38 parameter V_TOTAL = 16'd806;   // 时序帧长   --- vs_cnt 
    39 //------------------------------------------
    40 reg [15:0] hs_cnt ; 
    41 reg [15:0] vs_cnt ;
    42 always @ (posedge pix_clk )
    43     if(!rst_n) hs_cnt <= 16'd0; 
    44     else if(hs_cnt == H_TOTAL-1) hs_cnt <= 16'd0 ; 
    45     else     hs_cnt <= hs_cnt + 16'd1 ; 
    46 always @(posedge pix_clk)
    47     if(!rst_n) vs_cnt <= 16'd0 ; 
    48     else if (vs_cnt == V_TOTAL-1) vs_cnt <= 16'd0 ; 
    49     else if (hs_cnt == H_TOTAL-1) vs_cnt <= vs_cnt + 16'd1 ; 
    50     
    51 reg hsync_r,vsync_r;    //同步信号
    52 //------------------------------------------------- 
    53 always @ (posedge pix_clk)
    54     if(!rst_n) hsync_r <= 1'b1;                                
    55     else if(hs_cnt == 16'd0)    hsync_r <= 1'b0;    //产生hsync信号
    56     else if(hs_cnt == H_SYNC-1) hsync_r <= 1'b1;
    57 
    58 always @ (posedge pix_clk )
    59     if(!rst_n) vsync_r <= 1'b1;                              
    60     else if(vs_cnt == 16'd0)    vsync_r <= 1'b0;    //产生vsync信号
    61     else if(vs_cnt == V_SYNC-1) vsync_r <= 1'b1;
    62 
    63 assign vga_hs = hsync_r;
    64 assign vga_vs = vsync_r;
    65 
    66 //--------------------------------------------------------------------------
    67 //有效信号范围
    68 reg     x_en ,y_en ; 
    69 always @ (posedge pix_clk)
    70     if(!rst_n) x_en  <= 1'd0 ; 
    71     else if (hs_cnt==(H_SYNC + H_BACK)) x_en  <= 1'd1 ; 
    72     else if (hs_cnt==(H_SYNC + H_BACK + H_DISP)) x_en  <= 1'd0 ; 
    73 
    74 always @ (posedge pix_clk)
    75     if(!rst_n) y_en <= 1'd0 ; 
    76     else if (vs_cnt == (V_SYNC + V_BACK)) y_en <= 1'd1 ; 
    77     else if (vs_cnt == (V_SYNC + V_BACK + V_DISP)) y_en <= 1'd0 ; 
    78 
    79     
    80 assign vga_r = (x_en&y_en) ? key_r: 1'd0 ; 
    81 assign vga_g = (x_en&y_en) ? key_g: 1'd0 ; 
    82 assign vga_b = (x_en&y_en) ? key_b: 1'd0 ; 
    83     
    84 endmodule 
  • 相关阅读:
    delphi不同版本字符串类型的演化(要支持基于firemonkey的app调用,字符串最好使用olevariant类型)
    IdHttpServer实现webservice(130篇DataSnap文章)
    hdu 1809 求SG函数
    delphi中无类型文件读写
    delpi中的RTTI初试
    后台调用外部程序的完美实现(使用CreateDesktop建立隐藏桌面)
    delphi之完美Splash方案(在TfrmMain.FormCreate里不断调用TfrmSplash显示加载进度文字,并且及时Update显示)
    查看内存数据的函数(ByteToHex和ByteToBin,最终都变成String)
    SQLsever2008 远程连接错误 linq
    delphi 利用HTTP的POST方法做个在线翻译的小工具 good
  • 原文地址:https://www.cnblogs.com/sepeng/p/5043344.html
一二三 - 开发者的网上家园