Wherelse Blog

FPGA秋招学习笔记整理(2)

2021-10-13 · 18 min read
FPGA 笔记

FPGA autumn recruitment study notes finishing (2): FPGA hardware composition and logic circuit
FPGA秋招学习笔记整理(2):FPGA硬件构成与逻辑电路

FPGA的组成

包括可编程输入/输出单元、基本可编程逻辑单元、嵌入式块RAM、丰富的布线资源、底层嵌入功能单元和内嵌专用硬核。

可编程输入/输出单元作用是为FPGA提供内部资源与外围电路之间的接口,提供输入缓冲、输出驱动、接口电平转换、阻抗匹配、延迟控制等功能。高端FPGA的输入/输出模块还提供了DDR输入/输出接口、高速串行接口(SERDES)。
嵌入式块RAM,大多数FPGA都有内嵌的块RAM。嵌入式块RAM可以配置为单端口RAM、双端口RAM、伪双端口RAM、CAM、FIFO等存储结构。
丰富的布线资源,在设计过程中,由布局布线器自动根据输入的逻辑网表的拓扑结构和约束条件选择可用的布线资源连通所用的底层单元模块。

FPGA的基本可编程逻辑单元是由查找表(LUT)和寄存器(Register)组成的,查找表完成纯组合逻辑功能。比较经典的基本可编程单元的配置是一个寄存器加一个查找表。

LUT 本质上是一个SRAM,里面存储的数据类似于真值表。对于4输入的LUT而言,实际上就是4位地址位,一位数据位的存储器,即 (24)1=16(2^4)*1 = 16,能够存储16位数据。6输入的LUT相当于是6位地址线一位数据位,能够存储64bit的数据。

FPGA芯片内有两种存储器资源:一种是BLOCK RAM(嵌入式块RAM),另一种是由LUT配置成的内部存储器(也就是分布式RAM)

锁存器(latch)和触发器(flip-flop)

锁存器(latch)是电平触发的存储单元,数据存储的动作取决于输入时钟(或者使能)信号的电平值,仅当锁存器处于使能状态时,输出才会随着数据输入发生变化。
触发器(Flip-Flop,简写为FF)也叫双稳态门,又称双稳态触发器,是一种可以在两种状态下运行的数字逻辑电路。触发器一直保持它们的状态,直到它们收到输入脉冲,又称为触发。当收到输入脉冲时,触发器输出就会根据规则改变状态,然后保持这种状态直到收到下一个触发。触发器对脉冲边沿敏感,其状态只在时钟脉冲的上升沿或下降沿的瞬间改变。

锁存器与触发器的区别

锁存器和触发器是具有记忆功能的二进制存储器件,是组成各种时序逻辑电路的基本器件之一。
锁存器( latch)是电平触发的存储单元,数据存储的动作取决于输入时钟(或者使能)信号的电平值,尽当锁存器处于使能状态时,输出才会随着数据输入发生变化。触发器(Flip-Flop)也是数字电路中的一种具有记忆功能的逻辑元件。
触发器对脉冲边沿敏感的存储单元电路,它只在触发脉冲的上升沿(或下降沿)瞬间改变其状态。
其区别在于,latch同其所有的输入信号相关,当输入信号变化时latch就变化,没有时钟端;flip-flop受时钟控制,只有在时钟触发时才采样当前的输入,产生输出。

组合逻辑电路与时序逻辑电路

数字电路根据逻辑功能的不同特点,可以分成两大类:一类叫做组合逻辑电路,简称组合电路或组合逻辑;另一类叫做时序逻辑电路,简称时序电路或时序逻辑。

组合逻辑电路在逻辑功能上的特点是任意时刻的输出仅仅取决于该时刻的输入,与电路原来的状态无关。 组合逻辑电路没有记忆功能,没有反馈环路。时序逻辑电路在逻辑功能上的特点是任意时刻的输出不仅取决于当时的输入信号,而且还取决于电路原来的状态,或者说,还与以前的输入有关。组合逻辑的逻辑级数不能太长,逻辑级数太长就会导致总的延迟太大。

时序电路是有记忆功能的, 它在任何时刻的输出,不仅与该时刻的输入信号有关,而且还与该时刻以前的输入信号有关。

时序逻辑电路和组合逻辑电路并不是完全割裂开来的,而更像是一种包含关系,即时序逻辑电路中肯定有组合逻辑的成分存在,但组合逻辑电路中却不可能有时序逻辑的成分存在

组合逻辑电路的竞争与冒险

数字电路中的竞争与冒险出现在组合逻辑电路中。 组合逻辑电路中,同一信号经不同的路径传输后,到达电路中某一会合点的时间有先有后,这种现象称为逻辑竞争,而因此产生输出干扰脉冲的现象称为冒险。

产生原因

信号在组合逻辑电路内部通过连线和逻辑单元时,都有一定的延时。延时的大小与连线的长短和逻辑单元的数目有关,同时还受器件的制造工艺、工作电压、温度等条件的影响。此外,信号的高低电平转换也需要一定的过渡时间。由于存在这两方面因素,多路信号的电平值发生变化时,在信号变化的瞬间,组合逻辑的输出有先后顺序,并不是同时变化。
由于竞争往往会出现一些不正确的尖峰信号,这些尖峰信号称为“毛刺”。 如果一个组合逻辑电路中有“毛刺”出现,就说明该电路存在“冒险”。

解决办法

消除竞争冒险常用方法有:增加冗余项、接入滤波电容和引入封锁脉冲或选通脉冲等。

  • 增加冗余项消除竞争冒险,增加冗余项的方法是通过在函数表达式中“加”上多余的“与”项或“乘”上多余的“或”项,使原函数不可能在某种条件下化成X+X或X·X的形式,从而消除可能产生的竞争冒险,冗余项的选择可用代数法或卡诺图法。
  • 输出端并联电容器消除竞争冒险,竞争冒险所产生的干扰脉冲一般很窄。逻辑电路在较慢速度下工作时,可以在输出端并接一个不大的滤波电容。并用门电路的输出电阻和电容器构成低通滤波电路,对很窄的尖峰脉冲(其频率很高)起到了平波的作用。这时在输出端便不会出现逻辑错误。接人滤波电容的方法简单易行,但输出电压波形随之变化,故只适用于对输出波形前后沿无严格要求的场合。
  • 引入封锁脉冲消除竞争冒险,封锁脉冲是在输入信号发生竞争的时间内,引入一个脉冲将可能产生尖峰干扰脉冲的门封锁住,从而消除竞争冒险。封锁脉冲应在输入信号转换前到来,转换结束后消失。
  • 加选通脉冲消除竞争冒险,选通脉冲是当电路输出端达到新的稳定状态之后,引人选通脉冲,从而使输出信号是正确的逻辑信号而不包含干扰脉冲。引入封锁脉冲或者选通脉冲的方法比较简单,而且不增加器件数目。但这种方法有一个局限性,就是必须找到一个合适的封锁脉冲或选通脉冲。
  • 用格雷码替代二进制代码消除竞争冒险,确保每一时刻只有一个代码变化

同步逻辑电路与异步逻辑电路

同步逻辑电路:存储电路中所有触发器的时钟输入端都接同一个时钟脉冲源,因而所有触发器的状态的变化都与所加的时钟脉冲信号同步。
异步逻辑电路:电路没有统一的时钟,有些触发器的时钟输入端与时钟脉冲源相连,只有这些触发器的状态变化与时钟脉冲同步,而其他的触发器的状态变化不与时钟脉冲同步。

软核、固核和硬核

什么是IP核

IP核是具有知识产权的集成电路芯核总称,是经过反复验证过的、具有特定功能的宏模块,与芯片制造工艺无关,可以移植到不同的半导体工艺中。到了SOC 阶段,IP 核设计已成为ASIC 电路设计公司和FPGA 提供商的重要任务,也是其实力体现。对于FPGA 开发软件,其提供的IP 核越丰富,用户的设计就越方便,其市场占用率就越高。目前,IP 核已经变成系统设计的基本单元,并作为独立设计成果被交换、转让和销售。

核的分类

从IP核的提供方式上,通常将其分为软核、固核和硬核这3类。从完成IP核所花费的成本来讲,硬核代价最大; 从使用灵活性来讲,软核的可复用使用性最高。与软核实现方式相比,硬核可以把功耗降低5~10 倍, 节约将近90%的逻辑资源。

软核

软核(Soft IP Core) : 软核在EDA 设计领域指的是综合之前的寄存器传输级(RTL) 模型;具体在FPGA 设计中指的是对电路的硬件语言描述,包括逻辑描述、网表和帮助文档等。软核只经过功能仿真,需要经过综合以及布局布线才能使用。其优点是灵活性高、可移植性强,允许用户自配置;缺点是对模块的预测性较低,在后续设计中存在发生错误的可能性,有一定的设计风险。软核是IP 核应用最广泛的形式。

固核

固核(Firm IP Core) :固核在EDA 设计领域指的是带有平面规划信息的网表;具体在FPGA 设计中可以看做带有布局规划的软核,通常以RTL 代码和对应具体工艺网表的混合形式提供。将RTL 描述结合具体标准单元库进行综合优化设计,形成门级网表,再通过布局布线工具即可使用。和软核相比,固核的设计灵活性稍差,但在可靠性上有较大提高。 目前,固核也是IP 核的主流形式之一。

硬核

硬核 (Hard IP Core) :硬核在EDA 设计领域指经过验证的设计版图;具体在FPGA 设计中指布局和工艺固定、经过前端和后端验证的设计,设计人员不能对其修改。不能修改的原因有两个:首先是系统设计对各个模块的时序要求很严格,不允许打乱已有的物理版图;其次是保护知识产权的要求,不允许设计人员对其有任何改动。IP 硬核不允许修改的特点使其复用有一定的困难,因此只能用于某些特定应用,使用范围较窄。

FPGA的常用电平标准

常用的电平标准有:
TTL、CMOS、LVTTL、LVCMOS、ECL、PECL、LVPECL、RS232、RS485等,还有一些速度比较高的LVDS、GTL、PGTL、CML、HSTL、SSTL等。

  1. TTL:Transistor-Transistor Logic 三极管结构。
    VCC=5V,VOH2.4V,VOL0.5V,VIH=2V,VIL0.8VVCC=5V,V_{OH} \geq 2.4V,V_{OL}\leq 0.5V,V_{IH}=2V,V_{IL}\leq 0.8V
    因为2.4V与5V之间还有很大空闲,对改善噪声容限并没什么好处,又会白白增大系统功耗,还会 影响速度。所以后来就把一部分“砍”掉了,也就是LVTTL。

  2. LVTTL 又分3.3V、2.5V以及更低电压的 LVTTL (Low Voltage TTL)。
    3.3V LVTTL:VCC=3.3V,VOH2.4V,VOL0.4V,VIH2V,VIL0.8VVCC=3.3V,V_{OH}\geq 2.4V,V_{OL}\leq 0.4V,V_{IH}\geq 2V,V_{IL}\leq 0.8V
    2.5V LVTTL:VCC=2.5V,VOH2.0V,VOL0.2V,VIH1.7V,VIL0.7VVCC=2.5V,V_{OH}\geq 2.0V,V_{OL}\leq 0.2V,V_{IH}\geq 1.7V,V_{IL}\leq 0.7V
    TTL使用注意: TTL电平一般过冲都会比较严重,可能在始端串22欧或33欧电阻; TTL电平输入脚悬空时是内部认为是高电平。要下拉的话应用1k以下电阻下拉。 TTL输出不能驱动CMOS输入。

  3. CMOS:Complementary Metal Oxide Semiconductor PMOS NMOS。
    VCC=5V,VOH4.45V,VOL0.5V,VIH3.5V,VIL1.5VVCC=5V,V_{OH}\geq 4.45V,V_{OL}\leq 0.5V,V_{IH}\geq 3.5V,V _{IL}\leq 1.5V CMOS相对TTL有了更大的噪声容限,输入阻抗远大于TTL输入阻抗。

  4. LVCMOS: 对应3.3V LVTTL,出现了LVCMOS,可以与3.3V的LVTTL直接相互驱动。
    3.3V LVCMOS:VCC=3.3V,VOH3.2V,VOL0.1V,VIH2.0V,VIL0.7VVCC=3.3V,V_{OH}\geq 3.2V,V_{OL}\leq 0.1V,V_{IH}\geq 2.0V,V_{IL}\leq 0.7V
    2.5V LVCMOS:VCC=2.5V,VOH2V,VOL0.1V,VIH1.7V,VIL0.7VVCC=2.5V,V_{OH}\geq 2V,V_{OL}\leq 0.1V,V_{IH}\geq 1.7V,V_{IL}\leq 0.7V
    CMOS使用注意: CMOS结构内部寄生有可控硅结构,当输入或输入管脚高于VCC一定值(比如一些芯片是0.7V)时,电流足够大的话,可能引起闩锁效应,导致芯片的烧毁。

  5. ECL :Emitter Coupled Logic 发射极耦合逻辑电路(差分结构)
    VCC=0V,VEE=5.2V,VOH=0.88V,VOL=1.72V,VIH=1.24V,VIL=1.36VVCC=0V,VEE=-5.2V,V_{OH}=-0.88V,V_{OL}=-1.72V,V_{IH}=-1.24V,V_{IL}=-1.36V 速度快,驱动能力强,噪声小,很容易达到几百M的应用。但是功耗大,需要负电源。

  6. PECL :Pseudo/Positive ECL,为简化电源 出现了PECL(ECL结构,改用正电压供电)和LVPECL。
    PECL: VCC=5V,VOH=4.12V,VOL=3.28V,VIH=3.78V,VIL=3.64VVCC=5V,V_{OH}=4.12V,V_{OL}=3.28V,V_{IH}=3.78V,V_{IL}=3.64V
    LVPELC:VCC=3.3V,VOH=2.42V,VOL=1.58V,VIH=2.06V,VIL=1.94VVCC=3.3V,V_{OH}=2.42V,V_{OL}=1.58V,V_{IH}=2.06V,V_{IL}=1.94V
    ECL、PECL、LVPECL使用注意:不同电平不能直接驱动。中间可用交流耦合、电阻网络或专用芯片 进行转换。以上三种均为射随输出结构,必须有电阻拉到一个直流偏置电压。(如多用于时钟的LVPECL: 直流匹配时用130欧上拉,同时用82欧下拉;交流匹配时用82欧上拉,同时用130欧下拉。但两种方式工作后直流电平都在1.95V左右。)

  7. LVDS :前面的电平标准摆幅都比较大,为降低电磁辐射,同时提高开关速度又推出LVDS电平标准。 Low Voltage Differential Signaling,差分对输入输出,内部有一个恒流源3.5-4mA,在差分线上改变方向来表示0和1。通过外部的100欧 匹配电阻(并在差分线上靠近接收端)转换为±350mV的差分电平。
    LVDS使用注意:可以达到600M以上,PCB要求较高,差分线要求严格等长,差最好不超过10mil(0.25mm)。100欧电阻离接收端距离不能超过500mil,最好控制在300mil以内。

  8. CML :是内部做好匹配的一种电路,不需再进行匹配。三极管结构,也是差分线,速度能达到3G以上。只能点对点传输。

  9. GTL :类似CMOS的一种结构,输入为比较器结构,比较器一端接参考电平,另一端接输入信号。1.2V电源供电。
    GTL:VCC=1.2V,VOH1.1V,VOL0.4V,VIH0.85V,VIL0.75VVCC=1.2V,V_{OH}\geq 1.1V,V_{OL}\leq 0.4V,V_{IH}\geq 0.85V,V_{IL}\leq 0.75V
    PGTL/GTL :VCC=1.5V,VOH1.4V,VOL0.46V,VIH1.2V,VIL0.8VVCC=1.5V,V_{OH}\geq 1.4V,V_{OL}\leq 0.46V,V_{IH}\geq 1.2V,V_{IL}\leq 0.8V

  10. HSTL 是主要用于QDR存储器的一种电平标准:一般有VCCIO=1.8VV_{CCIO}=1.8VVCCIO=1.5VV_{CCIO}=1.5V。和上面的GTL相 似,输入为输入为比较器结构,比较器一端接参考电平(VCCIO/2),另一端接输入信号。对参考电平 要求比较高(1%精度)。

  11. SSTL 主要用于DDR存储器。和HSTL基本相同。VCCIO=2.5VV_{CCIO}=2.5V,输入为输入为比较器结构,比较器一端接参考电平1.25V,另一端接输入信号。对参考电平要求比较高(1%精度)。HSTL和SSTL大多用在300M以下。

http://xilinx.eetrend.com/blog/2020/100050325.html
https://www.toutiao.com/i6725600653655147012/
https://blog.51cto.com/u_15338162/3555927
http://blog.sina.com.cn/s/blog_66cd026c0102viwi.html