关于VGA的编程接口可参考
https://blog.csdn.net/qq_39148922/article/details/85005271
本代码驱动屏幕显示红绿蓝三道条纹,具体的代码解释可参考注释
module vgaTest(
clk,horSync,verSync,rForOut,gForOut,bForOut,reset
);
input clk;//输入的系统时钟,50MHz
input reset;//复位信号
output horSync;//横向的同步脉冲信号
output verSync;//纵向的同步脉冲信号
output [2:0]rForOut;//输出的红色电平
output [2:0]gForOut;//输出的绿色电平
output [2:0]bForOut;//输出的蓝色电平
//下面是输出信号的寄存器
reg horSyncReg;//横向同步信号脉冲寄存器
reg verSyncReg;//纵向同步信号脉冲寄存器
reg [2:0]rReg;//红色寄存器
reg [2:0]gReg;//绿色寄存器
reg [2:0]bReg;//蓝色寄存器
//让输出变量跟随寄存器
assign horSync=horSyncReg;
assign verSync=verSyncReg;
assign rForOut=rReg;
assign gForOut=gReg;
assign bForOut=bReg;
//下面是扫描周期每个阶段的截止时间点
parameter horSyncTime=120;//横向同步脉冲时间点
parameter horFrontTime=56+horSyncTime;//横向扫描的前肩时间点
parameter horVisibleTime=800+horFrontTime;//横向扫描的可见时间点
parameter horBackTime=64+horVisibleTime;//横向扫描的后肩时间点,即一个周期的结束点
//因为纵向的变化都是在每一行结束的时候触发,所以下面用line表示时间
parameter verSyncLine=6;//纵向扫描同步脉冲时间点
parameter verFrontLine=37+verSyncLine;//纵向扫描前肩时间点
parameter verVisibleLine=600+verFrontLine;//纵向扫描可见时间点
parameter verBackLine=23+verVisibleLine;//纵向扫描后肩时间点,即一个纵向周期的结束点
//下面是三个彩条的宽度
parameter redHeight=200+verVisibleLine;//0~199为红色
parameter greenHeight=200+redHeight;//200~399为绿色
parameter blueHeight=200+greenHeight;//400~599为蓝色
reg [11:0]horCount;//横向计数器
reg [11:0]verCount;//纵向计数器
always @ (posedge clk or negedge reset)
begin
if(~reset)//复位信号,对计数器清零
begin
horCount<=0;
verCount<=0;
end
else//对时钟的响应
begin
if(horCount==horBackTime-1)//横向时钟计数到周期的结束时
begin
horCount<=0;//计数器置零
//横向时钟计数满一次,纵向时钟才响应一次
if(verCount==verBackLine-1)//判断纵向时钟是否计数潢
begin
verCount<=0;//清零
end
else
begin
verCount<=verCount+1;//计数+1
end
end
else
begin
horCount<=horCount+1;//计数+1
end
end
end
//下面判断横向同步脉冲的产生时间
//这里也可以直接用 horSyncReg=horCount>=horSyncTime;
always @ (posedge clk)
begin
if(horCount<horSyncTime)
horSyncReg<=0;//产生脉冲的时候为0
else
horSyncReg<=1;//平常为1
end
//下面判断纵向脉冲的产生时间
always @ (posedge clk)
begin
if(verCount<verSyncLine)
verSyncReg<=0;//产生脉冲的时候为0
else
verSyncReg<=1;//产生的脉冲为1
end
//下面维护颜色的变化过程
always @ (posedge clk)
begin
if((horCount>=horFrontTime)&&(horCount<horVisibleTime)&&(verCount>=verFrontLine)&&(verCount<verVisibleLine))//同步脉冲时间和消隐时间不能显示
begin
if(verCount<redHeight)//红色
begin
rReg<=7;
gReg<=0;
bReg<=0;
end
else if(verCount<greenHeight)//绿色
begin
rReg<=0;
gReg<=7;
bReg<=0;
end
else if(verCount<blueHeight)//蓝色
begin
rReg<=0;
gReg<=0;
bReg<=7;
end
end
else//非显示时间
begin
rReg<=0;
gReg<=0;
bReg<=0;
end
end
endmodule
-02-Xilinx的SerDes接口介绍【Xilinx-LVDS读写功能实现】 https://blog.csdn.net/vacajk/article/details/54409789