VGA显示SDRAM内容_1——DE1-SOC学习笔记(3)

这篇博客介绍了如何通过HPS-FPGA-Slave接口读取bmp图片并存储到SDRAM,然后利用自定义IP从SDRAM读取数据并控制VGA显示不同分辨率的图像。内容涵盖了VGA时序控制模块的设计以及控制寄存器的设置,用于切换颜色模式和分辨率。

      在这篇文以及下面几篇文里里使用HPS-FPGA-Slave实现HPS读取一张bmp图片,发送至SDRAM,然后由自定义的IP读取SDRAM输出至VGA显示。

      不妥当的地方还需多多指教

   IP逻辑设计

     VGA时序控制模块,选择mod控制输出不同的分辨率

//vga timing ctrl module
// systemverilog
//
//by Sorin
module vga_timctrl(
    input clk,//200MHz
     input [1:0] mod,
    //input rst,
    output hsync,//
    output vsync,//
    output logic [10:0] addr_x,//
    output  logic [10:0] addr_y,//
    output  video_on,//,
     output  logic clk_cycle//actule clock output
    );
    //800*600@72Hz
    //***************vga mode***************  *********************
   //
   //   800         40     128      88     600   1      4    23
   //"800x600@72" 50.0 800 856 976 1040 600 637 643 666               --mod0
   //"800x600@60" 40.0 800 840 968 1056 600 601 605 628                 --mod1
   //"640x480@60" 25.2 640 656 752 800 480 490 492 525                --mod2
   //"1280x960@60" 102.1 1280 1360 1496 1712 960 961 964 994        --mod3
   //"1280x1024@60" 108.0 1280 1328 1440 1688 1024 1025 1028 1066    --not surport
   logic[10:0] V_W=1280;//
   logic[10:0] V_H=1024;//
   logic[10:0] H_Sync_Start=1328;//
   logic[10:0] H_Sync_Stop=1440;//
   logic[10:0] H_Total=1688;//
   logic[10:0] V_Sync_Start=1025;//
   logic[10:0] V_Sync_Stop=1028;
   logic[10:0] V_Total=1066;//
    logic [3:0] CLK_DIV_CNT=0;
    logic  inner_clk;
    logic [2:0] clk_cnt=0;
    logic inner_clk_reg;
    //assign inner_clk=inner_clk_reg;
    //clk divider 
    always @(posedge clk)
        begin
        clk_cnt<=clk_cnt+1;
        end
    
   
    
   wire[10:0] V_Counter;
   wire[10:0] H_Counter;
   wire H_Video_On;
   wire V_Video_On;
   wire V_Clk;
   wire H_CLR;
   wire V_CLR;
   assign V_Clk=H_Video_On;
   assign video_on=H_Video_On&&V_Video_On;
   assign addr_x=video_on?H_Counter:V_W;
   assign addr_y=video_on?V_Counter:V_H;
   //assign inner_clk=clk;
   c_counter_binary Counter_H(.CLK(inner_clk),.SCLR(H_CLR),.Q(H_Counter),.CE(1));
   c_counter_binary Counter_V(.CLK(inner_clk),.SCLR(V_CLR),.Q(V_Counter),.CE(H_CLR));
   assign H_Video_On=(H_Counter<V_W)?1:0;
   assign V_Video_On=(V_Counter<V_H)?1:0;
   assign H_CLR=(H_Counter==H_Total-1)?1:0;
   assign V_CLR=((V_Counter==V_Total-1)&&H_CLR)?1:0;
   assign hsync=(H_Counter<H_Sync_Stop&&H_Counter>H_Sync_Start)?0:1;
   assign vsync=(V_Counter<V_Sync_Stop&&V_Counter>V_Sync_Start)?0:1;
   assign test=V_CLR;
    
    //modset 
    always_comb
    begin
            
            case(mod)
            'b00:
                begin
                V_W=800;
                V_H=600;
                H_Sync_Start=856;
                H_Sync_Stop=976;
                H_Total=1040;
                V_Sync_Start=637;
                V_Sync_Stop=643;
                V_Total=666;
                //CLK_DIV_CNT=2;//200M/4=50M
                inner_clk=clk_cnt[1];
                end
            'b01:
                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值