Advertisement
Weesla

rgbyuv.v

Mar 16th, 2017
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. `timescale 1ns / 1ps
  2. //////////////////////////////////////////////////////////////////////////////////
  3. // Company:
  4. // Engineer:
  5. //
  6. // Create Date:    09:41:41 10/12/2012
  7. // Design Name:
  8. // Module Name:    rgbyuv
  9. // Project Name:
  10. // Target Devices:
  11. // Tool versions:
  12. // Description:
  13. //
  14. // Dependencies:
  15. //
  16. // Revision:
  17. // Revision 0.01 - File Created
  18. // Additional Comments:
  19. //
  20. //////////////////////////////////////////////////////////////////////////////////
  21. module rgbyuv(
  22.     input clk,
  23.     input rst,
  24.     input signed [17:0] i_red,
  25.     input signed [17:0] i_grn,
  26.     input signed [17:0] i_blu,
  27.     output reg   [7:0]  o_y,
  28.     output reg   [7:0]  o_u,
  29.     output reg   [7:0]  o_v,
  30.     output reg          skind
  31.     );
  32.  
  33. reg signed [17:0]   red_r, grn_r, blu_r;
  34.  
  35. reg signed [7:0] o_y2, o_u2, o_v2;
  36.  
  37. reg signed [35:0] ry, gy, by, ru, gu, bu, rv, gv, bv;
  38.  
  39. reg [7:0]           p_y, p_u, p_v;
  40.  
  41. parameter signed [17:0] RY_COEF = 'd66, GY_COEF = 'd129, BY_COEF = 'd25,
  42.                         RU_COEF = -'d38, GU_COEF = -'d74, BU_COEF = 'd112,
  43.                         RV_COEF = 'd112, GV_COEF = -'d94, BV_COEF = -'d18;
  44.  
  45.  
  46. always @(posedge clk)
  47. begin
  48.     if(rst) begin
  49.         red_r <= 18'd0;
  50.         grn_r <= 18'd0;
  51.         blu_r <= 18'd0;
  52.         o_y <= 8'd0;
  53.         o_u <= 8'd0;
  54.         o_v <= 8'd0;
  55.     end else begin
  56.         red_r <= i_red;  //input reg
  57.         grn_r <= i_grn;
  58.         blu_r <= i_blu;
  59.        
  60.         ry <= RY_COEF * red_r;
  61.         gy <= GY_COEF * grn_r;
  62.         by <= BY_COEF * blu_r;
  63.         ru <= RU_COEF * red_r;
  64.         gu <= GU_COEF * grn_r;
  65.         bu <= BU_COEF * blu_r;
  66.         rv <= RV_COEF * red_r;
  67.         gv <= GV_COEF * grn_r;
  68.         bv <= BV_COEF * blu_r;
  69.  
  70.        
  71.         p_y <= ((ry + gy + by) >>> 8) + 16;    //output reg
  72.         p_u <= ((ru + gu + bu) >>> 8) + 128;
  73.         p_v <= ((rv + gv + bv) >>> 8) + 128;
  74.        
  75.         o_y <= p_y;
  76.         o_u <= p_u;
  77.         o_v <= p_v;
  78.  
  79.     end
  80. end
  81.  
  82.  always @(posedge clk)
  83.  begin
  84.  if(rst) begin
  85.         skind <= 0;
  86.         end
  87.         else begin
  88.       //If 73 ≤ u ≤ 122 and 132 ≤ v ≤ 173 it is a skin pixel (skind=1)
  89.       //Otherwise, not (skind=0)
  90.             if(p_u >= 8'd73 && p_u <= 8'd122 && p_v >= 8'd132 && p_v <= 8'd173)
  91.             skind <= 1'b1;
  92.  
  93.             else
  94.             skind <= 0;
  95.         end
  96.  
  97.  end
  98.  
  99.  
  100. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement