Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module top
- (
- clk_50,
- el_tvid,
- el_vs,
- el_hs,
- el_vclk,
- el_vid
- );
- input wire clk_50;
- output reg el_vid;
- output reg el_tvid;
- output wire el_vs = (y_count == 0);
- output wire el_hs = x_count < 512;
- output reg el_vclk;
- reg [9:0] x_count; // max 1024 , 512-nek kell elférnie benne
- reg [8:0] y_count; // max 512 , 256-nak kell elférnie benne
- reg [1:0] cnt; // max 4 , ez az órajel osztóm
- reg [13:0] front_porch; // max 16 384, 10000-nek kell elférnie benne, front_porchot tárolja
- reg poop; //
- // egyszer fut le
- /*
- a páratlan oszlop adata 0-ra állítva mindig
- clock értéke 0-ra
- */
- initial begin
- el_tvid <= 0;
- el_vclk <= 0;
- end
- always @(posedge clk_50)
- begin
- // cnt 2 bites, azaz 4 érték tárolható benne
- // órajelosztónak kell
- cnt <= cnt + 1;
- // az órajelet negyedelem
- /*
- órajelosztó:
- 12.5 MHz a kijelző VLCK-ja
- */
- if(cnt == 1) el_vclk <= ~el_vclk;
- // ez a poop mindig eltárolja a planar display orajelét, azaz VCLK-t
- // poop egy, vagy nulla értékű lehet
- poop <= el_vclk;
- // 100uS front porch 100uS = 0.0001s
- //
- /* akkor fut le ez a blokknyi if
- ha az ezutáni blokknyi ifben az "y_count == 256" vagy ha már egyszer megnövelődött a "front_porch"
- */
- if(front_porch > 0) begin
- front_porch <= front_porch + 1;
- // itt van a konkrét váltás minden 100uS esetén
- if(front_porch == 10000 ) begin
- front_porch <= 0;
- x_count <= 0;
- y_count <= 0;
- end
- end
- /*
- ez a logika valósítja meg az adott pixel kiolvasását az "img_data" ?negáltjából?
- */
- if(~el_vclk && poop) begin
- // szépen végigmegyek a soron, 8 pixel a plusz a sor végén
- x_count <= x_count + 1;
- // sor végére érkeztem
- if(x_count == 520) begin
- // új sort szeretnék kezdeni, tehát növelem a sor változót
- x_count <= 0;
- y_count <= y_count + 1;
- end
- /*
- ha az összes soron végigmentem, a képernyő alján vagyok,
- szükséges egy front porch, és azalatt van időnk betölteni a
- következő frame buffert
- jelen kódban csak egy statikus képet tudok összerakni
- */
- if(y_count == 256) front_porch <= 1;
- end
- el_vid <= ~img_data[x_count];
- end
- wire [511:0] img_data;
- img img_inst (
- .address ( y_count ),
- .clock ( clk_50 ),
- .q ( img_data )
- );
- endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement