带你搞懂FPGA的原理

不知道为什么,在嵌入式开发中,存在一条隐式的鄙视链:做 51 单片机的看不起做基本电路的,而做 STM32 开发的看不起 51 单片机的,而做 FPGA 的开发的看不起 STM32 开发的。今天,我们的主角就是 FPGA!

什么是 FPGA?

FPGA(现场可编程门阵列)是一种可配置的集成电路,在制造后可以反复编程。

许多用户更青睐 FPGA 而不是 MCU,因为 FPGA 的可编程性和灵活性允许用户根据自己的需求定制电路。此外,FPGA 拥有更高的性能,因为其并行结构使其能够在一个时钟周期内处理比 MCU 更多的数据。因此,FPGA 芯片通常比 MCU 更昂贵。

工作原理

  • 布尔代数

    在逻辑中,我们通常使用 真 (1)假 (0) 来判断某个事件是否发生。例如,我们可以用变量 A 表示明天是否下雨。如果下雨,A 等于 1,表示事件发生;否则,A 等于 0。

    这种逻辑与电路中使用的 高电平 (1)低电平 (0) 类似,用来检测特定事件是否发生,并使电路做出相应反应。

    为了执行这些逻辑操作,电路依赖于 逻辑门。逻辑门的等效布尔代数操作如下:

    • 或门 (Or Gate):执行布尔加法
    • 与门 (And Gate):执行布尔乘法

    或门:

在这里插入图片描述

与门:
在这里插入图片描述

  • 积之和 (Sum of Products)

    本质上,或门(布尔加法)与门(布尔乘法) 可以组合起来检测多种事件。这种组合逻辑表示为 积之和 的形式,其中函数由一系列 与操作(积) 通过 或操作(和) 组合在一起。例如:
    F = (A AND B) OR (B AND C AND D) OR (A AND C)
    在这里插入图片描述
    理想情况下,只要资源足够,我们可以设计电路来将现实世界表示为 0 和 1。这是计算机工作原理的基本概念。
    在这里插入图片描述

  • 真值表 (Truth Table)

    真值表是一个列出所有可能输入组合及其对应输出的表格,用于理解和验证逻辑电路或功能的行为。

    例如,考虑一个具有两个输入 AB、一个输出 F 的简单与门。其真值表如下:

    ABF (A AND B)
    000
    010
    100
    111

    真值表不仅有助于分析单个逻辑门,还可以作为设计和验证 FPGA 中更复杂功能的蓝图。当电路变得庞大且复杂时,像 LUT(查找表)这样的工具被用来高效处理这些真值表映射。

  • 查找表 (LUTs)

    查找表 (LUTs) 是 FPGA 中真值表的直接硬件实现。它们是存储逻辑函数所有可能输入组合输出值的小型存储单元。这意味着 LUT 本质上是将真值表映射到可编程电路中。

    例如,考虑前面提到的与门。该门的 LUT 将存储真值表的输出列:

    地址(输入组合)存储值(输出)
    000
    010
    100
    111

    其中:

    • 地址 对应于输入组合(例如,A=0,B=1 对应二进制的 01)。
    • 存储值 表示该组合的对应输出。

    真值表和 LUT 的关系使 FPGA 能够高效实现逻辑功能:

    • 真值表作为蓝图:真值表定义了逻辑电路的期望行为。
    • LUT 作为硬件实现:LUT 通过存储所有可能输入的输出,将这种行为转换为物理实现。

    在这里插入图片描述

    通过利用 LUT,FPGA 可以动态重新编程其硬件来实现多种功能,从而展现出极大的灵活性。对于较大的设计,多组 LUT 通过 FPGA 的可编程互连 (Interconnects) 连接在一起,从而无需定制硬件即可实现复杂的逻辑电路。

  • 互连 (Interconnects)

    互连是 FPGA 的可编程布线网络的核心。它们连接查找表 (LUT)、寄存器和其他逻辑元件,使 FPGA 能够根据用户设计形成自定义电路。没有互连,单独的 LUT 将是孤立的,无法组成更大的功能设计。

    互连与 LUT 的关系

    虽然 LUT 实现了单个真值表的逻辑,但互连负责将一个 LUT 的输出连接到另一个 LUT 的输入。这种连接性使 FPGA 能够扩展简单的逻辑操作为复杂的系统。

    例如:

    • 单个 LUT 可能实现一个简单的逻辑函数,如 A AND B
    • 通过互连,该 LUT 的输出可以作为输入连接到另一个实现函数 (A AND B) OR C 的 LUT。

在这里插入图片描述

FPGA 中的互连系统由多种可编程元素组成,允许信号在芯片中传输:

  1. 全局路由资源:用于在 FPGA 芯片的远距离部分之间传递信号。
  2. 开关矩阵:一个可编程开关网格,用于控制信号在不同路由路径之间的流动。用户通过配置这些开关来创建所需连接。
  3. 局部路由资源:短距离布线,用于连接相邻的逻辑元件,例如将一个 LUT 与其邻近的 LUT 连接起来。
  4. 专用线路:用于高速或特定连接的直接高效通路,可以绕过通用路由。

可编程性和优势

FPGA 互连的可编程性赋予了它极大的灵活性:

  • 动态连接:互连可以重新配置,以连接 FPGA 的不同部分以实现新的设计。
  • 扩展性:支持从简单逻辑到复杂电路的设计。
  • 优化:FPGA 工具在设计综合和实现过程中优化互连的使用,确保高效的时序和资源利用。

尽管存在一定的延迟和功耗开销,互连系统是 FPGA 灵活性和多功能性的关键,使其能够适应多样化的应用需求。

  • 优化:FPGA 工具在设计综合和实现过程中优化互连的使用,确保高效的时序和资源利用。

尽管存在一定的延迟和功耗开销,互连系统是 FPGA 灵活性和多功能性的关键,使其能够适应多样化的应用需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JINX的诅咒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值