Verilog HDL--VGA显示

module vga(
            clk,rst_n,
            hsync,vsync,
            vga_r,vga_g,vga_b
        );

input clk;        //50MHz
input rst_n;    //低电平复位
output hsync;    //行同步信号
output vsync;    //场同步信号
output vga_r;
output vga_g;
output vga_b;

//--------------------------------------------------
reg[10:0] x_cnt;    //行坐标
reg[9:0] y_cnt;    //列坐标

always @ (posedge clk or negedge rst_n)
    if(!rst_n) x_cnt <= 11‘d0;
    else if(x_cnt == 11‘d1039) x_cnt <= 11‘d0;
    else x_cnt <= x_cnt+1‘b1;

always @ (posedge clk or negedge rst_n)
    if(!rst_n) y_cnt <= 10‘d0;
    else if(y_cnt == 10‘d665) y_cnt <= 10‘d0;
    else if(x_cnt == 11‘d1039) y_cnt <= y_cnt+1‘b1;

//--------------------------------------------------
wire valid;    //有效显示区标志

assign valid = (x_cnt >= 11‘d187) && (x_cnt < 11‘d987)
                    && (y_cnt >= 10‘d31) && (y_cnt < 10‘d631); 

wire[9:0] xpos,ypos;    //有效显示区坐标

assign xpos = x_cnt-11‘d187;
assign ypos = y_cnt-10‘d31;

//--------------------------------------------------
reg hsync_r,vsync_r;    //同步信号产生

always @ (posedge clk or negedge rst_n)
    if(!rst_n) hsync_r <= 1‘b1;
    else if(x_cnt == 11‘d0) hsync_r <= 1‘b0;    //产生hsync信号
    else if(x_cnt == 11‘d120) hsync_r <= 1‘b1;

always @ (posedge clk or negedge rst_n)
    if(!rst_n) vsync_r <= 1‘b1;
    else if(y_cnt == 10‘d0) vsync_r <= 1‘b0;    //产生vsync信号
    else if(y_cnt == 10‘d6) vsync_r <= 1‘b1;

assign hsync = hsync_r;
assign vsync = vsync_r;

//--------------------------------------------------
    //显示一个矩形框
wire a_dis,b_dis,c_dis,d_dis;    //矩形框显示区域定位

assign a_dis = ( (xpos>=200) && (xpos<=220) )
                &&    ( (ypos>=140) && (ypos<=460) );

assign b_dis = ( (xpos>=580) && (xpos<=600) )
                && ( (ypos>=140) && (ypos<=460) );

assign c_dis = ( (xpos>=220) && (xpos<=580) )
                &&    ( (ypos>140)  && (ypos<=160) );

assign d_dis = ( (xpos>=220) && (xpos<=580) )
                && ( (ypos>=440) && (ypos<=460) );

    //显示一个小矩形
wire e_rdy;    //矩形的显示有效矩形区域

assign e_rdy = ( (xpos>=385) && (xpos<=415) )
                &&    ( (ypos>=285) && (ypos<=315) );

//--------------------------------------------------
    //r,g,b控制液晶屏颜色显示,背景显示蓝色,矩形框显示红蓝色
assign vga_r = valid ? e_rdy : 1‘b0;
assign vga_g = valid ?  (a_dis | b_dis | c_dis | d_dis) : 1‘b0;
assign vga_b = valid ? ~(a_dis | b_dis | c_dis | d_dis) : 1‘b0;      

endmodule
时间: 2024-11-13 04:05:17

Verilog HDL--VGA显示的相关文章

VmodCAM图像采集 VGA显示

先上图 总体框图 效果图 效果不是很好,因为暂时用的是zedboard自带的VGA,其只能RGB只有3*3*3的彩色度 VmodCAM原理图 VmodCAM的zedboard管脚约束见:http://blog.csdn.net/xiabodan/article/details/26144749 VmodCAM的zedboard初始化见    :http://blog.csdn.net/xiabodan/article/details/26346935 初始化采用SDK 中C编程,没有用HDL,原

MiS603 开发板2.2 Verilog HDL硬件语言基础

作者:MiS603开发团队 日期:20150911 公司:南京米联电子科技有限公司 论坛:www.osrc.cn 网址:www.milinker.com 网店:http://osrc.taobao.com EAT博客:http://blog.chinaaet.com/whilebreak 博客园:http://www.cnblogs.com/milinker/ 2.2 Verilog HDL硬件语言基础 2.2.1 技术背景 大规模集成电路设计制造技术和数字信号处理技术,近三十年来,各自得到了迅

浅谈Verilog HDL代码编写风格

消失了好久,没有写文章,也没有做笔记,因为最近再赶一个比赛,时间很紧,昨天周六终于结束了,所以趁着周末这会儿有时间,写点东西,记录下来.首先我学习FPGA才一年多,我知道自己没有资格谈论一些比较深层次的问题,对于这个行业来说可能我才是一直脚踩在门外面.所以这篇文章是写给一些刚开始学习FPGA.Verilog HDL的同学,我看过一些大神写的代码,然后尽量模仿大神写法,经过好几个大神的影响和自己的习惯摸索,最终算是总结出了一套自己的代码书写风格,当然我的代码风格还是一直在进化中.现在将自己的一些经

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

3_8译码器Verilog HDL语言的简单实现

最近在学Verilog HDL语言,觉得learn in doing是比较好的学习方式,所以我们来直接分析分析代码好了. 先来一波代码: 1 module q_decode_38(data_in,data_out); 2 3 input[2:0] data_in; //端口声明 4 output[7:0] data_out; 5 reg[7:0] data_out; 6 7 always@(data_in) 8 begin 9 case(data_in) 10 3'd0:data_out = 8

基于Verilog HDL整数乘法器设计与仿真验证

基于Verilog HDL整数乘法器设计与仿真验证 1.预备知识 整数分为短整数,中整数,长整数,本文只涉及到短整数.短整数:占用一个字节空间,8位,其中最高位为符号位(最高位为1表示为负数,最高位为0表示为正数),取值范围为-127~127. 负数的表示方法为正值的求反又加1.例如: 8’b0000_0100; //表示值:4,正值求反为:8’b1111_1011:再加1表示为:8’b1111_1100,这样便得到了-4的表示方法为:8’b1111_1100. 同理,负值变成正值的方法为:负值

&lt;转&gt;Verilog HDL宏定义define

宏定义 `define 用一个指定的标识符(即名字)来代表一个字符串,它的一般形式为: `define 标识符(宏名) 字符串(宏内容) 如:`define signal string 它的作用是指定用标识符signal来代替string这个字符串,在编译预处理时,把程序中在该命令以后所有的signal都替换成string.这种方法使用户能以一个简单的名字代替一个长的字符串,也可以用一个有含义的名字来代替没有含义的数字和符号,因此把这个标识符(名字)称为“宏名”,在编译预处理时将宏名替换成字符串

自己动手写处理器之第二阶段(3)——Verilog HDL行为语句

将陆续上传本人写的新书<自己动手写处理器>(尚未出版),今天是第七篇,我尽量每周四篇 2.6 Verilog HDL行为语句 2.6.1 过程语句 Verilog定义的模块一般包括有过程语句,过程语句有两种:initial.always.其中initial常用于仿真中的初始化,其中的语句只执行一次,而always中语句则是不断重复执行的.此外,always过程语句是可综合的,initial过程语句是不可综合的.       1.always过程语句 always过程语句的格式如图2-10所示.

verilog HDL 编码风格

1.有意义且有效的名字. 2.同一信号在不同层次应该保持一致. 3.添加有意义的后缀,使信号的有效性更加明确. 4.模块输出寄存器化,使得输出的驱动强度和输入延时是可以预测的. 5.使用括号表明优先级. 6.每一个if都应该有一个else.如果esle没有任何相应的动作,则用一条空语句.(if..esle可能有优先级) 7.case 语句最好有一个default分支,如果default不要执行动作就使用空语句. 8.在每个 模块的开始做模块级的注释,在模块端口列表中出现的信号做简要的功能描述.

Verilog HDL基础语法讲解之模块代码基本结构

Verilog HDL基础语法讲解之模块代码基本结构 ? 本章主要讲解Verilog基础语法的内容,文章以一个最简单的例子"二选一多路器"来引入一个最简单的Verilog设计文件的基本结构. 以下为本章中例子中的代码: 01????/*======================================= 02????*????file neme : mux2.v 03????*????author????:????小梅哥 04????*????Verison????:????