文章目录

  • 前言
    • CPU和DSP、FPGA、ASIC对比
    • FPGA和CPLD比较
  • FPGA基础
    • IOB——输入输出单元
    • CLB——可编程逻辑模块
      • LUT——查找表
      • MUX——选择器(复用器)
      • Carry Chain——进位链
      • Flip-Flop——触发器
    • BRAM——块RAM
    • DCM——数字时钟管理器
      • 布线资源
      • 内嵌的底层功能单元
      • 内嵌专用硬件模块
  • 可参考文献

前言

CPU和DSP、FPGA、ASIC对比

CPU和DSP:软件可编程、灵活性高、功耗高

FPGA:硬件可编程、灵活性高、功耗较低

ASIC:特定应用固化、不可编程,不灵活,功耗很低

灵活性与效率之间存在矛盾,因此出现了芯片融合的方案——即MPU+DSP+专用IP+PL(可编程逻辑)

FPGA和CPLD比较

相同点

统称为PLD,都属于可编程逻辑器件

不同点

CPLD以乘积项结构方式构成逻辑行为,触发器有限,乘积项丰富,适用于完成复杂的逻辑组合任务。

FPGA触发器丰富,适用于完成时序逻辑,多用于数字信号处理领域。

FPGA基础

​ 目前主流的FPGA仍以查找表技术为基础,主要由六部分组成:可编程输入输出单元(IOB)、可编程逻辑单元(CLB)、完整的时钟管理(DCM)、嵌入块状RAM(BRAM)、布线资源、内嵌的底层功能单元(soft core,软核,区别于软IP核)和内嵌专用硬件模块(hard core,硬核,区别于硬IP核)。其中最为主要的是可编程输出输出单元、可编程逻辑单元和布线资源

IP核一般分为软IP核,硬IP核和固IP核。和上述的软硬核并不是同一个定义范畴。

​ 这些就是内部资源,主要是逻辑单元和块状RAM及一些内嵌功能单元。

​ 再放大,这些逻辑单元的内部结构也出来了,像大型“停车场”,其中亮色的表示被占用的资源,亮色部分越多,表示资源利用率越高。

IOB——输入输出单元

​ FPGA内的I/O按组(bank)分类,每个组都能独立支持不同的I/O标准,但同一组的电器标准必须一致,否则综合时会报错。IOB通过软件的灵活配置(一般指约束文件),可适应不同的电气标准核I/O物理特性,可调整驱动电流的大小,还可以改变上下拉电阻的阻值。

​ IOB的结构如上,PAD即与外界连接焊盘引脚,同时有一个IBUF和OBUF。当配置为output时,连接左边的OBUF,配置为input时,连接右边的IBUF。在FPGA中,每一个IOB都有与之对应的一个xIOI3模块(,有LIOI3和RIOI3之分,由三个触发器Flip-Flop组成,TFF,OFF和IFF),且其布线资源比较固定,如下所示

切换到逻辑资源视角且放大某一个xIOI3看如下所示

​ 使用xIOI3中的触发器有一个较大的好处,就是其布线资源固定,且最靠近各个引脚,可以实现较低的延迟,在某些特定的场合如高速数据采样下,使用xIOI3可以实现良好的采样效果。如果不使用IOB的触发器而连接普通的Slice内部寄存器,则信号进入第一级寄存器的布线会因为每次综合结果的不同而各有不同,且由于Slice距离接口较远,有可能导致高速信号的采样不正确,不满足时序要求。

​ 一般情况下IOB的寄存器缺省为OFF,如果需要设置接口的寄存器,则在约束文件中应该约束

set_property IOB TRUE {get_ports xxx}

​ 可以通过写两个完全一致的代码,在.xdc文件下约束为TRUE和FALSE,即可发现区别。

CLB——可编程逻辑模块

【注】此部分直接从FPGA基础学习(7) – 内部结构之CLB复制,因为博主总结得很好,也从中学习到了不少知识和方法。

​ 可配置逻辑单元(Configurable Logic Block,CLB)在FPGA中最为丰富,由两个SLICE组成。由于SLICE有SLICEL(L:Logic)和SLICEM(M:Memory)之分,因此CLB可分为CLBLL和CLBLM两类。

点击内部的逻辑单元,通过阴影区别包含的范围,你可以清晰的看到结构划分的层级。在旁边窗口可以清晰的看到选中部分的属性(Properties)。

来,再放大,放大到一个SLICEL,如下图所示。

​ SLICEL和SLICEM内部都包含4个6输入查找表(Look-Up-Table,LUT6)、3个数据选择器(MUX)、1个进位链(Carry Chain)和8个触发器(Flip-Flop),下面分部分介绍的时候,时不时可以再回头看这张结构图。

LUT——查找表

​ 虽然SLICEL和SLICEM的结构组成一样,但两者更细化的结构上略有不同,区别在于LUT6上(如下图所示),从而导致LUT6的功能有所不同(如下表格所示)。

LUT功能 SLICEL SLICEM
逻辑函数发生器 v v
ROM v v
分布式RAM v
移位寄存器 v

​ 上边的功能可以看到,不论是SLICEL还是SLICEM,他们的LUT6都可以作为ROM使用,配置为64x1(占用1个LUT6,64代表深度,1代表宽度)、128x1(占用2个LUT6)和256(占用4个LUT6)的ROM。

​ 另外既然SLICEM中的M代表memory的意思,所以增加了更多存储功能。可以配置为RAM,尤其指分布式RAM。其中RAM的写操作为同步,而读操作是异步的,即与时钟信号无关。如果要实现同步读操作,则要额外占用一个触发器,从而增加了意识时钟的延迟(Latency),但提升了系统的性能。**这就解释了为什么我们实现RAM同步读写的时候,读出输出要延迟一个clk。**一个LUT6可配置64x1的RAM,当RAM的深度大于64时,会占用额外的MUX(F7AMUX,F7BMUX,F8MUX,即一个SLICE中的那3个MUX)。

SLICEM中的LUT还可以配置为移位寄存器,每个LUT6可实现深度为32的移位寄存器,且同一个SLICEM中的LUT6(4个)可级联实现128深度的移位寄存器。

MUX——选择器(复用器)

​ SLICE中的三个MUX(Multiplexer:F7AMUX,F7BMUX和F8MUX)可以和LUT6联合共同实现更大的MUX。事实上,一个LUT6可实现4选1的MUX

​ SLICE中的F7MUX(F7AMUX和F7BMUX)的输入数据来自于相邻的两个LUT6的O6端口。

​ 一个F7MUX和相邻的两个LUT6可实现一个8选1的MUX。因此,一个SLICE可实现2个8选1的MUX。

​ 4个LUT6、F7AMUX、F7BMUX和F8MUX可实现一个16选1的MUX。因此,一个SLICE可实现一个16选1的MUX。

Carry Chain——进位链

​ 进位链用于实现加法和减法运行。就是结构图中,中间那个大的部分,可以看到它内部实际还包含4个MUX和4个2输入异或门(XOR)。

异或运算是加法运算中必不可少的运算。

Flip-Flop——触发器

​ 每个SLICE中有8个触发器。这个8个触发器可分为两大类:4个只能配置为边沿敏感的D触发器(Flip-Flop)和4个即可配置为边沿敏感的D触发器又可配置为电平敏感的锁存器(Flop&Latch)。当后者被用作锁存器的时候,前者将无法使用。

​ 当这8个触发器都用作D触发器时,他们的控制端口包括使能端CE、置位/复位端口S/R和时钟端口CLK是对应共享的,也就是就是说共用的。{CE,S/R,CLK}称为触发器的控制集。显然,在具体的设计中,控制集种类越少越好,这样可以提高触发器的利用率。**那么怎样减少控制集种类呢?**我的理解是:

  • 减少时钟种类,即频率越少越好;
  • 统一规范的设计逻辑,如复位。

S/R端口可配置为同步/异步置位或同步/异步复位,且高有效,因此可形成4种D触发器,如下表所示。

原语(Primitive) 功能描述 原语(Primitive) 功能描述
FDCE 同步使能,异步复位 FDRE 同步使能,同步复位
FDPE 同步使能,异步置位 FDSE 同步使能,同步置位

在我们的常规设计中,FDCE和FDPE占了绝大多数。

BRAM——块RAM

​ 绝大多数FPGA都具有内嵌的块RAM。BRAM可被配置成位单端口RAM,双端口RAM,内容寻址存储器(CAM,Coment-Addressable Memory)和FIFO等常用的存储结构。CAM存储器在其内部的每个存储单元都有一个比较逻辑,写入CAM的数据会和内部的每一个数据进行比较,并返回与端口数据相同的所有数据的地址。

​ 一般的FPGA器件中,单片BRAM的容量为18Kbit,即位宽为18bit、深度为1024,可根据需要改变其位宽和位深,也可将多片BRAM级联构成大规模RAM。

DCM——数字时钟管理器

​ 目前,业内大多数FPGA均提供数字时钟管理,在内部资源中通常整合为CMT(Clock Manage Tile,时钟管理模块),每个区域对应一个CMT,一个CMT由一个MMCM(Mix-mode Clock Manager)和1个PLL(Phase Locked Loop)组成。主要起到频率综合、去抖动和去偏斜的作用。

布线资源

FPGA芯片内部有丰富的布线资源,根据工艺、长度、宽度和分布位置的不同而划分为4类:

  1. 全局布线资源,用于芯片内部全局时钟和全局复位/置位的布线;
  2. 长线资源,用于完成芯片bank间的告诉信号和第二全局时钟信号的布线;
  3. 短线资源,用于完成基本逻辑单元之间的逻辑互联和布线;
  4. 分布式的布线资源,用于专有时钟、复位等控制信号线。

内嵌的底层功能单元

​ 内嵌功能模块主要指延迟锁定环DLL,锁相环PLL,DSP等软处理核。其主要是一些比较基础的模块用于辅助完成FPGA的基础功能和优化性能。

内嵌专用硬件模块

​ 内嵌专用硬件模块是相对于底层嵌入的软核而言的,FPGA内部集成的强大硬核等效于ASIC电路,如专用乘法器用于提高乘法速度,**串并收发器(SERDES)**将收发速度提升到数十Gbps,如我们经常看到的一些芯片参数(GTx,即Gigabyte Transfer,兆比特传输,GTP<GTX<GTH),CPU和DSP用于构建SoC等。

可参考文献

  1. Xilinx官网用户手册及指导手册
  2. 《VIVADO从此开始》——高亚军著

【FPGA基础篇】底层结构组成相关推荐

  1. 【FPGA——基础篇】同步FIFO与异步FIFO——Verilog实现

    FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据, 其 ...

  2. 【FPGA——基础篇】latency与delay概念的区别

    最近学习流水线以及状态机,总遇到注入加入寄存器可以分割组合逻辑,从而提高电路的运行频率的说法:还有流水线可以提高速度的说法,刚开始很是疑惑,觉得流水线的方法,输出与输入之间的延时更大了,怎么会提高频率 ...

  3. 【FPGA——基础篇】如何理解时序电路

    一.概述 时序逻辑示意图,如下图所示.数据从一个寄存器出来,经过组合逻辑到达下一个寄存器. 在学习数字电路的过程中,我们都知道时序逻辑,但是大家对时序逻辑真的了解吗? (1)纯组合逻辑电路的缺点在哪? ...

  4. Altera FPGA/CPLD设计 基础篇+高级篇(附随书光盘)

    获取方法: 微信公众号:OpenFPGA   后台回复 Altera设计 基础篇介绍 <Altera FPGA/CPLD设计(基础篇)>是王诚.蔡海宁.吴继华编著的一本图书.该书可作为高等 ...

  5. FPGA基础入门篇(四) 边沿检测电路

    FPGA基础入门篇(四)--边沿检测电路 一.边沿检测 边沿检测,就是检测输入信号,或者FPGA内部逻辑信号的跳变,即上升沿或者下降沿的检测.在检测到所需要的边沿后产生一个高电平的脉冲.这在FPGA电 ...

  6. FPGA系统性学习笔记连载_Day1数字电路基础篇

    FPGA系统性学习笔记连载_Day1数字电路基础篇 连载<叁芯智能FPGA设计与研发就业班-第一天> <数字电路基础1> 原创作者:紫枫术河 转载请联系群主授权,否则追究责任 ...

  7. FPGA基础知识极简教程(4)从FIFO设计讲起之异步FIFO篇

    博文目录 写在前面 正文 同步FIFO回顾 $clog2()系统函数使用 综合属性控制资源使用 异步FIFO设计 FIFO用途回顾 异步FIFO原理回顾 异步FIFO设计 异步FIFO仿真 参考资料 ...

  8. 最全MySQL基础篇

    文章目录 导入表的问题 第三章_最基本的SELECT语句 1. SQL语言的规则和规范 1) 基本规则 2) SQL大小写规范(建议遵守) 3) 注释 4) 命名规则 2. 基本的SELECT语句 1 ...

  9. 《Java 后端面试经》Java 基础篇

    <Java 后端面试经>专栏文章索引: <Java 后端面试经>Java 基础篇 <Java 后端面试经>Java EE 篇 <Java 后端面试经>数 ...

最新文章

  1. 线性基+树上倍增 ---- BZOJ4568[线性基+树上倍增]
  2. python编程基础语法-Python编程入门基础语法详解
  3. cad加载tiff影像插件_设计大神CAD常用的七个插件你会用几个?
  4. CentOS bug修复指令集(阿里云漏洞修复方法)
  5. 天津天河计算机技术有限公司,“天河一号”超级计算机落户天津,命名为“天河”,取天津与“银河团队...
  6. magento URL分析,查找修改相应文件
  7. 流量分析的瑞士军刀:Zeek
  8. aspx反射调用方法
  9. 黑苹果intel网卡驱动方法
  10. 整理与随笔——抽象代数 第一章 群 1.1-1.2 代数体系、半群与群
  11. UE4简单水体使用记录
  12. html调用矢量小图标的方法,微信小程序里引入SVG矢量图标的方法
  13. IT从业者创业公司生存指南:创业初期 ---- 指点江山,激扬文字,粪土当年万户侯
  14. 没的选择时,存在就是合理的::与李旭科书法字QQ聊天记录
  15. linux裁剪图片的软件,【美图秀秀Linux版】美图秀秀Linux版下载 v1.0.0.0 免费最新版-趣致软件园...
  16. 学习ELMo从文本中提取特征的分步NLP指南
  17. Java多线程Zip压缩
  18. 13、断开蓝牙设备连接(closeBLEConnection)
  19. 库存融资管理系统-覆盖全行业几十种第三方接口
  20. 收费邮箱有什么好处?会员电子邮箱怎么注册呢?

热门文章

  1. 【转贴】对《高质量程序设计指南--C++/C第二版》的探讨
  2. 华为手机开发人员选项哪里去了
  3. linux系统配置sftp服务器,linux配置sftp服务器配置
  4. 串口、COM口、并口、RS232、USB
  5. Java基础(一) 八大基本数据类型
  6. 「网络安全」Web防火墙和下一代防火墙的区别
  7. winform 中listBox控件绑定list类型数据源,并设置DisplayMember
  8. python打包exe报错编码问题_python打包成exe,但执行exe报错,求解。
  9. php mail 垃圾邮件,如何避免我的邮件从PHP邮件()被标记为垃圾邮件? - 程序园
  10. opencv 直方图 CV::calcHist使用