博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Verilog之VGA
阅读量:5045 次
发布时间:2019-06-12

本文共 7510 字,大约阅读时间需要 25 分钟。

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

转载于:https://www.cnblogs.com/shaogang/p/4094528.html

你可能感兴趣的文章
linux坑
查看>>
java.lang.IllegalArgumentException: object is not an instance of declaring class
查看>>
JVM 垃圾回收机制和常见算法
查看>>
MongoDB连接数与连接优化
查看>>
go web的简单服务器
查看>>
用Bottle开发web程序(一)
查看>>
高级定时器TIM1&TIM8
查看>>
爬取豌豆荚
查看>>
程序员面试经验
查看>>
AdminLTE的使用
查看>>
1001 数组中和等于K的数对
查看>>
【原创】查找字符的出现次数(二)
查看>>
java1.8中Lambda表达式reduce聚合测试例子
查看>>
SaltStack入门篇(三)之数据系统Grains、Pillar
查看>>
BZOJ1626 修建道路【例题精讲】
查看>>
vi使用
查看>>
Game of Sum
查看>>
python练习题-day15
查看>>
JS中slice,splice,split的区别
查看>>
C++继承:共有,私有,保护
查看>>