第一次搞vga,我直接抄的书上的代码,可是不知道哪里有问题,仿真时序也是正确的,一驱动vga显示屏就显示无信号,(不驱动的时候显示屏还会亮,一驱动就直接无信号然后黑了
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 2021/10/24 19:10:24
// Design Name:
// Module Name: v1
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module v1(
input clk,
input [7:0]sw,
output [7:0]led,
output Hsync,//水平同步输出接口
output Vsync,//垂直同步输出接口
output [3:0]vgaRed,
output [3:0]vgaGreen,
output [3:0]vgaBlue
);
parameter ta=96,tb=48,tc=640,td=16,te=800,to=2,tp=33,tq=480,tr=10,ts=525;
// parameter ta=80,tb=160,tc=800,td=16,te=1056,to=3,tp=21,tq=600,tr=1,ts=625;
reg [10:0]x_counter=0;//当前水平扫描速度
reg [10:0]y_counter=0;//当前垂直扫描速度
reg [2:0]colour;
wire clk_vga;//对clk处理后的输出线
assign led=sw;
//调用ip核输出25MHz的时钟
clk_wiz_0 uut_clk
(
.clk_in1(clk),
.clk_out1(clk_vga)
);
//行场同步信号发生
always @(posedge clk_vga)
begin
begin
if(x_counter == te-1)//799
begin
x_counter=0;
if(y_counter == ts-1)//524
y_counter=0;
else
y_counter=y_counter+1;
end
else
begin
x_counter=x_counter+1;
end
end
end
//赋予颜色信息
always@(x_counter or y_counter)
begin
if(x_counter<224) colour<=3'b001;//蓝色
else if(x_counter<304) colour<=3'b010;//绿色
else if(x_counter<384) colour<=3'b011;//青色
else if(x_counter<464) colour<=3'b100;//红色
else if(x_counter<544) colour<=3'b101;//粉色
else if(x_counter<624) colour<=3'b110;//黄色
else if(x_counter<704) colour<=3'b111;//白色
else colour<=3'b000;//黑色
end
//完成颜色信号的硬件驱动
assign vgaRed={4{colour[2]}};
assign vgaGreen={4{colour[1]}};
assign vgaBlue={4{colour[0]}};
//行场同步信号发生
//当水平扫描值x_counter<ta时,水平同步信号为0
assign Hsync=!(x_counter<ta);//96
//当垂直扫描值y_counter<to时,垂直同步信号为0
assign Vsync=!(y_counter<to);//2
ila_0 U3(
.clk(clk),
.probe0(Hsync),
.probe1(Vsync),
.probe2(vgaRed),
.probe3(vgaBlue),
.probe4(vgaGreen)
);
endmodule
约束文件也是对照着书上写的,还求各位大神指点😢😢😢😢😢😢