RGB888 TO BT1120 转换

  1. module datainput(DVAL,LVAL,FVAL,in,clk_m,Y_data,C_data);  
  2. input LVAL;  
  3. input clk_m;  
  4. input FVAL;  
  5. input DVAL;  
  6. input [23:0] in;  
  7. output reg [7:0] Y_data,C_data;  
  8. reg [7:0] POARTA,POARTB;  
  9. reg [11:0] cnt_lval_low,cnt_lval_high_pix;  
  10. reg [10:0] LVALcnt;  
  11. reg [9:0] y1, cr1, cb1;  
  12. reg [7:0] y,cr,cb;   
  13. reg [7:0] R,G,B;  
  14. reg [7:0] Ytmp0,Cbtmp0,Crtmp0;  
  15.   
  16. /*------------------------------------------------*/  
  17. parameter BLANKC = 8'b10000000;  
  18. parameter BLANKY = 8'b00010000;  
  19. parameter BLANKEAV = 8'b10110110;  
  20. parameter BLANKSAV = 8'b10101011;  
  21. parameter VALEAV = 8'b10011101;  
  22. parameter VALSAV = 8'b10000000;  
  23. parameter DFF = 8'b11111111;  
  24. parameter D00 = 8'b00000000;  
  25. /*------------------------------------------------*/  
  26.   
  27. always @ (posedge clk_m )  
  28. begin  
  29.     R <= in[23:16];  
  30. end   
  31. always @ (posedge clk_m )  
  32. begin  
  33.     G <= in[15:8];  
  34. end   
  35. always @ (posedge clk_m )  
  36. begin  
  37.     B <= in[7:0];  
  38. end   
  39. //==============================================================  
  40. always@(posedge clk_m)                                           
  41. begin                                                         
  42.     y1 = (66*R + 129*G + 25*B+4096)>>8;    
  43.     y <= (y1[9:8]==2'b00) ? y1[7:0] : (y1[9]==0) ? 8'b11101011 : y1[9:2];  
  44. end                                                          
  45. //================================================================  
  46. always@(posedge clk_m)                                              
  47. begin    
  48.     cb1 = (112*B-38*R - 75*G+32768)>>8;   
  49.     cb <= (cb1[9:8]==2'b00) ? cb1[7:0] : (cb1[9]==0) ? 8'b11110000 : cb1[9:2];  
  50. end                                                             
  51. //================================================================  
  52. always@(posedge clk_m)                                             
  53. begin                                                          
  54.     cr1 = (112*R - 94*G - 18*B+32768)>>8 ;   
  55.     cr <= (cr1[9:8]==2'b00) ? cr1[7:0] : (cr1[9]==0) ? 8'b11110000 : cr1[9:2];  
  56. end     
  57. /*------------------------------------------------*/      
  58.   
  59.   
  60. /*------------------------------------------------*/      
  61. always@(posedge clk_m)  
  62. begin  
  63.     if(!FVAL)  
  64.     LVALcnt = 0;  
  65.   
  66. else if(LVAL)  
  67. begin  
  68.     cnt_lval_high_pix=cnt_lval_high_pix+1'b1;  
  69. if(cnt_lval_high_pix==2153)  
  70.     LVALcnt = LVALcnt + 1'b1;  
  71.     end  
  72. else  
  73.     cnt_lval_high_pix=0;  
  74. end  
  75. /*------------------------------------------------*/      
  76.   
  77. always @(posedge clk_m)  
  78.  begin  
  79.  Ytmp0  <= y;  
  80.  Cbtmp0 <=cb;  
  81.  Crtmp0 <=cr;  
  82.  end      
  83. /*-----------------------------------------------------------------------------------*/  
  84. always@(posedge clk_m)  
  85. begin  
  86.     if( (LVAL) && (LVALcnt == 16))  
  87.     begin  
  88.       
  89.     case(cnt_lval_high_pix)  
  90.         126,2056:        begin  
  91.                         Y_data<=DFF;  
  92.                         C_data<=DFF;               
  93.                       end  
  94.         127,128,2057,2058:begin  
  95.                         Y_data<=D00;  
  96.                         C_data<=D00;  
  97.                       end  
  98.         129:             begin  
  99.                         Y_data<=BLANKSAV;  
  100.                         C_data<=BLANKSAV;  
  101.                       end  
  102.         2059:            begin  
  103.                         Y_data<=VALEAV;  
  104.                         C_data<=VALEAV;  
  105.                       end  
  106.           
  107.         default:  begin  
  108.                         Y_data<= BLANKY;  
  109.                         C_data<= BLANKC;  
  110.                      end  
  111.         endcase           
  112.       
  113.     end  
  114.           
  115.         else if((LVAL) && (LVALcnt == 1096))  
  116.     begin  
  117.       
  118.     case(cnt_lval_high_pix)  
  119.         126,2056:        begin  
  120.                         Y_data<=DFF;  
  121.                         C_data<=DFF;               
  122.                       end  
  123.         127,128,2057,2058:begin  
  124.                         Y_data<=D00;  
  125.                         C_data<=D00;  
  126.                       end  
  127.         129:             begin  
  128.                         Y_data<=VALSAV;  
  129.                         C_data<=VALSAV;  
  130.                       end  
  131.         2059:            begin  
  132.                         Y_data<=BLANKEAV;  
  133.                         C_data<=BLANKEAV;  
  134.                       end  
  135.           
  136.         default:  begin  
  137.                         Y_data<= BLANKY;  
  138.                         C_data<= BLANKC;  
  139.                      end  
  140.         endcase           
  141.       
  142.     end  
  143.       
  144.     else if((LVAL) && (LVALcnt<=1095)&&(LVALcnt>=17))  
  145.     begin  
  146.   
  147.         case(cnt_lval_high_pix)  
  148.         126,2056:        begin  
  149.                         Y_data<=DFF;  
  150.                         C_data<=DFF;               
  151.                       end  
  152.         127,128,2057,2058:begin  
  153.                         Y_data<=D00;  
  154.                         C_data<=D00;  
  155.                       end  
  156.         129:             begin  
  157.                         Y_data<=VALSAV;  
  158.                         C_data<=VALSAV;  
  159.                       end  
  160.         2059:        begin  
  161.                         Y_data<=VALEAV;  
  162.                         C_data<=VALEAV;  
  163.                       end  
  164.           
  165.         default:  begin    
  166.                    Y_data <= Ytmp0;  
  167.                    if(!cnt_lval_high_pix[0])  
  168.                         C_data <= Cbtmp0;  
  169.                     else  
  170.                        C_data <= Crtmp0;  
  171.                      end  
  172.         endcase           
  173.     end  
  174. /*-----------------------------------------------------------------------------------*/   
  175. else   
  176.     begin  
  177.   
  178.         case(cnt_lval_high_pix)  
  179.         126,2056:        begin  
  180.                         Y_data<=DFF;  
  181.                         C_data<=DFF;               
  182.                       end  
  183.         127,128,2057,2058:begin  
  184.                         Y_data<=D00;  
  185.                         C_data<=D00;  
  186.                       end  
  187.         129:             begin  
  188.                         Y_data<=BLANKSAV;  
  189.                         C_data<=BLANKSAV;  
  190.                       end  
  191.         2059:            begin  
  192.                         Y_data<=BLANKEAV;  
  193.                         C_data<=BLANKEAV;  
  194.                       end  
  195.           
  196.         default:  begin  
  197.                         Y_data<= BLANKY;  
  198.                         C_data<= BLANKC;  
  199.                      end  
  200.         endcase           
  201.     end  
  202.   
  203.       
  204. /*------------------------------------------------*/          
  205. end       
  206. endmodule  

先将RGB888转换成YCBCR,再将YCBCR转换成BT1120。

当 cnt_lval_high_pix 计数到2153时,LVAL翻转:

定时基准码插入:

局部放大图:

永不止步步 发表于03-28 10:47 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67410个|学分:308317个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号