📄 rgb_to_hue.v
字号:
// Copyright 2007 Altera Corporation. All rights reserved.
// Altera products are protected under numerous U.S. and foreign patents,
// maskwork rights, copyrights and other intellectual property laws.
//
// This reference design file, and your use thereof, is subject to and governed
// by the terms and conditions of the applicable Altera Reference Design
// License Agreement (either as signed by you or found at www.altera.com). By
// using this reference design file, you indicate your acceptance of such terms
// and conditions between you and Altera Corporation. In the event that you do
// not agree with such terms and conditions, you may not use the reference
// design file and please promptly destroy any copies you have made.
//
// This reference design file is being provided on an "as-is" basis and as an
// accommodation and therefore all warranties, representations or guarantees of
// any kind (whether express, implied or statutory) including, without
// limitation, warranties of merchantability, non-infringement, or fitness for
// a particular purpose, are specifically disclaimed. By making this reference
// design file available, Altera expressly does not recommend, suggest or
// require that this reference design file be used in combination with any
// other product not provided by Altera.
/////////////////////////////////////////////////////////////////////////////
// baeckler - 02-14-2007
module rgb_to_hue (
clk,rst,
r,g,b,
hue
);
input clk,rst;
input [7:0] r,g,b;
output [7:0] hue;
reg [7:0] hue;
wire r_ge_b = (r >= b);
wire r_ge_g = (r >= g);
wire g_ge_b = (g >= b);
wire g_ge_r = (g >= r);
wire b_ge_r = (b >= r);
wire b_ge_g = (b >= g);
reg [7:0] diff_a,diff_b;
reg [3:0] hue_ofs;
reg sub;
always @(posedge clk) begin
sub <= 1'b0;
if (r_ge_b & r_ge_g & g_ge_b) begin
// R G B
hue_ofs <= 4'h0;
diff_a <= g - b;
diff_b <= r - b;
end
else if (b_ge_r & g_ge_b & g_ge_r) begin
// G B R
hue_ofs <= 4'h5;
diff_a <= b - r;
diff_b <= g - r;
end
else if (r_ge_b & g_ge_r & g_ge_b) begin
// G R B
hue_ofs <= 4'h5;
sub <= 1'b1;
diff_a <= r - b;
diff_b <= g - b;
end
else if (b_ge_r & b_ge_g & r_ge_g) begin
// B R G
hue_ofs <= 4'ha;
diff_a <= r - g;
diff_b <= b - g;
end
else if (b_ge_r & b_ge_g & g_ge_r) begin
// B G R
hue_ofs <= 4'ha;
sub <= 1'b1;
diff_a <= g - r;
diff_b <= b - r;
end
else begin
// R B G
hue_ofs <= 4'hf;
sub <= 1'b1;
diff_a <= b - g;
diff_b <= r - g;
end
end
reg [5:0] hue_tab;
// do some cheap auto scaling to tighten the error bar
reg [11:0] index;
always @(posedge clk) begin
index <= (diff_a[7] | diff_b[7]) ? {diff_a[7:2],diff_b[7:2]} :
(diff_a[6] | diff_b[6]) ? {diff_a[6:1],diff_b[6:1]} :
{diff_a[5:0],diff_b[5:0]};
end
always @(posedge clk) begin
case (index)
12'd0 : hue_tab <= 6'd0;
12'd1 : hue_tab <= 6'd0;
12'd2 : hue_tab <= 6'd0;
12'd3 : hue_tab <= 6'd0;
12'd4 : hue_tab <= 6'd0;
12'd5 : hue_tab <= 6'd0;
12'd6 : hue_tab <= 6'd0;
12'd7 : hue_tab <= 6'd0;
12'd8 : hue_tab <= 6'd0;
12'd9 : hue_tab <= 6'd0;
12'd10 : hue_tab <= 6'd0;
12'd11 : hue_tab <= 6'd0;
12'd12 : hue_tab <= 6'd0;
12'd13 : hue_tab <= 6'd0;
12'd14 : hue_tab <= 6'd0;
12'd15 : hue_tab <= 6'd0;
12'd16 : hue_tab <= 6'd0;
12'd17 : hue_tab <= 6'd0;
12'd18 : hue_tab <= 6'd0;
12'd19 : hue_tab <= 6'd0;
12'd20 : hue_tab <= 6'd0;
12'd21 : hue_tab <= 6'd0;
12'd22 : hue_tab <= 6'd0;
12'd23 : hue_tab <= 6'd0;
12'd24 : hue_tab <= 6'd0;
12'd25 : hue_tab <= 6'd0;
12'd26 : hue_tab <= 6'd0;
12'd27 : hue_tab <= 6'd0;
12'd28 : hue_tab <= 6'd0;
12'd29 : hue_tab <= 6'd0;
12'd30 : hue_tab <= 6'd0;
12'd31 : hue_tab <= 6'd0;
12'd32 : hue_tab <= 6'd0;
12'd33 : hue_tab <= 6'd0;
12'd34 : hue_tab <= 6'd0;
12'd35 : hue_tab <= 6'd0;
12'd36 : hue_tab <= 6'd0;
12'd37 : hue_tab <= 6'd0;
12'd38 : hue_tab <= 6'd0;
12'd39 : hue_tab <= 6'd0;
12'd40 : hue_tab <= 6'd0;
12'd41 : hue_tab <= 6'd0;
12'd42 : hue_tab <= 6'd0;
12'd43 : hue_tab <= 6'd0;
12'd44 : hue_tab <= 6'd0;
12'd45 : hue_tab <= 6'd0;
12'd46 : hue_tab <= 6'd0;
12'd47 : hue_tab <= 6'd0;
12'd48 : hue_tab <= 6'd0;
12'd49 : hue_tab <= 6'd0;
12'd50 : hue_tab <= 6'd0;
12'd51 : hue_tab <= 6'd0;
12'd52 : hue_tab <= 6'd0;
12'd53 : hue_tab <= 6'd0;
12'd54 : hue_tab <= 6'd0;
12'd55 : hue_tab <= 6'd0;
12'd56 : hue_tab <= 6'd0;
12'd57 : hue_tab <= 6'd0;
12'd58 : hue_tab <= 6'd0;
12'd59 : hue_tab <= 6'd0;
12'd60 : hue_tab <= 6'd0;
12'd61 : hue_tab <= 6'd0;
12'd62 : hue_tab <= 6'd0;
12'd63 : hue_tab <= 6'd0;
12'd64 : hue_tab <= 6'd0;
12'd65 : hue_tab <= 6'd40;
12'd66 : hue_tab <= 6'd20;
12'd67 : hue_tab <= 6'd13;
12'd68 : hue_tab <= 6'd10;
12'd69 : hue_tab <= 6'd8;
12'd70 : hue_tab <= 6'd6;
12'd71 : hue_tab <= 6'd5;
12'd72 : hue_tab <= 6'd5;
12'd73 : hue_tab <= 6'd4;
12'd74 : hue_tab <= 6'd4;
12'd75 : hue_tab <= 6'd3;
12'd76 : hue_tab <= 6'd3;
12'd77 : hue_tab <= 6'd3;
12'd78 : hue_tab <= 6'd2;
12'd79 : hue_tab <= 6'd2;
12'd80 : hue_tab <= 6'd2;
12'd81 : hue_tab <= 6'd2;
12'd82 : hue_tab <= 6'd2;
12'd83 : hue_tab <= 6'd2;
12'd84 : hue_tab <= 6'd2;
12'd85 : hue_tab <= 6'd1;
12'd86 : hue_tab <= 6'd1;
12'd87 : hue_tab <= 6'd1;
12'd88 : hue_tab <= 6'd1;
12'd89 : hue_tab <= 6'd1;
12'd90 : hue_tab <= 6'd1;
12'd91 : hue_tab <= 6'd1;
12'd92 : hue_tab <= 6'd1;
12'd93 : hue_tab <= 6'd1;
12'd94 : hue_tab <= 6'd1;
12'd95 : hue_tab <= 6'd1;
12'd96 : hue_tab <= 6'd1;
12'd97 : hue_tab <= 6'd1;
12'd98 : hue_tab <= 6'd1;
12'd99 : hue_tab <= 6'd1;
12'd100 : hue_tab <= 6'd1;
12'd101 : hue_tab <= 6'd1;
12'd102 : hue_tab <= 6'd1;
12'd103 : hue_tab <= 6'd1;
12'd104 : hue_tab <= 6'd1;
12'd105 : hue_tab <= 6'd0;
12'd106 : hue_tab <= 6'd0;
12'd107 : hue_tab <= 6'd0;
12'd108 : hue_tab <= 6'd0;
12'd109 : hue_tab <= 6'd0;
12'd110 : hue_tab <= 6'd0;
12'd111 : hue_tab <= 6'd0;
12'd112 : hue_tab <= 6'd0;
12'd113 : hue_tab <= 6'd0;
12'd114 : hue_tab <= 6'd0;
12'd115 : hue_tab <= 6'd0;
12'd116 : hue_tab <= 6'd0;
12'd117 : hue_tab <= 6'd0;
12'd118 : hue_tab <= 6'd0;
12'd119 : hue_tab <= 6'd0;
12'd120 : hue_tab <= 6'd0;
12'd121 : hue_tab <= 6'd0;
12'd122 : hue_tab <= 6'd0;
12'd123 : hue_tab <= 6'd0;
12'd124 : hue_tab <= 6'd0;
12'd125 : hue_tab <= 6'd0;
12'd126 : hue_tab <= 6'd0;
12'd127 : hue_tab <= 6'd0;
12'd128 : hue_tab <= 6'd0;
12'd129 : hue_tab <= 6'd40;
12'd130 : hue_tab <= 6'd40;
12'd131 : hue_tab <= 6'd26;
12'd132 : hue_tab <= 6'd20;
12'd133 : hue_tab <= 6'd16;
12'd134 : hue_tab <= 6'd13;
12'd135 : hue_tab <= 6'd11;
12'd136 : hue_tab <= 6'd10;
12'd137 : hue_tab <= 6'd8;
12'd138 : hue_tab <= 6'd8;
12'd139 : hue_tab <= 6'd7;
12'd140 : hue_tab <= 6'd6;
12'd141 : hue_tab <= 6'd6;
12'd142 : hue_tab <= 6'd5;
12'd143 : hue_tab <= 6'd5;
12'd144 : hue_tab <= 6'd5;
12'd145 : hue_tab <= 6'd4;
12'd146 : hue_tab <= 6'd4;
12'd147 : hue_tab <= 6'd4;
12'd148 : hue_tab <= 6'd4;
12'd149 : hue_tab <= 6'd3;
12'd150 : hue_tab <= 6'd3;
12'd151 : hue_tab <= 6'd3;
12'd152 : hue_tab <= 6'd3;
12'd153 : hue_tab <= 6'd3;
12'd154 : hue_tab <= 6'd3;
12'd155 : hue_tab <= 6'd2;
12'd156 : hue_tab <= 6'd2;
12'd157 : hue_tab <= 6'd2;
12'd158 : hue_tab <= 6'd2;
12'd159 : hue_tab <= 6'd2;
12'd160 : hue_tab <= 6'd2;
12'd161 : hue_tab <= 6'd2;
12'd162 : hue_tab <= 6'd2;
12'd163 : hue_tab <= 6'd2;
12'd164 : hue_tab <= 6'd2;
12'd165 : hue_tab <= 6'd2;
12'd166 : hue_tab <= 6'd2;
12'd167 : hue_tab <= 6'd2;
12'd168 : hue_tab <= 6'd2;
12'd169 : hue_tab <= 6'd1;
12'd170 : hue_tab <= 6'd1;
12'd171 : hue_tab <= 6'd1;
12'd172 : hue_tab <= 6'd1;
12'd173 : hue_tab <= 6'd1;
12'd174 : hue_tab <= 6'd1;
12'd175 : hue_tab <= 6'd1;
12'd176 : hue_tab <= 6'd1;
12'd177 : hue_tab <= 6'd1;
12'd178 : hue_tab <= 6'd1;
12'd179 : hue_tab <= 6'd1;
12'd180 : hue_tab <= 6'd1;
12'd181 : hue_tab <= 6'd1;
12'd182 : hue_tab <= 6'd1;
12'd183 : hue_tab <= 6'd1;
12'd184 : hue_tab <= 6'd1;
12'd185 : hue_tab <= 6'd1;
12'd186 : hue_tab <= 6'd1;
12'd187 : hue_tab <= 6'd1;
12'd188 : hue_tab <= 6'd1;
12'd189 : hue_tab <= 6'd1;
12'd190 : hue_tab <= 6'd1;
12'd191 : hue_tab <= 6'd1;
12'd192 : hue_tab <= 6'd0;
12'd193 : hue_tab <= 6'd40;
12'd194 : hue_tab <= 6'd40;
12'd195 : hue_tab <= 6'd40;
12'd196 : hue_tab <= 6'd30;
12'd197 : hue_tab <= 6'd24;
12'd198 : hue_tab <= 6'd20;
12'd199 : hue_tab <= 6'd17;
12'd200 : hue_tab <= 6'd15;
12'd201 : hue_tab <= 6'd13;
12'd202 : hue_tab <= 6'd12;
12'd203 : hue_tab <= 6'd10;
12'd204 : hue_tab <= 6'd10;
12'd205 : hue_tab <= 6'd9;
12'd206 : hue_tab <= 6'd8;
12'd207 : hue_tab <= 6'd8;
12'd208 : hue_tab <= 6'd7;
12'd209 : hue_tab <= 6'd7;
12'd210 : hue_tab <= 6'd6;
12'd211 : hue_tab <= 6'd6;
12'd212 : hue_tab <= 6'd6;
12'd213 : hue_tab <= 6'd5;
12'd214 : hue_tab <= 6'd5;
12'd215 : hue_tab <= 6'd5;
12'd216 : hue_tab <= 6'd5;
12'd217 : hue_tab <= 6'd4;
12'd218 : hue_tab <= 6'd4;
12'd219 : hue_tab <= 6'd4;
12'd220 : hue_tab <= 6'd4;
12'd221 : hue_tab <= 6'd4;
12'd222 : hue_tab <= 6'd4;
12'd223 : hue_tab <= 6'd3;
12'd224 : hue_tab <= 6'd3;
12'd225 : hue_tab <= 6'd3;
12'd226 : hue_tab <= 6'd3;
12'd227 : hue_tab <= 6'd3;
12'd228 : hue_tab <= 6'd3;
12'd229 : hue_tab <= 6'd3;
12'd230 : hue_tab <= 6'd3;
12'd231 : hue_tab <= 6'd3;
12'd232 : hue_tab <= 6'd3;
12'd233 : hue_tab <= 6'd2;
12'd234 : hue_tab <= 6'd2;
12'd235 : hue_tab <= 6'd2;
12'd236 : hue_tab <= 6'd2;
12'd237 : hue_tab <= 6'd2;
12'd238 : hue_tab <= 6'd2;
12'd239 : hue_tab <= 6'd2;
12'd240 : hue_tab <= 6'd2;
12'd241 : hue_tab <= 6'd2;
12'd242 : hue_tab <= 6'd2;
12'd243 : hue_tab <= 6'd2;
12'd244 : hue_tab <= 6'd2;
12'd245 : hue_tab <= 6'd2;
12'd246 : hue_tab <= 6'd2;
12'd247 : hue_tab <= 6'd2;
12'd248 : hue_tab <= 6'd2;
12'd249 : hue_tab <= 6'd2;
12'd250 : hue_tab <= 6'd2;
12'd251 : hue_tab <= 6'd2;
12'd252 : hue_tab <= 6'd2;
12'd253 : hue_tab <= 6'd1;
12'd254 : hue_tab <= 6'd1;
12'd255 : hue_tab <= 6'd1;
12'd256 : hue_tab <= 6'd0;
12'd257 : hue_tab <= 6'd40;
12'd258 : hue_tab <= 6'd40;
12'd259 : hue_tab <= 6'd40;
12'd260 : hue_tab <= 6'd40;
12'd261 : hue_tab <= 6'd32;
12'd262 : hue_tab <= 6'd26;
12'd263 : hue_tab <= 6'd22;
12'd264 : hue_tab <= 6'd20;
12'd265 : hue_tab <= 6'd17;
12'd266 : hue_tab <= 6'd16;
12'd267 : hue_tab <= 6'd14;
12'd268 : hue_tab <= 6'd13;
12'd269 : hue_tab <= 6'd12;
12'd270 : hue_tab <= 6'd11;
12'd271 : hue_tab <= 6'd10;
12'd272 : hue_tab <= 6'd10;
12'd273 : hue_tab <= 6'd9;
12'd274 : hue_tab <= 6'd8;
12'd275 : hue_tab <= 6'd8;
12'd276 : hue_tab <= 6'd8;
12'd277 : hue_tab <= 6'd7;
12'd278 : hue_tab <= 6'd7;
12'd279 : hue_tab <= 6'd6;
12'd280 : hue_tab <= 6'd6;
12'd281 : hue_tab <= 6'd6;
12'd282 : hue_tab <= 6'd6;
12'd283 : hue_tab <= 6'd5;
12'd284 : hue_tab <= 6'd5;
12'd285 : hue_tab <= 6'd5;
12'd286 : hue_tab <= 6'd5;
12'd287 : hue_tab <= 6'd5;
12'd288 : hue_tab <= 6'd5;
12'd289 : hue_tab <= 6'd4;
12'd290 : hue_tab <= 6'd4;
12'd291 : hue_tab <= 6'd4;
12'd292 : hue_tab <= 6'd4;
12'd293 : hue_tab <= 6'd4;
12'd294 : hue_tab <= 6'd4;
12'd295 : hue_tab <= 6'd4;
12'd296 : hue_tab <= 6'd4;
12'd297 : hue_tab <= 6'd3;
12'd298 : hue_tab <= 6'd3;
12'd299 : hue_tab <= 6'd3;
12'd300 : hue_tab <= 6'd3;
12'd301 : hue_tab <= 6'd3;
12'd302 : hue_tab <= 6'd3;
12'd303 : hue_tab <= 6'd3;
12'd304 : hue_tab <= 6'd3;
12'd305 : hue_tab <= 6'd3;
12'd306 : hue_tab <= 6'd3;
12'd307 : hue_tab <= 6'd3;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -