FPGA:0006 – VGA Taimingo tiuninimas

Rašiau, kad eksperimentiniame SVGA displėjuje raidelės nesutampa su fonų ir minėjau, kad bandysim tai remontuoti.
Pirmiausia, reikia visus signalus- ir teksto ir fono, ir gal kokių nors spraitų spalvinę informaciją sinchronizuoti su pixel clocku. Tam tikslui esame “blankerio” modulį perdarom iš paprastos logikos į sinchroninį, naudojantį registrus. Naujas source kodas jau atrodo taip:

module blanker(clk,r,g,b,blank,qr,qg,qb);
input clk;
input [3:0] r;
input [3:0] g;
input [3:0] b;

input blank;

output reg [3:0]qr;
output reg [3:0]qg;
output reg [3:0]qb;

always @(posedge clk)
begin
	  qr <= (blank) ? 8'b00000000 : r  ;
	  qg <= (blank) ? 8'b00000000 : g  ;
	  qb <= (blank) ? 8'b00000000 : b  ;
end
endmodule


Dabar viskas eina suderintai su pixel_clk. T.y. jei signalas pavėlavo ateiti laiku, tai jis pasirodys išėjime tik prie sekančio pixel clock0 pasikeitimo. Dabar drąsiai galima pastebėti, kad signalas tikrai vėluoja ir netgi per du pixelius. O pixelis pas mus ne kas kitas, o vienas pixel_clock taktas.
Vaizdelis ant monitoriaus, rodo, kad foninį vaizdą reikia patraukti kaip minimum per du pixelius (iš tikrųjų per pusantro). Kaip tai realizuoti? Ogi labai paprastai- tereikia pastatyti duomenų kelyje D tipo registrus. Arba pasirašyti papildomą modulį:

module dregistras(input clock, input [3:0]data, output reg [3:0]qq);

reg [3:0]tmp;

always @(posedge clock)
begin

qq<=tmp;
end

always@(negedge clock)
tmp<=data;
endmodule

Čia prie įprasto always@(posedge) atsirado dar nematytas variantas always@(negedge). Tai tas pats, tik reaguoja į invertuotą clk signalą. Kogero šią komandą galima parašyti ir taip: always@(posedge ~clock). Pabandykit. Aš tingiu. 🙂
Kaip čia veikia? Paprastai- su pirmu LH pokyčiu duomenys įsimenami į laikiną registą, o su HL išmetami į išėjimą.
clk
Maždaug taip.
Dabar sujungia šį vėlintuvą į kitų spalvų signalus ir gauname, kad raudonos raidelės stovi kaip tik ten kur reikia. Deja, ant mano monitoriau vistiek nėra įdealaus ryškumo- paveda pernelyg primityvus DAC.
yiff
Tiesa, šešėliavimą į šoną galima pateisingti blogu DACu ir atspindžiai kabelyje. Tačiau šešėliai PO skaičiais jau kažkas negerai. Čia jau reikia aiškintis dėl pačio monitoriaus suderinamumu su šiuo video standartu. Kažkokios problemos su eilučių skaičiumi arba sinchro inpulsu.
Arba monikas šūdinas papuolė.

One reply

Leave a Reply

Your email address will not be published. Required fields are marked *