首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

FPGA的VGA接口

FPGA的VGA接口


   时序图:
  
   时序表:
  
  代码:
  //采用行扫描方法;600*480
  module vga1(
  clk,rst_n,
  rgb,hsync,vsync
   );
input clk,rst_n;
output[2:0] rgb;
output hsync;      //行控制信号
output vsync;      //列控制信号
  //========640*480===========//
parameter hsync_end=10'd95,      //同步脉冲
    hdata_begin=10'd143,         //有效时间开始时间
      hdata_end=10'd783,       //有效数据传输完时间
    hpixel_end=10'd799,     //总帧长
   
    vsync_end=10'd1,     //同步脉冲
    vdata_begin=10'd34, //有效数据传输开始
    vdata_end=10'd514,  //有效时间结束时间
    vpixel_end=10'd524; //总帧长
wire vflag,hflag;   
reg[9:0] x_cnt;         //行时间脉冲
reg[9:0] y_cnt;       //列时间脉冲
reg clk_vga;         //vga时间脉冲信号
  //将信号2分频
[email=always@%28posedge]always@(posedge[/email] clk or negedge rst_n)
if(!rst_n)
clk_vga<=1'b0;
else
clk_vga<=~clk_vga;
//==========================//
assign hflag=(x_cnt==hpixel_end);             //一行完成的使能位
[email=always@%28posedge]always@(posedge[/email] clk_vga or negedge rst_n)
if(!rst_n)
   x_cnt<=10'd0;
  else if(hflag)
  x_cnt<=10'd0;             //一行完成后,x_cnt清零
  else
  x_cnt<=x_cnt+1'b1;
  
  
  //===============================//
  assign vflag=(y_cnt==vpixel_end);    //列结束信号
[email=always@%28posedge]always@(posedge[/email] clk_vga or negedge rst_n)
if(!rst_n)
y_cnt<=10'd0;
else
if(hflag)               //换行使能位,每行800帧就列就变一帧
begin
  if(vflag)
   y_cnt<=10'd0;
  else
   y_cnt<=y_cnt+1'b1;
end
  //=========================================//
wire data_act;
  //================同步信号的产生===================//
assign hsync=(x_cnt>hsync_end);
assign vsync=(y_cnt>vsync_end);  
  //=================有效区域的选择============================//
assign data_act=(x_cnt>=hdata_begin)&&(x_cnt<=hdata_end)
   &&(y_cnt>=vdata_begin)&&(y_cnt<=vdata_end);
  //================显示颜色===================//
  assign rgb=data_act ?3'b111:3'd0;
继承事业,薪火相传
返回列表