Ich versuche, VGA mit Verilog auf meinem Altera DE0-Board zum Laufen zu bringen, hatte aber nicht viel Glück. Es hat die gleichen Pins wie eine normale VGA-Schnittstelle, außer dass Rot, Grün und Blau jeweils 4 Bit sind. Hier ist die Logik, die ich zu verwenden versucht habe, um eine Volltonfarbe anzuzeigen:
module solid_color (clk, vga_h_sync, vga_v_sync, R, G, B);
input clk;
output vga_h_sync;
output vga_v_sync;
output [3:0] R;
output [3:0] G;
output [3:0] B;
reg [9:0] CounterX;
reg [8:0] CounterY;
wire CounterXmaxed = (CounterX==767);
always @(posedge clk)
if(CounterXmaxed)
CounterX <= 0;
else
CounterX <= CounterX + 1;
always @(posedge clk)
if(CounterXmaxed)
CounterY <= CounterY + 1;
reg vga_HS, vga_VS;
always @(posedge clk)
begin
vga_HS <= (CounterX[9:4]==0); // active for 16 clocks
vga_VS <= (CounterY==0); // active for 768 clocks
end
assign vga_h_sync = ~vga_HS;
assign vga_v_sync = ~vga_VS;
assign R = 15;
assign G = 15;
assign B = 15;
endmodule
Wenn ich versuche, es auszuführen, erhalte ich nur eine Meldung auf dem Monitor, die besagt, dass dieser Anzeigemodus nicht unterstützt wird.
Dies ist angepasst von http://www.fpga4fun.com/PongGame.html . Diese Version behauptet jedoch, für 640 x 480-Displays ausgelegt zu sein, während mein Monitor 1280 x 1024 ist. Ist das das Problem? Wenn ja, wie würde ich dies an die erhöhte Monitorgröße anpassen? (die Uhr, die ich verwende, ist 50 MHz)
BEARBEITEN: Ich habe ein Taktteilermodul wie folgt hinzugefügt, um das anfängliche Taktsignal auf 25 MHz zu ändern:
module divide_clock_by_two(in_clk, out_clk);
input in_clk;
output out_clk;
reg out_clk;
always @(posedge in_clk)
out_clk <= ~out_clk;
endmodule
Allerdings zeigt der Monitor jetzt nur noch einen schwarzen Bildschirm, keine Meldung über einen falschen Modus.
Die meisten VGA-Monitore „kalibrieren den DC-Offset heraus“, wenn Sie die RGB-Signale außerhalb des sichtbaren Bereichs treiben.
Obwohl dies möglicherweise nicht Ihr einziges oder sogar schwerwiegendstes Problem ist, scheint dies ein Problem in Ihrer Implementierung zu sein (Sie steuern Konstanten). Versuchen Sie also, Logik hinzuzufügen, um Ihre Farbsignale auf Schwarz zu treiben, wenn sie sich außerhalb des beabsichtigten Anzeigerechtecks befinden.
pjc50
Majenko
Achtertrompete
CounterX==767
aufCounterX==1535
undCounterX[9:4]
zu zu wechselnCounterX[9:5]
, um die Timings zu verdoppeln, aber das hat nicht funktioniert.Achtertrompete
Majenko
Achtertrompete
Majenko
Achtertrompete
pjc50