[从零开始学习FPGA编程-5]:快速入门篇 - FPGA工作原理(从硬件资源整合的角度看FPGA编程)

Posted 文火冰糖的硅基工坊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[从零开始学习FPGA编程-5]:快速入门篇 - FPGA工作原理(从硬件资源整合的角度看FPGA编程)相关的知识,希望对你有一定的参考价值。

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

 

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/124722606


目录

第1章 什么是FPGA

第2章 FPGA的外部接口(外部硬件管脚与功能)

2.1 IO输入输出接口

2.2 内部功能接口

2.3 FPGA的对外接口与ASIC芯片对外接口的主要区别

2.4 外设芯片三大并行总线

第3章 FPGA的内部结构-高度抽象化的资源--(Xilinx FPGA为例)

3.1 FPGA内部基本结构(Xilinx FPGA为例)

3.2 可编程逻辑功能块 CLBs:企、事业单位

3.2.1 LUT(Look-Up-Table)查找表

3.2.2 D触发器

3.2.3 实际的CLB

3.3 输入输出块(I/O):出入境

3.4 片内互连线(IC):交通网

第4章 FPGA的具体化的内部资源-具体化的资源

4.1 内部“分层”资源

4.2 基本的逻辑门结构(最底层的资源)

4.3 FPGA的层次型资源库

第5章 FPGA可编程的基本原理(原因)

5.1 组合逻辑的编程(LUT):查找表实现任意组合逻辑

5.2 时序电路的编程(D触发器)

5.3 LE/LAB编程

附录:

(1)对FPGA资源的横向和纵向进一步的理解

(2)入门原理


第1章 什么是FPGA

FPGA是在PAL (可编程阵列逻辑)、GAL(通用阵列逻辑)等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。

与传统模式的芯片设计进行对比,FPGA 芯片除了用于研究以及设计芯片之外,它一个重要的作用是借助特定的芯片模型对较多业务领域的产品进行性能优化设计。

FPGA的中文意思是:现场-可编程-门-阵列,我们先解读这个中文的字面意思:

(1)现场:

  • 第一层意思是:指芯片的功能并不是芯片厂家出厂前预先固化的,而是芯片的使用者自己根据需要重新编程和定制的。
  • 第二层意思是:芯片的功能,不仅仅是芯片使用者可以定制,而且其功能,也可以通过下载FPGA的软件,在设备的硬件电路连接成功后,到了用户的现场,也可以重新编程。这是“现场”的含义,现场是相对于芯片厂家的工厂和设备厂家的工厂而言,是指用户“现场”,设备“现场”。

(2)可编程

通过JTAG、AS、PS等方式,可以现场对器件进行编程,以实现各种不同的定制功能;

而ASIC芯片,在芯片出厂前是可以编程的,这个过程称为芯片设计,而芯片出厂后,硬件的功能 就无法编程了。

而通用CPU只能实现软件编程,而不能改变硬件的连线与功能,无法实现硬件电路的编程。

(3)门

这里讲了FPGA内部资源的组成是由“门电路组成”。

实现基本逻辑关系的电子电路称为“门”电路。

最基本的逻辑关系是:与、或、非,因此,最基本的门就是:与门、或门、非门;

也就是说,FPGA内部是通过“基本的门”电路进行堆叠和定制化完成的。

(4)阵列

将实现基本逻辑关系的“基本的门”电路按照阵列(矩阵)的形式排布,就形成了门阵列;

这里讲的是FPGA内部组织基本的门电路的方式。如果把不同基本逻辑功能的“门”比成不同兵种的单个士兵的话,FPGA的门阵列即是一个大规模的混合兵种的军队,如下图所示:

而对FPGA编程,就是大规模的排兵布阵。

这里就有如下的疑问:

  • FPGA是硬件,它是如何做到能够对硬件进行现场可编程的呢?
  • FPGA是硬件,它是如何做硬件的可定制化呢?
  • FPGA是什么样的半成品硬件呢?

第2章 FPGA的外部接口(外部硬件管脚与功能)

FPGA与ASIC芯片从功能使用上来看是相似的。

硬件芯片本身就是一个小系统,一个系统除了完成内部的功能之外,一个重要的任务就是与外部通信,这就是输入输出。

外部接口包含两大部分:IO输入输出接口和内部功能接口。

2.1 IO输入输出接口

与外部通信所需要的各种接口,称为IO接口,IO接口品种繁多.

  • 按照传输速度分为高速和低速: 常见的I2C, Uart,SPI都是低速总线,以太网、PCIe, CPRI都是高速总线。
  • 按照传输线的多少分为串行与并行接口,大部分IO总线都是串行总线,内存总线就是并行总线,如32bit或64bit的数据和地址总线。

2.2 内部功能接口

FPGA为了完成自身的功能,包含的接口,称为内部功能接口,如:

  • 电源
  • 时钟
  • 硬件功能配置
  • 调试

2.3 FPGA的对外接口与ASIC芯片对外接口的主要区别

  • ASIC芯片的对外接口是确定性的,在芯片出厂后,芯片的对外管脚的功能就确定下来了。
  • FPGA芯片是半定制化产品, 内部的功能部分是确定性,因此有部分的外部管脚是固定的、确定,包括时钟、电源、调试
  • FPGA芯片是半定制化产品, 其内部的大部分功能是后期可定制化编程的,因此其外部的大部分管脚也不是确定性不变的,而是可以编程定制。这种不确定性或可定制化特性,就导致FPGA的硬件的灵活性要比ASIC芯片大很多。如下图所示,大部分管脚都是可定制化的IO管脚。

当然,不同厂家的FPGA,其IO管脚的描述方式是不同的。

FPGA外部管脚是内部功能的体现,因此与内部逻辑是关联的。

2.4 外设芯片三大并行总线

(1)控制总线:传送控制的信号

(2)数据总线:传送数据的信号

(3)地址总线:传送地址的信号

第3章 FPGA的内部结构-高度抽象化的资源--(Xilinx FPGA为例)

3.1 FPGA内部基本结构(Xilinx FPGA为例)-- 横向划分

FPGA内部实际上是一个电子电路系统,由各种高度抽象化后的、可编程的、基础电子电路资源组成。经过抽象后,FPGA内部有三大部分组成:

(1)可编程逻辑(阵列)块 CLB/LAB(类于普通PCB板上的各种功能芯片,是FPGA内部最核心部分)

(2)输入输出块(I/O)(类比普通PCB板上的各种IO接口,是FPGA对外接口部分)

(3)片内互连线(IC)(类比PCB板上各芯片之间的连线,是FPGA内部高速公路)

3.2 可编程逻辑功能块 CLBs:企、事业单位

可编程逻辑功能块 CLB,又称为LAB(可编程逻辑阵列块Logic Array Block)

类于普通PCB板上的各种功能芯片,是FPGA内部最核心部分

FPGA对外展现出来的功能是由这部分来完成的。

相当于一个国家内部的各个省份、各个县市、乡村;各个部委、各个公司、单位。

可编程逻辑功能块是实现用户功能的基本单元,多个逻辑功能通常规则地排成一个阵列结构,分布于整个芯片。

CLB和LAB的核心部件的简化示意图如下:

数字电路根据逻辑功能的不同特点,可以分成两大类,

一类叫组合逻辑电路(简称组合电路),另一类叫做时序逻辑电路(简称时序电路)。

可以只是用查找表LUT,可以实现任意的组合逻辑运算;
可以只是用D触发器,    可以实现任意的时序逻辑运算;
同时使用查找表和D触发器,实现复杂的大规模的时序组合逻辑运算;

3.2.1 LUT(Look-Up-Table)查找表

LUT表是FPGA实现可编程、组合逻辑最重要的单元。

查找表的本质是一个RAM,是一个N地址线总线,M位数据总线的RAM。

对于FPGA而言,LUT是如此的重要,因此,非常有必要深入浅出地了解LUT的工作原理。

(1)什么是组合逻辑电路

组合逻辑电路在逻辑功能上的特点是任意时刻的输出仅仅取决于该时刻的输入,与电路原来的状态无关,即与访问的时间无关,只与组合逻辑内在逻辑实现有关。

数字电路中包含了大量的组合逻辑的功能单元,如:

  • 算术运算电路,如加法器,对两路数据进行累加。
  • 编码器:对输入数据编码后输出新的数据
  • 译码器:对输入数据解码后输出新的数据

  • 数据选择器:从某一地址空间选择一路数据输出 =>LUT的本质就是数据选择器。

  • 数据分配器:多路分配器的功能是把输入数据分配给不同的通道上,相当于一个单刀多掷开关

  • 数值比较器:多路数据进行比较后输出新的数据

描述组合电路的工具是:真值表。

(2)先了解RAM内存数据访问的基本原理

随机存取存储器(英语:Random Access Memory,缩写:RAM),也叫主存,是与CPU直接交换数据的内部存储器。

它可以随时读写(刷新时除外),而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储介质。RAM工作时可以随时从任何一个指定的地址写入(存入)或读出(取出)信息。

它与ROM的最大区别是数据的易失性,即一旦断电所存储的数据将随之丢失。

RAM在计算机和数字系统中用来暂时存储程序、数据和中间结果。

它与ROM相比,具备如下的优点:

  • 随机访问:所谓“随机存取”,指的是当存储器中的数据被读取或写入时,所需要的时间与这段信息所在的位置或所写入的位置无关。
  • 高速访问:访问速度快
  • RAM中内容的动态可修改性,实现RAM中内容的动态编程!!!

LUT就是利用了RAM的上述优点(特点),实现高速的组合逻辑电路和动态可编程!!!

(3)LUT工作原理(RAM的读操作就是LUT)

LUT的工作原理与RAM的工作原理类似,下面以4位地址线,1位数据线的LUT, 来介绍LUT是如何实现可编程的组合逻辑的。更多的地址线和数据线与之类同。

4位地址线,可以访问2^4=16个RAM的地址空间,每个地址空间可以输出1位数据,输出的内容是0或1,取决于RAM中存储的数据内容.

在上图案例中,当地址=0000、0001时输出为0; 当地址=1111时,输出为1. 这就是组合逻辑,即与时间无关,任何时候,输入指定的地址,得到确定性的输出0或1.

当然,我们通过给RAM的不同地址空间中存放不同的可编程的数据,就可以实现对LUT表组合逻辑的编程。

3.2.2 D触发器

(1)什么是时序电路

时序电路,是由最基本的逻辑门电路加上反馈逻辑回路(输出到输入,就把当前的输出状态作为下一次的输入之一)或器件组合而成的电路,与组合电路最本质的区别在于时序电路自身具有状态记忆功能。输出值,不仅仅取决于输入,而且还取决于自身当前的状态!!!即输出不仅仅与输入有关,时间有关,所以称为时序电路。

时序电路是实现硬件状态机最重要和最基本的电路之一。

描述时序电路的工具是:状态图。

(2)D触发器

D触发器是一个具有记忆功能的,具有两个稳定状态的信息存储器件,是构成多种时序电路的最基本逻辑单元,也是数字逻辑电路中一种重要的单元电路。D触发器在数字系统和计算机中有着广泛的应用。

触发器具有两个稳定状态,即"0"和"1",在一定的外界触发信号作用下,可以从一个稳定状态翻转到另一个稳定状态。

在上图中,输出值Q是0还是1,不仅仅取决于输入D是0还是1, 还取决于触发触发自身当前的状态。并且在时钟信号CP的触发下才是进行输出(状态的翻转)。

D触发器应用很广,可用做数字信号的寄存,移位寄存,分频和波形发生器等等。

当然,除了D触发器,还有RS触发器,T触发器等。

3.2.3 实际的CLB

实际的CLB,除了核心部件LUT和触发器外,还有一些辅助电路。

 

3.3 输入输出块(I/O):出入境

类比普通PCB板上的各种IO接口,是FPGA整体的对外接口部分。

相当于一个国家对外的接口,即出入境管理:有海路接口、陆上接口、有空路接口等,FPGA的IO输入输入输出也有多种功能分类。

可编程输入输出块完成芯片内部逻辑外部管脚(只是导线)之间的接口。

IO输入输出块围绕在逻辑单元阵列块LAB四周,可编程输入输出块的功能和性能从一定程度上也决定了该器件的市场地位。

 一个可编程输入输出基本单元包括:输入输出两个部分

一、输出

  • (1)输出寄存器(Output Register) =》 暂时缓存输出信号电平
  • (2)输出使能寄存器(OE Register),使能输出电平,使能前,输出电平是不确定的,既不是确定性的0,和也不是确定性的1,为第三这种状态,称为“三态”。
  • (3)输出延迟链(Output Pin Delay) => 叠加管脚信号的时延
  • (4)输出驱动(提供更大的电流)

二、输入

  • (5)输入寄存器(Input Register) =》 暂时缓存输入信号电平
  • (6)输入延迟链(Input Pin Delay) => 叠加管脚信号的时延
  • (7)上拉电阻(Pll Up Resistor) =》 确保在没有输入信号时,输入IO为确定性的1.
  • (8)下拉电阻(Pll Up Resistor) =》 确保在没有输入信号时,输入IO为确定性的0.

从上述可以看出:输入和输出的信号是受控的,而不是完全开放、不受控制的。

就像一个国家的边防和海关,处境和入境是完全受控的,不是自由出入的!!!

3.4 片内互连线(IC):交通网

类比PCB板上各芯片之间的连线,是FPGA内部高速通路。

通过它,可以把不同的功能部件连接起来,提供不同功能部件之间的互联互通。

相当于一个国家内部的交通网:水路、公路、地跌、高铁、航空等等、

可编程内部互联资源包括各种长度的连线线段和一些可编程连接开关,通过这些连接开关,把FPGA内部的各个功能模块连接起来,它们将各个可编程逻辑块或输入/输出块连接起来,构成特定功能的电路。

用户可以通过编程决定每个单元的功能以及它们的互连关系,从而实现所需的逻辑功能。

  • 局部快速通道最快,
  • 列快速通道次之,
  • 行快速通道最慢

时序约束时尽量让相关信号分布在局部快速通道里,可以保证系统的高效运行。

第4章 FPGA的具体化的内部资源-具体化的资源

FPGA内部结构决定了它为什么能够支持现场可编程。

FPGA内部结构决定了它如何支持现场可编程。

4.1 内部“分层”资源--纵向划分

FPGA内部的资源是分层的,与公司、军队对资源的管理是类似的 。

4.2 基本的逻辑门结构(最底层的资源)

FPGA称为可编程“门”阵列,表明其最底层的资源:基本的逻辑"门”:与、或、非、异或门。

也就是说,是数字电路编程,如下是通过晶体三极管实现基本门电路的示意图。

FPGA的规模大小,也是通过包含多少基本的“门”电路的数量,即门数来标识的。

详细信息参考:

[从零开始学FPGA编程-3]:快速入门篇 - 导体、半导体、晶体管、常见电子元器件、集成电路_文火冰糖的硅基工坊的博客-CSDN博客

4.3 FPGA的层次型资源库

当然,FPGA的编程,不会让编程者从基本的“门”电路从头开始编程,FPGA厂家提供了丰富的资源库供编程者使用,与C语言编程的标准库类似,资源库的提供极大的方便了FPGA编程者的工作量,可以利用大量已有的、成熟的资源库完成自身业务上的需求,而不需要关心资源库内部逻辑实现。也就是说,FPGA的编程这不需要重复造轮子,FPGA的资源库,会自动把资源映射成底层需要底层的门电路。

(1)定时器资源(分频/倍频、数字延迟、时钟锁定):周期性产生定时中断。

(2)内存资源(块RAM、分布式RAM):用于存放数据的地方。

(3)时钟锁相环资源:提供稳定的时钟。

(4)输入输出控制器资源:与外界的信息交流(输入与输出)。

(5)互联总线资源:内部各种资源的互联互通。

(6)微处理器(Cortex-M3、Cortex-A9、PowerPC):能够执行软件指令的资源。

(7)算数运算单元(高速硬件乘法器、乘法器);

(8)高速串行I/O接口;

(9)特殊功能模块(PCIE、DDR等硬IP核);

每个资源都类似一个专用ASIC芯片。

有了这些高度集成化的资源,FPGA的编程轻松很多,FPGA的编程就像搭积木。

充分利用这些已有资源库,FPGA的编程效率就可以得到极大的提升。

当然,实际情况,要比搭积木复杂很多,这里只是一个类比。

第5章 FPGA可编程的基本原理(原因)

FPGA编程就是对内部各种层次资源的整合和大规模的排兵布阵, 对FPGA内部资源的编排的过程,就是编程的过程。这句话的前提是:

(1)FPGA内部资源是可以重新编排的,而不是像ASIC的资源时固化不变。

(2)要有大量可用的基础资源可用,大规模“门”阵列就是可以编程的基本资源。

5.1 组合逻辑的编程(LUT):查找表实现任意组合逻辑

前面已经提到,组合电路是通过编程LUT(RAM)查找表中的内容,来实现组合逻辑的编程的。

 原理:

其实就是通过控制数据选择器将RAM的数据进行输出,比如要实现A|B|C|D运算,则该运算只有当A、B、C、D同时为0时,输出为0,其余时间输出均为1;

加入规定当数据选择端输入低电平时,数据选择器的上面输入端与输出端导通,

当数据选择端输入高电平时,数据选择器的下面输入端与输出端导通,则查找表应如下图所示:

 对FPGA进行编程,实际上就是把需要进行的运算结果计算出来并存储在RAM之中,当输入发生相应变化时,将RAM中对应的值进行输出即可;

一个N输入查找表(LUT)可以实现N个输入变量的任何逻辑功能,如N输入“与”、N输入“异或”等。

输入多于N个的函数、方程必须分开用几个查找表(LUT)实现,这个过程由综合软件自动完成。
 

5.2 时序电路的编程(D触发器)

那么时序电路如何实现编程的呢?

FPGA 中有很多的 D 触发器(DFF),既然有了 D 触发器(DFF),加上时钟,就能实现时序逻辑了, 通过把多个D触发器连接和组合起来,构成更复杂的时序电路。

那么如何把D触发器连接和组合起来呢?

答案就是具有可编程开关内部连线

FPGA 内部有大量的长的短的连线,这些连线能够将不同的 LE(CLB/LAB)的输入和输出连接起来。这样,假设每个 LE 实现一个单独的功能,然后多个 LE 的输入输出按照一定的规则使用连线连接起来,就能实现复杂的功能了。如下图所示!

上图为一个最最基本的 FPGA 架构,且不包括 I/O 块。

通过上图右半部分可以看到:一 个 FPGA 中以阵列的形式分布着很多的小逻辑块,这个块就是我们熟知的逻辑单元(LogicElements,简称LE/LAB/CBS),这些所有的小块共同构成了 FPGA 的可编程逻辑门阵列。

而为了把不同的逻辑单元连接起来,FPGA 中分布着大量的可编程互联资源,通过对这些可编程互联资源编程,就能够把各个不同的逻辑单元的输入、输出连接起来。

在上图的上半部分就演示了部分互联资源将多个逻辑单元按照一定的规则连接了起来。

这样看起来,这和我们的电路板模型非常的相似,在电路板上有各种芯片,每个芯片都有很多的管脚,通过 PCB 板走线把这些管脚按照正确的方式连接到一起,就能够形成一个可以实现特定功能的电路板了。

5.3 LE/LAB编程

前面提到,一个逻辑单元由一个查找表(LUT)和 D 触发器(DFF)组成,通过对LUT和D触发的组合编程,即实现了对LE/LAB的编程:

LUT 的输出 Q可以送给 D 触发器的数据输入端口 D,也可以不经过 D 触发器直接输出。当然了,实际上 D 触发器的输入也可以不来自于LUT 的输出,而来自于其他逻辑单元的输出。不经过 D 触发器输出,那这个 LE 实现的就是一个纯组合逻辑,经过 D 触发器输出,那这个 LE 实现的就是一个时序逻辑。当然,真实的逻辑单元里面可能还包含了很多其他辅助的电路,这里省略。

附录:

对FPGA资源的横向和纵向进一步的理解

[机缘参悟-16]:FPGA编程、软件编程与公司管理有着相似原理_文火冰糖的硅基工坊的博客-CSDN博客


作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/124722606


以上是关于[从零开始学习FPGA编程-5]:快速入门篇 - FPGA工作原理(从硬件资源整合的角度看FPGA编程)的主要内容,如果未能解决你的问题,请参考以下文章

[从零开始学习FPGA编程-8]:快速入门篇 - FPGA功能开发详细流程与关键步骤解读

[从零开始学习FPGA编程-6]:快速入门篇 - 国内外FPGA主要厂家及其主要产品系列开发工具

[从零开始学习FPGA编程-14]:快速入门篇 - 操作步骤3(功能仿真)-3-modelsim快速使用入门(8bits循环计数器)

[从零开始学习FPGA编程-10]:快速入门篇 - 操作步骤2 - Verilog HDL语言Module与硬件电路对应关系快速概览

[从零开始学习FPGA编程-20]:快速入门篇 - 操作步骤4-2-Altera Quartus II工具的快速使用(modelSim联合仿真程序下载到Altera开发板)

[从零开始学习FPGA编程-12]: 快速入门篇 - 操作步骤3(功能仿真)-1-Mentor HDL仿真工具modelsim SE 10.4简介与安装