⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rgb_to_hue.v

📁 本電子檔為 verilog cookbook,包含了通訊,影像,DSP等重要常用之verilog編碼,可作為工程師與初學者的參考手冊
💻 V
📖 第 1 页 / 共 5 页
字号:
// 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 + -