Stap 3: VGA
Voor het visuele aspect van het spel, we gedacht over het gebruik van de LED's maar besloten over het gebruik van de VGA-uitgang voor weergave van het spel op een scherm. Om dit te bereiken, onderzocht we hoe een VGA werkt en hoe de Raad van bestuur is de input voor digitaal naar analoog converter (DAC). VGA gebruikt drie ingangen voor 3 verschillende kleuren die worden vervolgens gecombineerd om een bereik van kleuren te maken en het gebruik een verticale en horizontale synchroniseert die vertelt welke pixels worden verlicht voor het RGB-signaal.
De DE2-115-bestuur heeft ADV7123 video DAC, waarin een 8 bits signaal voor rood, groen en blauw, een Sync-N-signaal, een signaal van de blanco-N en de verticale en horizontale synchroniseert. De rood, groen en blauw, een Sync-N en een lege-N-signaal worden gebruikt voor het maken van het analoge rgb-signaal met een component-signaal op de groene draad. Het h-sync en v-sync worden geconverteerd naar hun analoge equivalenten.
Afhankelijk van de resolutie, zal een verschillende dot tarief (de hoeveelheid pixels per seconde ingeschakeld) behoefte zijn. Maken dit. We gebruikten een fase loop(PLL) mega functie ingebouwd Quartus vergrendelen. Hierdoor konden wij kiezen elke klokfrequentie. Met dit, kunnen het h-sync en v-sync worden gemaakt met weten hoeveel pixels breed en hoog uw resolutie en het gebruik van een teller.
Deze module neemt in de klok, dot tarief en graphics array en uitgangen van de nodige VGA-ingangen.
CODE aangepast van "FPGA Prototyping door Verilog voorbeelden" door Pong P. Chu / /
module vgaout(sw,clk,R,G,B,vga_clk,sync_n,blank_n,vga_HS,vga_VS);
ingang [2:0] sw;
input clk;
uitgang [7:0] R, G, B;
uitvoer-vga_clk, sync_n, blank_n, vga_HS, vga_VS;
reg [7:0] R_temp, G_temp, B_temp;
draad schrijven, test;
draad xpixel, ypixel;
clksrc clksrc1 (clk, vga_clk); PLL die wordt gebruikt voor het maken van 40MHz klok nodig voor resolutie
vgaSync vgaSync1(.clk(clk),.pixel_tick(vga_clk),.hsync(vga_HS),.vsync(vga_VS),.xpixel(xpixel),.ypixel(ypixel), .video_on(write));
toewijzen van sync_n = 1; vga_HS ^ vga_VS; van DAC de handleiding, worden de sync en leeg gebruikt om te helpen met de synchronisatie van RGB. Ze kunnen slechts 1 veroorzaken RGB om altijd op.
toewijzen van blank_n = 1; schrijven;
waar zetten objecten zou uit graphics array worden ingevoerd
toewijzen van test = 1; / / ((xpixel>0) & & (xpixel < 1055));
altijd @ (posedge clk)
beginnen
R_temp = {8 {(sw [0] schrijven & test)}};
G_temp = {8 {(sw [1] & schrijven & test)}};
B_temp = {8 {(sw [2] & schrijven & test)}};
einde
toewijzen van R = R_temp;
toewijzen van G = G_temp;
toewijzen van B = B_temp;
endmodule
module vgaSync(clk,pixel_tick,hsync,vsync,xpixel,ypixel,video_on);
input clk, pixel_tick;
uitvoer draad hsync, vsync, video_on;
uitgang [10:0] xpixel, ypixel;
reg [10:0] hcount, vcount;
reg [10:0] hcount_temp, vcount_temp;
reg vsync_reg, hsync_reg;
draad hsync_temp, vsync_temp;
VGA-1920 bij 1080 sync parameter
localparam HD = 800; horizontale weergave
localparam RB = 40; rechts rand/voor veranda
localparam HR = 128; h. retrace
localparam LB = 88; linker rand/rug veranda
localparam VD = 600; v. weergeven
localparam BB = 1; onderste rand/front porck
localparam VR = 4; v. retrace
localparam TB = 23; bovenste rand/rug veranda
draad hend, vend;
registreren
altijd @ (posedge clk)
beginnen
vcount = vcount_temp;
hcount = hcount_temp;
vsync_reg = vsync_temp;
hsync_reg = hsync_temp;
einde
einde van scherm
toewijzen van hend = (hcount == (HD + RB + HR + LB-1));
toewijzen vend = (vcount == (VD + BB + VR + TB-1));
altijd
Als (pixel_tick)
Als (hend)
hcount_temp = 0;
anders
hcount_temp = hcount + 1;
anders
hcount_temp = hcount;
altijd
Als (pixel_tick & hend)
Als (vend)
vcount_temp = 0;
anders
vcount_temp = vcount + 1;
anders
vcount_temp = vcount;
toewijzen van video_on = ((hcount=(HD+RB)) & & (hcount < =(HD+RB+HR+LB-1))); horizontale en verticale sync moet worden omgekeerd voor resolutie van 800 x 600
toewijzen van vsync_temp = ~ (((vcount > =(VD+BB)) & & (vcount < =(VD+BB+VR+TB-1)));
uitgang
toewijzen van xpixel = hcount;
toewijzen van ypixel = vcount;
toewijzen van hsync = hsync_temp;
toewijzen van vsync = vsync_temp;