FPGA内部存储器的使用-VGA驱动

这就是VGA的时序图,其中左上角为显示区域。

针对常见的两种分辨率,提供两组参数:

640*480  每秒60帧 pix_clk=25.152MHz  :

localparam   H_Sync        = 96 ;
localparam   H_BackPocrch  = 48 ;
localparam   H_Active      = 640;
localparam   H_FrontPorch  = 16 ;
localparam   V_Sync        = 2  ;
localparam   V_BackPocrch  = 11 ;
localparam   V_Active      = 480;
localparam   V_FrontPorch  = 31 ;

 

1024*768  每秒60帧 pix_clk=65MHz :

localparam H_ACTIVE        1024
localparam H_FRONT_PORCH    24
localparam H_SYNCH            136    
localparam H_BACK_PORCH    160    

localparam V_ACTIVE        768    
localparam V_FRONT_PORCH    3    
localparam V_SYNCH            6     
localparam V_BACK_PORCH    29    

640*480  每秒60帧 pix_clk=25.152MHz  逻辑代码:

//分辨率使用640*480 60HZ
//clk_vga 25.152MHz
module  vga_time(
input    clk_vga   ,
input    rst_n     ,

 

output       valid                 ,
output  reg  h_vga                 ,
output  reg  v_vga  

);

localparam   H_Sync        = 96 ;
localparam   H_BackPocrch  = 48 ;
localparam   H_Active      = 640;
localparam   H_FrontPorch  = 16 ;
localparam   H_Total = H_Sync+H_BackPocrch+H_Active+H_FrontPorch;//


localparam   V_Sync        = 2  ;
localparam   V_BackPocrch  = 11 ;
localparam   V_Active      = 480;
localparam   V_FrontPorch  = 31 ;
localparam   V_Total       = V_Sync+V_BackPocrch+V_Active+V_FrontPorch ;

 

reg [10:0] h_cnt ,
reg [10:0] v_cnt ,


always@(posedge clk_vga )begin
if(rst_n)
    begin 
        h_cnt  <= 'd0  ;
        v_cnt  <= 'd0  ;
    end
else 
    begin
        h_cnt  <=  h_cnt == ( H_Total -1'b1 ) ? 'd0 : h_cnt + 1'b1 ;
        if(h_cnt==H_Total-1)
            v_cnt <= (v_cnt == V_Total-1'b1) ? 'd0 :v_cnt + 1'b1;
        else
            v_cnt <= v_cnt;
    end
end

always@(posedge clk_vga )begin

if( rst_n )

    h_vga  <= 1'b0;
else if(h_cnt==H_Active + H_FrontPorch-1)
    h_vga  <= 1'b0;
else if(h_cnt==H_Active + H_FrontPorch+H_Sync-1)
    h_vga  <= 1'b1;
end

always@(posedge clk_vga )begin

if( rst_n )

    v_vga  <= 1'b0;

else if(h_cnt == H_Total-1)begin 
    if(v_cnt==V_Active + V_FrontPorch-1)
        v_vga  <= 1'b0;
    else if(v_cnt==V_Active + V_FrontPorch+V_Sync-1)
        v_vga  <= 1'b1;
    end
end

reg  h_en  ;
always@(posedge clk_vga)begin

if(rst_n)

   h_en  <= 1'b0;
else if(h_cnt==H_Total-1 )
    h_en  <= 1'b1;
else if(h_cnt==H_Active-1)
    h_en  <= 1'b0;
end    
    
reg  v_en  ;

always@(posedge clk_vga )begin

if(rst_n)

      v_en  <= 1'b0;
else if(h_cnt==H_Total-1 )begin
    if(v_cnt == V_Total-1)
        v_en  <= 1'b1;
    else if(v_cnt==H_Active-1)
        v_en  <= 1'b0;
    end
end    

assign valid  = v_en & h_en ;

endmodule
 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老懒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值