6.RGB转YCbcr

1.方法

RGB转灰度有很多种方式
  1.将RGB中任意分量拿出来当做灰度值。
  2.取RGB三通道的均值来当灰度值。
  3.将RGB转YUV(YCbCr)然后取Y分量作为灰度值。
  其余的几种实现方式较为简单,这里不做介绍。重点实现RGB转YCbCr。

1.1 YUV(YCbCr)格式

  Y表示亮度,U和V表示色度,用于描述影像的饱和度和色调。RGB转YUV的转换一般是色彩空间的转换。YUV主要用在模拟系统中,而YCbCr是通过YUV信号的发展,并通过校正
的主要应用在数字视频中的一种编码方法。YUV适用于PAL和SECAM彩色电视制式,而YCrCb适用于计算机用的显示器。 一般意义上 YCbCr 即为 YUV 信号,没有严格的划分。 CbCr 分别为蓝色色度分量、红色色度分量。
RGB注重人色彩的感知,YUV则注重亮度的敏感程度。
使用YUV描述图像的好处在于:
  (1)亮度(Y)与色度(U、V)是独立的;
  (2)人眼能够识别数千种不同的色彩,但只能识别20多种灰阶值,采用YUV标准可以降低数字彩色图像所需的储存容量。

1.1.1 YUV4:4:4

  YUV三个通道采样率相同,因此每个分量相互独立。通常一个分量占8bit,一个像素占3byte。

1.1.2 YUV4:2:2

  YUV三个通道采样率不同,UV分量只有Y的一半,两个UV共占用一个Y。

1.2 RGB转YCbCr公式

在这里插入图片描述
  但是由于Verilog HDL无法进行浮点运算,因此使用扩大256倍,再向右移8Bit的方式来转换公式,(0.083 = 00010101)
在这里插入图片描述

2.算法验证平台搭建

2.1 图片转txt文本

  首先将图片转化为txt文本格式方便其他模块读取。

clear ;
clc ;
close;
RGB = imread('../img/1920x1080.bmp');
imshow(RGB);
[row,col,chn] = size(RGB);
fid = fopen('../data//pre.txt','w+');
for i = 1:rowfor j = 1:colfor k = 1:chnfprintf(fid,'%02x',RGB(i,j,k));endfprintf(fid,'\n');end
endfclose(fid); 

2.2 txt文本数据仿真回传

2.2.1 文本读取

  这里首先读取MATLAB生成的pre.txt文本,读取txt文本的模块为img_gen3,表示读取的RGB888的数据。

`timescale 1ns / 1psmodule img_gen3
#(parameter 	ACTIVE_IW 	= 	1920 	,parameter 	ACTIVE_IH 	= 	1080 	,parameter 	TOTAL_IW 	= 	2200 	,parameter 	TOTAL_IH 	= 	1100 	,parameter 	H_START 	= 	100 	,parameter 	V_START 	= 	4 		 		
)(input 	wire 				clk 	,input 	wire 				rst_n 	,output 	reg 				vs 		,output 	reg  	 	 		de 		,output 	reg 	[23:0] 		data 	
);reg 	[23:0] 	raw_array 	[ACTIVE_IW*ACTIVE_IH-1:0];integer 	i;initial 	beginfor(i=0;i<ACTIVE_IW*ACTIVE_IH;i=i+1)raw_array[i] = 0;
endinitial begin$readmemh("H:/picture/Z7/lesson6/data/pre.txt",raw_array);
endreg 	[15:0] 	hcnt 	;
reg 	[15:0] 	vcnt 	;reg 			h_de 	;
reg 			v_de  	;reg  			index_de 	;
reg 	[31:0] 	index 	 	;always @(posedge clk or negedge rst_n)if(!rst_n)hcnt <= 'd0;else if(hcnt == TOTAL_IW - 1)hcnt <= 'd0;else hcnt <= hcnt + 1'b1;always @(posedge clk or negedge rst_n)if(!rst_n)vcnt <= 'd0;else if(hcnt == TOTAL_IW - 1 && vcnt == TOTAL_IH - 1)vcnt <= 'd0;else if(hcnt == TOTAL_IW - 1)vcnt <= vcnt + 1'b1;else vcnt <= vcnt;always @(posedge clk or negedge rst_n)if(!rst_n)vs <= 'd0;else if(vcnt>=2)vs <= 1'b1;else vs <= 1'b0;always @(posedge clk or negedge rst_n)if(!rst_n)h_de <= 'd0;else if(hcnt >= H_START && hcnt < H_START + ACTIVE_IW)h_de <= 1'b1;else h_de <= 1'b0;always @(posedge clk or negedge rst_n)if(!rst_n)v_de <= 'd0;else if(vcnt >= V_START && vcnt < V_START + ACTIVE_IH)v_de <= 1'b1;else v_de <= 1'b0;always @(posedge clk or negedge rst_n)if(!rst_n)index_de <= 'd0;else if(index == ACTIVE_IW * ACTIVE_IH-1)index_de <= 1'b0;else if(h_de == 1'b1 && v_de == 1'b1)index_de <= 1'b1;else index_de <= 1'b0;always @(posedge clk or negedge rst_n)if(!rst_n)index_de <= 'd0;else if(h_de == 1'b1 && v_de == 1'b1)index_de <= 1'b1;else index_de <= 1'b0;always @(posedge clk or negedge rst_n)if(!rst_n)index <= 'd0;else if(index == ACTIVE_IW * ACTIVE_IH-1)index <= 1'b0;else if(index_de == 1'b1)index <= index + 1;else index <= index;always @(posedge clk or negedge rst_n)if(!rst_n)de <= 'd0;else de <= index_de;always @(posedge clk or negedge rst_n)if(index_de == 1'b1)data <= raw_array[index];else data <= 0;
endmodule

2.2.1 读取写入

  读取的数据在顶层写入为post.txt。

`timescale 1ns / 1ps
module tb_top();reg 	clk 	;
reg 	rst_n 	;integer 	outfile;initial 	beginclk = 0;rst_n = 0;#20rst_n = 1;outfile = $fopen("H:/picture/Z7/lesson6/data/post.txt","w");
end
always #5 clk = ~clk;wire 	vs ;
wire 	de ;
wire 	[23:0] 	data;img_gen3  #(.ACTIVE_IW 	(1920 	),.ACTIVE_IH 	(1080 	),.TOTAL_IW 	(2200 	),.TOTAL_IH 	(1100 	),.H_START 	(100 	),.V_START 	(4 		) 		
)u_img_gen3(.clk 	 	(clk 	 	),.rst_n 	 	(rst_n 	 	),.vs 		(vs 		),.de 		(de 		),.data 	 	(data 	 	)
);reg 	vs_r 	;always @(posedge clk)if(rst_n == 0)vs_r 	<= 1'b0;else vs_r 	<= vs;always @(posedge clk)if(~vs&&vs_r)$stop;else if(de == 1)$fdisplay(outfile,"%h\t%h\t%h",data[23:16],data[15:8],data[7:0]);
endmodule

2.2.3 MATLAB数据读取

  这里对比pre.txt和post.txt是否相等的方式有很多中,可以直接用文本对比工具,也可以用MATLAB做对比。这里只做一个txt转bmp。

clear ;
clc ;
close;
RGB = imread('../img/1920x1080.bmp');
imshow(RGB);
[row,col,chn] = size(RGB);
fid = fopen('../data//pre.txt','w+');
for i = 1:rowfor j = 1:colfor k = 1:chnfprintf(fid,'%02x',RGB(i,j,k));endfprintf(fid,'\n');end
end
fclose(fid); 

搭建后对比pre.txt与post.txt的数据一致。可以开始验证算法了。

3 rgb2ycbcr算法实现与仿真

3.1 rgb2ycbcr算法实现

  本算法实现包括三个时钟周期,第一个时钟周期算乘法,第二个时钟周期算加减,第三个时钟周期算触发(截位)。

module	rgb2ycbcr(input	wire				clk				,	//系统时钟input	wire				rst_n			,	//复位信号input	wire				pre_hsync		,	//输入的场同步input	wire				pre_vsync		,	//输入行同步input	wire				pre_de			,	//数据有效信号input	wire	[ 7:0]		pre_r 			,	//输入像素数据input 	wire 	[ 7:0] 		pre_g 			,input 	wire 	[ 7:0] 		pre_b 			,output	reg 				post_hsync 		,	//输出行同步output	reg 				post_vsync 		,	//输出场同步output	reg 				post_de 		,	//输出数据有效信号output	reg 	[7:0]		post_y 			,	//输出y(亮度)分量output	reg 	[7:0]		post_cb 		,	//输出蓝色色度分量output	reg 	[7:0]		post_cr				//输出红色色度分量);reg 	[15:0] 	pre_r0 	;reg 	[15:0] 	pre_r1 	;reg 	[15:0] 	pre_r2 	;reg 	[15:0] 	pre_g0 	;reg 	[15:0] 	pre_g1 	;reg 	[15:0] 	pre_g2 	;reg 	[15:0] 	pre_b0 	;reg 	[15:0] 	pre_b1 	;reg 	[15:0] 	pre_b2 	;reg 	[15:0] 	post_y0 ;reg 	[15:0] 	post_cb0;	reg 	[15:0] 	post_cr0;reg 			pre_hsync_d0;reg 			pre_vsync_d0;reg 			pre_de_d0 	;reg 			pre_hsync_d1;reg 			pre_vsync_d1;reg 			pre_de_d1 	;/*********************************************************
RGB888 to YCbCr
Y = 0.299R +0.587G + 0.114B
Cb = 0.568(B-Y) + 128 = -0.172R-0.339G + 0.511B + 128
CR = 0.713(R-Y) + 128 = 0.511R-0.428G -0.083B + 128Y = (77 *R + 150*G + 29 *B)>>8
Cb = (-43*R - 85 *G + 128*B)>>8 + 128
Cr = (128*R - 107*G - 21 *B)>>8 + 128Y = (77 *R + 150*G + 29 *B )>>8
Cb = (-43*R - 85 *G + 128*B + 32768)>>8
Cr = (128*R - 107*G - 21 *B + 32768)>>8
*********************************************************/
//计算乘法项always @(posedge clk)beginif(rst_n == 0)beginpre_r0 	<= 	'd0;pre_r1 	<= 	'd0;pre_r2 	<= 	'd0;endelse beginpre_r0 	<= 	pre_r *77;pre_r1 	<= 	pre_r *43;pre_r2 	<= 	pre_r *128;		end
endalways @(posedge clk)beginif(rst_n == 0)beginpre_g0 	<= 	'd0;pre_g1 	<= 	'd0;pre_g2 	<= 	'd0;endelse beginpre_g0 	<= 	pre_g *150;pre_g1 	<= 	pre_g *85 ;pre_g2 	<= 	pre_g *107;		end
endalways @(posedge clk)beginif(rst_n == 0)beginpre_b0 	<= 	'd0;pre_b1 	<= 	'd0;pre_b2 	<= 	'd0;endelse beginpre_b0 	<= 	pre_b *29;pre_b1 	<= 	pre_b *128 ;pre_b2 	<= 	pre_b *21;		end
end//计算加减法
always @(posedge clk)beginif(rst_n == 0)beginpost_y0 	<= 	0;post_cb0 	<= 	0;post_cr0 	<= 	0;endelse beginpost_y0 	<= 	 		pre_r0 + pre_g0 + pre_b0;post_cb0 	<= 	32768 - pre_r1 - pre_g1 + pre_b1;post_cr0 	<= 	32768 + pre_r2 - pre_g2 - pre_b2;end
end//移位赋值
always @(posedge clk)beginif(rst_n == 0)beginpost_y 	 	<= 	0;post_cb 	<= 	0;post_cr 	<= 	0;endelse beginpost_y 		<= 	post_y0 /256;post_cb 	<= 	post_cb0/256;post_cr 	<= 	post_cr0/256;end
end//本次计算一共用了三个时钟周期  所以其余的信号需要打三拍出来
always @(posedge clk)beginif(rst_n == 0)beginpre_hsync_d0 	<= 	'd0;pre_vsync_d0 	<= 	'd0;pre_de_d0 	 	<= 	'd0;pre_hsync_d1 	<= 	'd0;pre_vsync_d1 	<= 	'd0;pre_de_d1 	 	<= 	'd0;post_hsync 		<= 	'd0;post_vsync 		<= 	'd0;post_de 	 	<= 	'd0;		endelse beginpre_hsync_d0 	<= 	pre_hsync 		;pre_vsync_d0 	<= 	pre_vsync 		;pre_de_d0 	 	<= 	pre_de 	 		;pre_hsync_d1 	<= 	pre_hsync_d0 	;pre_vsync_d1 	<= 	pre_vsync_d0 	;pre_de_d1 	 	<= 	pre_de_d0 	 	;post_hsync 		<= 	pre_hsync_d1 	;post_vsync 		<= 	pre_vsync_d1 	;post_de 	 	<= 	pre_de_d1 	 	;		end
endendmodule

3.2 算法仿真与验证

3.2.1 算法仿真模块

`timescale 1ns / 1psmodule tb_rgb2ycbcr();reg 	 		clk 			;
reg 	 		rst_n 			;reg 			pre_hsync		;
wire 			pre_vsync		;
wire 			pre_de			;
wire 	[7:0] 	pre_r 			;
wire 	[7:0] 	pre_g 			;
wire 	[7:0] 	pre_b 	 		;
wire 			post_hsync 	 	;
wire 			post_vsync 	 	;
wire 			post_de 		;
wire 	[7:0] 	post_y 		 	;
wire 	[7:0] 	post_cb 		;
wire 	[7:0] 	post_cr			;	integer 	outfile;always #10 clk = ~clk;
initial 	beginclk = 0;rst_n = 0;pre_hsync = 1;#200rst_n = 1;outfile = $fopen("H:/picture/Z7/lesson6/data/post.txt","w");
endimg_gen3#(.ACTIVE_IW 	(1920 	),.ACTIVE_IH 	(1080 	),.TOTAL_IW 	(2200 	),.TOTAL_IH 	(1100 	),.H_START 	(100 	),.V_START 	(4 		) 		
)u_img_gen3(.clk 	 	(clk 	 			),.rst_n 	 	(rst_n 	 			),.vs 		(pre_vsync 			),.de 		(pre_de 			),.data 	 	({pre_r,pre_g,pre_b})
);rgb2ycbcr u1_rgb2ycbcr(.clk			(clk			),	//系统时钟.rst_n			(rst_n			),	//复位信号.pre_hsync		(pre_hsync		),	//输入的场同步.pre_vsync		(pre_vsync		),	//输入行同步.pre_de			(pre_de			),	//数据有效信号.pre_r 			(pre_r 			),	//输入像素数据.pre_g 			(pre_g 			),.pre_b 			(pre_b 			),.post_hsync 	(post_hsync 	),	//输出行同步.post_vsync 	(post_vsync 	),	//输出场同步.post_de 		(post_de 		),	//输出数据有效信号.post_y 		(post_y 		),	//输出y(亮度)分量.post_cb 		(post_cb 		),	//输出蓝色色度分量.post_cr		(post_cr		)	//输出红色色度分量);reg 	vs_r 	;always @(posedge clk)if(rst_n == 0)vs_r 	<= 1'b0;else vs_r 	<= post_vsync;always @(posedge clk)if(~post_vsync&&vs_r)$stop;else if(post_de == 1)$fdisplay(outfile,"%h",post_y);
endmodule

3.2.2 算法的MATLAB验证

clc;
clear all;
RGB = imread('../img/1920x1080.bmp');
[row,col,chn] = size(RGB);
RGB = double(RGB);
for i = 1:rowfor j = 1:colfor k = 1:chnY(i,j)  = (77*RGB(i,j,1)    + 150*RGB(i,j,2)    + 29*RGB(i,j,3)            )/256;Cb(i,j) = (-43*RGB(i,j,1)   - 85*RGB(i,j,2)     + 128*RGB(i,j,3)   +32768  )/256;Cr(i,j) = (128*RGB(i,j,1)   - 107*RGB(i,j,2)    - 21*RGB(i,j,3)    +32768  )/256;endend
end
matlab_Y = uint8(floor(Y));a = textread('../data/post.txt','%s');
IMdec = hex2dec(a);col = 1920;
row = 1080;IM = reshape(IMdec,col,row);
fpga_Y = uint8(IM)';subplot(1,2,1)
imshow(matlab_Y),title('MATLAB算法图像');
subplot(1,2,2)
imshow(fpga_Y),title('FPGA算法图像');sub = matlab_Y - fpga_Y;min_sub = min(min(sub));
max_sub = max(max(sub));

  最终MATLAB读取MolelSim的仿真数据以及MATLAN本身实现的rgb2ycbcr算法模块做对比。两者数据完全一样。
在这里插入图片描述
在这里插入图片描述

3.2.3 TXT转bmp

clear;
clc;
close all;a = textread('../data/post.txt','%s');
IMdec = hex2dec(a);col = 1920;
row = 1080;IM = reshape(IMdec,col,row);
b = uint8(IM)';imwrite(b,'../img/post.bmp');
imshow('../img/post.bmp');

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/778691.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单片机之串口通信

目录 串口介绍 通信的基本概念 并行通信和串行通信 同步通信和异步通信 串行异步通信方式 串行同步通信方式 通信协议 单片机常见通信接口 串行通信三种模式 串口参数 传输速度 ​串口的连接 电平标准 串行口的组成 串口数据缓冲寄存器 串行口控制寄存器 串口…

MTK8781安卓核心板_MT8781(Helio G99)核心板性能参数

MT8781安卓核心板搭载了八核CPU&#xff0c;其中包括两个主频高达2.2GHz的高性能Arm Cortex-A76处理器。这一处理器采用了台积电6纳米级芯片生产工艺&#xff0c;以及先进的3D图形功能的高性能Arm Mali G57级GPU。通过超快LPDDR4X内存和UFS 2.2存储供电&#xff0c;不仅提高了游…

【设计模式】中介者模式的应用

文章目录 1.概述2.中介者模式的适用场景2.1.用户界面事件2.2.分布式架构多模块通信 3.总结 1.概述 中介者模式&#xff08;Mediator Pattern&#xff09;是一种行为型设计模式&#xff0c;它用于解决对象间复杂、过度耦合的问题。当多个对象&#xff08;一般是两个以上的对象&…

|行业洞察·汽车|《2024新能源汽车行业及营销趋势报告-20页》

报告的主要内容解读&#xff1a; 新能源汽车行业概述及品牌分布&#xff1a; 近年来&#xff0c;中国新能源汽车销量增速高&#xff0c;市场占有率快速提升&#xff0c;成为汽车行业的重要增量。新能源汽车消费者趋向年轻化、女性化和高端化&#xff0c;对高科技、新体验有较高…

Android Studio控制台输出中文乱码问题

控制台乱码现象 安卓在调试阶段&#xff0c;需要查看app运行时的输出信息、出错提示信息。 乱码&#xff0c;会极大的阻碍开发者前进的信心&#xff0c;不能及时的根据提示信息定位问题&#xff0c;因此我们需要查看没有乱码的打印信息。 解决步骤&#xff1a; step1: 找到st…

STM32看似无法唤醒的一种异常现象分析

1. 引言 STM32 G0 系列产品具有丰富的外设和强大的处理性能以及良好的低功耗特性&#xff0c;被广泛用于各类工业产品中&#xff0c;包括一些需要低功耗需求的应用。 2. 问题描述 用户使用 STM32G0B1 作为汽车多媒体音响控制器的控制芯片&#xff0c;用来作为收音机频道存贮…

【漏洞复现】chatgpt pictureproxy.php SSRF漏洞(CVE-2024-27564)

0x01 漏洞概述 ChatGPT pictureproxy.php接口存在服务器端请求伪造 漏洞&#xff08;SSRF&#xff09; &#xff0c;未授权的攻击者可以通过将构建的 URL 注入 url参数来强制应用程序发出任意请求。 0x02 测绘语句 fofa: icon_hash"-1999760920" 0x03 漏洞复现 G…

云渲染中途停止渲染会保存渲染结果吗?

在数字创作领域&#xff0c;云渲染已经逐渐成为了设计师们常用的渲染工具。然而&#xff0c;很多对云渲染功能不熟的用户来说&#xff0c;一些基础的操作疑问仍然困扰着他们。例如&#xff0c;自己用的云渲染中途停止渲染会不会保存渲染结果&#xff1f; 关于这个问题&#xf…

前后端分离开发【Yapi平台】【Swagger注解自动生成接口文档平台】

前后端分离开发 介绍开发流程Yapi&#xff08;api接口文档编写平台&#xff09;介绍 Swagger使用方式1). 导入knife4j的maven坐标2). 导入knife4j相关配置类3). 设置静态资源映射4). 在LoginCheckFilter中设置不需要处理的请求路径 查看接口文档常用注解注解介绍 当前项目中&am…

洲际酒店集团持续夯实领航之势 以新高度、新策略、新方向助推行业高质量发展

“ 旅、遇&#xff0c;正当时”&#xff0c;洲际酒店集团大中华区酒店巡展圆满落幕 2024年3月28日&#xff0c;中国上海 —— 作为最早进入中国市场的国际酒店管理集团之一&#xff0c;洲际酒店集团坚守“在中国&#xff0c;为中国”的承诺&#xff0c;以行业领跑者之势&#…

22.计算机中的数据存储

文章目录 一、计算机中的数据存储二、十进制1、十进制加法2、十进制减法 三、什么是二进制&#xff1f;二进制的运算过程 四、常见的进制五、计算机为什么要用二进制存储数据&#xff1f;六、进制之间的转换1、任意进制转十进制1&#xff09;二进制101转十进制8421快速转换法 2…

《QT实用小工具·一》电池电量组件

1、概述 项目源码放在文章末尾 本项目实现了一个电池电量控件&#xff0c;包含如下功能&#xff1a; 可设置电池电量&#xff0c;动态切换电池电量变化。可设置电池电量警戒值。可设置电池电量正常颜色和报警颜色。可设置边框渐变颜色。可设置电量变化时每次移动的步长。可设置…

Qlib-Server:量化库数据服务器

Qlib-Server:量化库数据服务器 介绍 Qlib-Server 是 Qlib 的配套服务器系统,它利用 Qlib 进行基本计算,并提供广泛的服务器系统和缓存机制。通过 Qlib-Server,可以以集中的方式管理 Qlib 提供的数据。 框架 Qlib 的客户端/服务器框架基于 WebSocket 构建,这是因为 WebS…

免费翻译pdf格式论文

进入谷歌翻译网址https://translate.google.com/?slauto&tlzh-CN&opdocs 将需要全文翻译的pdf放进去 选择英文到中文&#xff0c;然后点击翻译 可以选择打开译文或者下载译文&#xff0c;下载译文会下载到电脑上&#xff0c;打开译文会在浏览器打开。

Redis命令-List命令

4.6 Redis命令-List命令 Redis中的List类型与Java中的LinkedList类似&#xff0c;可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索。 特征也与LinkedList类似&#xff1a; 有序元素可以重复插入和删除快查询速度一般 常用来存储一个有序数据&#xff…

element-ui autocomplete 组件源码分享

紧接着 input 组件的源码&#xff0c;分享带输入建议的 autocomplete 组件&#xff0c;在 element-ui 官方文档上&#xff0c;没有这个组件的 api 目录&#xff0c;它的 api 是和 input 组件的 api 在一起的&#xff0c;看完源码之后发现&#xff0c;源码当中 autocomplete 组件…

图片标注编辑平台搭建系列教程(3)——画布拖拽、缩放实现

简介 标注平台很关键的一点&#xff0c;对于整个图片为底图的画布&#xff0c;需要支持缩放、拖拽&#xff0c;并且无论画布位置在哪里&#xff0c;大小如何&#xff0c;所有绘制的点、线、面的坐标都是相对于图片左上角的&#xff0c;并且&#xff0c;拖拽、缩放&#xff0c;…

远程技术支持软件方案如何帮助一线客服提升效率?

远程控制在企业远程技术支持体系中&#xff0c;是非常主流的方案&#xff0c;而优秀的远程控制方案本身&#xff0c;就可以非常直观的帮助一线技术支持员工提升效率&#xff0c;降低时间与人力成本&#xff0c;其中向日葵技术支持解决方案就是很好的例子&#xff0c;这里我们来…

厨余垃圾处理设备工业监控PLC连接APP小程序智能软硬件开发之功能原理篇

接着上一篇《厨余垃圾处理设备工业监控PLC连接APP小程序智能软硬件开发之功能结构篇》继续总结一下厨余垃圾处理设备智能软硬件统的原理。所有的软硬件系统全是自己一人独自开发&#xff0c;看法和角度难免有局限性。希望抛砖引玉&#xff0c;将该智能软硬件系统分享给更多有类…

FPGA结构与片上资源

文章目录 0.总览1.可配置逻辑块CLB1.1 6输入查找表&#xff08;LUT6&#xff09;1.2 选择器&#xff08;MUX&#xff09;1.3 进位链&#xff08;Carry Chain&#xff09;1.4 触发器&#xff08;Flip-Flop&#xff09; 2.可编程I/O单元2.1 I/O物理级2.2 I/O逻辑级 3.布线资源4.其…