VGA 图层

module sync_module
(
    CLK, RSTn,
     VSYNC_Sig, HSYNC_Sig, Ready_Sig,
     Column_Addr_Sig, Row_Addr_Sig
);                

    input CLK;
     input RSTn;
     output VSYNC_Sig;
     output HSYNC_Sig;
     output Ready_Sig;
     output [10:0]Column_Addr_Sig;
     output [10:0]Row_Addr_Sig;            

     /********************************/            

     reg [10:0]Count_H;            

     always @ ( posedge CLK or negedge RSTn )
         if( !RSTn )
                 Count_H <= 11‘d0;
            else if( Count_H == 11‘d1056 )
                Count_H <= 11‘d0;
            else
                Count_H <= Count_H + 1‘b1;    

     /********************************/            

     reg [10:0]Count_V;            

     always @ ( posedge CLK or negedge RSTn )
         if( !RSTn )
              Count_V <= 11‘d0;
          else if( Count_V == 11‘d628 )
              Count_V <= 11‘d0;
          else if( Count_H == 11‘d1056 )
              Count_V <= Count_V + 1‘b1;        

     /********************************/            

     reg isReady;            

     always @ ( posedge CLK or negedge RSTn )
         if( !RSTn )
              isReady <= 1‘b0;
        else if( ( Count_H >= 11‘d216 && Count_H < 11‘d1017 ) &&
                    ( Count_V >= 11‘d27 && Count_V < 11‘d627 ) )
              isReady <= 1‘b1;
          else
              isReady <= 1‘b0;        

     /*********************************/            

     assign VSYNC_Sig = ( Count_V <= 11‘d4 ) ? 1‘b0 : 1‘b1;
     assign HSYNC_Sig = ( Count_H <= 11‘d128 ) ? 1‘b0 : 1‘b1;
     assign Ready_Sig = isReady;             

     /********************************/            

     assign Column_Addr_Sig = isReady ? Count_H - 11‘d216 : 11‘d0;    // Count from 0;
     assign Row_Addr_Sig = isReady ? Count_V - 11‘d27 : 11‘d0; // Count from 0;            

     /********************************/            

endmodule                
 
module vga_control_module
(
    CLK, RSTn,
     Ready_Sig, Column_Addr_Sig, Row_Addr_Sig,
     Red_Rom_Data, Green_Rom_Data, Blue_Rom_Data, Rom_Addr,
     Red_Sig, Green_Sig, Blue_Sig
);
    input CLK;
     input RSTn;
     input Ready_Sig;
     input [10:0]Column_Addr_Sig;
     input [10:0]Row_Addr_Sig;            

     input [63:0]Red_Rom_Data;
     input [63:0]Green_Rom_Data;
     input [63:0]Blue_Rom_Data;
     output [5:0]Rom_Addr;            

     output Red_Sig;
     output Green_Sig;
     output Blue_Sig;            

     /**********************************/            

     reg [5:0]m;            

     always @ ( posedge CLK or negedge RSTn )
         if( !RSTn )
                m <= 6‘d0;
          else if( Ready_Sig && Row_Addr_Sig < 64 )
              m <= Row_Addr_Sig[5:0];
          else
              m <= 6‘d0;        

    reg [5:0]n;                

     always @ ( posedge CLK or negedge RSTn )
         if( !RSTn )
              n <= 6‘d0;
          else if( Ready_Sig && Column_Addr_Sig < 64 )
              n <= Column_Addr_Sig[5:0];
          else
              n <= 6‘d0;        

    /************************************/            

    assign Rom_Addr = m;                

     assign Red_Sig = Ready_Sig ? Red_Rom_Data[ 6‘d63 - n ] : 1‘b0;
     assign Green_Sig = Ready_Sig ? Green_Rom_Data[ 6‘d63 - n ] : 1‘b0;
     assign Blue_Sig = Ready_Sig ? Blue_Rom_Data[ 6‘d63 - n ] : 1‘b0;            

    /***********************************/            

endmodule                
module vga_module
(
    CLK, RSTn,
    VSYNC_Sig, HSYNC_Sig,
     Red_Sig, Green_Sig, Blue_Sig
);        

    input CLK;
     input RSTn;
     output VSYNC_Sig;
     output HSYNC_Sig;
     output Red_Sig;
     output Green_Sig;
     output Blue_Sig;    

     /*************************************/    

     wire CLK_40Mhz;    

     pll_module U1
     (
         .inclk0( CLK ),   // input - from top
          .c0( CLK_40Mhz )  // output - inter globak
     );    

     /**************************************/    

     wire [10:0]Column_Addr_Sig;
     wire [10:0]Row_Addr_Sig;
     wire Ready_Sig;    

     sync_module U2
     (
         .CLK( CLK_40Mhz ),
          .RSTn( RSTn ),
          .VSYNC_Sig( VSYNC_Sig ),  // input - from top
          .HSYNC_Sig( HSYNC_Sig ),  // input - from top
          .Column_Addr_Sig( Column_Addr_Sig ), // output - to U6
          .Row_Addr_Sig( Row_Addr_Sig ),       // output - to U6
          .Ready_Sig( Ready_Sig )              // output - to U6
     );    

     /******************************************/    

     wire [63:0]Red_Rom_Data;    

     red_rom_module U3
     (
         .clock( CLK_40Mhz ),
         .address( Rom_Addr ),   // input - from U6
          .q( Red_Rom_Data )      // output - to U6
     );    

     /******************************************/    

     wire [63:0]Green_Rom_Data;    

     green_rom_module U4
     (
         .clock( CLK_40Mhz ),
         .address( Rom_Addr ),   // input - from U6
          .q( Green_Rom_Data )    // output - to U6
     );    

     /******************************************/    

     wire [63:0]Blue_Rom_Data;    

     blue_rom_module U5
     (
         .clock( CLK_40Mhz ),
         .address( Rom_Addr ), // input - from U6
          .q( Blue_Rom_Data )   // output - to U6
     );    

     /******************************************/    

     wire [5:0]Rom_Addr;    

     vga_control_module U6
     (
         .CLK( CLK_40Mhz ),
          .RSTn( RSTn ),
          .Ready_Sig( Ready_Sig ),   // input - from U2
          .Column_Addr_Sig( Column_Addr_Sig ), // input - from U2
          .Row_Addr_Sig( Row_Addr_Sig ),       // input - from U2
          .Red_Rom_Data( Red_Rom_Data ),       // input - from U3
          .Green_Rom_Data( Green_Rom_Data ),   // input - from U4
          .Blue_Rom_Data( Blue_Rom_Data ),     // input - from U5
          .Rom_Addr( Rom_Addr ),   // output - to U3, U4, U5
          .Red_Sig( Red_Sig ),     // output - to top
          .Green_Sig( Green_Sig ), // output - to top
          .Blue_Sig( Blue_Sig )    // output - to top
     );    

     /*******************************************/    

endmodule        

时间: 2024-09-17 04:29:31

VGA 图层的相关文章

模仿RA8875/RA8876做个图形LCD控制器,STM32跑emWin接VGA显示器测试OK

RA8875相信大家都熟悉吧?我们很多工程师都热衷于STM32+RA8875+emWin做界面显示,去年瑞佑又推出了同系列新产品RA8876/RA8877. 图形LCD控制器的系统主构架是:FPGA+DDR2+Nand-Flash,FPGA里面还跑了个8051,因为要做指令缓冲.FAT32文件系统.Nand-Flash驱动程序,这三样东西没有C语言单靠FPGA是没法实现的,其实和RA8875/RA8876最大的不同就是这三个功能,可以说在某些方面是RA8875/RA8876的升级版!当然成本也没

ArcMap2Sld:一个将MXD中图层配图样式转换为OGC的SLD文件的开源工具

在一个项目中,用户采用GeoServer做为GIS服务器(原因嘛当然是免费能省钱,经过验证可能还会在性能和稳定性等表现力也有优越性),但是手上收集的数据都是ESRI格式的,这倒不打紧,因为GeoServer直接能够支持ESRI的shape file和ArcSDE两种数据格式,要命的是用户的配图也是用ESRI,mxd中40个左右的图层组织和专题图样式都配好了.在网上查了大部分关于在GeoServer中发布服务的样式都是建议在uDig中重新配置,然后导出SLD文件,添加到GeoServer中.由于时

iOS Core Animation Advanced Techniques(一):图层树、寄宿图以及图层几何学

(一)图层的树状结构 巨妖有图层,洋葱也有图层,你有吗?我们都有图层 -- 史莱克 Core Animation其实是一个令人误解的命名.你可能认为它只是用来做动画的,但实际上它是从一个叫做Layer Kit这么一个不怎么和动画有关的名字演变而来,所以做动画这只是Core Animation特性的冰山一角. Core Animation是一个复合引擎,它的职责就是尽可能快地组合屏幕上不同的可视内容,这个内容是被分解成独立的图层,存储在一个叫做图层树的体系之中.于是这个树形成了UIKit以及在iO

VGA显示

module vga_control( //syste, clk input clk, input rst_n, //vga interface input [9:0] hx, input [9:0] vy, output reg [23:0] rgb, //pinlv interface input [31:0] pinlv ); reg [6:0] add; wire [31:0] q; wire display_value; assign display_value = ((hx >0 &am

geoserver 添加图层数据

1.添加shapefile文件 首先到http://www2.census.gov/geo/tiger/TIGER2011/CONCITY/上下载名称为tl_2011_47_concity的shapefile文件,并解压到本地.解压后文件列表如下: 如果不清楚shp文件对应的地理编码,可打开prj文件查看.部分内容如下: GCS_North_American_1983对应的项目编码为4269,这个编码后边会用到.在geoserver上打开"数据"-"数据存储",点击

基于AGS JS开发自定义贴图图层

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.前言 假设一个景区有多张图片需要在地图上展示,并且随着地图的缩放而缩放(不是单纯的以气泡来展示).如果利用传统方案,则是我们首先将图片纠正赋予地理信息,然后根据地图级别进行切图,最后以瓦片的形式叠加至地图上,工作量是很大的.然而考虑到图片本身不会太大(小于3M),那么有没有其他方法来解决呢.这里我和大家一起探讨几种解决思路. 2.解决思路 2.1基于grahpic和

QGIS如何使用WMS图层

这边文章的讲的是QGIS如何使用WMS图层以及其WMS图层原理和缺点. 什么是WMS? (WMS)  Web Mapping Service 是一种远程的地图服务,好像一个网站,你可以通过连接一个远程服务器来获取,QGIS可以直接加载WMS图层.WMS图层不像从GOOGLE地图上加载的栅格地图,它是静态的,一旦你下载了图片,它就不会再更新变化了(除非你删除缓存).但通过放大和缩小地图.WMS图层却是可以动态更新的, 导入WMS 图层 你既可以使用以前配置好的地图也可以创建一个新地图加载一些已经存

arcgis图层控制

1 define(["dojo/_base/declare"], function(declare){ 2 var mapEvent = null; 3 return declare(null,{ 4 "id": '', 5 "layer": null, 6 "treeList": [], 7 "map":null, 8 constructor: function(id,layer,map){ 9 this

ROM+VGA 图片显示

内容 1.将一幅图片制成mif文件,初始化rom,图片像素为 120 * 60 2.驱动VGA,将图片显示在屏幕上 1.VGA 时序 下面是我的笔记截图,感觉更好理解. 2.640*480 60hz VGA 为什么要选用 25Mhz 的时钟进行驱动呢? 1s时间内显示60幅图像,每幅图像的像素总数为 800 *525 (640*480是指的有效像素,800*525是包含了所有的,具体情况见下图) 因此完成一幅图像的时间为 1s/60 =16.6ms 完成一行需要 16.6ms / 525 =31