Advertisement
Guest User

henlo

a guest
Dec 31st, 2020
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module top
  2. (
  3.     clk_50,
  4.     el_tvid,
  5.     el_vs,
  6.     el_hs,
  7.     el_vclk,
  8.     el_vid
  9. );
  10.  
  11. input   wire    clk_50;
  12. output  reg     el_vid;
  13. output  reg     el_tvid;
  14. output  wire    el_vs = (y_count == 0);
  15. output  wire    el_hs = x_count < 512;
  16. output  reg     el_vclk;
  17.  
  18. reg [9:0]   x_count;        // max 1024  , 512-nek kell elférnie benne
  19. reg [8:0]   y_count;        // max 512   , 256-nak kell elférnie benne
  20. reg [1:0]   cnt;            // max 4     , ez az órajel osztóm
  21. reg [13:0]  front_porch;    // max 16 384, 10000-nek kell elférnie benne, front_porchot tárolja
  22. reg         poop;           //
  23.  
  24. // egyszer fut le
  25. /*
  26.     a páratlan oszlop adata 0-ra állítva mindig
  27.     clock értéke 0-ra
  28. */
  29. initial begin
  30.     el_tvid <= 0;
  31.     el_vclk <= 0;
  32. end
  33.  
  34.  
  35. always @(posedge clk_50)
  36. begin
  37.  
  38.     // cnt 2 bites, azaz 4 érték tárolható benne
  39.     // órajelosztónak kell
  40.     cnt <= cnt + 1;
  41.    
  42.     // az órajelet negyedelem
  43.     /*
  44.         órajelosztó:
  45.         12.5 MHz a kijelző VLCK-ja
  46.      */
  47.     if(cnt == 1) el_vclk <= ~el_vclk;
  48.  
  49.     // ez a poop mindig eltárolja a planar display orajelét, azaz VCLK-t
  50.     // poop egy, vagy nulla értékű lehet
  51.     poop <= el_vclk;
  52.    
  53.     // 100uS front porch        100uS = 0.0001s
  54.     //
  55.     /*  akkor fut le ez a blokknyi if
  56.         ha az ezutáni blokknyi ifben az "y_count == 256" vagy ha már egyszer megnövelődött a "front_porch"
  57.     */
  58.     if(front_porch > 0) begin
  59.         front_porch <= front_porch + 1;
  60.         // itt van a konkrét váltás minden 100uS esetén
  61.         if(front_porch == 10000 ) begin
  62.             front_porch <= 0;
  63.             x_count <= 0;
  64.             y_count <= 0;
  65.         end
  66.     end
  67.    
  68.     /*
  69.         ez a logika valósítja meg az adott pixel kiolvasását az "img_data" ?negáltjából?
  70.  
  71.      */
  72.     if(~el_vclk && poop) begin
  73.         // szépen végigmegyek a soron, 8 pixel a plusz a sor végén
  74.         x_count <= x_count + 1;
  75.  
  76.         // sor végére érkeztem
  77.         if(x_count == 520) begin
  78.  
  79.             // új sort szeretnék kezdeni, tehát növelem a sor változót
  80.             x_count <= 0;
  81.             y_count <= y_count + 1;
  82.         end
  83.  
  84.         /*  
  85.             ha az összes soron végigmentem, a képernyő alján vagyok,
  86.             szükséges egy front porch, és azalatt van időnk betölteni a
  87.             következő frame buffert
  88.             jelen kódban csak egy statikus képet tudok összerakni
  89.         */
  90.         if(y_count == 256) front_porch <= 1;
  91.     end
  92.    
  93.  
  94.     el_vid <= ~img_data[x_count];
  95. end
  96.  
  97. wire [511:0] img_data;
  98.  
  99. img img_inst (
  100.     .address    ( y_count ),
  101.     .clock      ( clk_50 ),
  102.     .q          ( img_data )
  103. );
  104.  
  105. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement