FPGA|CPLD|ASIC论坛
直播中

白纪龙

7年用户 1305经验值
擅长:连接器 电源/新能源 连接器 模拟技术 连接器 测量仪表 连接器 EMC/EMI设计 连接器 嵌入式技术 连接器 连接器 连接器 连接器 接口/总线/驱动 连接器 处理器/DSP 连接器 光电显示 连接器 控制/MCU 连接器 连接器 连接器 MEMS/传感技术 连接器 电源/新能源 MEMS/传感技术 测量仪表 嵌入式技术 模拟技术 连接器 EMC/EMI设计 光电显示 处理器/DSP 接口/总线/驱动 控制/MCU
私信 关注
[经验]

我所认为的FPGA是什么?及设计和应用


你们中的一些人可能熟悉术语 FPGA 或现场可编程门阵列。熟悉并不一定能带来理解。那么 FPGA 到底是什么呢?
简单来说,它是一个逻辑芯片,其中包含一个二维阵列的逻辑单元和可编程开关。它们是集成电路,包含一组具有可编程互连的相同逻辑块。就像在一张空白的画布上你可以绘制任何你想要的图片一样,FPGA 允许工程师设计任何数字电路。他们说: 只要生成位文件,下载它,你就可以开始了!与传统的微控制器相比,这是一个很大的发展,因为这种控制器的体系结构不支持更大的设计。例如,像8051这样的微控制器使用了带有 CISC 指令集的哈佛体系结构。FPGA 没有任何内置的指令集,这为设计者提供了更大的灵活性。一个控制器有它自己的 CPU,它启动控制器,保留内存并执行几个任务。与微控制器不同,由于缺乏传统的体系结构,FPGA 无法在其上开始工作。
1.png

图1: 典型 FPGA 器件的表征图像
为什么是 FPGA?
如果你把它和微控制器相比较,FPGA 有很多优点。它更加灵活,因为它允许您设计所需的任何设计,而控制器的功能有限。它还提供了更高的内存可用性。两者的主要区别在于 FPGA 可以控制硬件,而微控制器可以控制软件。这就是为什么 FPGA 通常用硬件描述语言(hdl)编程的原因。
其他与 FPGA 概念相似的技术还有应用专用集成电路(ASIC)和复杂可编程逻辑器件集成电路(CPLD)。它们在应用程序、门的数量和基本架构方面有所不同。ASIC 是应用专用集成电路的缩写。顾名思义,它是为特定应用而设计的,而 FPGA 给予执行任何设计的自由。FPGA 还具有在出现错误时重新编程的能力,而 ASIC 则无法重新编程。这些也是由 HDLs 编程的。ASIC 比 FPGA 的优点是 FPGA 运行速度比 ASIC 慢。然而,fpga 可以像 asic 一样工作,这给它们带来了额外的好处。
下一个比较是 FPGA 和 CPLD (复杂可编程逻辑器件)。可编程逻辑器件具有 PAL (可程式逻辑阵列)制式和 fpga 的特点,主要比较点包括:
1.有非挥发性记忆体存储器,而 fpga 有易失性存储器。这意味着在电源开启时,CPLD 保存存储器,而 FPGA 则清除以前的数据。这就是为什么 FPGA 需要一个外部 ROM 的原因。这个存储器在电源开启时给予 FPGA,以便恢复以前的数据。
2.CPLD 的主要部件是一个宏单元。一个单独的宏单元由几个 AND 门、一个 d 触发器、一个多路复用器和一个 EX-OR 门组成。它们通过一个叫做可编程互连的块连接起来。FPGA 的主要元素是查找表(LUT)。在 Xilinx 设备中,LUT 基本上是一个函数发生器,它还可以提供16 × 1位的同步 RAM 和 ROM。函数生成器实现为4个输入 lut。
3.同时,CPLD 中可用的门数比 FPGA 中的门数要少。一个 CPLD 有大约500到12,000个门,而一个 FPGA 有3,000到5,000,000个门。
4. FPGA 的成本高于 CPLD 的成本。
因此,选择一个具有灵活性和门数较多的 FPGA 作为研究对象。在设计复杂电路时,这些要点很重要。由于 FPGA 可以通过编程实现 ASIC 功能,因此它比其他 FPGA 更受欢迎。
FPGA 体系结构:
如图所示,任何体系结构的主要块都是可配置逻辑块(CLBs)或逻辑块、互连和 i/o 线。
2.png


图2: 显示 FPGA 结构的图形图像

CLB 可以称为 FPGA 的基本构建块。它基本上是一个逻辑单元,可以配置或编程来执行所需的功能。它们被连接到互连块。CLB 可以使用基于 LUT 的逻辑或基于多路复用器的逻辑来实现。在基于 LUT 的逻辑中,该模块由查找表、 d 触发器和2:1复用器组成。触发器用作存储元件。复用器选择适当的输出。
每个 CLB 由一定数量的切片组成。切片成对分组,并按列排列。设备中 clb 的数量根据供应商和设备家族的不同而不同。例如,Xilinx make Spartan 3E FPGA 包含四个切片。每个片由两个 lut 和两个存储元素组成。LUT 的功能是实现逻辑,而专用存储元件可以是触发器或锁存器。Clb 以行和列的数组排列。
3.png

图3: 基于 FPGA 构建块 LUT 的 CLB 图形图像

4.png

图4: 基于多路交换的 CLB-FPGA 构建模块的图形表示

5.png

图5: 图解释在 Spartan3E FPGA 中 clb 的排列

互连是可编程的信号通路网络。这些存在于设备内功能元件的输入和输出之间。这也被称为路由选择。路由类型包括 lut 之间互连的本地路由、触发器和一般路由矩阵、 clb 行和列之间互连的一般路由、用于插针交换或锁定的 i/o 路由。这样做是为了使新的设计适应现有的 PCB 布局。其他路由方法包括专用路由源提高性能,全局路由分布时钟和其他信号。
6.png

图6: 用于 FPGA 器件的直接互连技术截面图

输入/输出块(IOBs)在封装引脚和设备内部逻辑之间提供可编程的单向或双向接口。在一个 IOB 中存在三个信号: 输入路径将数据从输入板传送到各自的线路,输出路径将数据从内部逻辑通过一个复用器和一个三态驱动器传送到 IOB 板。最后一个信号是决定输出驱动器高阻状态的三状态路径。所有的信号都有一个逆变器的选项。
7.png

一种 Spartan2 FPGA 输入输出模块
图7: 显示 Sparatan2 FPGA 输入/输出细节的框图

分布式块 RAM
分布式块 RAM 的概念主要存在于 Xilinx 设备中。Xilinx 设备的大多数 clb 都包含一个单端口或双端口的小 RAM。由于这个 RAM 分布在 FPGA 中的几个 lut 上,因此称为分布式 RAM。分布式 RAM 的缺点是不能用于大型设计,因为单个 CLB 是不够的。您可以并行地实现几个块 ram,以便实现更大、更宽的内存。Xilinx 合成器工具推断哪些内存将在代码的帮助下使用。使用大量元素的并行阵列可以生成大型 RAM。
块存储器是由两个端口存储器组成的专用块。它由几千字节的 RAM 组成。FPGA 中存在的块 ram 的数量取决于 FPGA 的先进程度。例如,Spartan 6 FPGA 拥有比 Spartan 3更大的块 RAM。块 RAM 应该用于大型的实现。
这两种存储器有不同的工作模式。虽然 WRITE 操作对于两者都是同步的,但是 READ 操作是不同的。对于分布式随机存取存储器,数据一经输入就会被直接读取。它不等待时钟信号。这意味着它是异步的。另一方面,块 RAM 以同步操作模式运行。这意味着数据只能在时钟的上升边缘写入内存。
通过使用 ram _ style 约束,可以强制实现两个 ram 中的任何一个。
编写 FPGA 程序
有两种语言可以用来编写 FPGA: VHDL,Verilog 和 System Verilog。
VHDL 是超高速集成电路硬件描述语言的缩写,它具有实际硬件所具有的一切特点。
这种语言的主要特点包括:
1.它是一种并发语言。这意味着语句可以以类似于现实生活中的硬件的并行方式实现。
2.它是一种顺序语言,意味着语句按顺序一个接一个地实现。
3.这是一种特定时间的语言。这意味着像时钟这样的信号可以根据您的要求进行操作。例如,只有当时钟处于上升沿时,你才能启动一个进程,提供足够的延迟,倒置时钟等等。
4.它不区分大小写。VHDL 代码被转换成映射到设备上的导线和门。
VHDL 的不同造型风格包括行为风格、结构风格、数据流风格以及三者的结合。组合语句和顺序语句可用于实现建模样式。顺序语句一个接一个地实现(串行)。另一方面,组合语句是同时执行的(并行方式)。
在行为风格中,只描述了功能。它主要使用 PROCESS 语句实现。寄存器的结构没有定义。
在结构类型中,电路是用互联元件来描述的。例如,用两个半加法器实现的全加器。
在数据流方式中,电路使用并发语句来描述。例如,一个 MUX 可以用诸如 EXOR 这样的门来描述(换句话说,根据从真值表中获得的布尔表达式来实现)。这不是编写代码的一种非常现实的方法,因为它有几个依赖项,并且使用并发语句。
混合造型风格可以使用上述三种风格的任意组合。
下面的代码是 VHDL 中一个4位计数器的行为实现。

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use work.display.all;
entity counter is
   Port ( clk : in STD_LOGIC;
          out_count : out STD_LOGIC_VECTOR (3 downto 0));
end counter;

计数器的行为是:
begin
process(clk)
variable count:std_logic_vector(3 downto 0):=”0000″;
begin
           if(clk’event and clk=’1′) then
count:=count+’1′;
if(count=”1111″) then
count:=”0000″;
end if;
end if;
out_count<=count;
end process;
end Behavioral;
8.png

图8: RTL 示意图

Verilog 也是一种硬件描述语言,主要用于设计和验证数字电路和 RTL 级抽象。它允许不同抽象层次的设计。它的语法类似于 c 语言。
9.png

图9: 在 FPGA 设备中 Verilog 如何定义硬件的示例

Verilog 有三个抽象层次: 行为层、 RTL 层和门层。
在行为抽象中,系统由并发算法描述。在 RTL 中,系统是通过相对于时钟在寄存器之间传输数据来实现的。在门级抽象中,一个系统是拥有属性/时间和逻辑链接。
Verilog 系统是由模块和端口构建的。Verilog 系统是由各种组件组成的模块组成的。一个模块可以由其他模块的实例组成。一个端口可以有三种类型: 输入,输出,输入输出。
单元包括:
1. Parameters: 在编译时指定值的常量。
2. Nets: 用于连接组件
3. Registers: 这些是存储元素。值存储在过程语句期间。寄存器的类型有 reg、 integer、 type 和 real。
4. Primitives and Instances: : 预定义的模块类型,如逻辑门。
5. Continuous Assignments: 描述数据如何从一个地方移动到另一个地方(从一个网络或寄存器)。
6. Procedural Blocks: 这些代表了顺序行为,这些是可执行语句的序列。
7. Task/Function definitions:仅在程序块中实现。
91.png

图10: Verilog 系统框图

VHDL v/s VERILOG
这两种语言在硬件描述方面同样有效。选择取决于诸如个人选择、 EDA 工具的可用性和商业、商业和市场问题等因素。
在编译方面,在 VHDL 中,可以对驻留在同一文件中的多个设计单元进行不同的编译。在 verilog 中,编译是一种加速仿真的方法。
在数据类型方面,VHDL 提供了广泛的数据类型选择(用户定义和其他)。在 Verilog,所有数据类型都是预定义的。尽管存在这个缺点,Verilog 数据类型还是很容易使用,并且侧重于硬件的建模方面,而不是抽象方面。对于高级结构,VHDL 是首选,而 Verilog 是首选,因为它的简单。提供了各种库,Verilog 没有。
VHDL 有助于管理大型设计的帮助下,配置,生成通用和包。Verilog 没有语句,所有语句都可以帮助管理大型设计结构。由于 Verilog 展示了类似 c 的特性,与 VHDL 相比,对于初学者来说,它更容易学习。
FPGA 的应用
由于其优点,FPGA 适用于从航空航天、国防到汽车等广泛的行业。这主要是因为 FPGA 是可定制的。像思科这样的公司在交换机和路由器中使用 FPGA 来提高硬件的速度。
在音频领域,FPGA 广泛应用于便携式电子、数字信号处理等领域。在射电天文学中,与微处理器和 DSP 相比,FPGA 具有更好的计算性能。
Fpga 在核电厂的运营中也有潜在的应用。这是因为基于 fpga 的系统可以变得更简单、更可测试、对复杂软件的依赖性更小,并且更容易满足安全和安全相关应用的要求。基于 fpga 的系统现在已经开始出现在新的工厂 i & c 设计中,以及运行工厂的更换和升级中。
在医疗领域,fpga 被用于 CT 扫描仪、 MRI 机、超声波机、 x 光机和外科系统。
随着这些应用,fpga 也可以用于无线通信系统、安全系统、汽车应用、科学仪器和高性能计算。
因此,由于具有灵活性、定制性和低成本,fpga 在各个领域都有着广泛的应用。
20220318-164618.png

  • 二维码.png

回帖(2)

奶酪0

2022-4-26 13:04:54
方便加下吗
举报

infortrans

2022-12-7 11:21:41
科普基础知识。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分