当前位置: 首页 > news >正文

[米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-22 TPG图像测试数据发生器设计

软件版本:Anlogic -TD5.9.1-DR1_ES1.1

操作系统:WIN10 64bit

硬件平台:适用安路(Anlogic)FPGA

实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板

板卡获取平台:https://milianke.tmall.com/

登录“米联客”FPGA社区 http://www.uisrc.com 视频课程、答疑解惑!

目录

1 概述

1.1 RGB像素格式

2 程序设计

2.1 系统框图

2.2 TPG源码

3 RTL仿真

3.1 仿真激励文件

3.2 仿真结果


1 概述

TPG(video_test_pattern generator) 视频测试模式发生器用于产生测试数据,对视频数据通路测试。本课设计一个图像数据发生器,该模块能够产生不同颜色和样式的图像数据,并按顺序将RGB图像数据发送到有效显示区域。

1.1 RGB像素格式

    RGB是一种颜色标准,俗称三基色模式,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,是运用最广的颜色系统之一。像素点就相当于一个RGB灯,通过控制 R、G、B 这三种颜色的亮度就可以显示出各种各样的色彩。在显示器发明之后,从黑白显示器发展到彩色显示器,人们开始使用发出不同颜色的光的荧光粉(CRT,等离子体显示器),或者不同颜色的滤色片(LCD),或者不同颜色的半导体发光器件(OLED和LED大型全彩显示牌)来形成色彩,不管采用何种技术,都以红(R)、绿(G)、蓝(B)三个颜色作为基本的发光单元,通过控制光强度,组合出了人类视力所能感知的所有颜色。

常见RGB像素格式:

1、索引格式:

索引格式是比较老的格式,随着越来越高的视觉需求,索引格式基本不再被使用了,这里只做简单介绍。索引格式中bit存储的值并非是实际的R、G、B值,而是对应点的像素在调色板中的索引,即在图像文件中划出一个区域存放一个调色板来存储图像中的每一种颜色,这个像素的颜色对应到调色板的第几号颜色。

RGB1:每个像素用1个bit表示,能够表示的索引范围是0-1,共2种颜色,即调色板中包含2中颜色。

RGB4:每个像素用4个bit表示,能够表示的索引范围是0-15,共16种颜色,即调色板中包含16中颜色。

RGB8:每个像素用8个bit表示,能够表示的索引范围是0-255,共256种颜色,即调色板中包含256中颜色。

2、像素格式:

RGB像素格式不同于索引格式,索引格式bit存储的是每一个像素的色彩索引,而像素格式中的bit用来存储像素点中R、G、B三个颜色的值。

RGB888:也叫RGB24,一个像素点由3个字节组成,共8bit*3=24bit。其中bit23~bit16是RED 通道,红色对应的值就是 24’hFF0000;bit15~bit8 是 GREEN 通道,绿色对应的值就是 24’h00FF00;bit7~bit0 是 BLUE通道,蓝色对应的值为 24’h0000FF,使用RGB888格式,理论上可以产生1670万种色彩。RGB888像素格式如下图所示:

RGB888 数据格式

RGB565:只需要两个字节,可以降低成本,RGB分量分别使用5bit、6bit、5bit,但在色彩鲜艳度上较差一些。

RGB555:只需要两个字节,RGB分量都使用5bit(最高位不用)。

RGB1555:只需要两个字节,RGB分量都使用5bit,1bit用于表示透明度(0完全透明,1完全不透明)。

我们可以通过电脑的“画图”工具,使用调色板即可获取到想要的颜色对应的数值。

2 程序设计

2.1 系统框图

本次实验通过测试视频发生器模块,产生测试图形,即彩条、渐变、纯色、棋方格,将相应测试图形的RGB数据依次放入有效的显示区域内。实验包含3个模块, VTC视频时序控制器模块、TPG视频测试模式发生器模块、用户控制模块。以下给出系统框图,关于VTC视频时序控制器驱动的详细描述请看前面的实验,我们主要学习TPG视频测试模式发生器驱动。

TPG视频测试模式发生器

视频数据的有效区域如下图所示:视频数据在H_AcitiveSize和V_AcitiveSize同时有效时候有效

I_tpg_ck:视频格式的像素时钟

I_tpg_vs:视频格式的场同步信号

I_tpg_hs:视频格式的行同步信号

I_tpg_de:视频格式的有效数据阶段

O_tpg_vs:同I_tpg_vs

O_tpg_hs:同I_tpg_hs

O_tpg_de:同I_tpg_de

O_tpg_data:rgb格式数据输出

计数器模块:

h_cnt计数器模块:I_tpg_de为高电平时,表示有效显示区域阶段,此时h_cnt列计数器开始计数,计数为H_ActiveSize的值。

v_cnt计数器模块:I_tpg_vs拉高表示一帧有效图像数据传输完成,v_cnt置0,否则,I_tpg_hs拉高表示传输完一行有效数据,v_cnt加1。

//h_cnt计数器模块
always @(posedge I_tpg_clk)h_cnt <= I_tpg_de ? h_cnt + 1'b1 : 12'd0; //计数行有效像素,当de无效,重置 h_cnt=0//v_cnt计数器模块
always @(posedge I_tpg_clk)if(I_tpg_vs) //通过vs产生同步复位v_cnt <= 12'd0; //重置v_cnt=0else v_cnt <= ((!tpg_hs_r)&&I_tpg_hs) ? v_cnt + 1'b1 : v_cnt; //hs信号的上升沿,v_cnt计数,这种方式可以不管hs有效是高电平还是低电平的情况,v_cnt 视频垂直方向,行计数器,计数行数量

测试图像产生模块:

使用状态机将我们要显示的所有样式的图形数据列举出来,通过不断累加的dis_mode,为了减慢显示变换图形样式的速度,取dis_mode高位值进行判断该显示何种图形。

黑白格:h_cnt[4]和v_cnt[4]进行“异或”运算,即相同为0,不同为1,再进行条件判断,0显示全黑,1显示全白。

RGB彩条:使用列计数器h_cnt,将有效显示区域划分为9块,分别显示不同的RGB数据。

//显示模式切换
always @(posedge I_tpg_clk)if(I_tpg_rstn==1'b0)dis_mode <= 0;else dis_mode <= ((!tpg_vs_r)&&I_tpg_vs) ? dis_mode + 1'b1 : dis_mode;//grid_data发生器  
always @(posedge I_tpg_clk)begingrid_data <= ((v_cnt[4]==1'b1) ^ (h_cnt[4]==1'b1)) ? 8'h00 : 8'hff; //方格大小16*16,黑白交替
end//RGB彩条发生器
always @(posedge I_tpg_clk)
beginif(h_cnt==260)color_bar   <=  24'hff0000;//红else if(h_cnt==420)color_bar   <=  24'h00ff00;//绿else if(h_cnt==580)color_bar   <=  24'h0000ff;//蓝else if(h_cnt==740)color_bar   <=  24'hff00ff;//紫else if(h_cnt==900)color_bar   <=  24'hffff00;//黄else if(h_cnt==1060)color_bar   <=  24'h00ffff;//青蓝else if(h_cnt==1220)color_bar   <=  24'hffffff;//白else if(h_cnt==1380)color_bar   <=  24'h000000;//黑elsecolor_bar   <=  color_bar;
end//测试图形输出
always @(posedge I_tpg_clk)begincase(dis_mode[10:7])//截取高位,控制切换显示速度4'd0:beginr_reg <= 0; b_reg <= 0;g_reg <= 0;end4'd1:beginr_reg <= 8'b11111111;               //白g_reg <= 8'b11111111;b_reg <= 8'b11111111;end4'd2,4'd3:begin//连续两个状态输出相同图形r_reg <= 8'b11111111;              //红g_reg <= 0;b_reg <= 0;  end           4'd4,4'd5:begin//连续两个状态输出相同图形r_reg <= 0;                         //绿g_reg <= 8'b11111111;b_reg <= 0; end                   4'd6:begin     r_reg <= 0;                         //蓝g_reg <= 0;b_reg <= 8'b11111111;end4'd7,4'd8:begin  //连续两个状态输出相同图形   r_reg <= grid_data;                 //方格g_reg <= grid_data;b_reg <= grid_data;end                   4'd9:begin    r_reg <= h_cnt[7:0];                //水平渐变g_reg <= h_cnt[7:0];b_reg <= h_cnt[7:0];end4'd10,4'd11:begin //连续两个状态输出相同图形r_reg <= v_cnt[7:0];                 //垂直渐变g_reg <= v_cnt[7:0];b_reg <= v_cnt[7:0];end4'd12:begin     r_reg <= v_cnt[7:0];                 //红垂直渐变g_reg <= 0;b_reg <= 0;end4'd13:begin     r_reg <= 0;                          //绿垂直渐变g_reg <= h_cnt[7:0];b_reg <= 0;end4'd14:begin     r_reg <= 0;                          //蓝垂直渐变g_reg <= 0;b_reg <= h_cnt[7:0];            end4'd15:begin     r_reg <= color_bar[23:16];           //彩条g_reg <= color_bar[15:8];b_reg <= color_bar[7:0];            end               endcase
end

2.2 TPG源码

/*******************************MILIANKE*******************************
*Company : MiLianKe Electronic Technology Co., Ltd.
*WebSite:https://www.milianke.com
*TechWeb:https://www.uisrc.com
*tmall-shop:https://milianke.tmall.com
*jd-shop:https://milianke.jd.com
*taobao-shop1: https://milianke.taobao.com
*Create Date: 2019/12/17
*Module Name:rgb_to_hdmi
*File Name:rgb_to_hdmi.v
*Description: 
*The reference demo provided by Milianke is only used for learning. 
*We cannot ensure that the demo itself is free of bugs, so users 
*should be responsible for the technical problems and consequences
*caused by the use of their own products.
*Copyright: Copyright (c) MiLianKe
*All rights reserved.
*Revision: 1.1
*Signal description
*1) I_ input
*2) O_ output
*3) IO_ input output
*3) S_ system internal signal
*3) _n activ low
*4) _dg debug signal 
*5) _r delay or register
*6) _s state mechine
*********************************************************************//*********uitpg(video test Pattern Generator)测试视频发生器***********
--版本号1.1
--以下是米联客设计的uitpg(video test Pattern Generator)测试视频发生器
--1.代码简洁,占用极少逻辑资源,代码结构清晰,逻辑设计严谨
--2.该测试视频发生器通过产生彩条、渐变、纯色、棋方格,产生测试图形
*********************************************************************/`timescale 1ns / 1ns//仿真时间刻度/精度module uitpg
(
input           I_tpg_clk, //系统时钟
input           I_tpg_rstn,//系统复位
input           I_tpg_vs,  //场同步输入
input           I_tpg_hs,  //行同步输入
input           I_tpg_de,  //视频数据有效输入   
output          O_tpg_vs,  //场同步输出
output          O_tpg_hs,  //行同步输出
output          O_tpg_de,  //视频数据有效输出    
output [23:0]   O_tpg_data //有效测试数据
);reg         tpg_vs_r   = 1'b0; //对vs信号寄存
reg         tpg_hs_r   = 1'b0; //对hs信号寄存
reg [7 :0]  grid_data  = 8'd0; //grid棋方格寄存器
reg [23:0]  color_bar  = 24'd0;//RGB 彩条寄存器
reg [10:0]  dis_mode   = 11'd0;//显示模式寄存器
reg [7 :0]  r_reg      = 8'd0; //红寄存器
reg [7 :0]  g_reg      = 8'd0; //绿寄存器
reg [7 :0]  b_reg      = 8'd0; //蓝寄存器always @(posedge I_tpg_clk)begintpg_vs_r <= I_tpg_vs; //对vs信号寄存一次tpg_hs_r <= I_tpg_hs; //对hs信号寄存一次
endreg [11:0]v_cnt = 12'd0; //视频垂直方向,行计数器
reg [11:0]h_cnt = 12'd0; //视频水平方向,列计数器//h_cnt计数器模块
always @(posedge I_tpg_clk)h_cnt <= I_tpg_de ? h_cnt + 1'b1 : 12'd0; //计数行有效像素,当de无效,重置 h_cnt=0//v_cnt计数器模块
always @(posedge I_tpg_clk)if(I_tpg_vs) //通过vs产生同步复位v_cnt <= 12'd0; //重置v_cnt=0else v_cnt <= ((!tpg_hs_r)&&I_tpg_hs) ? v_cnt + 1'b1 : v_cnt; //hs信号的上升沿,v_cnt计数,这种方式可以不管hs有效是高电平还是低电平的情况,v_cnt 视频垂直方向,行计数器,计数行数量//显示模式切换
always @(posedge I_tpg_clk)if(I_tpg_rstn==1'b0)dis_mode <= 0;else dis_mode <= ((!tpg_vs_r)&&I_tpg_vs) ? dis_mode + 1'b1 : dis_mode;//grid_data发生器  
always @(posedge I_tpg_clk)begingrid_data <= ((v_cnt[4]==1'b1) ^ (h_cnt[4]==1'b1)) ? 8'h00 : 8'hff; //方格大小16*16,黑白交替
end//RGB彩条发生器
always @(posedge I_tpg_clk)
beginif(h_cnt==260)color_bar   <=  24'hff0000;//红else if(h_cnt==420)color_bar   <=  24'h00ff00;//绿else if(h_cnt==580)color_bar   <=  24'h0000ff;//蓝else if(h_cnt==740)color_bar   <=  24'hff00ff;//紫else if(h_cnt==900)color_bar   <=  24'hffff00;//黄else if(h_cnt==1060)color_bar   <=  24'h00ffff;//青蓝else if(h_cnt==1220)color_bar   <=  24'hffffff;//白else if(h_cnt==1380)color_bar   <=  24'h000000;//黑elsecolor_bar   <=  color_bar;
end//测试图形输出
always @(posedge I_tpg_clk)begincase(dis_mode[10:7])//截取高位,控制切换显示速度4'd0:beginr_reg <= 0; b_reg <= 0;g_reg <= 0;end4'd1:beginr_reg <= 8'b11111111;               //白g_reg <= 8'b11111111;b_reg <= 8'b11111111;end4'd2,4'd3:begin//连续两个状态输出相同图形r_reg <= 8'b11111111;              //红g_reg <= 0;b_reg <= 0;  end           4'd4,4'd5:begin//连续两个状态输出相同图形r_reg <= 0;                         //绿g_reg <= 8'b11111111;b_reg <= 0; end                   4'd6:begin     r_reg <= 0;                         //蓝g_reg <= 0;b_reg <= 8'b11111111;end4'd7,4'd8:begin  //连续两个状态输出相同图形   r_reg <= grid_data;                 //方格g_reg <= grid_data;b_reg <= grid_data;end                   4'd9:begin    r_reg <= h_cnt[7:0];                //水平渐变g_reg <= h_cnt[7:0];b_reg <= h_cnt[7:0];end4'd10,4'd11:begin //连续两个状态输出相同图形r_reg <= v_cnt[7:0];                 //垂直渐变g_reg <= v_cnt[7:0];b_reg <= v_cnt[7:0];end4'd12:begin     r_reg <= v_cnt[7:0];                 //红垂直渐变g_reg <= 0;b_reg <= 0;end4'd13:begin     r_reg <= 0;                          //绿垂直渐变g_reg <= h_cnt[7:0];b_reg <= 0;end4'd14:begin     r_reg <= 0;                          //蓝垂直渐变g_reg <= 0;b_reg <= h_cnt[7:0];            end4'd15:begin     r_reg <= color_bar[23:16];           //彩条g_reg <= color_bar[15:8];b_reg <= color_bar[7:0];            end               endcase
endassign O_tpg_data = {r_reg,g_reg,b_reg};//测试图形RGB数据输出
assign O_tpg_vs = I_tpg_vs;  //VS同步信号
assign O_tpg_hs = I_tpg_hs;  //HS同步信号
assign O_tpg_de = I_tpg_de;  //DE数据有效信号endmodule

3 RTL仿真

3.1 仿真激励文件

`timescale 1ns / 1ns//仿真时间刻度/精度module video_test_tb;localparam SYS_TIME = 20;//系统时钟周期10nsreg I_vid_rstn,I_vid_clk;
wire O_vid_vs,O_vid_hs,O_vid_de;
wire [7:0]O_rgb_r,O_rgb_g,O_rgb_b;//例化video_test
video_test video_test_inst
(
.I_vid_clk(I_vid_clk),
.I_vid_rstn(I_vid_rstn),
.O_vid_vs(O_vid_vs),
.O_vid_hs(O_vid_hs),
.O_vid_de(O_vid_de),
.O_rgb_r(O_rgb_r),
.O_rgb_g(O_rgb_g),
.O_rgb_b(O_rgb_b)
);//初始化
initial beginI_vid_clk  = 1'b0;I_vid_rstn = 1'b0;#100;//产生100ns的系统复位I_vid_rstn = 1'b1;//复位完成
end
//产生仿真时钟
always #(SYS_TIME/2) I_vid_clk= ~I_vid_clk;endmodule

为简化仿真,这里模拟的视频格式为320*5 即一行的有效数据为350个像素,一帧数据有5行像素数据。

.H_ActiveSize(320),         //视频时间参数,行视频信号,一行有效(需要显示的部分)像素所占的时钟数,一个时钟对应一个有效像素,设置320个像素
.H_FrameSize(320+88+44+239),//视频时间参数,行视频信号,一行视频信号总计占用的时钟数 
.H_SyncStart(320+88),       //视频时间参数,行同步开始,即多少时钟数后开始产生行同步信号
.H_SyncEnd(320+88+44),      //视频时间参数,行同步结束,即多少时钟数后停止产生行同步信号,之后就是行数据有效数据部分
.V_ActiveSize(5),           //视频时间参数,场视频信号,一帧图像所占用的有效(需要显示的部分)行数量,通常说的视频分辨率即H_ActiveSize*V_ActiveSize
.V_FrameSize(5+4+5+28),     //视频时间参数,场视频信号,一帧视频信号总计占用的行数量
.V_SyncStart(5+4),          //视频时间参数,场同步开始,即多少行数后开始产生场同步信号 
.V_SyncEnd (5+4+5)          //视频时间参数,场同步结束,即多少行数后停止产生场同步信号,之后就是场有效数据部分

3.2 仿真结果

相关文章:

[米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-22 TPG图像测试数据发生器设计

软件版本&#xff1a;Anlogic -TD5.9.1-DR1_ES1.1 操作系统&#xff1a;WIN10 64bit 硬件平台&#xff1a;适用安路(Anlogic)FPGA 实验平台&#xff1a;米联客-MLK-L1-CZ06-DR1M90G开发板 板卡获取平台&#xff1a;https://milianke.tmall.com/ 登录“米联客”FPGA社区 ht…...

如何通过企业微信会话存档保护企业利益?

赵总: 张经理&#xff0c;最近行业内频发数据泄露事件&#xff0c;我们的客户资料和内部沟通记录安全吗&#xff1f; 张经理: 赵总&#xff0c;我们已经采取了一系列措施来加强数据安全。特别是针对企业微信的沟通记录&#xff0c;我们最近引入了安企神软件&#xff0c;它能很…...

git修改提交姓名

git config --global user.name “新用户名” git config --global user.email “新邮箱地址” 修改提交的用户名 git config --global user.name “yu***”...

5、在共享内存无指针编程:句柄HANDLE转换为指针

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 共享内存里面不能用指针&#…...

hive动态分区导致xceivercount超限,hdfs无法创建新连接

目录 一、事件复盘&#xff1a; 二、解决方案&#xff1a; 三、讨论 一、事件复盘&#xff1a; hdfs无法创建新的文件&#xff0c;xceivercount超过最大设置&#xff0c;平时每个datanode只有100个左右的连接&#xff0c;突然达到8000以上。 事故原因&#xff0c;跨多天的…...

如何识别Android init 中的缓慢操作

Android 14 开机时间优化措施汇总-CSDN博客 Android 14 开机时间优化措施-CSDN博客根据systrace报告优化系统时需要关注的指标和优化策略-CSDN博客Android系统上常见的性能优化工具-CSDN博客Android上如何使用perfetto分析systrace-CSDN博客Android系统设置kernel log level的…...

JVM:常用工具总结

文章目录 一、jstat工具 一、jstat工具 Jstat工具是JDK自带的一款监控工具&#xff0c;可以提供各种垃圾回收、类加载、编译信息等不同的数据。使用方法为&#xff1a;jstat -gc进程ID每次统计的时间间隔&#xff08;毫秒&#xff09;统计次数。 C代表Capacity容量&#xff0c…...

二染色,CF 1594D - The Number of Imposters

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1594D - The Number of Imposters 二、解题报告 1、思路分析 并查集&…...

Go语言并发编程-Channel通信_2

Channel通信 Channel概述 不要通过共享内存的方式进行通信&#xff0c;而是应该通过通信的方式共享内存 这是Go语言最核心的设计模式之一。 在很多主流的编程语言中&#xff0c;多个线程传递数据的方式一般都是共享内存&#xff0c;而Go语言中多Goroutine通信的主要方案是Cha…...

Richteck立锜科技电源管理芯片简介及器件选择指南

一、电源管理简介 电源管理组件的选择和应用本身的电源输入和输出条件是高度关联的。 输入电源是交流或直流&#xff1f;需求的输出电压比输入电压高或是低&#xff1f;负载电流多大&#xff1f;系统是否对噪讯非常敏感&#xff1f;也许系统需要的是恒流而不是稳压 (例如 LED…...

Socket 简介与 Java Socket 编程示例

Socket&#xff08;套接字&#xff09;是网络通信中的一个关键概念&#xff0c;它是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。 一、定义与概念 基本概念&#xff1a;Socket可以被视为网络环境中进程间通信的API&#xff08;应用程序编程接口&#xff09;&…...

跟着操作,解决iPhone怎么清理内存难题

在如今智能手机功能日益强大的时代&#xff0c;我们使用手机拍照、录制视频、下载应用、存储文件等操作都会占用手机内存。当内存空间不足时&#xff0c;手机运行会变得缓慢&#xff0c;甚至出现卡顿、闪退等现象。因此&#xff0c;定期清理iPhone内存是非常必要的。那么&#…...

React、Vue的password输入框组件,如何关闭自动填充?

有时候我们的表单使用了一个password组件&#xff0c;这时候每次打开新建&#xff0c;都会自动获取浏览器缓存的密码&#xff0c;但是它的上一个input输入框并不是用户名&#xff0c;这时候我们希望我们的表单&#xff0c;每次点开的时候密码是空的&#xff0c;让用户自动输入&…...

HTML+JS+CSS计算练习

可填 题目数量 数字范围 计算符号 题目做完后会弹窗提示正确率、用时 效果图 源代码在图片后面 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevic…...

设计模式使用场景实现示例及优缺点(行为型模式——责任链模式)

在一个遥远的森林深处&#xff0c;有一个和谐的动物王国。这个王国里的动物们都有各自的职责&#xff0c;大家相互合作&#xff0c;共同维护着森林的和平与繁荣。 一天&#xff0c;森林里来了一只迷路的小兔子&#xff0c;她焦急地四处张望&#xff0c;不知道该怎么办。于是&am…...

CSS-1_0 CSS和文档流

文章目录 CSS和文档流如何证明这个流的存在呢&#xff1f;流和display番外&#xff1a;inline-block 碎碎念 CSS和文档流 首先什么叫流呢&#xff1f; 通常来说&#xff0c;我们最终看到的网页是HTML文档中定义的各个元素挨个输出的结果&#xff0c;这种一个接一个输出的方式…...

小程序图片下载保存方法,图片源文件保存!

引言 现在很多时候我们在观看到小程序中的图片的时候&#xff0c;想保存图片的原文件格式的话&#xff0c;很多小程序是禁止保存的&#xff0c;即使是让保存的话&#xff0c;很多小程序也会限制不让保存原文件&#xff0c;只让保存一些分辨率很低的&#xff0c;非常模糊的图片…...

新书速览|深入理解Hive:从基础到高阶:视频教学版

《深入理解Hive&#xff1a;从基础到高阶&#xff1a;视频教学版》 本书内容 《深入理解Hive:从基础到高阶:视频教学版》采用“理论实战”的形式编写&#xff0c;通过大量的实例&#xff0c;结合作者多年一线开发实战经验&#xff0c;全面地介绍Hive的使用方法。《深入理解Hiv…...

钡铼Profinet、EtherCAT、Modbus、MQTT、Ethernet/IP、OPC UA分布式IO系统BL20X系列耦合器

BL20X系列耦合器是钡铼技术开发的一款用于分布式I/O系统的设备&#xff0c;专为工业环境下的高速数据传输和远程设备控制而设计&#xff0c;支持多种工业以太网协议&#xff0c;包括Profinet、EtherCAT、Modbus、MQTT、Ethernet/IP和OPC UA等。如果您正在考虑部署BL20X系列耦合…...

Git分支合并以及分支部分合并 提交记录合并

Git分支合并,以及分支部分合并,提交记录合并 最近工作中用到git分支合并的场景,记录一下. 分支整体合并,合并所有记录 仅合并分支部分代码...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

算法打卡第18天

从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7…...

[USACO23FEB] Bakery S

题目描述 Bessie 开了一家面包店! 在她的面包店里&#xff0c;Bessie 有一个烤箱&#xff0c;可以在 t C t_C tC​ 的时间内生产一块饼干或在 t M t_M tM​ 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC​,tM​≤109)。由于空间…...

WebRTC调研

WebRTC是什么&#xff0c;为什么&#xff0c;如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...

CSS3相关知识点

CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...

大数据驱动企业决策智能化的路径与实践

&#x1f4dd;个人主页&#x1f339;&#xff1a;慌ZHANG-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 一、引言&#xff1a;数据驱动的企业竞争力重构 在这个瞬息万变的商业时代&#xff0c;“快者胜”的竞争逻辑愈发明显。企业如何在复杂环…...

初探用uniapp写微信小程序遇到的问题及解决(vue3+ts)

零、关于开发思路 (一)拿到工作任务,先理清楚需求 1.逻辑部分 不放过原型里说的每一句话,有疑惑的部分该问产品/测试/之前的开发就问 2.页面部分(含国际化) 整体看过需要开发页面的原型后,分类一下哪些组件/样式可以复用,直接提取出来使用 (时间充分的前提下,不…...

【字节拥抱开源】字节团队开源视频模型 ContentV: 有限算力下的视频生成模型高效训练

本项目提出了ContentV框架&#xff0c;通过三项关键创新高效加速基于DiT的视频生成模型训练&#xff1a; 极简架构设计&#xff0c;最大化复用预训练图像生成模型进行视频合成系统化的多阶段训练策略&#xff0c;利用流匹配技术提升效率经济高效的人类反馈强化学习框架&#x…...