找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3072|回复: 0
打印 上一主题 下一主题
收起左侧

我的颜色空间变换YCBCR to RGB 设计Verilog代码

[复制链接]
跳转到指定楼层
楼主
ID:425181 发表于 2018-11-12 18:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的颜色空间变换YCBCR to RGB 设计代码
用于视频格式转换
  1. `timescale 1ps/1ps
  2. module YCbCr2RGB (        
  3.                   //iRESET,
  4.                   iCLK,
  5.                   iY,
  6.                   iCb,
  7.                   iCr,

  8.                   Red,
  9.                   Green,
  10.                   Blue
  11.                                    );

  12.                                         //csc1
  13. //scale up to 10bit = 1024
  14. parameter R_Y_CST   =  18'h004A8,
  15.           R_CB_CST  =  18'h00000,
  16.           R_CR_CST  =  18'h00662;
  17.                        
  18. parameter G_Y_CST   =  18'h004A8,
  19.           G_CB_CST  =  18'h3FE70,
  20.           G_CR_CST  =  18'h3FCBF;
  21.                        
  22. parameter B_Y_CST   =  18'h004A8,
  23.           B_CB_CST  =  18'h00812,
  24.           B_CR_CST  =  18'h00000;
  25. parameter R_CST     =  228262; //183763; // 183251;//227750   228352  228262
  26. parameter G_CST     =  138740; //138710;//139222;//139252   139264  138740
  27. parameter B_CST     =  283574; //232260;//231748;  //283062  283648  283574   


  28.          






  29. ////csc2
  30. //parameter R_Y_CST   =  18'h00400,
  31. //          R_CB_CST  =  18'h00000,
  32. //          R_CR_CST  =  18'H0059C;
  33. //                       
  34. //parameter G_Y_CST   =  18'h00400,
  35. //          G_CB_CST  =  18'H3FEA0,
  36. //          G_CR_CST  =  18'H3FD25;
  37. //                       
  38. //parameter B_Y_CST   =  18'h00400,
  39. //          B_CB_CST  =  18'H00717,
  40. //          B_CR_CST  =  18'h00000;
  41. //         
  42. //parameter R_CST     =  183763; // 183251;//227750   228352  228262
  43. //parameter G_CST     =  138710;//139222;//139252   139264  138740
  44. //parameter B_CST     =  232260;//231748;  //283062  283648  283574         
  45.          

  46. parameter CST_YUV_Prec  =  10;

  47. //// scale up to 12bit = 4096  
  48. //parameter R_Y_CST  = 20'h012A0,
  49. //          R_CB_CST = 20'h00000,
  50. //          R_CR_CST = 20'h01989;
  51. //         
  52. //parameter G_Y_CST  = 20'h012A0,
  53. //          G_CB_CST = 20'hFF9BE,
  54. //          G_CR_CST = 20'hFF2FE;
  55. //         
  56. //parameter B_Y_CST  = 20'h012A0,
  57. //          B_CB_CST = 20'h0204A,
  58. //          B_CR_CST = 20'h00000;  
  59. //           
  60. //parameter R_CST     =  911000,
  61. //          G_CST     =  557007,
  62. //          B_CST     =  1132249;
  63. //         
  64. //parameter CST_YUV_Prec  =  12;  

  65. //csc1
  66. //R = 1.164*Y + 1.596*CR - 222.912
  67. //G = 1.164*Y - 0.391*CB - 0.813*CR + 135.488
  68. //B = 1.164*Y + 2.018*CB - 276.928

  69. //csc2
  70. //R = Y + 1.402*V - 179.456
  71. //G = Y - 0.34413*U - 0.71414*V + 135.45856
  72. //B = Y + 1.772*U - 226.816
  73. //        Input
  74.   input [7:0] iY,iCb,iCr;
  75.   input iCLK;  //iRESET,
  76.   
  77. //        Output
  78.   output        [7:0]        Red,Green,Blue;
  79.   
  80. //        Internal Registers/Wires
  81. reg [7:0] oRed,oGreen,oBlue;

  82. reg [17:0] X_OUT,Y_OUT,Z_OUT;

  83. wire [27:0] X,Y,Z;

  84. assign        Red  =        oRed;//[9:2];
  85. assign        Green=        oGreen;//[9:2];
  86. assign        Blue =        oBlue;//[9:2];

  87. wire [7:0]   Y1,Cb1,Cr1;

  88. assign  Y1  = iY ; //huang210;//LAN41;//LV145;//QING170;//iY; //iY;
  89. assign  Cb1 = iCb;//     16; //240;//54; //166;        //iCb;//iCb;   //(R) (82 , 90 240)
  90. assign  Cr1 = iCr;//     146;//110;//34; //16;         //iCr;//iCr;  //(R+G)(210 16 146 ) //(GLUE 41 240 110) //{GREEN 145 54 34}


  91. always@(posedge iCLK )//,posedge iRESET)
  92. begin
  93. //        if(iRESET)
  94. //        begin
  95. //                oRed<=0;
  96. //                oGreen<=0;
  97. //                oBlue<=0;
  98. //        end
  99. //        else
  100. //        begin
  101.                 // Red
  102.                 if(X_OUT[17])
  103.                         oRed<=0;
  104.                 else if(X_OUT[16:0]>255)
  105.                         oRed<=255;
  106.                 else
  107.                         oRed<=X_OUT[7:0];
  108.                         
  109.                 // Green
  110.                 if(Y_OUT[17])
  111.                         oGreen<=0;
  112.                 else if(Y_OUT[16:0]>255)
  113.                         oGreen<=255;
  114.                 else
  115.                         oGreen<=Y_OUT[7:0];
  116.                         
  117.                 // Blue
  118.                 if(Z_OUT[17])
  119.                         oBlue<=0;
  120.                 else if(Z_OUT[16:0]>255)
  121.                         oBlue<=255;
  122.                 else
  123.                         oBlue<=Z_OUT[7:0];
  124. //        end
  125. end

  126. always@(posedge iCLK )//,posedge iRESET)
  127. begin
  128. //        if(iRESET)
  129. //        begin
  130. //                X_OUT<=0;
  131. //                Y_OUT<=0;
  132. //                Z_OUT<=0;
  133. //        end
  134. //        else
  135.         begin
  136.                 X_OUT <= ((X - R_CST) >> (CST_YUV_Prec));  //  ((( X - R_CST ) % 1024) >= 512) ? (((X - R_CST + 512) >> (CST_YUV_Prec)) ) :
  137.                 Y_OUT <= ((Y + G_CST) >> (CST_YUV_Prec)); //   ((( Y + G_CST ) % 1024) >= 512) ? (((Y + G_CST + 512) >> (CST_YUV_Prec)) ) :
  138.                 Z_OUT <= ((Z - B_CST) >> (CST_YUV_Prec)); //   ((( Z - B_CST ) % 1024) >= 512) ? (((Z - B_CST + 512) >> (CST_YUV_Prec)) ) :
  139.         end
  140. end

  141. //wire   mac_reset  ;
  142. //assign mac_reset  =  (iRESET) ;

  143. MAC_10 MAC_3_X (
  144.                     //.aclr0(mac_reset),   
  145.                     .clock0(iCLK),   
  146.                     .dataa_0(Y1),     
  147.                     .dataa_1(Cb1),
  148.                     .dataa_2(Cr1),
  149.                     .datab_0(R_Y_CST),
  150.                     .datab_1(R_CB_CST),
  151.                     .datab_2(R_CR_CST),
  152.                     .result(X)
  153.                   );
  154. MAC_10 MAC_3_Y (
  155.                    /// .aclr0(mac_reset),
  156.                     .clock0(iCLK),
  157.                     .dataa_0(Y1),
  158.                     .dataa_1(Cb1),
  159.                     .dataa_2(Cr1),
  160.                     .datab_0(G_Y_CST),
  161.                     .datab_1(G_CB_CST),
  162.                     .datab_2(G_CR_CST),
  163.                     .result(Y)
  164.                   );         
  165. MAC_10 MAC_3_Z (
  166.                    // .aclr0(mac_reset),
  167.                     .clock0(iCLK),
  168.                     .dataa_0(Y1),
  169.                     .dataa_1(Cb1),
  170.                     .dataa_2(Cr1),
  171.                     .datab_0(B_Y_CST),
  172.                     .datab_1(B_CB_CST),
  173.                     .datab_2(B_CR_CST),
  174.                     .result(Z)
  175.                   );        

  176. endmodule
复制代码



评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表