FPGA实现CameraLink视频解码转SDI输出,基于LVDS+GTX架构,提供2套工程源码和技术支持

目录

  • 1、前言
    • 工程概述
    • 免责声明
  • 2、CameraLink协议理论学习
  • 3、相关方案推荐
    • 我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目
    • FPGA实现CameraLink视频编解码方案
    • 本博已有的 SDI 编解码方案
  • 4、工程详细设计方案
    • 工程设计原理框图
    • 输入CameraLink相机
    • LVDS视频解码模块
    • LVDS视频对齐
    • Video In To AXI4-Stream
    • VDMA视频缓存
    • RGB转BT1120
    • SMPTE SD/HD/3G SDI IP核
    • GTX 串化
    • LMH1218RTWR 驱动器
    • SDI转HDMI盒子
    • 工程源码架构
  • 5、Vivado工程详解1详解:Kintex7-325T版本
  • 6、Vivado工程详解2详解:Zynq7045版本
  • 7、工程移植说明
    • vivado版本不一致处理
    • FPGA型号不一致处理
    • 其他注意事项
  • 8、上板调试验证
    • 准备工作
    • FPGA解码CameraLink视频转SDI输出效果演示
  • 9、工程代码获取

FPGA实现CameraLink视频解码转SDI输出,基于LVDS+GTX架构,提供2套工程源码和技术支持

1、前言

FPGA实现CameraLink视频解码现状:

FPGA实现CameraLink视频解码目前有两种方案:
一是使用专用编芯片解码,比如典型的DS90CR287,优点是简单快捷,缺点是需要额外的芯片,导致PCB布线难度加大,系统成本上升;另一种方案是使用FPGA逻辑资源实现编解码,其中7系列FPGA使用ISERDES2原语实现解串,UltraScale系列FPGA使用ISERDES3原语实现解串,优点是充分利用了FPGA资源,系统设计简单,成本更低,缺点是实现难度大,对FPGA工程师水平要求较高;本设计使用7系列FPGA的ISERDES2原语实现CameraLink视频解码;

FPGA实现SDI视频解码现状:

目前FPGA实现SDI视频编解码有两种方案:一是使用专用编解码芯片,比如典型的接收器GS2971,发送器GS2972,优点是简单,比如GS2971接收器直接将SDI解码为并行的YCrCb422,GS2972发送器直接将并行的YCrCb422编码为SDI视频,缺点是成本较高,可以百度一下GS2971和GS2972的价格;另一种方案是使用FPGA逻辑资源部实现SDI编解码,利用Xilinx系列FPGA的GTP/GTX/GTH/GTY等资源实现解串,利用Xilinx系列FPGA的SMPTE UHD-SDI资源实现SDI编解码,优点是合理利用了FPGA资源,GT高速接口资源不用白不用,缺点是操作难度大一些,对FPGA开发者的技术水平要求较高。有意思的是,这两种方案在本博这里都有对应的解决方案,包括硬件的FPGA开发板、工程源码等等。本设计使用Xilinx GTX高速接口资源;

工程概述

本文详细描述了FPGA实现CameraLink视频解码的设计方案;输入视频为CameraLink相机,相机为Base模式;CameraLink相机LVDS视频对首先送入纯verilog代码实现的LVDS接收解码模块实现LVDS视频解码,输出并行视频数据,LVDS接收解码模块需要用到Xilinx ISERDES2原语;然后解码视频送入纯verilog代码实现的LVDS视频对齐模块实现视频时序恢复,根据CameraLink协议和相机数据手册将并行视频数据恢复为Native视频时序,提取出行同步信号、长同步信号、数据有效信号和视频像素数据;然后调用Xilinx官方的Video In To AXI4-Stream IP核将Native视频流转换为AXI4-Stream视频流;然后调用Xilinx官方的VDMA IP核视频图像缓存,缓存方案为3帧缓存,缓存介质为DDR3颗粒;然后缓存视频从DDR3中读出,调用Xilinx官方的AXI4-Stream To Video Out IP核将AXI4-Stream视频流转换为Native视频流;然后Native视频流送入入纯verilog代码实现的RGB转BT1120模块实现视频格式转换;然后BT1120视频进入Xilinx官方的SMPTE SD/HD/3G SDI IP核,进行SDI视频编码操作并输出SDI视频;然后并行的SDI视频经过Xilinx官方的GTX高速资源,实现并行数据到高速串行的转换,本博称之为串化;然后差分高速信号再进入板载的LMH1218RTWR芯片实现差分转单端和驱动增强的功能;最后SDI视频通过FPGA开发板的BNC座子输出,通过同轴线连接到SDI转HDMI盒子连接到HDMI显示器;整个工程需要用到MicroBlaze或Zynq软核做相关IP配置和相关IC配置;针对市场主流需求,本博客提供2套工程源码,具体如下:
在这里插入图片描述
现对上述2套工程源码做如下解释,方便读者理解:

工程源码1

开发板FPGA型号为Xilinx–>Kintex7–325T–xc7k325tffg676-2;输入视频为CameraLink工业相机,相机为Base模式,输出分辨率为2448x2050@15Hz,输出灰度图,输出为1-Tap模式,即一个像素时钟输出1个像素,像素时钟频率80M Hz;CameraLink相机LVDS视频对首先送入纯verilog代码实现的LVDS接收解码模块实现LVDS视频解码,输出并行视频数据,LVDS接收解码模块需要用到Xilinx ISERDES2原语;然后解码视频送入纯verilog代码实现的LVDS视频对齐模块实现视频时序恢复,根据CameraLink协议和相机数据手册将并行视频数据恢复为Native视频时序,提取出行同步信号、长同步信号、数据有效信号和视频像素数据;然后调用Xilinx官方的Video In To AXI4-Stream IP核将Native视频流转换为AXI4-Stream视频流;然后调用Xilinx官方的VDMA IP核视频图像缓存,缓存方案为3帧缓存,缓存介质为DDR3颗粒;然后缓存视频从DDR3中读出,调用Xilinx官方的AXI4-Stream To Video Out IP核将AXI4-Stream视频流转换为Native视频流;然后Native视频流送入入纯verilog代码实现的RGB转BT1120模块实现视频格式转换;然后BT1120视频进入Xilinx官方的SMPTE SD/HD/3G SDI IP核,进行SDI视频编码操作并输出3G-SDI视频,分辨率为1920x1080@60Hz;然后并行的SDI视频经过Xilinx官方的GTX高速资源,实现并行数据到高速串行的转换,本博称之为串化;然后差分高速信号再进入板载的LMH1218RTWR芯片实现差分转单端和驱动增强的功能;最后SDI视频通过FPGA开发板的BNC座子输出,通过同轴线连接到SDI转HDMI盒子连接到HDMI显示器;整个工程需要用到MicroBlaze软核做相关IP配置和相关IC配置;由此形成FPGA+CameraLink+SDI的高端架构;该工程适用于CameraLink视频转换卡应用;

工程源码2

开发板FPGA型号为Xilinx–>Zynq7045–xc7z045ffg900-2;输入视频为CameraLink工业相机,相机为Base模式,输出分辨率为2448x2050@15Hz,输出灰度图,输出为1-Tap模式,即一个像素时钟输出1个像素,像素时钟频率80M Hz;CameraLink相机LVDS视频对首先送入纯verilog代码实现的LVDS接收解码模块实现LVDS视频解码,输出并行视频数据,LVDS接收解码模块需要用到Xilinx ISERDES2原语;然后解码视频送入纯verilog代码实现的LVDS视频对齐模块实现视频时序恢复,根据CameraLink协议和相机数据手册将并行视频数据恢复为Native视频时序,提取出行同步信号、长同步信号、数据有效信号和视频像素数据;然后调用Xilinx官方的Video In To AXI4-Stream IP核将Native视频流转换为AXI4-Stream视频流;然后调用Xilinx官方的VDMA IP核视频图像缓存,缓存方案为3帧缓存,缓存介质为DDR3颗粒;然后缓存视频从DDR3中读出,调用Xilinx官方的AXI4-Stream To Video Out IP核将AXI4-Stream视频流转换为Native视频流;然后Native视频流送入入纯verilog代码实现的RGB转BT1120模块实现视频格式转换;然后BT1120视频进入Xilinx官方的SMPTE SD/HD/3G SDI IP核,进行SDI视频编码操作并输出3G-SDI视频,分辨率为1920x1080@60Hz;然后并行的SDI视频经过Xilinx官方的GTX高速资源,实现并行数据到高速串行的转换,本博称之为串化;然后差分高速信号再进入板载的LMH1218RTWR芯片实现差分转单端和驱动增强的功能;最后SDI视频通过FPGA开发板的BNC座子输出,通过同轴线连接到SDI转HDMI盒子连接到HDMI显示器;整个工程需要用到Zynq软核做相关IP配置和相关IC配置;由此形成FPGA+CameraLink+SDI的高端架构;该工程适用于CameraLink视频转换卡应用;

本文详细描述了FPGA解码CameraLink视频转SDI输出的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的高速接口领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

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

2、CameraLink协议理论学习

关于这部分,网上有很多博主解释过,我找了几篇推荐学习理论知识:
博客链接如下:
点击直接前往
你也可以去网上通过其他途径免费学习CameraLink协议,在学了CameraLink协议基础上看本工程源码能更快理解吸收;

3、相关方案推荐

我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目

其实一直有朋友反馈,说我的博客文章太多了,乱花渐欲迷人,自己看得一头雾水,不方便快速定位找到自己想要的项目,所以本博文置顶,列出我目前已有的所有项目,并给出总目录,每个项目的文章链接,当然,本博文实时更新。。。以下是博客地址:
点击直接前往

FPGA实现CameraLink视频编解码方案

我的CameraLink视频专栏有很多FPGA的CaeraLink视频编解码方案,既有CaeraLink接收,也有CaeraLink发送,既有CaeraLink普通输出显示,也有CaeraLink视频拼接输出等等,专栏链接如下:欢迎前往查看:
点击直接前往

本博已有的 SDI 编解码方案

我的博客主页开设有SDI视频专栏,里面全是FPGA编解码SDI的工程源码及博客介绍;既有基于GS2971/GS2972的SDI编解码,也有基于GTP/GTX资源的SDI编解码;既有HD-SDI、3G-SDI,也有6G-SDI、12G-SDI等;专栏地址链接如下:
点击直接前往

4、工程详细设计方案

工程设计原理框图

工程设计原理框图如下:
在这里插入图片描述

输入CameraLink相机

输入视频为CameraLink工业相机,相机为Base模式,输出分辨率为2448x2050@15Hz,输出灰度图,输出为1-Tap模式,即一个像素时钟输出1个像素,像素时钟频率80M Hz;CameraLink相机如下:
在这里插入图片描述

LVDS视频解码模块

本设计参考了Xilinx官方设计,基于ISERDES2原语实现的LVDS解码模块对输入的CameraLink视频进行解码;LVDS视频解码模块设计框图如下:
在这里插入图片描述
LVDS视频解码模块输入为随路差分时钟对和LVDS差分数据对;利用Xilinx官方IDELAY和ISERDES原语实现串并转换;模块总体代码架构如下:
在这里插入图片描述
IDELAY原语用于接收延时,保证接收端视频的稳定性;ISERDES2原语用于串并转换,将输入串行差分数据转换为并行数据;此外,LVDS解串视频还需要做对齐处理,随路时钟也需要通过MMCM输出同步处理;整个LVDS视频解码模块严格按照设计框图实现,解码模块顶层接口如下:
在这里插入图片描述
Block Design设计中,直接将LVDS视频解码模块顶层拖入Block Design中形成自定义IP,方便调用和使用,如下:
在这里插入图片描述
双击LVDS视频解码模块的自定义IP,可以看到配置参数如下:
在这里插入图片描述
这两个参数可自由配置,以适应CameraLink相机的不同模式;具体配置如下:
在这里插入图片描述

LVDS视频对齐

调用LVDS视频对齐模块,根据CameraLink视频协议提取出行同步信号、场同步信号、数据有效信号和像素数据;模块总体代码架构如下:
在这里插入图片描述
模块顶层接口如下:
在这里插入图片描述
Block Design设计中,直接将CameraLink视频恢复模块顶层拖入Block Design中形成自定义IP,方便调用和使用,如下:
在这里插入图片描述

Video In To AXI4-Stream

调用Xilinx官方的Video In To AXI4-Stream IP核将Bayer视频转换为 AXI4-Stream视频流;Block Design中如下:
在这里插入图片描述
需要注意的是,Base模式下,相机1个像素时钟输出2个像素;
需要注意的是,Full模式下,相机1个像素时钟输出8个像素;
在IP配置时需要针对性配置,具体请参考工程;

VDMA视频缓存

LVDS解码后的视频转为Xilinx的AXI4-Sream的视频流,经VDMA送入DDR3做4帧缓存,VDMA在Block Design中如下:
在这里插入图片描述
需要注意的是,输入VDMA的视频数据位宽只有8位,是Bayer格式图像,在IP配置时需要针对性配置,具体请参考工程;此外,VDMA需要调用MicroBlaze或Zynq软核运行SDK来配置;

RGB转BT1120

在SDI输出方式下需要使用该模块;RGB转BT1200模块的作用是将用户侧的RGB视频转换为BT1200视频输出给SMPTE SD/HD/3G SDI IP核;RGB转BT1120模块由RGB888转YUV444模块、YUV444转YUV422模块、SDI视频编码模块、数据嵌入模块组成,该方案参考了Xilinx官方的设计;BT1120转RGB模块代码架构如下:
在这里插入图片描述
RGB转BT1120在Block Design中如下:
在这里插入图片描述

SMPTE SD/HD/3G SDI IP核

SMPTE SD/HD/3G SDI IP核是Xilinx系列FPGA特有的用于SDI视频编解码的IP,该IP配置使用非常简单,vivado的UI界面如下:
在这里插入图片描述
SMPTE SD/HD/3G SDI IP核必须与GTX配合才能使用,对于SDI视频接收而言,该IP接收来自于GTX的数据,然后将SDI视频解码为BT1120视频输出,对于SDI视频发送而言,该IP接收来自于用户侧的的BT1120视频数据,然后将BT1120视频编码为SDI视频输出;该方案参考了Xilinx官方的设计;SMPTE SD/HD/3G SDI IP核代码架构如下:
在这里插入图片描述

GTX 串化

本设计使用Xilinx特有的GTX高速信号处理资源实现SDI差分视频信号的解串与串化,对于SDI视频接收而言,GTX起到解串的作用,即将输入的高速串行的差分信号解为并行的数字信号;对于SDI视频发送而言,GTX起到串化的作用,即将输入的并行的数字信号串化为高速串行的差分信号;GTX的使用一般需要例化GTX IP核,通过vivado的UI界面进行配置,但本设计需要对SD-SDI、HD-SDI、3G-SDI视频进行自动识别和自适应处理,所以需要使得GTX具有动态改变线速率的功能,该功能可通过DRP接口配置,也可通过GTX的rate接口配置,所以不能使用vivado的UI界面进行配置,而是直接例化GTX的GTXE2_CHANNEL和GTXE2_COMMON源语直接使用GTX资源;此外,为了动态配置GTX线速率,还需要GTX控制模块,该模块参考了Xilinx的官方设计方案,具有动态监测SDI模式,动态配置DRP等功能;该方案参考了Xilinx官方的设计;GTX 解串与串化模块代码架构如下:
在这里插入图片描述

LMH1218RTWR 驱动器

LMH1218RTWR芯片实现差分转单端和增强驱动的功能,这里选用LMH1218RTWR是因为借鉴了了Xilinx官方的方案,当然也可以用其他型号器件。LMH1218RTWR驱动器原理图如下:
在这里插入图片描述

SDI转HDMI盒子

在SDI输出方式下需要使用到SDI转HDMI盒子,因为我手里的显示器没有SDI接口,只有HDMI接口,为了显示SDI视频,只能这么做,当然,如果你的显示器有SDI接口,则可直接连接显示,我的SDI转HDMI盒子在某宝购买,不到100块;

工程源码架构

提供2套工程源码,以工程源码1为例,工程Block Design设计如下:
在这里插入图片描述
提供2套工程源码,以工程源码1为例,综合后的工程源码架构如下:
在这里插入图片描述
提供2套工程源码,以工程源码1为例,工程源码需要运行MicroBlaze软核,用于相关IP配置和相关IC配置;SDK工程架构如下:
在这里插入图片描述
需要注意的是,在SDK工程中,我们将所有子函数都放在了主函数里,并提供了详细的中文注释和使用方法注释,用户可根据注释快速理解和使用;不懂的可以问我;如果你打开后注释显示乱码,请将SDK字符设置为国标;

本博主发布的工程均已编译完成,且时序收敛,无时序违约,如下:
在这里插入图片描述

5、Vivado工程详解1详解:Kintex7-325T版本

开发板FPGA型号:Xilinx–>Kintex7–325T–xc7k325tffg676-2;
FPGA开发环境:Vivado2019.1;
输入:CameraLink相机,Base模式,分辨率2448x2050@15Hz,输出灰度图;
输出:3G-SDI,RTL逻辑编码,分辨率为1920x1080@60Hz;
CameraLink视频解码方案:Xilinx官方ISERDES2原语LVDS解码方案;
LVDS差分对:4对差分数据+1对随路差分时钟;
图像缓存方案:Xilinx官方VDMA+DDR3颗粒,3帧缓存;
SDI视频解串方案:Xilinx–GTX高速接口解串;
SDI视频解码方案:Xilinx–SMPTE SD/HD/3G-SDI 解码;
实现功能:FPGA解码CameraLink视频转SDI输出;
工程作用:此工程目的是让读者掌握FPGA解码CameraLink视频转SDI输出的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

6、Vivado工程详解2详解:Zynq7045版本

开发板FPGA型号:Xilinx–>Zynq7045–xc7z045ffg900-2;
FPGA开发环境:Vivado2019.1;
输入:CameraLink相机,Base模式,分辨率2448x2050@15Hz,输出灰度图;
输出:3G-SDI,RTL逻辑编码,分辨率为1920x1080@60Hz;
CameraLink视频解码方案:Xilinx官方ISERDES2原语LVDS解码方案;
LVDS差分对:4对差分数据+1对随路差分时钟;
图像缓存方案:Xilinx官方VDMA+DDR3颗粒,3帧缓存;
SDI视频解串方案:Xilinx–GTX高速接口解串;
SDI视频解码方案:Xilinx–SMPTE SD/HD/3G-SDI 解码;
实现功能:FPGA解码CameraLink视频转SDI输出;
工程作用:此工程目的是让读者掌握FPGA解码CameraLink视频转SDI输出的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

7、工程移植说明

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软核;

8、上板调试验证

准备工作

需要准备的器材如下:
CameraLink相机,可以找本博主提供;
CameraLink转接板,可以找本博主提供;
SDI转接板,可以找本博主提供;
FPGA开发板,没有开发板可以找本博主提供;
SDI转HDMI盒子;
HDMI显示器和HDMI线缆,这个很常见,自备即可;

FPGA解码CameraLink视频转SDI输出效果演示

FPGA解码CameraLink视频转SDI输出效果演示如下:

FPGA实现CameraLink转SDI,工程源码分享

9、工程代码获取

工程代码如下:
在这里插入图片描述

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

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

相关文章

户外人像要怎么拍 ?

前言: ” 接上篇,培养你的眼力 - 摄影构图,本文是整理自《美国纽约摄影学院 摄影教材》,第三单元 - 第9课 - 自然光,课后习题及解答。“ 1. 正面光产生无深浅反差的平面感觉。 理解这题,首先得明白什么是…

华为云Flexus+DeepSeek征文 | 华为云 ModelArts Studio 赋能高情商AI聊天助手:用技术构建有温度的智能对话体验

前言 华为云 ModelArts Studio 是基于 ModelArts 构建的一站式大模型即服务平台(MaaS),可通过与开源 Agent 框架 Dify.AI 结合来开发对接 AI 聊天助手。 在打造 “高情商” 特性的过程中,华为云ModelArts Studio 的自定义提示词…

Spring Boot属性配置方式

一、Spring Boot属性配置方式。 在编写完成后端程序之前,可以通过yml配置文件键值对的方式修改配置环境,一旦打包完成,再次修改yml配置文件较为麻烦,此时,可以使用以下配置方式: 1.命令行参数方式 …

Webpack原理剖析与实现

1. 整体架构设计 Webpack 5 的整体架构设计包括以下几个核心模块: Compiler:负责整个编译过程,从读取配置、解析模块、生成依赖图,到输出最终的打包结果,主要文件是 lib/Compiler.js 。 Compilation:代表一次编译过程,包括所有模块、依赖关系和编译结果,主要文件是 li…

【Python使用】嘿马python运维开发全体系教程第2篇:日志管理,Linux概述【附代码文档】

教程总体简介:网络设定 学习目标 1、手动设定 2、DHCP自动获取 系统基本优化 一、永久关闭SELinux 1. 永久关闭 二、关闭防火墙 2. 临时启动关闭防火墙 三、设定运行级别为3(命令行模式) 四、修改ssh端口号 ssh服务 一、ssh介绍 二、客户端远…

Hibernate报No Dialect mapping for JDBC type 1111(APP)

文章目录 环境症状问题原因解决方案报错编码 环境 系统平台:Linux x86-64 Red Hat Enterprise Linux 7 版本:4.5 症状 客户应用中报错No Dialect mapping for JDBC type 1111。 问题原因 客户使用Hibernate,实体类的中设置的数据类型与数…

【数据分析】环境数据降维与聚类分析教程:从PCA到可视化

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍教程内容数据预处理主成分分析(PCA)聚类分析可视化分析结果提取簇特征教程目的加载R包数据下载导入数据数据预处理主成分分析(PCA)计算相关矩阵绘制相关矩阵热图执行PCA可视化…

mac 安装python,切换python版本

一、安装多版本的PYTHON 在macOS上,你可以通过Homebrew包管理器安装多个版本的Python 安装Homebrew 首先,如果你的macOS上没有安装Homebrew,需要先进行安装。打开终端(Terminal)并输入以下命令: /bin/b…

AMD图形和计算架构:RNDA

AMD图形和计算架构:RNDA AMD RDNA 是 AMD 为显卡(GPU)设计的 图形和计算架构,专为高性能游戏、实时渲染和并行计算优化。目前已经迭代到 RDNA 3(如 RX 7000 系列显卡),与 NVIDIA 的 RTX 系列和…

ubuntu20.04配置go环境

下载go语言安装包 下载地址: All releases - The Go Programming Language 解压安装包 tar xfz go1.17.linux-amd64.tar.gz -C /usr/local 配置环境变量 编辑配置文件 vim ~/.bashrc # go env export GOROOT/usr/local/go export GOPATH$HOME/software/go ex…

Monorepo+Pnpm+Turborepo

以下是关于 Monorepo pnpm Workspace Turborepo 的详细解析,涵盖核心概念、技术优势、配置实践及协作机制,结合行业最佳实践总结。 一、Monorepo 的核心价值 Monorepo(单一仓库)指多个项目/模块共享同一代码库的管理模式&#…

【Springai】 2指定模型的三种方式(Ollama)

Springai 指定模型的三种方式(Ollama) 在实际开发中,Ollama 支持三种常用的模型指定方式: 1. 从 yml 配置读取默认模型 注意: 这是最基础、最推荐的方式,必须先配置好才能用自动注入的 OllamaChatModel。…

python | numpy小记(四):理解 NumPy 中的 `np.round`:银行家舍入策略

python | numpy小记(四):理解 NumPy 中的 np.round:银行家舍入策略 一、函数签名与参数说明二、“银行家舍入”策略三、基础示例四、与 Python 内建 round 的异同五、使用注意事项六、扩展用法:自定义舍入策略七、总结…

shell脚本定时执行收集Oracle大表的日分区及创建分区本地索引

近期业务上了一张大表,每日新增分区,每日分区数据量为3千万行。根据每日分区创建分区本地索引。同事添加定时收集前一日每日分区统计信息。 1、创建分区本地索引 (分区索引数量需要和分区name数量一致) create index nmld.add_event_occur_time on nmld.esa_event (occur…

使用 Spread.net将 Excel 中的文本拆分为多段

引言: 在 .NET 应用程序中处理 Excel 数据时,常常会碰到需要把文本拆分成多段的情况。例如在数据清洗、数据分析等场景下,将长文本按照特定规则拆分为多段能让数据更便于处理和分析。Spread.NET作为一款强大的 .NET 电子表格组件&#xff0c…

QT实现一个三轴位移台的控制界面

文章目录 0 引入1、圆形转盘2、其他3、引用 0 引入 本来想做一个酷炫的3D位移台控制程序,要有一个类似遥控器手柄那种界面,在网上找了半天也没有,想要有那种效果还要用异性按钮做,迫在眉睫的情况下,使用了自己的方法&…

Java 案例 6 - 数组篇(基础)

数组的平均值、最大(小)值。数组的反转 需求:开发一个程序。假设班级有8名学生,用户可以录入8名学生的Java成绩,成绩类型是小数,并输出平均分,最高分和最低分。 import java.util.Scanner; …

Java外观模式实现方式与测试方法

一、外观模式的实现方式 外观模式的核心是通过封装复杂子系统的调用逻辑,为客户端提供一个统一的简单接口。以下是实现步骤及示例: 定义子系统类 子系统类负责实现具体功能,与外观类解耦。例如,家庭影院系统中的投影仪、音响等组…

《解锁AudioSet:开启音频分析的无限可能》

音频新时代的 “密钥”:AudioSet 登场 在科技飞速发展的今天,音频作为信息传播与交互的关键媒介,早已渗透到现代科技的各个角落。从智能手机中的语音助手,让我们通过简单的语音指令就能查询信息、发送消息,到智能家居系…

50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | ThemeClock(主题时钟)

&#x1f4c5; 我们继续 50 个小项目挑战&#xff01;—— ThemeClock组件 仓库地址&#xff1a;https://github.com/SunACong/50-vue-projects 项目预览地址&#xff1a;https://50-vue-projects.vercel.app/ 使用 Vue 3 的 Composition API 和 <script setup> 语法结…