FPGA实战:手把手教你实现HDMI的TMDS编码

FPGA实现HDMI接口 HDMI( High-Definition Multimedia Interface),即高清多媒体接口。它能够,简化了设备的接口和连线;同时提供了更高的数据传输带宽, 可以传输无压缩的数字音频及高分辨率视频信号。HDMI 接口在物理层使用 TMDS 标准传输音视频数据。 阅读详情

1. HDMI与TMDS编码基础

HDMI接口现在随处可见,从家里的电视到电脑显示器都在用。但很多人可能不知道,这个小小的接口背后藏着不少技术门道。今天我就来聊聊怎么用FPGA实现HDMI的核心编码技术——TMDS编码。

简单来说,HDMI就是一条线能同时传视频和音频,而且画质还特别清晰。它的全称是“高清晰度多媒体接口”,听起来挺高大上,但其实理解起来并不难。就像我们用快递寄东西需要打包一样,HDMI传输数据前也需要“打包”,这个打包的过程就是TMDS编码。

TMDS是“最小化传输差分信号”的缩写,它的主要任务就是把原始的视频数据转换成适合长距离传输的信号。为什么要转换呢?因为原始的视频数据直接传输很容易受到干扰,就像在大街上大声喊话,距离远了就听不清了。TMDS编码就像是给数据加了层保护罩,让它们能安全到达目的地。

在实际的HDMI系统中,数据被分成三个通道传输:蓝色通道、绿色通道和红色通道,正好对应图像的三个颜色分量。每个通道都要独立进行编码,这样才能保证传输的效率和质量。此外还有一个专门的时钟通道,用来确保发送端和接收端步调一致,不会出现数据对不上的情况。

理解这些基础概念很重要,因为后续的编码过程都是建立在这个框架上的。如果你之前接触过VGA接口,可以把HDMI想象成VGA的升级版——传输的数据更多更快,画质更好,而且一根线就搞定视频和音频。

2. TMDS编码原理详解

TMDS编码的核心思想很巧妙:既要减少信号跳变的次数,又要保证0和1的数量大致平衡。这么说可能有点抽象,我来打个比方。假设你要用摩斯电码发送消息,肯定会选择那种长短组合最有效率的方式,既不会太耗时间,又能准确传达信息。TMDS编码也是类似的思路。

编码过程分为两个关键步骤:最小跳变和直流平衡。最小跳变是为了降低电磁干扰,就像开车时尽量平稳驾驶,避免急刹车和猛加速。数据在传输时,如果0和1频繁跳变,就会产生更多的电磁辐射,可能干扰其他设备。TMDS通过智能的编码方式,让信号跳变尽可能少。

具体怎么实现呢?编码器会先统计输入数据中1的个数。如果1比较多,就采用一种编码方式;如果0比较多,就采用另一种方式。这样就能找到跳变最少的编码方案。这个过程就像打包行李时,你会根据物品的形状选择最节省空间的摆放方式。

直流平衡则是为了防止信号基线漂移。如果长时间传输的数据中1比0多很多,或者反过来,接收端可能就无法准确识别信号了。TMDS编码会实时统计0和1的数量差,必要时通过数据翻转来保持平衡。这就好比在走钢丝时,要通过不断调整身体重心来保持平衡。

控制信号的编码又不一样。当DE(数据使能)信号为低时,表示当前传输的是控制信号而不是像素数据。控制信号有固定的编码格式,包括行同步、场同步等信号。这些信号虽然只占很小一部分时间,但对图像的正常显示至关重要。

3. FPGA实现方案选择

用FPGA实现HDMI输出有两种主流方案:硬件法和软件法。硬件法简单粗暴,就是使用专门的HDMI发送芯片,比如ADV7513这类芯片。FPGA只需要把原始视频数据喂给芯片,剩下的编码和发送工作都由芯片完成。这种方法的优点是开发简单,基本上按照芯片手册接线和配置就能用。

但硬件法有个明显缺点:需要额外的芯片,增加了成本和电路板面积。而且这些芯片通常需要配置一堆寄存器,通过I2C或者SPI接口,调试起来也挺麻烦的。最重要的是,用了专用芯片就学不到TMDS编码的核心技术了,这不符合我们学习的目的。

所以我更推荐软件法,也就是完全用FPGA的逻辑资源来实现TMDS编码。这种方法虽然开发难度大一些,但性价比高,而且能让你真正理解HDMI的工作原理。现在主流FPGA的逻辑资源都足够实现TMDS编码器,比如Xilinx的Spartan系列或者Altera的Cyclone系列都能胜任。

在实际项目中,我通常会用Verilog来编写编码器模块。Verilog的并行处理特性特别适合这种数据流处理任务,三个颜色通道可以并行编码,大大提高处理效率。而且用FPGA实现还有个好处:可以根据实际需求灵活调整,比如支持不同的分辨率或者色彩深度。

这里分享一个实际项目的经验:当时我们需要同时输出两路HDMI信号,如果使用专用芯片成本就翻倍了。后来用FPGA实现,只增加了很少的逻辑资源就搞定了第二路输出。这就是软件法的优势所在——灵活性高,复用性强。

4. Verilog编码实现详解

现在我们来深入看看TMDS编码器的Verilog实现。首先需要定义模块的输入输出接口:像素时钟、复位信号、8位输入数据、两个控制信号c0和c1、数据使能信号de,以及10位的编码输出。

module TMDS_Encoder(
    input clk,        // 像素时钟,通常74.25MHz或148.5MHz
    input rst_n,      // 低电平有效的复位信号
    input [7:0] din,  // 8位输入像素数据
    input c0,         // 控制信号0(行同步)
    input c1,         // 控制信号1(场同步) 
    input de,         // 数据使能信号
    output reg [9:0] dout // 10位编码输出
);

第一步是统计输入数据中1的个数。这个统计很重要,因为它决定了后续采用哪种编码方式:

reg [3:0] n1d;  // 用于统计8bit数据中1的个数
reg [7:0] din_q; // 输入数据同步寄存器

always @(posedge clk) begin
    din_q <= din;
    n1d <= din[0] + din[1] + din[2] + din[3] + 
           din[4] + din[5] + din[6] + din[7];
end

接下来是根据1的个数决定使用异或还是同或操作。这是个关键决策点:

wire use_Xnor;
assign use_Xnor = (n1d > 4) || (n1d == 4 && din_q[0] == 0);

wire [8:0] q_m;
assign q_m[0] = din_q[0];

genvar i;
generate
    for (i = 1; i < 8; i = i + 1) begin : gen_q_m
        assign q_m[i] = use_Xnor ? ~(q_m[i-1] ^ din_q[i]) : 
                                 (q_m[i-1] ^ din_q[i]);
    end
endgenerate

assign q_m[8] = use_Xnor ? 1'b0 : 1'b1;

在实际调试中,我发现这个决策逻辑对编码效率影响很大。最初版本没有考虑din_q[0]的情况,导致某些特定数据模式的编码效率不高。后来参考了官方标准文档,才完善了这个判断条件。

5. 直流平衡实现技巧

直流平衡是TMDS编码的第二个重要步骤。它的目的是让传输的数据中0和1的数量保持大致平衡,避免信号基线漂移。实现这个功能需要实时统计0和1的数量差,并根据情况决定是否翻转数据。

首先需要统计9位中间数据中1和0的个数:

reg [3:0] n1q_m, n0q_m;

always @(posedge clk) begin
    n1q_m <= q_m[0] + q_m[1] + q_m[2] + q_m[3] + 
             q_m[4] + q_m[5] + q_m[6] + q_m[7];
    n0q_m <= 8 - (q_m[0] + q_m[1] + q_m[2] + q_m[3] + 
                 q_m[4] + q_m[5] + q_m[6] + q_m[7]);
end

然后使用一个计数器来跟踪累积的0-1数量差。这个计数器需要有符号数,因为差值可能是正的也可能是负的:

reg signed [4:0] cnt; // 1和0的数量差统计

wire is_equal, is_worse;
assign is_equal = (cnt == 0) || (n1q_m == n0q_m);
assign is_worse = (!cnt[4] && (n1q_m > n0q_m)) || 
                 (cnt[4] && (n1q_m < n0q_m));

在实际项目中,这个计数器的位宽需要仔细考虑。位宽太小可能导致溢出,位宽太大又浪费资源。经过测试,5位有符号数对于大多数应用场景都足够了。

最后根据平衡状态决定输出数据是否翻转:

always @(posedge clk) begin
    if (de_reg[1]) begin
        if (is_equal) begin
            // 保持原样或轻微调整
            dout[9] <= ~q_m_reg[8];
            dout[8] <= q_m_reg[8];
            dout[7:0] <= q_m_reg[8] ? q_m_reg[7:0] : ~q_m_reg[7:0];
            cnt <= q_m_reg[8] ? (cnt + n1q_m - n0q_m) : 
                              (cnt + n0q_m - n1q_m);
        end else if (is_worse) begin
            // 需要翻转
            dout[9] <= 1'b1;
            dout[8] <= q_m_reg[8];
            dout[7:0] <= ~q_m_reg[7:0];
            cnt <= cnt + {q_m_reg[8], 3'b0} + (n0q_m - n1q_m);
        end else begin
            // 其他情况
            dout[9] <= 1'b0;
            dout[8] <= q_m_reg[8];
            dout[7:0] <= q_m_reg[7:0];
            cnt <= cnt - {~q_m_reg[8], 3'b0} + (n1q_m - n0q_m);
        end
    end
end

6. 控制信号处理

控制信号的处理相对简单,但也很重要。当DE信号为低时,表示当前传输的是控制信号而不是像素数据。HDMI标准定义了4种控制信号组合,每种都有对应的10位编码。

首先定义控制信号的编码值:

parameter CTL0 = 10'b1101010100;
parameter CTL1 = 10'b0010101011; 
parameter CTL2 = 10'b0101010100;
parameter CTL3 = 10'b1010101011;

这些参数值是HDMI标准规定的,不能随意更改。在实际使用中,最常用的是CTL0和CTL1,分别对应不同的同步信号组合。

控制信号的处理需要与数据信号同步,通常使用流水线寄存器来实现时序对齐:

reg [1:0] de_reg;
reg [1:0] c0_reg;
reg [1:0] c1_reg;
reg [8:0] q_m_reg;

always @(posedge clk) begin
    de_reg <= {de_reg[0], de};
    c0_reg <= {c0_reg[0], c0};
    c1_reg <= {c1_reg[0], c1};
    q_m_reg <= q_m;
end

这种两级流水线的设计确保了控制信号和数据信号的同步性。在实际调试中,我发现如果同步没做好,会出现屏幕闪烁或者图像错位的问题。

控制信号的输出使用case语句实现:

always @(posedge clk) begin
    if (!de_reg[1]) begin
        case ({c1_reg[1], c0_reg[1]})
            2'b00: dout <= CTL0;
            2'b01: dout <= CTL1;
            2'b10: dout <= CTL2;
            2'b11: dout <= CTL3;
        endcase
        cnt <= 0; // 重置计数器
    end
end

这里有个细节需要注意:当切换到控制信号传输时,直流平衡计数器需要重置。这是因为控制信号传输时间很短,不会影响整体的直流平衡。

7. 实战调试与优化

实现TMDS编码后,真正的挑战才刚刚开始。调试阶段可能会遇到各种奇怪的问题,我来分享几个常见的坑和解决方法。

第一个常见问题是时序不满足。TMDS编码需要工作在很高的时钟频率下,通常要达到像素时钟的10倍。比如1080p60的视频需要148.5MHz的像素时钟,那么TMDS编码器就要工作在1.485GHz!这么高的频率对FPGA的时序是很大的挑战。

解决方法包括:使用FPGA内置的专用串行化器(OSERDES)、精心布局布线、添加适当的时序约束。在我的项目中,通常会给TMDS时钟添加额外的时序约束:

create_generated_clock -name tmds_clk -source [get_pins clk_gen/CLKOUT] \
                       -multiply_by 10 [get_pins serializer/CLK]

第二个问题是电磁干扰(EMI)。虽然TMDS编码已经最小化了信号跳变,但高速信号还是会产生辐射。解决方法包括:使用差分信号线、添加适当的端接电阻、保持信号线等长。在实际布线时,我会尽量让三对数据线等长,误差控制在5mil以内。

第三个问题是颜色显示异常。这通常是因为编码器实现有bug,或者同步信号处理不当。调试时可以使用HDMI分析仪,或者简单的办法:用FPGA输出特定的测试图案(比如 color bar),然后对比实际显示和预期效果。

性能优化也很重要。TMDS编码器可以优化为三级流水线:第一级统计1的个数并同步输入;第二级生成9位中间数据;第三级处理直流平衡并输出。这种深度流水线设计可以提高运行频率,但也会增加延迟。需要根据具体应用权衡利弊。

资源使用方面,一个TMDS编码器大约需要100-200个LUT和FF。如果要做完整的HDMI输出,需要三个编码器(每个颜色通道一个),加上时钟生成和同步逻辑,总共大约需要500-600个LUT。这在大多数FPGA上都是可以接受的。

8. 测试与验证方案

完成编码器设计后,需要 thorough 的测试来确保正确性。我通常采用分层测试策略:先模块级测试,再系统级测试,最后实际硬件测试。

模块级测试使用Verilog仿真,针对编码器本身。需要覆盖各种边界情况:全0数据、全1数据、交替的0和1等等。特别要测试直流平衡机制,验证计数器在各种情况下的行为是否正确。

// 测试用例示例
initial begin
    // 测试全0输入
    din = 8'h00;
    de = 1;
    #100;
    
    // 测试全1输入  
    din = 8'hFF;
    #100;
    
    // 测试交替01
    din = 8'hAA;
    #100;
    
    // 测试控制信号
    de = 0;
    c0 = 1;
    c1 = 0;
    #100;
end

系统级测试需要验证整个视频流水线:从图像生成到TMDS编码,最后通过HDMI输出。可以使用FPGA开发板配合HDMI显示器进行实测。建议首先生成简单的测试图案,比如渐变色条、棋盘格等,这些图案容易用肉眼检查正确性。

实际测试中遇到过一个问题:某些品牌的显示器对时序要求特别严格,稍微偏离标准就无法显示。后来发现是FPGA生成的时钟有轻微抖动,改用更稳定的时钟源后问题解决。所以建议测试时多用几种不同品牌和型号的显示器。

性能测试也很重要。需要使用示波器或者逻辑分析仪检查TMDS信号的质量:眼图是否清晰、抖动是否在允许范围内、电压幅度是否正确等。如果条件有限,至少要用开发板自带的LED或者IO口输出一些调试信息,比如编码错误计数、状态指示等。

自动化测试可以大大提高效率。我通常会用Python写一个测试框架,自动生成各种测试图案,通过串口控制FPGA,然后对比预期输出和实际输出。虽然前期投入一些时间,但对于大型项目来说很值得。

最后提醒一点:HDMI相关测试需要特别注意ESD防护。HDMI接口直接对外,很容易受到静电损伤。测试时一定要做好防静电措施,比如戴防静电手环、使用ESD安全的工作台等。

FPGA—HDMI 显示器驱动设计与验证(附代码) HDMI显示原理、TMDS最小差分传输技术、编码技术、原语 阅读详情

相关推荐

FPGA实现TMDS编码

虽然本次代码较为简单,但在实现过程中也遇到了一些问题,首先就是条件1的真假判断我最开始写的时候使用时序逻辑写的,用if-else来判断条件是否成立然后再对q_m进行同或或者异或运算,但在仿真的时候发现q_m延后了好几个时钟周期,因此此处推荐用组合逻辑来实现,然后就是cnt的位宽设置得太大,导致条件3出现了未知态,因此cnt的位宽不应定义过大,合适即可。最后,n1_qm核n0_qm的计算应该用q_m来计算,而不是q_m_r,q_m_r需要进行一个时钟周期的同步,可能会导致后续条件判断出错。

qq_69315815的博客 1962

接口:基于FPGA的HDMI接口设计

这篇文章只是一周的学习记录,由于本人只学习了如何利用HDMI传输视频图像并没有传输音频,所以这篇文章只有一个彩条实验。本人想写这篇博客只是对自己学习过程过程中产生的问题的一个记录,其中有些代码是自己借鉴后添加到自己工程中,有问题的代码我没有贴出,后续调通后会贴出代码。本人是一个FPGA的新学者,因为网上很多例程说的都不清楚,所以想通过这种方式有一个记录,如有侵权,指出后,会进行删除。如有不正确的地方也欢迎指出。 一、HDMI概述 HDMI(High_Definition ...

weixin_47422285的博客 1万+

基于FPGA的HDMI视频接口设计

基于FPGA的HDMI视频接口设计

weixin_45962327的博客 2352

基于 FPGA 的 HDMI/DVI 显示

本节对 DVI 电路接口和 DVI 数据链路原理做简单的介绍,并在 FPGA 上实现基于 DVI接口的显示器彩条显示实验。

小王在努力...的博客 6656

HDMI/DVI中TMDS编解码算法的理解

对于HDMI/DVI中TMDS编解码算法的一些见解TMDS简介TMDS编码TMDS解码 TMDS简介 HDMI和DVI协议使用TMDS作为它们的物理层。支持高达225MHz的传输速率,一个传输链路能满足高达2048*1536分辨率电视信号。一般来说,一个HDMI/DVI接口包含四个TMDS通道,三条数据通道和一条时钟通道,每条通道采用差分电平传输,即一条通道要2根线,正极和负极。TMDS编解码算法可以使得被传输信号过渡过程的上冲和下冲减小,传输的数据趋于直流平衡,使信号对传输线的电磁干扰减少,提高信号传输的

qq_41529538的博客 4219

FPGA学习日记(七)HDMI图像数据传输

一、实现目标 将输入的RGB888格式的数据转换成四个串行输出的RGB信号及像素时钟信号。 二、数据流传输 HDMI常采用TMDS传输(上升沿复位)方式: (1)通过三个通道分别可传入8位的rgb视频信号,2位的控制信号,4位的音频信号或其他数据信号,其中行场同步信号在blue的控制信号中传输; (2)在encode编码器这端,将输入的8位视频信号通过TMDS算法转换为10位的视频信号输出到并串转换模块; (3)在并串转换模块中将输入的10位数据转为串行数发送到接受设备。 三、数据流传输实

weixin_45299680的博客 5114

HDMI接口和TMDS传输标准详解

1.HDMI是新一代的多媒体接口标准。 High-Definition Multimedia Interface:高清多媒体接口 能够同时传输视频和音频,简化了设备的接口和连线; 提供了更高的数据传输带宽,可以传输无压缩的数字音频及高分辨率视频信号; 下面是HDMI线公头和母头示意图: 2.HDMI向下兼容DVI DVI(数字视...

一个早起的程序员 2万+

FPGA驱动HDMI显示:从时序解析到TMDS编码实战

本文详细解析了FPGA驱动HDMI显示的核心技术,从LCD驱动时序生成、TMDS编码原理到OSERDES并串转换的实战实现。通过Verilog代码示例,系统阐述了如何将并行RGB数据转换为高速差分信号,并完成硬件连接与调试,为FPGA视频输出项目提供完整解决方案。

lg888的博客 476

FPGA - 基于FPGA的HDMI显示

HDMI 高清晰度多媒体接口(英文:High Definition Multimedia Interface,HDMI)是一种数字化视频/音频接口技术,是适合影像传输的专用型数字化接口,其可同时传送音频和影像信号,最高数据传输速度为2.25GB/s,同时无需在信号传送前进行数/模或者模/数转换。 ...

Vuko_Coding Zone 1万+

基于FPGA实现HDMI数据传输

随着网络带宽、存储器容量、处理器解码能力的不断发展,与我们日息相关的图像显示领域也出现了非常大的进步,在数据传输方面也从早期的VGA模拟信号传输方式发展到DVI接口、HDMI接口传输,市面上普遍的显示设备都带有hdmi接口,所以学习HDMI接口是必要的。高清晰度多媒体接口(High Definition Multimedia Interface)是一种全数位化影像和声音传送接口,可以传送无压缩的音频信号及视频信号。HDMI接口可以提供高达5Gbps的数据传输带宽,可以传送无压缩的音频信号及高分辨率视频信号。

junpingc的博客 1207

学习笔记分享:FPGA之HDMI、以太网篇

高清多媒体接口(High Definition Multimedia Interface)是一种全数字化视频和声音发送接口,可以发送未压缩的音频及视频信号。HDMI可用于机顶盒、DVD播放机、个人计算机、电视、游戏主机、综合扩大机、数字音响与电视机等设备。HDMI可以同时发送音频和视频信号,由于音频和视频信号采用同一条线材,大大简化系统线路的安装难度。

1430

HDMI_FPGA实现4K60TMDS编码解码之一

hdmi1.4 tmds编码解码原理 一个HDMI包括三个TMDS 数据通道和一个 TMDS 时钟通道(像素时钟),如图所示 每一个 TMDS 时钟周期内,TMDS 数据通道上会发送一个 10 位的字符信息。 信号源编码逻辑的输入数据包括控制周期,数据岛周期,视频像素周期,编码器将 2 位的控制数据、4 位的数据岛数据、8 位的视频数据采取不同的编码方式编码成 10位数据 三个周...

u013137284的博客 6302

基于FPGA的 TMDS 编码 及 HDMI 显示

最近在开发板上倒腾了一下 TMDS 视频编码的原理以及实现。特在此做一个记录。文附 全部设计源码,需要的可以关注一下。

记录所学,分享知识,结识挚友 2856

【FPGA】HDMI通信协议解析及FPGA实现

开发板:正点原子的达芬奇开发板,FPGA型号:XC7A35TFGG484-2。

电子德彪西的博客 9461

JPA - @MappedSuperclass - 基类注解

目录前言代码示例 前言 @MappedSuperclass注解一般作为基类的注解,表眀该类是映射的超类,继承于它的子类实体在映射时会自动添加到子类实体的对应数据库表中,用于共同的属性代码复用和模型分离。 代码示例 BaseEntity.java import lombok.Getter; import lombok.Setter; import javax.persistence.MappedSuperclass; import java.util.Date; @Getter @Setter @Ma

Maggieq8324的博客 2066

从零开始:Vivado中自定义串口通信IP核的完整实现

本文详细介绍了在Vivado中从零开始实现自定义串口通信IP核的完整流程,包括Verilog核心代码编写、仿真验证、IP核封装与参数化配置技巧。通过AXI-Lite总线实现动态配置,提升FPGA开发效率,适用于各种嵌入式系统通信需求。

weixin_29274969的博客 326

FPGA开发之HDMI编码

文章介绍了HDMI以及编码协议,并附有代码,适合学习

JInx299的博客 1891

ZYNQ双核通信实战:手把手教你用OpenAMP搭建Linux+FreeRTOS开发环境(2018.3版)

本文详细介绍了如何在ZYNQ平台上使用OpenAMP框架实现双核通信,构建Linux与FreeRTOS协同开发环境。从开发环境配置、系统组件编译到OpenAMP框架应用,手把手指导开发者完成ZYNQ双核通信系统的搭建与调试,为异构计算开发提供实用解决方案。

weixin_33737134的博客 476

基于FPGA的HDMI显示(一)

1.1 HDMI简介 简介略,网上很多,这里也不过多描述。 1.2 基于FPGA的HDMI接口设计   HDMI输出接口在FPGA方面应用时,主要有两种方式:一种就是如图1 22所示的方式,采用Silion Image 公司的 SIL9134 HDMI( DVI)编码芯片,最高支持 1080P@60Hz 输出,支持 3D 输出。   另一种方式是HDMI 接口设计全由 IO 模拟方式实现,如图1 ...

OpenFPGA的博客 1万+

【SAP GUI 脚本 VBA】实战:构建Excel驱动的SAP自动化操作平台

本文详细介绍了如何利用VBA和SAP GUI脚本构建Excel驱动的SAP自动化操作平台,实现高频事务码的标准化封装和批量处理。通过实战案例展示物料主数据查询(MM03)、会计凭证修改(FB02)等场景的自动化实现,帮助用户提升10倍+操作效率,同时确保数据可追溯性和操作安全性。

weixin_33748818的博客 504

pyinstaller+scrapy打包出现错误:OSError: could not get source code

错误如下: Traceback (most recent call last): File "scrapy\utils\defer.py", line 55, in mustbe_deferred File "scrapy\core\spidermw.py", line 60, in process_spider_input File "scrapy\core\scraper.py", line 152, in call_spider File "scrapy\utils\misc.py

kin的博客 1760

FPGA实时图像采集与显示(二)----- HDMI显示

早期基于FPGA的开发板上,实现HDMI一般使用的是HDMI发送芯片,典型的例如ADV7513sil9022CH7301,使用这些芯片实现HDMI发送,本质上还是将FPGA输出的 24位像素数据+3位的控制信号(HSYNCVSYNCDE)接入这些芯片,然后由这些芯片完成数据的编码和串行发送。例如DE10_NANO_SOC 开发板上使用 ADV7513 实现的 HDMI发送电路,可以看到,除去用于音频传输的 I2S 相关信号,仅与视频数据传输相关的信号就高达 28 个。

mvpkuku的博客 7667

图解目标检测 之 YOLO 算法 最全原理详解

YOLO 一.背景 YOLO(You Only Look Once: Unified, Real-Time Object Detection),是Joseph Redmon和Ali Farhadi等人于2015年提出的基于单个神经网络的目标检测系统。在2017年CVPR上,Joseph Redmon和Ali Farhadi又发表的YOLO 2,进一步提高了检测的精度和速度。 二.YOLO算法的网...

DFCED的博客 26万+

HDMI与TMDS接口

目录1.HDMI是新一代的多媒体接口标准。2.HDMI向下兼容DVI3.TMDS: 最小化传输差分信号4.TMDS编码算法5.HDMI模块框图6.HDMI引脚定义7.程序设计1.VGA时序生成模块2.TMDS和CTRL编码模块(需要例化三对)3.并串转换模块(需要例化四对)4.单端转差分模块(需要例化四对)5.顶层模块附录(TMDS编码算法):以下文章摘自HDMI接口和TMDS传输标准详解https://blog.youkuaiyun.com/weiaipan1314/article/details/104173120

cy413026的博客 2991

复旦微实现串口在线升级BOOT.BIN

将该 demo 生成的 app(升级用)和 fsbl、最简化 bit 文件(可选)打包成 BOOT.BIN,作为 golden image 烧写在 qspi flash 偏移 0 地址开始的位置,其中最简化 bit 文件为在线升级功能提供必要的物理通道(如果不需要,可以不打包该文件),golden image 一旦发布基本不需要进行升级,由该 golden image 负责和上位机进行通信交互,完成业务 app、业务 bit 文件、uboot 以及操作系统 image 等文件在线升级,在qspi flash

wangjie36的博客 3174

ChatGPT充值,银行卡被拒绝,图文教程

ChatGPT充值,银行卡被拒绝

weixin_46713695的博客 2万+
上一篇: ARM汇编指令精讲:从数据处理到内存操作
下一篇: CubeMX+Keil5的现代嵌入式开发工作流:从图形化配置到高效调试
code8
博客等级 码龄17年 65粉丝 1720原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值