|
FPGA实验(三)基于HDL语言的VGA彩条信号显示
[复制链接]
本次通过FPGA来实现VGA图像显示控制器,用来显示一些图形、文字或图像。本次效果实现横彩条、竖彩条、和棋盘格,先给大家展示一下效果:
横彩条:
竖彩条:
棋盘格:
为了节省存储空间,我们只选择了这样三种样式,这三种格式可以用一个按键来切换选择,其他的颜色和图像我们也可以自由扩展。
看了上述效果,我们也来熟悉一下原理:计算机显示器的显示有多重标准,常见的有VGA、SVGA等,一般这些显示控制都用专用的显示控制器(如6845)。常见的彩色显示器一般由CRT(阴极射线管)构成,彩色是由三原色R、G、B组成, 用逐行扫描的方式解决图像显示。阴极射线枪发出电子束,打在涂有荧光粉的荧光屏上,产生R、G、B三基色合成一个彩色像素。扫描是从屏幕的右上方开始的,从左到右,从上到下进行扫描,每扫完一行,电子束回到屏幕的左边下一行的起始位置。在这期间CRT对电子束进行消隐,每行结束时,用行同步信号进行行同步;扫描完所有行,用场同步信号进行场同步,并使扫描回到屏幕的左上方,同时进行场消隐,预备下一场的扫描。
VGA实际接口图:
下面附上HDL语言的VGA彩条控制实验代码:
- module VGA(CLK,MD,HS,VS,R,G,B); //VGA显 示器 彩条发生器
- input CLK;input MD;output HS,VS,R,G,B;
- wire R,G,B,VS,HS; //红、绿、蓝,场同步,行同步信号
- wire FCLK,CCLK;
- reg HS1,VS1;reg [1:0]MMD;reg [5:0]FS;
- reg [4:0]CC; //行同步,竖彩条生成
- reg [8:0]LL; //场同步,横彩条生成
- reg [3:1]GRBX,GRBY,GRBP;
- wire[3:1]GRB;
- assign GRB[2]=(GRBP[2]^MD)&HS1&VS1;
- assign GRB[3]=(GRBP[3]^MD)&HS1&VS1;
- assign GRB[1]=(GRBP[1]^MD)&HS1&VS1;
- always @(posedge MD)begin
- if (MMD==2'b10)MMD<=2'b00;else MMD<=MMD+1;end
- always @(MMD) begin
- if (MMD==2'b00)GRBP<=GRBX; //选择竖彩条
- else if (MMD==2'b01)GRBP<=GRBY; //选择横彩条
- else if (MMD==2'b10)GRBP<=GRBX^GRBY; //选择棋盘格
- else GRBP<=3'b000;end
- always @(posedge CLK)begin //20MHz 21分频
- if (FS==49)FS<=0;else FS<=(FS+1); end
- always @(posedge FCLK)begin
- if (CC==29)CC<=0;else CC<=CC+1; end
- always @(posedge CCLK)begin
- if (LL==481)LL<=0;else LL<=LL+1; end
- always @(CC or LL)begin
- if (CC>23)HS1<=1'b0;else HS1<=1'b1; //行同步
- if (LL>479)VS1<=1'b0;else VS1<=1'b1;end //场同步
- always @(CC or LL)begin
- if (CC<3)GRBX<=3'b111; //竖彩条
- else if (CC<6)GRBX<=3'b110;
- else if (CC<9)GRBX<=3'b101;
- else if (CC<12)GRBX<=3'b100;
- else if (CC<15)GRBX<=3'b011;
- else if (CC<18)GRBX<=3'b010;
- else if (CC<21)GRBX<=3'b001;
- else GRBX<=3'b000;
- if (LL<60)GRBY<=3'b111; //横彩条
- else if (LL<120)GRBY<=3'b110;
- else if (LL<180)GRBY<=3'b101;
- else if (LL<240)GRBY<=3'b100;
- else if (LL<300)GRBY<=3'b011;
- else if (LL<360)GRBY<=3'b010;
- else if (LL<420)GRBY<=3'b001;
- else GRBY<=0; end
- assign HS=HS1; assign FCLK=FS[5];
- assign HS=HS1;assign VS=VS1;assign R=GRB[2];
- assign G=GRB[3];assign B=GRB[1];assign CCLK=CC[4];
- endmodule
复制代码
下面再附上工程文件,方便大家操作:
VGA彩条信号显示HDL语言.rar
(366.75 KB, 下载次数: 68)
参考文献:潘松,黄继业.EDA技术实用教程——Verilog HDL版(第五版)
|
|