Я реализую протокол видео XGA (1024x768) с FPGA Altera. У меня есть отображение изображений с правильным цветом и четким вертикальным отображением (т. Е. Установка каждого n-го вертикального пикселя на черный приводит к резкой горизонтальной линии без наложения изображений). Тем не менее, горизонтальный дисплей (вертикальные линии) очень искажен, при этом линии шириной 1 пиксель «размазаны» шириной от 3 до 4 пикселей. Кроме того, ширина отображаемого сигнала слишком широка. Попытка создать ровную сетку высоты и ширины приводит к тому, что ячейки становятся шире, чем высокие.Реализация сигнала Verilog VGA: «растянутый горизонтальный»
Я проверил все свои тайминги через логический анализатор от these values, и они предельно точны, с точностью до сотых.
Основываясь на этом описании проблемы, любые идеи о том, где искать отладки? Учитывая, что вертикаль спот-на, я думаю, что это имеет какое-то отношение к моей горизонтальной синхронизации? Код генерации сигнала VGA:
module vga_sig_gen
(
clk,
reset_n,
vga_BLANK_N,
vga_SYNC_N,
vga_HS,
vga_VS,
vga_R,
vga_G,
vga_B
);
// XGA signals
input clk;
input reset_n;
output reg vga_BLANK_N;
output reg vga_SYNC_N;
output reg vga_HS;
output reg vga_VS;
output reg [7:0] vga_R;
output reg [7:0] vga_G;
output reg [7:0] vga_B;
// Frame/line position
reg [11:0] hor_pos;
reg [9:0] vert_pos;
always @ (posedge clk) begin
if(!reset_n) begin
{vga_R, vga_G, vga_B} <= 24'h000000;
hor_pos <= 12'd0;
vert_pos <= 10'd0;
end
else begin
// Update RGB values
{vga_R, vga_G, vga_B} <= (hor_pos % 48 == 0) || (vert_pos % 48 == 0) ? 24'd0 : 24'hB93E06;
// Update line/fram position
hor_pos <= (hor_pos == 12'd1343) ? 12'd0 : hor_pos + 12'd1;
if(hor_pos == 12'd1343) begin
if(vert_pos == 10'd805) begin
vert_pos <= 10'd0;
end
else begin
vert_pos <= vert_pos + 10'd1;
end
end
end
// Generate VGA signals
vga_BLANK_N <= ((hor_pos > 12'd319) && (vert_pos > 10'd37)) ? 1'b1 : 1'b0;
vga_HS <= ((hor_pos > 12'd23) && (hor_pos < 12'd160)) ? 1'b0 : 1'b1;
vga_VS <= ((vert_pos > 10'd2) && (vert_pos < 10'd9)) ? 1'b0 : 1'b1;
vga_SYNC_N <= 1'b0;
end
endmodule
Благодарим за идею, однако в конечном итоге это было родное разрешение ЖК-монитора, которое это делало. – Answoquest