FPGA 内部详细架构你明白了吗?

部署运行你感兴趣的模型镜像

点击蓝字关注我们

关注、星标公众号,精彩内容每日送达
来源:网络素材

FPGA 芯片整体架构如下所示,大体按照时钟域划分的,即根据不同的工艺、器件速度和对应的时钟进行划分:

4c1d71a87470da14733d8640df0c79fd.png0c20ddc2023b63dcb59a72a4b7e7a572.png

FPGA 内部详细架构又细分为如下六大模块:

1、可编程输入输出单元(IOB)(Input Output Block)

为了便于管理和适应多种电器标准,FPGA 的 IOB 被划分为若干个组(Bank),每个 Bank 的接口标准由其接口电压 VCCO 决定,一个 Bank 只能有一种 VCCO,但不同 Bank 的 VCCO 可以不同。只有相同电气标准和物理特性的端口才能连接在一起,VCCO 电压相同是接口标准的基本条件。

4ec72beeddb383b5897b5756c842f870.png

2、可配置逻辑块(CLB)(Configurable Logic Block)

FPGA 的基本可编程逻辑单元是 CLB,而一个 CLB 是由查找表、数据选择器、进位链、寄存器组成的。查找表和多路选择器完成组合逻辑功能,寄存器(可配置成触发器或锁存器),完成时序逻辑功能。在赛灵思公司公司的 FPGA 器件中,一个 CLB 由多个(一般为 4 个或 2 个)相同的 Slice 和附加逻辑构成。

Slice 又分为 SLICEL(Logic)和 SLICEM(Memory)。SLICEL 和 SLICEM 内部都各自包含了 4 个 6 输入查找表(LUT6)、3 个数据选择器(Mux)、1 个进位链(Carry Chain)和 8 个触发器(Flip-Flop):

查找表:6 输入查找表类似于一个容量为 64 bits 的 ROM(26 = 64)(工艺上是珍贵的 SRAM 资源),6 表示地址输入位宽为 6 bits,存储的内容作为输入对应的输出结果的逻辑运算,并在 FPGA 配置时载入。

对于查找表:目前主流 FPGA 都采用了基于 SRAM 工艺的查找表(LUT)(Look Up Table)结构。LUT 本质上就是一个 RAM。当用户通过原理图或 HDL 语言描述了一个逻辑电路以后,FPGA 开发软件会自动计算逻辑电路的所有可能结果,列成一个真值表的形式,并把真值表(即输入对应的输出逻辑)事先写入 RAM,这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。目前FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个有4位地址线的RAM。

数据选择器:数据选择器一般在 FPGA 配置后固定下来。   进位链:超前进位加法器,方便加法器的实现,加快复杂加法的运算。   寄存器:可以配置成多种工作方式,比如 FF 或 Latch,同步复位或异步复位、复位高有效或低有效等等。   SLICEM 的结构与 SLICEL 的结构类似,最大的区别是使用了一个新的单元代替 SLICE 中的查找表。这个新的单元可以配置为 LUT、RAM、ROM 或移位寄存器(SRL16 或 SRL32),从而可以实现 LUT 的逻辑功能,也能做存储单元(多个单元组合起来可以提供更大的容量)和移位寄存器(提供延迟等功能)。

其中 SLICEM 中 LUT 的输入端都地址和写地址为 8 位,高两位可能是将 4 个 LUT 并联一起作为一个大的 RAM 或 ROM 时用,同时 SLICEL 和 SLICEM 的 LUT 均可设为 5 位或 6 位查找表。

dc770cefff26d558782b1c13e90957a4.png16eedc22ade5349acdd413795f85f641.png5757195845f8a779acfd06e54976e9c5.png

3、嵌入式块 RAM(BRAM)(Block RAM)

块 RAM 可被配置为 ROM、RAM 以及 FIFO 等常用的存储模块。区别于分布式 RAM(Distributed RAM)(主要由 LUT 组成的,不占用 BRAM 的资源)。分布式 RAM 也可以被配置为 ROM、RAM 以及 FIFO 等常用的存储模块,但是性能不如 BRAM,毕竟 BRAM 才是专用的,一般是 BRAM 资源不够用的情况下才使用分布式 RAM。反之,BRAM 由一定数量固定大小的存储块构成的,使用 BRAM 资源不占用额外的逻辑资源,并且速度快,不过使用的时候消耗的 BRAM 资源只能是其块大小的整数倍,就算你只存了 1 bit 也要占用一个 BRAM。

ca5f5ae945fbf6ae844b679b58feddf9.pngbd905b1a2a6d00b2469a948e7c26d63a.png5a898c4f63a783b05fbe694b3b24bb05.png

一个 BRAM 的大小为 36K Bits,并且分成两个小的 BRAM 各自为 18K Bits,排列成又分为上下两块,上半部分为 RAMB18 下半部分为 RAMBFIFO36。在 FIFO 例化的时候可以将 BRAM 设置为 FIFO 时,不会使用额外的 CLB 资源,并且这部分 RAM 是真双口 RAM。

f1709b2076807c07ce3ba6e6d9294729.pngdb7796f435f34858b0d816bc752988cb.jpeg

FPGA 所采用的逻辑单元阵列 LCA(Logic Cell Array)内部所包括的可配置逻辑模块 CLB(Configurable Logic Block)、 输出输入模块 IOB(Input Output Block)和内部互连线(Interconnect)三个部分。前面两种已经介绍完毕,接下来介绍第三种:

4、互连线资源(Interconnect)

布线资源连通 FPGA 内部的所有单元,而连线的长度和工艺决定着信号在连线上的驱动能力和传输速度。FPGA 芯片内部有着丰富的布线资源,根据工艺、长度、宽度和分布位置的不同而划分为 4 类不同的类别:第一类是全局布线资源,用于芯片内部全局时钟和全局复位/置位的布线;第二类是长线资源,用于完成芯片 Bank 间的高速信号和第二全局时钟信号的布线;第三类是短线资源,用于完成基本逻辑单元之间的逻辑互连和布线;第四类是分布式的布线资源,用于专有时钟、复位等控制信号线。

5、底层内嵌功能单元

内嵌功能模块主要指 DLL(Delay Locked Loop)、PLL(Phase Locked Loop)、DSP(Digital System Processing)(数字信号处理)、DCM(Digital Clock Manager)(提供数字时钟管理和相位环路锁定)、和 CPU(Central Processing Unit)等等软处理核(比如 MicroBlaze 的软核)。现在越来越丰富的内嵌功能单元,使得单片 FPGA 成为了系统级的设计工具,使其具备了软硬件联合设计的能力,逐步向 SoC 平台过渡。

关于 DCM:DCM 是 FPGA 内部处理时钟的重要器件,他的作用主要有三个:消除时钟偏斜(Clock De-Skew)、频率合成(Frequency Synthesis)和相位调整(Phase Shifting)。

DCM 的核心器件是数字锁相环(DLL,Delay Locked Loop)。它是由一串固定时延的延时器组成,每一个延时器的时延为 30 皮秒,也就是说,DCM 所进行的倍频、分频、调相的精度为 30 皮秒。

对于时钟,我们最好不要将两个时钟通过一个与门或者或门(逻辑操作),这样的话就很可能会产生毛刺,影响系统稳定性,如果要对时钟进行操作,例如切换时钟等,请使用 FPGA 内部的专用器件“BUFGMUX”。

6、内嵌专用硬核

内嵌专用硬核是相对底层嵌入的软核而言的,指 FPGA 处理能力强大的硬核(比如 ARM Cortex-A9 的硬核),等效于 ASIC 电路。为了提高 FPGA 性能,芯片生产商在芯片内部集成了一些专用的硬核。例如为了提高 FPGA 的乘法速度,主流的 FPGA 中都集成了专用乘法器,而为了适用通信总线与接口标准,很多高端的 FPGA 内部都集成了串并收发器(Serdes),可以达到数十 Gbps 的收发速度(比如 FMC)。

b858d8fedfd2361aa53906c4ece6ec03.jpeg

想要了解FPGA吗?这里有实例分享,ZYNQ设计,关注我们的公众号,探索

您可能感兴趣的与本文相关的镜像

TensorFlow-v2.9

TensorFlow-v2.9

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

<think>好的,我现在要详细介绍一下FPGA做图像采集的基本流程。首先,我得回想一下用户的问题,用户希望得到详细的流程介绍,所以需要分步骤说明,并且每个步骤要具体。 首先,FPGA图像采集的流程可能包括几个主要部分:图像传感器的接口、数据传输、预处理、存储、后续处理等。不过具体每个部分怎么实现呢?可能还需要考虑同步信号、数据格式转换、时钟管理这些方面。 第一步应该是图像传感器选型和接口配置。常见的传感器有CMOS或者CCD,可能需要了解它们的输出接口,比如MIPI、LVDS、并行接口等。FPGA需要配置正确的接口来接收数据。比如并行接口可能需要处理数据线、行同步、场同步、像素时钟这些信号。 接下来是数据采集部分。FPGA需要根据传感器的时序要求,正确捕获数据。例如,在像素时钟的上升沿读取数据线,同时根据行同步和场同步信号确定每一行和每一帧的开始和结束。这部分可能需要状态机来控制,确保数据在正确的时间被采样。 然后,采集到的数据可能需要缓存。因为传感器输出的数据速率可能很快,FPGA内部的Block RAM或者FIFO可以用来暂存数据,防止数据丢失。例如,使用双缓冲机制,当一帧数据存入一个缓冲区时,另一个缓冲区可以被读取处理。 数据预处理也是一个重要环节。比如,图像数据可能是RAW格式(比如Bayer格式),需要做插值处理得到RGB图像。或者进行一些实时处理,比如去噪、边缘增强、色彩校正等。这些处理步骤可能需要用到FPGA的并行处理能力,设计流水线结构来提高效率。 存储部分的话,FPGA可能需要将处理后的数据传送到外部存储器,比如DDR SDRAM,以供后续处理或传输到其他设备(如CPU、GPU)。这时候需要考虑存储控制器的设计,确保数据能够高效读写。 另外,可能还需要与外部系统通信,比如通过PCIe、USB、以太网等接口将图像数据传输到上位机或者显示设备。这部分涉及到通信协议的实现,可能需要使用FPGA的硬核或者软核来实现相应的接口逻辑。 同步和时钟管理也是关键点。图像传感器和FPGA内部的其他模块可能需要不同的时钟域,这时候需要跨时钟域处理,比如使用异步FIFO或者握手信号来确保数据同步,避免亚稳态问题。 测试和验证环节也不能少。在开发过程中,可能需要使用Modelsim等仿真工具验证各个模块的功能,或者通过SignalTap等在线调试工具实时观察信号,确保采集流程正确无误。 可能还需要考虑一些实际应用中的问题,比如传感器的配置(通过I2C或SPI接口),FPGA的资源利用情况,时序约束是否满足,以及功耗优化等。例如,有些传感器需要在上电后进行初始化,设置寄存器参数,这部分也需要FPGA来实现控制逻辑。 有没有遗漏的步骤呢?比如,图像数据的后续处理或传输是否需要考虑数据压缩?比如在某些应用中,采集的图像数据量很大,可能需要先进行压缩再存储或传输,这可能会影响流程的设计。但用户可能只需要基本流程,所以这一步可能属于扩展部分。 总结下来,基本流程应该是:传感器接口配置→数据采集与同步→数据缓存→预处理→存储或传输→后续处理。每个步骤中的关键点需要详细说明,比如接口协议、时序控制、缓冲机制、处理算法等。 需要确认是否每个步骤都解释清楚了,有没有技术细节错误。例如,在数据采集阶段,是否准确描述了如何利用同步信号和时钟来捕获数据?可能需要更详细地说明行有效和帧有效信号的解析,以及如何设计状态机来管理数据流。 另外,预处理部分的不同处理方式是否需要举例说明?比如Bayer插值的具体实现,或者其他的实时处理步骤,这样用户能更明白FPGA在其中的作用。 可能还需要提到DMA传输,当数据需要从FPGA传输到外部存储器或处理器时,使用DMA可以提高效率,减少CPU的负担。 最后,整个流程中的各个模块如何协调工作,是否需要主控状态机或者多个子模块协同?这部分可能需要简要说明系统架构的设计思路。 这样整理下来,应该能够覆盖FPGA图像采集的基本流程,并且每个环节都有足够的细节,满足用户的需求。</think>FPGA(现场可编程门阵列)在图像采集中因其并行处理能力和可定制性而广泛使用。以下是其基本流程的详细说明: --- ### **1. 图像传感器接口配置** - **传感器选型**:根据需求选择CMOS/CCD传感器,常见接口包括MIPI、LVDS、并行接口等。 - **接口协议解析**: - **并行接口**:处理数据总线(如10/12/14位)、像素时钟(Pixel Clock)、行同步(HREF)、帧同步(VSYNC)等信号。 - **MIPI CSI-2**:需通过IP核或自定义逻辑解析数据包和时钟。 - **传感器初始化**:通过I²C/SPI配置传感器寄存器(如分辨率、帧率、曝光时间)。 --- ### **2. 数据采集与时序控制** - **同步信号处理**: - **帧同步(VSYNC)**:标志一帧开始/结束。 - **行同步(HREF)**:标志一行数据的有效区间。 - **像素时钟(PCLK)**:在上升沿/下降沿采样数据线。 - **数据捕获逻辑**: - 设计状态机,根据VSYNC和HREF控制数据采样时机。 - 例如:在HREF有效期间,每个PCLK周期读取一个像素数据。 --- ### **3. 数据缓存与流控制** - **缓存策略**: - **FIFO/Block RAM**:缓存单行或若干行数据,解决传感器输出与处理速度不匹配问题。 - **双缓冲(Ping-Pong Buffer)**:一帧存入Buffer A时,Buffer B可被后续模块读取,避免数据冲突。 - **跨时钟域处理**:若传感器时钟与FPGA内部时钟不同,需使用异步FIFO或握手信号同步。 --- ### **4. 图像预处理(实时处理)** - **RAW格式处理**: - **Bayer插值**:将Bayer模式的RAW数据转换为RGB格式(如使用双线性插值算法)。 - **基础增强**: - 去噪(中值滤波)、自动白平衡(AWB)、色彩校正(Color Matrix)。 - 直方图均衡化或对比度拉伸。 - **定制化处理**: - 边缘检测(Sobel算子)、二值化等,利用FPGA并行性实现流水线加速。 --- ### **5. 数据存储与传输** - **外部存储接口**: - 通过DDR控制器将数据写入SDRAM,需设计仲裁逻辑管理读写请求。 - **数据传输接口**: - **高速接口**:PCIe、USB 3.0、GigE Vision等,用于将数据传至上位机。 - **显示接口**:HDMI/VGA驱动,直接输出到屏幕(需集成编码模块)。 --- ### **6. 系统控制与通信** - **上位机通信**:通过UART、SPI或以太网接收控制指令(如调整采集参数)。 - **DMA控制**:实现内存到外设的高效数据传输,减少CPU干预。 --- ### **7. 关键设计与验证** - **时序约束**:在FPGA工具中设置时钟频率、输入延迟等约束,确保时序收敛。 - **仿真与调试**: - **功能仿真**:使用ModelSim验证逻辑正确性。 - **在线调试**:通过SignalTap或ChipScope实时抓取内部信号。 - **资源优化**:合理分配LUT、BRAM、DSP资源,避免时序瓶颈。 --- ### **典型应用场景** - **工业检测**:实时缺陷检测(如FPGA处理+CPU决策)。 - **医疗成像**:内窥镜图像采集与增强。 - **自动驾驶**:多摄像头同步采集与预处理。 --- ### **示例流程(简化为伪代码)** ```verilog always @(posedge pclk) begin if (vsync == HIGH) reset_frame_counter(); else if (href == HIGH) capture_pixel_data(data_bus); // 按行存储 end // 双缓冲切换逻辑 always @(posedge frame_done) begin if (current_buffer == BUFFER_A) switch_to_buffer(BUFFER_B); else switch_to_buffer(BUFFER_A); end ``` --- 通过以上流程,FPGA能够高效完成从图像采集到处理的完整链路,适用于高实时性、低延迟的应用场景。设计时需重点关注时序同步、资源利用率和系统吞吐量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值