FPGA UltraScale GTY 全网最细讲解,aurora 8b/10b编解码,HDMI视频传输,提供vivado工程源码和技术支持

目录

  • 1、前言
    • 免责声明
  • 2、我这里已有的 GT 高速接口解决方案
  • 3、详细设计方案
    • 设计框图
    • 视频源选择
    • ADV7611解码芯片配置及采集
    • 动态彩条
    • 视频数据组包
    • UltraScale GTY 全网最细解读
      • UltraScale GTY 基本结构
      • UltraScale GTY 参考时钟的选择和分配
      • UltraScale GTY 发送和接收处理流程
      • UltraScale GTY 发送接口
      • UltraScale GTY 接收接口
      • UltraScale GTY IP核调用和使用
    • 数据对齐
    • 视频数据解包
    • SFP光口回环选择
    • 图像输出架构
  • 4、vivado工程详解
  • 5、工程移植说明
    • vivado版本不一致处理
    • FPGA型号不一致处理
    • 其他注意事项
  • 6、上板调试验证
    • 准备工作
    • 静态演示
    • 动态演示
  • 7、福利:工程代码的获取

FPGA UltraScale GTY 全网最细讲解,aurora 8b/10b编解码,HDMI视频传输,提供vivado工程源码和技术支持

1、前言

没玩过GT资源都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。GT资源是Xilinx系列FPGA的重要卖点,也是做高速接口的基础,不管是PCIE、SATA、MAC等,都需要用到GT资源来做数据高速串化和解串处理,Xilinx不同的FPGA系列拥有不同的GT资源类型,低端的A7由GTP,K7有GTX,V7有GTH,更高端的U+系列还有GTY等,他们的速度越来越高,应用场景也越来越高端。。。UltraScale GTH 适用于Xilinx UltraScale Plus 系列的FPGA上,包括Virtex UltraScale Plus、Kintex UltraScale Plus、Zynq® UltraScale Plus 等器件,在UltraScale 系列之下只有 UltraScale GTH,而UltraScale GTY相比于GTH,线速率更高,支持协议类型更多,功耗更低,带宽更高。。。

本文使用Xilinx的Kirtex UltraScale+系列的xcku5p-ffvb676-1-i型号FPGA 的UltraScale GTY资源做aurora 8b/10b编解码视频传输实验,视频源有两种,分别对应开发者手里的开发板有没有HDMI输入接口的情况,一种是使用笔记本电脑模拟HDMI视频,板载的ADV7611芯片将输入的HDMI视频解码为GRB后供FPGA使用;如果你的开发板有没有HDMI输入接口,或者你的开发板HDMI输入解码芯片不是ADV7611,则可使用代码内部生成的动态彩条模拟摄像头视频;视频源的选择通过代码顶层的define COLOR_TEST 宏定义选择,上电默认使用HDMI输入作为视频源;FPGA采集到谁视频后,首先会送入数据组包模块对视频进行打包,并加上以字符BC为基础的控制帧头和帧尾以及其他标志符;然后调用Xilinx官方的UltraScale GTY IP核,并配置为aurora 8b/10b编解码模式,线速率配置为5G;然后通过板载的SFP光口将8b/10b编码后的视频进行回环后板子后接收,板载有两个SFP光口,可以使用1个SFP光口做回环,也可以使用两个SFP光口做回环,代码里通过define SFP_0_LOOP宏定义选择,上电默认使用1个SFP光口做回环;再用UltraScale GTY做8b/10b解码处理;然后将数据送入数据对齐模块进行对齐处理;然后将数据送入数据解包模块去掉帧头帧尾并恢复视频时序;为了方便起见,这里没有再对视频进行缓存,而是直接调用Xilinx官方的Video In to AXI4-Stream、Video Timing Controller、AXI4-Stream to Video Out三个IP将视频简单缓存后送入纯verilog代码实现的HDMI发送模块,将RGB视频转换为HDMI视频,最后输出显示器显示;

本博客提供1套vivado工程源码,通过代码里的两个 define 宏定义可组成4种不同的收发模式;详情如下:

模式1:宏定义选择  COLOR_TEST,  宏定义选择  SFP_0_LOOP,  动态彩条输入,  使用1个SFP光口回环,HDMI输出;
模式2:宏定义选择  COLOR_TEST,  宏定义不选择SFP_0_LOOP,  动态彩条输入,  使用2个SFP光口回环,HDMI输出;
模式3:宏定义不选择COLOR_TEST,  宏定义选择  SFP_0_LOOP,  HDMI输入   ,  使用1个SFP光口回环,HDMI输出;
模式4:宏定义不选择COLOR_TEST,  宏定义不选择SFP_0_LOOP,  HDMI输入   ,  使用2个SFP光口回环,HDMI输出;

本博客详细描述了Xilinx的Kirtex UltraScale+系列的xcku5p-ffvb676-1-i型号FPGA 的UltraScale GTY资源做aurora 8b/10b编解码视频传输实验的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网等等),若大佬们觉得有所冒犯,请私信批评教育;基于此,本工程及其源码仅限于读者或粉丝个人学习和研究,禁止用于商业用途,若由于读者或粉丝自身原因用于商业用途所导致的法律问题,与本博客及博主无关,请谨慎使用。。。

2、我这里已有的 GT 高速接口解决方案

我的主页有FPGA GT 高速接口专栏,该专栏有 GTP 、 GTX 、 GTH 、 GTY 等GT 资源的视频传输例程和PCIE传输例程,其中 GTP基于A7系列FPGA开发板搭建,GTX基于K7或者ZYNQ系列FPGA开发板搭建,GTH基于KU或者V7系列FPGA开发板搭建,GTY基于KU+系列FPGA开发板搭建;以下是专栏地址:
点击直接前往

3、详细设计方案

本文使用Xilinx的Kirtex UltraScale+系列的xcku5p-ffvb676-1-i型号FPGA 的UltraScale GTY资源做aurora 8b/10b编解码视频传输实验,视频源有两种,分别对应开发者手里的开发板有没有HDMI输入接口的情况,一种是使用笔记本电脑模拟HDMI视频,板载的ADV7611芯片将输入的HDMI视频解码为GRB后供FPGA使用;如果你的开发板有没有HDMI输入接口,或者你的开发板HDMI输入解码芯片不是ADV7611,则可使用代码内部生成的动态彩条模拟摄像头视频;视频源的选择通过代码顶层的define COLOR_TEST 宏定义选择,上电默认使用HDMI输入作为视频源;FPGA采集到谁视频后,首先会送入数据组包模块对视频进行打包,并加上以字符BC为基础的控制帧头和帧尾以及其他标志符;然后调用Xilinx官方的UltraScale GTY IP核,并配置为aurora 8b/10b编解码模式,线速率配置为5G;然后通过板载的SFP光口将8b/10b编码后的视频进行回环后板子又接收,板载有两个SFP光口,可以使用1个SFP光口做回环,也可以使用两个SFP光口做回环,代码里通过define SFP_0_LOOP宏定义选择,上电默认使用1个SFP光口做回环;再用UltraScale GTY做8b/10b解码处理;然后将数据送入数据对齐模块进行对齐处理;然后将数据送入数据解包模块去掉帧头帧尾并恢复视频时序;为了方便起见,这里没有再对视频进行缓存,而是直接调用Xilinx官方的Video In to AXI4-Stream、Video Timing Controller、AXI4-Stream to Video Out三个IP将视频简单缓存后送入纯verilog代码实现的HDMI发送模块,将RGB视频转换为HDMI视频,最后输出显示器显示;

设计框图

工程详细设计方案框图如下:
在这里插入图片描述
框图解释:箭头表示数据流向,箭头内文字表示数据格式,箭头外数字表示数据流向的步骤;

视频源选择

视频源有两种,分别对应开发者手里的开发板有没有HDMI输入接口的情况,一种是使用笔记本电脑模拟HDMI视频,ADV7611芯片将输入的HDMI视频解码为GRB后供FPGA使用;如果你的开发板有没有HDMI输入接口,或者你的开发板HDMI输入解码芯片不是ADV7611,则可使用代码内部生成的动态彩条模拟摄像头视频;视频源的选择通过代码顶层的define宏定义进行,默认使用HDMI输入作为视频源;视频源的选择通过代码顶层的`define宏定义进行;如下:
代码位于顶层system_wrapper.v;
在这里插入图片描述
选择逻辑代码部分如下:
在这里插入图片描述
选择逻辑如下:
当(注释) define COLOR_TEST时,输入源视频是HDMI输入;
当(不注释) define COLOR_TEST时,输入源视频是动态彩条;

ADV7611解码芯片配置及采集

第二套工程使用ADV7611解码输入的HDMI视频,适应板载ADV7611解码芯片的FPGA开发板;ADV7611解码芯片需要i2c配置才能使用,ADV7611解码芯片配置及采集这两部分均用verilog代码模块实现,代码中配置为1920x1080分辨率;代码位置如下:
在这里插入图片描述
代码中配置为1920x1080分辨率;

动态彩条

动态彩条可配置为不同分辨率的视频,视频的边框宽度,动态移动方块的大小,移动速度等都可以参数化配置,我这里配置为辨率1920x1080,动态彩条模块代码位置和顶层接口和例化如下:
在这里插入图片描述
在这里插入图片描述

视频数据组包

由于视频需要在UltraScale GTY中通过aurora 8b/10b协议收发,所以数据必须进行组包,以适应aurora 8b/10b协议标准;视频数据组包模块代码位置如下:
在这里插入图片描述
首先,我们将16bit的视频存入FIFO中,存满一行时就从FIFO读出送入GTY发送;在此之前,需要对一帧视频进行编号,也叫作指令,GTY组包时根据固定的指令进行数据发送,GTY解包时根据固定的指令恢复视频的场同步信号和视频有效信号;当一帧视频的场同步信号上升沿到来时,发送一帧视频开始指令 0,当一帧视频的场同步信号下降沿到来时,发送一帧视频开始指令 1,视频消隐期间发送无效数据 0 和无效数据 1,当视频有效信号到来时将每一行视频进行编号,先发送一行视频开始指令,在发送当前的视频行号,当一行视频发送完成后再发送一行视频结束指令,一帧视频发送完成后,先发送一帧视频结束指令 0,再发送一帧视频结束指令 1;至此,一帧视频则发送完成,这个模块不太好理解,所以我在代码里进行了详细的中文注释,需要注意的是,为了防止中文注释的乱序显示,请用notepad++编辑器打开代码;指令定义如下:

32'h55_00_00_bc    一帧视频开始指令032'h55_00_01_bc    一帧视频开始指令132'h55_00_02_bc    无效数据032'h55_00_03_bc    无效数据132'h55_00_04_bc    一行视频开始指令;
32'h55_00_05_bc    一行视频结束指令;
32'h55_00_06_bc    一帧视频结束指令032'h55_00_07_bc    一帧视频结束指令1

指令可以任意更改,但最低字节必须为bc;

UltraScale GTY 全网最细解读

关于UltraScale GTY 介绍最详细的肯定是Xilinx官方的《ug578-UltraScale Architecture GTY Transceivers》,我们以此来解读:《ug578-UltraScale Architecture GTY Transceivers》的PDF文档我已放在了资料包里,文章末尾有获取方式;
我用到的开发板FPGA型号为Kirtex UltraScale+系列的xcku5p-ffvb676-1-i型号;UltraScale GTY 的收发速度为 500 Mb/s 到 30.5 Gb/s 之间,比UltraScale GTH高出一倍;UltraScale GTY 收发器支持不同的串行传输接口或协议,比如 PCIE 1.1/2.0 接口、万兆网 XUAI 接口、OC-48、串行 RapidIO 接口、 SATA(Serial ATA) 接口、数字分量串行接口(SDI)等等;
工程调用UltraScale GTY 做aurora 8b/10b协议的数据编解码,代码位置如下:
在这里插入图片描述
UltraScale GTY 基本配置如下:板载差分晶振125M,线速率配置为5G,协议类型被指为aurora 8b/10b;
在这里插入图片描述

UltraScale GTY 基本结构

在 Ultrascale/Ultrascale+架构系列的 FPGA 中,GTY 高速收发器通常使用 Quad 来划分,一个 Quad 由四个GTYE3/4_CHANNEL 原语和一个 GTYE3/4_COMMON 原语组成。每个 GTYE3/4_COMMON 中包含两个 LC-tank pll
(QPLL0 和 QPLL1)。只有在应用程序中使用 QPLL 时,才需要实例化 GTYE3/4_COMMON。下图为UltraScale GTY 收发器示意图:《ug578-UltraScale Architecture GTY Transceivers》第15页;
在这里插入图片描述
每个 GTYE3/4_CHANNEL 由一个 channel PLL(CPLL)、一个 transmitter,和一个 receiver 组成。一个参考时钟可以直接连接到一个 GTYE3/4_CHANNEL 原语,而不需要实例化 GTYE3/4_COMMON,如下图:
《ug578-UltraScale Architecture GTY Transceivers》第22页;
在这里插入图片描述

Ultrascale GTY 收发器的发送端和接收端功能是相互独立,都是由 Physical Media Attachment(物理媒介适配层 PMA)和Physical Coding Sublayer(物理编码子层 PCS)组成。PMA 内部集成了串并转换(PISO)、预加重、接收均衡、时钟发生器和时钟恢复等;PCS 内部集成了 8b/10b 编解码、弹性缓冲区、通道绑定和时钟修正等,每个 GTHE3/4_CHANNEL源语的逻辑电路如下图所示:《ug578-UltraScale Architecture GTY Transceivers》第17页;
在这里插入图片描述
这里说多了意义不大,因为没有做过几个大的项目是不会理解这里面的东西的,对于初次使用或者想快速使用者而言,更多的精力应该关注IP核的调用和使用,后面我也会重点将到IP核的调用和使用;

UltraScale GTY 参考时钟的选择和分配

UltraScale 器件中的 GTY 收发器提供了不同的参考时钟输入选项。参考时钟选择架构支持 QPLL0、QLPLL1 和CPLL。从架构上讲,每个 Quad 包含四个 GTHE3/4_CHANNEL 原语,一个 GTHE3/4_COMMON 原语,两个专用的外部参考时钟引脚对,以及专用的参考时钟路由。如果使用到了高性能 QPLL,则必须实例化 GTHE3/4_COMMON,如下面 GTHE3/4_COMMON 时钟多路复用器结构的详细视图所示,(《ug576-ultrascale-gth-transceivers》第33页)在一个 Quad 中有 6 个参考时钟引脚对,两个本地参考时钟引脚对:GTREFCLK0或GTREFCLK1,两个参考时钟引脚对来自上面的两个Quads:GTSOUTHREFCLK0或 GTSOUTHREFCLK1,两个参考时钟引脚对来自下面的两个 Quads: GTNORTHREFCLK0 或GTNORTHREFCLK1。《ug578-UltraScale Architecture GTY Transceivers》第31页;
在这里插入图片描述

UltraScale GTY 发送和接收处理流程

首先用户逻辑数据经过 8B/10B 编码后,进入一个发送缓存区(Phase Adjust FIFO),该缓冲区主要是 PMA 子层和 PCS 子层两个时钟域的时钟隔离,解决两者时钟速率匹配和相位差异的问题,最后经过高速 Serdes 进行并串转换(PISO),有必要的话,可以进行预加重(TX Pre-emphasis)、后加重。值得一提的是,如果在 PCB 设计时不慎将 TXP 和 TXN 差分引脚交叉连接,则可以通过极性控制(Polarity)来弥补这个设计错误。接收端和发送端过程相反,相似点较多,这里就不赘述了,需要注意的是 RX 接收端的弹性缓冲区,其具有时钟纠正和通道绑定功能。这里的每一个功能点都可以写一篇论文甚至是一本书,所以这里只需要知道个概念即可,在具体的项目中回具体用到,还是那句话:对于初次使用或者想快速使用者而言,更多的精力应该关注IP核的调用和使用。

UltraScale GTY 发送接口

《ug578-UltraScale Architecture GTY Transceivers》的第101到181页详细介绍了发送处理流程,其中大部分内容对于用户而言可以不去深究,因为手册讲的基本都是他自己的设计思想,留给用户可操作的接口并不多,基于此思路,我们重点讲讲UltraScale GTY 例化时留给用户的发送部分需要用到的接口;
在这里插入图片描述
用户只需要关心发送接口的时钟和数据即可,UltraScale GTY 例化模块的这部分接口如下:该文件名为gty_aurora_example_wrapper.v,例化IP后由官方自动生成;
在这里插入图片描述
在这里插入图片描述
在代码中我已为你们重新绑定并做到了模块的顶层,代码部分如下:
该文件名为gty_aurora_example_top.v;例化了官方的gty_aurora_example_wrapper.v;
在这里插入图片描述

UltraScale GTY 接收接口

《ug578-UltraScale Architecture GTY Transceivers》的第183到316页详细介绍了发送处理流程,其中大部分内容对于用户而言可以不去深究,因为手册讲的基本都是他自己的设计思想,留给用户可操作的接口并不多,基于此思路,我们重点讲讲UltraScale GTY 例化时留给用户的发送部分需要用到的接口;
在这里插入图片描述
用户只需要关心发送接口的时钟和数据即可,UltraScale GTY 例化模块的这部分接口如下:该文件名为gty_aurora_example_wrapper.v,例化IP后由官方自动生成;
在这里插入图片描述
在这里插入图片描述
在代码中我已为你们重新绑定并做到了模块的顶层,代码部分如下:
该文件名为gty_aurora_example_top.v;例化了官方的gty_aurora_example_wrapper.v;
在这里插入图片描述

UltraScale GTY IP核调用和使用

在这里插入图片描述
UltraScale GTY 基本配置如下:板载差分晶振125M,线速率配置为5G,协议类型被指为aurora 8b/10b;
在这里插入图片描述
具体配置参考vivado工程,在IP配置好后,需要打开example工程,并将里面的文件复制出来作为自己的工程中使用,不过在我的工程中已经做好了这一步;打开example工程方法如下:
在这里插入图片描述

数据对齐

由于GT资源的aurora 8b/10b数据收发天然有着数据错位的情况,所以需要对接受到的解码数据进行数据对齐处理,数据对齐模块代码位置如下:
在这里插入图片描述
我定义的 K 码控制字符格式为:XX_XX_XX_BC,所以用一个rx_ctrl 指示数据是否为 K 码 的 COM 符号;

rx_ctrl = 4'b0000 表示 4 字节的数据没有 COM 码;
rx_ctrl = 4'b0001 表示 4 字节的数据中[ 7: 0] 为 COM 码;
rx_ctrl = 4'b0010 表示 4 字节的数据中[15: 8] 为 COM 码;
rx_ctrl = 4'b0100 表示 4 字节的数据中[23:16] 为 COM 码;
rx_ctrl = 4'b1000 表示 4 字节的数据中[31:24] 为 COM 码;

基于此,当接收到有K码时就对数据进行对齐处理,也就是将数据打一拍,和新进来的数据进行错位组合,这是FPGA的基础操作,这里不再赘述;

视频数据解包

数据解包是数据组包的逆过程,代码位置如下:
在这里插入图片描述
UltraScale GTY 解包时根据固定的指令恢复视频的场同步信号和视频有效信号;这些信号是作为后面图像缓存的重要信号;至此,数据进出GTX部分就已经讲完了;

SFP光口回环选择

板载有两个SFP光口,可以使用1个SFP光口做回环,也可以使用两个SFP光口做回环,代码里通过define SFP_0_LOOP宏定义选择,上电默认使用1个SFP光口做回环;代码部分如下:
代码位于uiAurora_8b10b_vid.v;
在这里插入图片描述
在这里插入图片描述
选择逻辑如下:
当(注释) define SFP_0_LOOP时,选择2个SFP光口回环;
当(不注释) define COLOR_TEST时,选择1个SFP光口回环;

图像输出架构

为了方便起见,这里没有再对视频进行缓存,而是直接调用Xilinx官方的Video In to AXI4-Stream、Video Timing Controller、AXI4-Stream to Video Out三个IP将视频简单缓存后送入纯verilog代码实现的HDMI发送模块,将RGB视频转换为HDMI视频,最后输出显示器显示;这里需要注意的是,纯verilog代码实现的HDMI发送模块适用于UltraScale PLUS系列FPGA,因为使用的原语变了,UltraScale PLUS使用不同于7系列FPGA原语;

4、vivado工程详解

开发板FPGA型号:Xilinx–Kirtex UltraScale+系列的xcku5p-ffvb676-1-i;
开发环境:Vivado2022.2;
输入:HDMI或者动态彩条,分辨率1920x1080@60Hz;
输出:HDMI显示器;
应用:FPGA UltraScale GTY aurora 8b/10b编解码 HDMI视频传输;
工程Block Design如下:
在这里插入图片描述
工程代码架构如下:
在这里插入图片描述
综合编译完成后的FPGA资源消耗和功耗预估如下:
在这里插入图片描述

5、工程移植说明

vivado版本不一致处理

1:如果你的vivado版本与本工程vivado版本一致,则直接打开工程;
2:如果你的vivado版本低于本工程vivado版本,则需要打开工程后,点击文件–>另存为;但此方法并不保险,最保险的方法是将你的vivado版本升级到本工程vivado的版本或者更高版本;
在这里插入图片描述
3:如果你的vivado版本高于本工程vivado版本,解决如下:
在这里插入图片描述
打开工程后会发现IP都被锁住了,如下:
在这里插入图片描述
此时需要升级IP,操作如下:
在这里插入图片描述
在这里插入图片描述

FPGA型号不一致处理

如果你的FPGA型号与我的不一致,则需要更改FPGA型号,操作如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
更改FPGA型号后还需要升级IP,升级IP的方法前面已经讲述了;

其他注意事项

1:由于每个板子的DDR不一定完全一样,所以MIG IP需要根据你自己的原理图进行配置,甚至可以直接删掉我这里原工程的MIG并重新添加IP,重新配置;
2:根据你自己的原理图修改引脚约束,在xdc文件中修改即可;
3:纯FPGA移植到Zynq需要在工程中添加zynq软核;

6、上板调试验证

准备工作

FPGA开发板;
笔记本电脑,你的板子没有HDMI输入接口可以选择动态彩条;
SFP光口模块及光纤;
连接光纤,板子上电,下载bit;
工程1:1路SFP传输的光纤接法如下:
在这里插入图片描述
工程2:2路SFP传输的光纤接法如下:
在这里插入图片描述

静态演示

下面以2路SFP传输为例展示HDMI输入后的输出效果:
当UltraScale GTY 运行5线速率时输出如下:
在这里插入图片描述
动态彩条输出效果:
当UltraScale GTY 运行5G线速率时输出如下:
在这里插入图片描述

动态演示

录制了一个动态彩条输出的小视频,输出动态演示如下:

V7-GTH-COLOR

7、福利:工程代码的获取

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:
在这里插入图片描述

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

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

相关文章

Datawhale聪明办法学Python(task2Getting Started)

一、课程基本结构 课程开源地址:课程简介 - 聪明办法学 Python 第二版 章节结构: Chapter 0 安装 InstallationChapter 1 启航 Getting StartedChapter 2 数据类型和操作 Data Types and OperatorsChapter 3 变量与函数 Variables and FunctionsChapte…

微积分-三角函数

三角函数 在处理微积分问题时,我们不可避免的会遇到三角函数。学会三角函数对于微积分是非常重要的。 基本知识 学习三角函数我们需要先学习一些基本知识。 首先要学习的是弧度的概念。弧度是一种角的度量单位,用于测量角的大小。它是根据角所对的弧长…

羊大师解答,羊奶的中医奇妙之处

羊奶素有“润肺之宝”之称,中医学认为它有着独特的作用和价值。羊奶不仅可以滋润肺部,还能保护肺脏免受外界侵害。在中医理论中,肺为人体之“金”,意味着肺具有极其重要的地位。正常肺气血充足,可以维持人体的正常生理…

Linux --绘制地图投影出现报错:无法成功下载地图背景数据

Linux --绘制地图投影出现报错:无法成功下载地图背景数据 主要原因是由于使用学院集群,该集群无法连接外网,在使用cartopy绘制地图投影时,导致无法成功加载地图背景数据解决方法也很简单,自己手动下载所需要的地形数据…

华清远见嵌入式学习——QT——作业4

作业要求&#xff1a; 代码运行效果图&#xff1a; 代码&#xff1a; 头文件&#xff1a; #ifndef ALARMCLOCK_H #define ALARMCLOCK_H#include <QWidget> #include <QTimerEvent> #include <QTimer> #include <QTime> #include <QTextToSpeech&g…

Github仓库远程操作——简单版

Github远程操作 github仓库简单的远程操作&#xff0c;更多复杂的功能请参考github官方文档 标题 Github远程操作添加公钥到githubGithub仓库远程操作 远程操作之前&#xff0c;先添加本地的公钥到github 添加公钥到github 创建本地ssh公私钥&#xff1a;使用powershell或者gi…

静态HTTP应用的未来趋势与展望

随着互联网的快速发展&#xff0c;静态HTTP应用作为一种简单、快速和安全的Web应用形式&#xff0c;已经得到了广泛的应用。然而&#xff0c;随着技术的不断进步和创新&#xff0c;静态HTTP应用也在不断发展和变化。下面&#xff0c;我们就来谈谈静态HTTP应用的未来趋势和展望。…

PHP+MySQL组合开发众筹系统源码:在线支付+消息通知+完整的代码包 附带完整的搭建教程

互联网的普及和发展&#xff0c;众筹作为一种新型的融资方式&#xff0c;逐渐受到越来越多人的关注和认可。众筹系统作为实现众筹业务的核心工具&#xff0c;其开发和应用对于推动众筹行业的发展具有重要意义。罗峰来给大家分享一款基于PHPMySQL组合开发的众筹系统源码&#xf…

软件测试--selenium安装使用

安装selenium不少人使用pip命令来安装selenium&#xff0c;辛辛苦苦安装完之后&#xff0c;还是不能使用。所以我们可以是直接使用编译器&#xff0c;pycharm直接安装selenium扩展包。 file中点击settings 在Settings中点击Project Interpreter,点击加号就可以安装各种需要的扩…

SD卡无法读取怎么办?详细解决方法分享!

“我的sd卡用了很久&#xff0c;但是不知道为什么无法读取了&#xff0c;尝试了很多种方法我都无法读取到里面的数据。我有很重要的文件保存在里面&#xff0c;想问问有什么方法可以帮助我快速解决这个问题吗&#xff1f;” SD卡是一种非常常用的存储设备&#xff0c;可以用于存…

2023 巅峰之作 | AIGC、AGI、GhatGPT、人工智能大语言模型的崛起与挑战

文章目录 01 《ChatGPT 驱动软件开发》内容简介 02 《ChatGPT原理与实战》内容简介 03 《神经网络与深度学习》04 《AIGC重塑教育》内容简介 05 《通用人工智能》目  录 2023年是人工智能大语言模型大爆发的一年&#xff0c;一些概念和英文缩写也在这一年里集中出现&#xff…

leetcode-24-两两交换链表中的节点(C语言实现)

题目&#xff1a; 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4] 输出&…

详细了解云堡垒机的作用,提高企业数据信息安全

随着上云企业的不断增加&#xff0c;云上数据安全性成为企业面临的重要问题。为了保障企业的核心数据安全&#xff0c;越来越多的企业采购了云堡垒机来提升数据安全性。今天我们就来详细了解一下云堡垒机的作用&#xff0c;以及如何提高企业数据安全。 一、云堡垒机定义 云堡垒…

Python从入门到精通八:Python文件操作

文件的编码 思考&#xff1a;计算机只能识别&#xff1a;0和1&#xff0c;那么我们丰富的文本文件是如何被计算机识别&#xff0c;并存储在硬盘中呢&#xff1f; 答案&#xff1a;使用编码技术&#xff08;密码本&#xff09;将内容翻译成0和1存入。 编码技术即&#xff1a;…

Redux Toolkit(RTK)在React tsx中的使用

一个需求: header组建中有一个搜索框,然后这个搜索框在其他页面路由上都可以使用:例如这两个图共用顶部的搜索框; 我之前的做法就是组建传值, 在他们header 组建和 PageA ,B 的父级组件上定一个值,然后顶部变化传到父级组件,在从父级组件传到page组件,有点繁琐,现在说一下利用…

纯干货,activiti入门看这一篇就够了‼️‼️

纯干货&#xff0c;activiti入门看这一篇就够了‼️‼️ 详细讲解了一个activiti流程的从生到死&#xff0c;及每个节点数据库表的变化 文章目录 &#x1f4d5;一、编写流程文件&#x1f5a5;️二、部署流程&#x1f516; 三、启动刚刚部署的流程生成流程实例&#x1f9e3; 四…

SpringCloud系列(二)| Nacos的安装与配置

Nacos是阿里巴巴提供的一个开源的可作为注册中心和配置中心的SpringCloud组件。 Nacos/nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称;一个更易于构 建云原生应用的动态服务发现、配置管理和服务管理平台。 简单来说Nacos有两个核心功能&#xff0c…

大负载工作时电池电压掉落,主控MCU正常工作的保护电路

主要作用是保护系统在大负载时&#xff0c;系统不因此不掉电&#xff0c;导致主控重启. 1 引入电路的原因&#xff1a; 电池供电方案&#xff0c;在中低压时系统大负载这时整个系统的供电会被拉掉落&#xff0c;不同电池的掉落情况不一&#xff0c;但都存在掉落低于主控…

HarmonyOS第一课ArkTS开发语言(TypeScript快速入门)

编程语言介绍 ArkTS是HarmonyOS优选的主力应用开发语言。它在TypeScript&#xff08;简称TS&#xff09;的基础上&#xff0c;匹配ArkUI框架&#xff0c;扩展了声明式UI、状态管理等相应的能力&#xff0c;让开发者以更简洁、更自然的方式开发跨端应用。要了解什么是ArkTS&…

HTML如何使用图片链接

文章目录 图片链接的使用常见图片类型PNGJPGGIFBMP 图片链接的使用 在 HTML 中&#xff0c;图像由 标签定义。 是空标签&#xff0c;意思是说&#xff0c;它只包含属性&#xff0c;并且没有闭合标签。 语法&#xff1a; <img src”图片路径" title“鼠标悬浮在图片上…