【发布时间】:2022-08-24 00:53:38
【问题描述】:
我的目标是在分辨率为 640x480px 的 VGA 显示器上显示一些东西。出于其他原因,我真的很想坚持这个决议,但我们会看到的。
问题:
有些线条显得较暗,有些线条显得较淡,左侧还有一个大的黑色边框。我很确定这不是(纯粹)由于我的“信号时序错误”。(请忽略白色划痕)
我的设置:
- Altera Cyclone IV FPGA
- 3x330 Ohm 电阻器(在 R、G、B 线上)(我直接用 3V3 驱动 VSYNC 和 HSYNC)
- 监控 NEC MultiSync EA232WMi (manual)
Verilog 代码:
module vga_test (
output wire HSYNC,
output wire VSYNC,
output wire enable,
output wire r,
output wire g,
output wire b,
// 50 MHz at clk
input wire clk
);
reg [32:0] hor_counter;
reg [32:0] ver_counter;
reg [32:0] counter;
always @(posedge clk) begin
counter <= counter + 1;
if (enable == 1) begin
if (hor_counter[2:0] == 3) begin
g <= 1;
end else begin
g <= 0;
end
end
// Vertical counter
if (hor_counter == 1271) begin
enable <= 0;
end if (hor_counter == 1303) begin
HSYNC <= 0;
end if (hor_counter == 1494) begin
HSYNC <= 1;
end
hor_counter <= hor_counter + 1;
if (hor_counter == 1589) begin
// if (hor_counter == 800) begin
hor_counter <= 0;
ver_counter <= ver_counter + 1;
g <= 0;
if (ver_counter <= 480) begin
enable <= 1; end
end
// Horizontal counter
if (ver_counter == 490) begin
VSYNC <= 0;
end if (ver_counter == 492) begin
VSYNC <= 1;
end
if (ver_counter == 525) begin
ver_counter <= 0;
end
end
endmodule
非常有趣的是,显示器并没有将其选为 640x480,而是 720x480。这也许可以解决为什么会有黑色边框,但user manual 表示支持 640x480。这不仅仅是这台显示器,我尝试了其他一些我手头的类似结果。也许我没有得到信号时序的某些东西?如果“图片”看起来像this post 一样被拉伸,我不会感到惊讶,但这看起来像一个正弦模式。
-
如果你能得到 25.175MHz 的精确像素时钟会更好。如果您有备用 PLL,请使用它而不是将 50MHz 除以 2。另外,不太确定您的门廊宽度是否正确,请咨询tinyvga.com/vga-timing/640x480@60Hz
标签: verilog system-verilog fpga vga