当前位置:首页 > VGA彩色信号发生器 - 图文
三、程序设计 1.程序流程图
CRT生产消隐 扫描完480 行 行同步扫描 开始 N
选择横条图 MD=00 MD=01 场同步扫描 输出 MD=10 MD=11 选择竖条图 选择棋盘格子图 选择#图 图4 VGA程序流程图
3
2、源程序及其说明
module color(clock50MHz,MD,rgb,hs,vs); input clock50MHz; input[1:0] MD; output hs,vs; output[2:0] rgb; reg hs,vs,clock;
reg[2:0] rgb,rgbx,rgby,rgba,rgbb; reg[9:0] hcnt,vcnt;
parameter h_Ta=96,h_Tb=40,h_Tc=8,h_Td=640,h_Te=8,h_Tf=8,h_Tg=800; parameter v_Ta=2,v_Tb=25,v_Tc=8,v_Td=480,v_Te=8,v_Tf=2,v_Tg=525; always@(posedge clock50MHz)
begin
clock<=~clock; end
//行计数800
//2分频,得到25MHZ的频率
always@(posedge clock) begin
if(hcnt==h_Tg-1) hcnt<=0; else hcnt<=hcnt+1; end
always@(negedge hs) begin
if(vcnt==v_Tg-1) vcnt<=0; else vcnt<=vcnt+1; end
always@(posedge clock) begin
if(hcnt<=h_Ta-1) hs<=0; //产生行同步信号
4
//场计数525
//clock 25MHz
else hs<=1; end
always@(vcnt) begin
if(vcnt<=v_Ta-1) vs<=0; else vs<=1; end
always@(posedge clock)
begin //竖彩条,说明显示位置及颜色
if(hcnt<=h_Ta+h_Tb+h_Tc-1) rgbx<=3'b000; //黑 else if(hcnt<=h_Ta+h_Tb+h_Tc+80-1) rgbx<=3'b001;//蓝 else if(hcnt<=h_Ta+h_Tb+h_Tc+160-1) rgbx<=3'b010;//绿 else if(hcnt<=h_Ta+h_Tb+h_Tc+240-1) rgbx<=3'b011;//青 else if(hcnt<=h_Ta+h_Tb+h_Tc+320-1) rgbx<=3'b100;//红 else if(hcnt<=h_Ta+h_Tb+h_Tc+400-1) rgbx<=3'b101;//品 else if(hcnt<=h_Ta+h_Tb+h_Tc+480-1) rgbx<=3'b000;//黑 else if(hcnt<=h_Ta+h_Tb+h_Tc+560-1) rgbx<=3'b110;//黄 else if(hcnt<=h_Ta+h_Tb+h_Tc+640-1) rgbx<=3'b111;//白 else rgbx<=3'b000;
if(vcnt<=v_Ta+v_Tb+v_Tc-1) rgby<=3'b000; //横彩条,说明显示位置及颜色 else if(vcnt<=v_Ta+v_Tb+v_Tc+60-1)
rgby<=3'b001;
//产生场同步信号
else if(vcnt<=v_Ta+v_Tb+v_Tc+120-1) rgby<=3'b010; else if(vcnt<=v_Ta+v_Tb+v_Tc+180-1) rgby<=3'b011; else if(vcnt<=v_Ta+v_Tb+v_Tc+240-1) rgby<=3'b100; else if(vcnt<=v_Ta+v_Tb+v_Tc+300-1) rgby<=3'b101; else if(vcnt<=v_Ta+v_Tb+v_Tc+360-1) rgby<=3'b000; else if(vcnt<=v_Ta+v_Tb+v_Tc+420-1) rgby<=3'b110; else if(vcnt<=v_Ta+v_Tb+v_Tc+480-1) rgby<=3'b111; else rgby<=3'b000;
5
end
if(hcnt<=h_Ta+h_Tb+h_Tc-1) rgba<=3'b000; //显示# else if(hcnt<=h_Ta+h_Tb+h_Tc+80-1) rgba<=3'b000; else if(hcnt<=h_Ta+h_Tb+h_Tc+160-1) rgba<=3'b001; else if(hcnt<=h_Ta+h_Tb+h_Tc+240-1) rgba<=3'b000; else if(hcnt<=h_Ta+h_Tb+h_Tc+320-1) rgba<=3'b000; else if(hcnt<=h_Ta+h_Tb+h_Tc+400-1) rgba<=3'b000; else if(hcnt<=h_Ta+h_Tb+h_Tc+480-1) rgba<=3'b001; else if(hcnt<=h_Ta+h_Tb+h_Tc+560-1) rgba<=3'b000; else if(hcnt<=h_Ta+h_Tb+h_Tc+640-1) rgba<=3'b000; else rgbb<=3'b000;
if(vcnt<=v_Ta+v_Tb+v_Tc-1) rgbb<=3'b000; else if(vcnt<=v_Ta+v_Tb+v_Tc+60-1)
rgbb<=3'b000;
else if(vcnt<=v_Ta+v_Tb+v_Tc+120-1) rgbb<=3'b001; else if(vcnt<=v_Ta+v_Tb+v_Tc+180-1) rgbb<=3'b000; else if(vcnt<=v_Ta+v_Tb+v_Tc+240-1) rgbb<=3'b000; else if(vcnt<=v_Ta+v_Tb+v_Tc+300-1) rgbb<=3'b000; else if(vcnt<=v_Ta+v_Tb+v_Tc+360-1) rgbb<=3'b001; else if(vcnt<=v_Ta+v_Tb+v_Tc+420-1) rgbb<=3'b000; else if(vcnt<=v_Ta+v_Tb+v_Tc+480-1) rgbb<=3'b000; else rgbb<=3'b000;
always @(MD)//控制按键
begin if(MD==2'b00) rgb<=rgbx; else if(MD==2'b01) rgb<=rgby; else if(MD==2'b10) rgb<=(rgbx+rgby); else end endmodule
rgb<=(rgba+rgbb);
6
共分享92篇相关文档