VGA接口时序练习之图像动态显示

简介: Vga练习之动态显示图案 Vga接口应用,并在电脑显示屏上显示 功能:每隔3s变化一次,a~e循环变换 a.全红 b.全白 c.2*2  4部分,分别是:红,蓝,绿,黄 d.3*3  9部分,分别是:红黄蓝绿黑紫白青粉 e.150*100矩形边框,边缘是20宽度的绿色框,其他为白色   分辨率:600*480   VGA支持的规格: 1.水平时序: 分辨率

Vga练习之动态显示图案

Vga接口应用,并在电脑显示屏上显示

功能:每隔3s变化一次,a~e循环变换

a.全红

b.全白

c.2*2  4部分,分别是:红,蓝,绿,黄

d.3*3  9部分,分别是:红黄蓝绿黑紫白青粉

e.150*100矩形边框,边缘是20宽度的绿色框,其他为白色

 

分辨率:600*480

 

VGA支持的规格:

1.水平时序:

分辨率

刷新速率

像素频率

同步脉冲

后沿

有效时间

前沿

帧长

640/480

60

25

96

45

646

13

800

640/480

72

31

40

125

646

21

832

800/600

60

40

128

85

806

37

1056

800/600

56

36

72

125

806

21

1024

800/600

72

50

120

611

806

53

1040

 

2.垂直时序:

分辨率

刷新速率

像素频率

同步脉冲

后沿

有效时间

前沿

帧长

640/480

60

31

2

30

484

9

525

640/480

72

26

3

26

484

7

520

800/600

56

28

1

20

604

-1

625

800/600

60

26

4

21

604

-1

628

800/600

72

20

6

21

604

35

666

 

VGA行时序:

VGA场时序:


VGA颜色显示原理:

         通过三基色r,g,b的不同组合,显示出不同的颜色。


三基色示意图如下:


三基色颜色编码:

颜色

绿

R

0

0

1

1

0

0

1

1

G

0

0

0

0

1

1

1

1

B

0

1

0

1

0

1

0

1

 

代码部分:

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

分辨率:600*480

功能:每隔3s变化一次,a~e循环变换

a.全红

b.全白

c.2*2  4部分,分别是:红,蓝,绿,黄

d.3*3  9部分,分别是:红黄蓝绿黑紫白青粉

e.150*100矩形边框,边缘是20宽度的绿色框,其他为白色

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

 

module VGA_test4(clk,rst_n,lcd_data,lcd_hs,lcd_vs);

 

input clk;   //25mhz

input rst_n;

output lcd_vs;//场同步信号

output lcd_hs;//行同步信号

output [7:0]lcd_data;//lcd_data[1:0]B,

//lcd_data[4:2]G,lcd_data[7:5]R

 

parameter LCD_HS_CNT = 799,

              LCD_VS_CNT = 524;

 

reg [9:0] lcd_hs_cnt;//行同步计数

always@(posedge clk or negedge rst_n)

    if(!rst_n)

        lcd_hs_cnt <= 10'd0;

    else if(lcd_hs_cnt==LCD_HS_CNT)

        lcd_hs_cnt <= 10'd0;

    else

        lcd_hs_cnt <= lcd_hs_cnt + 1'b1;

       

reg lcd_hs;    

always@(posedge clk or negedge rst_n)

    if(!rst_n)

        lcd_hs <= 1'b0;

    else if(lcd_hs_cnt<96)

        lcd_hs <= 1'b0;

    else

        lcd_hs <= 1'b1;

       

reg [9:0] lcd_vs_cnt;//场同步计数 

always@(posedge clk or negedge rst_n)

    if(!rst_n)

        lcd_vs_cnt <= 10'd0;

    else if(lcd_hs_cnt==LCD_HS_CNT && lcd_vs_cnt==LCD_VS_CNT)  

        lcd_vs_cnt <= 10'd0;

    else if(lcd_hs_cnt==LCD_HS_CNT)

        lcd_vs_cnt <= lcd_vs_cnt + 1'b1;

    else if(lcd_vs_cnt==LCD_VS_CNT)

        lcd_vs_cnt <= lcd_vs_cnt;

   

reg lcd_vs;        

always@(posedge clk or negedge rst_n)

    if(!rst_n)

        lcd_vs <= 1'b0;

    else if(lcd_vs_cnt<2)

        lcd_vs <= 1'b0;

    else

        lcd_vs <= 1'b1;

 

reg [24:0]time_1s;          //1s计数器

always@(posedge clk or negedge rst_n)

    if(!rst_n)

        time_1s <= 25'd0;

    else if(time_1s == 24_999_999)

        time_1s <= 25'd0;

    else

        time_1s <= time_1s + 1'b1;

       

reg [3:0]time_1s_cnt;       //计数1s的个数

always @(posedge clk or negedge rst_n)

    if(!rst_n)

        time_1s_cnt<= 4'd0;

    else if(time_1s_cnt==14)

        time_1s_cnt <= 4'd0;

    else if(time_1s==24_999_999)

        time_1s_cnt <= time_1s_cnt + 1'b1;

    else

        time_1s_cnt <= time_1s_cnt;    

       

reg [9:0]valid_area;    //画出矩形,长为:787-141=646,宽为:516-32=484

always@(*)begin

    valid_area = ((lcd_hs_cnt >=141) && (lcd_hs_cnt <= 787) && (lcd_vs_cnt >= 32) && (lcd_vs_cnt <= 516));

end

 

//c:2*2 4部分,646*484分成4部分

reg [9:0]valid_area_c1; //画出矩形,长为:464-141=323,宽为:274-32=242

always@(*)begin

    valid_area_c1 = ((lcd_hs_cnt >=141) && (lcd_hs_cnt <= 464) && (lcd_vs_cnt >= 32) && (lcd_vs_cnt <= 274));

end

 

reg [9:0]valid_area_c2; //画出矩形,长为:787-464=323,宽为:274-32=242

always@(*)begin

    valid_area_c2 = ((lcd_hs_cnt >=464) && (lcd_hs_cnt <= 787) && (lcd_vs_cnt >= 32) && (lcd_vs_cnt <= 274));

end

 

reg [9:0]valid_area_c3; //画出矩形,长为:464-141=323,宽为:516-274=242

always@(*)begin

    valid_area_c3 = ((lcd_hs_cnt >=141) && (lcd_hs_cnt <= 464) && (lcd_vs_cnt >= 274) && (lcd_vs_cnt <= 516));

end

   

//d:3*3 9部分,将646*484分成9部分

reg [9:0]valid_area_d1; //画出矩形,长为:356-141=215,宽为:193-32=161

always@(*)begin

    valid_area_d1 = ((lcd_hs_cnt >=141) && (lcd_hs_cnt <= 356) && (lcd_vs_cnt >= 32) && (lcd_vs_cnt <= 193));

end

 

reg [9:0]valid_area_d2; //画出矩形,长为:571-356=215,宽为:354-193=161

always@(*)begin

    valid_area_d2 = ((lcd_hs_cnt >=356) && (lcd_hs_cnt <= 571) && (lcd_vs_cnt >= 32) && (lcd_vs_cnt <= 193));

end

 

reg [9:0]valid_area_d3; //画出矩形,长为:787-571=216,宽为:516-354=162

always@(*)begin

    valid_area_d3 = ((lcd_hs_cnt >=571) && (lcd_hs_cnt <= 787) && (lcd_vs_cnt >= 32) && (lcd_vs_cnt <= 193));

end

 

reg [9:0]valid_area_d4; //画出矩形,长为:356-141=215,宽为:193-32=161

always@(*)begin

    valid_area_d4 = ((lcd_hs_cnt >=141) && (lcd_hs_cnt <= 356) && (lcd_vs_cnt >= 193) && (lcd_vs_cnt <= 354));

end

 

reg [9:0]valid_area_d5; //画出矩形,长为:571-356=215,宽为:354-193=161

always@(*)begin

    valid_area_d5 = ((lcd_hs_cnt >=356) && (lcd_hs_cnt <= 571) && (lcd_vs_cnt >= 193) && (lcd_vs_cnt <= 354));

end

 

reg [9:0]valid_area_d6; //画出矩形,长为:787-571=216,宽为:516-354=162

always@(*)begin

    valid_area_d6 = ((lcd_hs_cnt >=571) && (lcd_hs_cnt <= 787) && (lcd_vs_cnt >= 193) && (lcd_vs_cnt <= 354));

end

 

reg [9:0]valid_area_d7; //画出矩形,长为:356-141=215,宽为:193-32=161

always@(*)begin

    valid_area_d7 = ((lcd_hs_cnt >=141) && (lcd_hs_cnt <= 356) && (lcd_vs_cnt >= 354) && (lcd_vs_cnt <= 516));

end

 

reg [9:0]valid_area_d8; //画出矩形,长为:571-356=215,宽为:354-193=161

always@(*)begin

    valid_area_d8 = ((lcd_hs_cnt >=356) && (lcd_hs_cnt <= 571) && (lcd_vs_cnt >= 354) && (lcd_vs_cnt <= 516));

end

 

//e:150*100边框

reg [9:0]valid_area_e; 

always@(*)begin

    valid_area_e = ((lcd_hs_cnt >=389) && (lcd_hs_cnt <= 539) && (lcd_vs_cnt >= 224) && (lcd_vs_cnt <= 324));

end

 

reg [9:0]valid_area_e1;

always@(*)begin

    valid_area_e1 = (((lcd_hs_cnt >= 389) && (lcd_hs_cnt <= 409)) |

                         ((lcd_hs_cnt >= 519) && (lcd_hs_cnt <= 539)) |

                          ((lcd_vs_cnt >= 224) && (lcd_vs_cnt <= 244)) |

                         ((lcd_vs_cnt >= 304) && (lcd_vs_cnt <= 324)));

end

 

reg [7:0]lcd_data; 

always@(posedge clk or negedge rst_n)

    if(!rst_n)

        lcd_data <= 8'h0;

    else if(valid_area)begin

        if(time_1s_cnt>=0 && time_1s_cnt<=2)       //a

            lcd_data <= 8'b111_000_00;   //全红

        else if(time_1s_cnt>=3 && time_1s_cnt<=5)  //b

            lcd_data <= 8'b111_111_11;  //全白

        else if(time_1s_cnt>=6 && time_1s_cnt<=8)  //c

            if(valid_area_c1)

                lcd_data <=8'b111_000_00;  //

            else if(valid_area_c2)  

                lcd_data <=8'b000_000_11;  //

            else if(valid_area_c3)

                lcd_data <=8'b000_111_00;  //绿

            else   

                lcd_data <=8'b111_111_00;  //

        else if(time_1s_cnt>=9 && time_1s_cnt<=11)  //d

            if(valid_area_d1)

                lcd_data <=8'b111_000_00;//

            else if(valid_area_d2)

                lcd_data <=8'b111_111_00;//

            else if(valid_area_d3)

                lcd_data <=8'b000_000_11;//

            else if(valid_area_d4)

               lcd_data <=8'b000_111_00;//绿

            else if(valid_area_d5)

                lcd_data <=8'b000_000_00;//

            else if(valid_area_d6)

                lcd_data <=8'b111_000_11;//

            else if(valid_area_d7)

                lcd_data <=8'b111_111_11;//

            else if(valid_area_d8)

                lcd_data <=8'b000_111_11;//

            else

                lcd_data <=8'b000_111_10;//粉(不知)

        else if(time_1s_cnt>=12 && time_1s_cnt<=14)  //e

            if(valid_area_e)

                if(valid_area_e1)

                    lcd_data <=8'b000_111_00;//绿

                else

                    lcd_data <=8'b111_111_11;//

            else

                lcd_data <=8'b111_111_11;//         

    end

    else

        lcd_data <= 8'h0;               //black

 

endmodule

 

ps:行边沿从141开始,场边沿从32开始,使得图像在显示屏的中心显示。

 

在电脑显示屏上的显示结果如下:

 

目录
相关文章
|
机器学习/深度学习 算法 搜索推荐
导数、梯度、最优化方法|学习笔记
快速学习导数、梯度、最优化方法
430 0
导数、梯度、最优化方法|学习笔记
|
18天前
|
人工智能 JSON 供应链
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
LucianaiB分享零成本畅用JVS Claw教程(学生认证享7个月使用权),并开源GeoMind项目——将JVS改造为科研与产业地理情报可视化AI助手,支持飞书文档解析、地理编码与腾讯地图可视化,助力产业关系图谱构建。
23535 12
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
|
6天前
|
Shell API 开发工具
Claude Code 快速上手指南(新手友好版)
AI编程工具卷疯啦!Claude Code凭借任务驱动+终端原生的特性,成了开发者的效率搭子。本文从安装、登录、切换国产模型到常用命令,手把手带新手快速上手,全程避坑,30分钟独立用起来。
1762 10
|
3天前
|
人工智能 开发工具 iOS开发
Claude Code 新手完全上手指南:安装、国产模型配置与常用命令全解
Claude Code 是一款运行在终端环境中的 AI 编程助手,能够直接在命令行中完成代码生成、项目分析、文件修改、命令执行、Git 管理等开发全流程工作。它最大的特点是**任务驱动、终端原生、轻量高效、多模型兼容**,无需图形界面、不依赖 IDE 插件,能够深度融入开发者日常工作流。
1178 1
|
5天前
|
人工智能 JSON BI
DeepSeek V4-Pro 接入 Claude Code 完全实战:体验、测试与关键避坑指南
Claude Code 作为当前主流的 AI 编程辅助工具,凭借强大的代码理解、工程执行与自动化能力深受开发者喜爱,但原生模型的使用成本相对较高。为了在保持能力的同时进一步降低开销,不少开发者开始寻找兼容度高、价格更友好的替代模型。DeepSeek V4 系列的发布带来了新的选择,该系列包含 V4-Pro 与 V4-Flash 两款模型,并提供了与 Anthropic 完全兼容的 API 接口,理论上只需简单修改配置,即可让 Claude Code 无缝切换为 DeepSeek 引擎。
1248 0
|
12天前
|
人工智能 缓存 Shell
Claude Code 全攻略:命令大全 + 实战工作流(完整版)
Claude Code 是一款运行在终端环境下的 AI 编码助手,能够直接在项目目录中理解代码结构、编辑文件、执行命令、执行开发计划,并支持持久化记忆、上下文压缩、后台任务、多模型切换等专业能力。对于日常开发、项目维护、快速重构、代码审查等场景,它可以大幅减少手动操作、提升编码效率。本文从常用命令、界面模式、核心指令、记忆机制、图片处理、进阶工作流等维度完整说明,帮助开发者快速上手并稳定使用。
2797 4
|
3天前
|
人工智能 JSON BI
Claude Code 搭配 DeepSeek V4-Pro 完整测评:超越 Claude Sonnet 4.5,低成本高效能背后的真实表现
Claude Code 凭借强大的代码理解、工程执行与自动化任务能力,成为开发者广泛使用的 AI 编程工具。但原生模型的调用成本较高,长期高频使用会带来明显开销。DeepSeek V4 系列模型发布后,凭借优秀的代码能力与兼容 Anthropic 协议的 API 接口,成为替代原生模型的高性价比选择。本文完整记录将 Claude Code 对接 DeepSeek V4-Pro 的配置流程、真实任务测试效果、优势亮点与必须注意的使用限制,为开发者提供可直接落地的参考方案。
804 1
|
5天前
|
人工智能 Linux API
hermes agent 安装教程:安装优化 + 模型配置 + 工具启用指南
Hermes Agent 是 Nous Research 于 2026 年发布的开源自主进化 AI 智能体框架(MIT 协议,Python 编写)。它通过任务沉淀技能、持久化记忆、原生多工具集成与并行子智能体,实现“越用越强”。支持 Linux/macOS/WSL2,安装便捷,面向个人与企业的新一代私有化 AI 助手。

热门文章

最新文章