FPGA学习总结6 - 基本概念

FPGA学习总结6 - 基本概念



前言

  基于Xilinx Artix7平台


1. LUT:Look-Up-Table

  LUT本质是一个RAM。例如4输入LUT可以看成是一个4位地址输入的16*1的RAM。可以用LUT组建分布式RAM。
  FPGA以LUT实现逻辑函数,当Verilog描述了一个逻辑电路时,综合软件会自动计算出所有可能的结果,并把结果(真值表)事先写入RAM。当给定某一输入时,即相当于给RAM一个地址,地址中的数据即为要输出的结果。
  当LUT的位数大于输入时,会造成资源的浪费,如6输入LUT实现4输入LUT,1-16/64=75%,浪费75%的资源。当LUT的位数小于输入时,需要用多个LUT级联来实现逻辑,级联会产生延时,延时会导致时序不满足,降低系统运行频率等问题。
  LUT代替组合逻辑,LUT中的值只和输入有关,因此组合逻辑的功能由输入决定,不再和复杂度有关。
  Xilinx 7系列使用的为6输入LUT,每个LUT有6个独立的输入,2个独立的输出。6输入LUT可以作为2个5输入LUT使用(共用地址,独立输出)。

图1

2. LC:Logic Cells

  Logic Cells是Xilinx定义的一个概念,用来衡量不同内部结构甚至是不同FPGA厂商的FPGA芯片的内部资源情况。
  Logic Cells表示一个没有其他功能的4输入LUT,在过去的4输入LUT中,使用1.25乘以LUT的数量来计算Logic Cells,Xilinx的Slice还具有进位链(CARRY4)和MUX,可以做比普通4输入LUT更多的事情。在较新的FPGA中,Xilinx采用的6输入LUT,系数为1.6,即一个6输入LUT等效为1.6个Logic Cells。
  每个LUT有两个触发器。

3. Slice

  Xilinx 7系列FPGA每个Slice包含4个6输入LUT和8个触发器,3个多路复用器和算术进位逻辑。
  7系列FPGA中的Slice分为两类,SLICEL(L表示Logic)和SLICEM(M表示Memory)。对于SliceM来说,除了实现SliceL的逻辑功能,还可以通过内部的6输入LUT构造出分布式的64位RAM(Distributed RAM)或者32位移位寄存器(Shift Register),或者2个16位的移位寄存器。

图2

  SLICEL和SLICEM的LUT不一样,SLICEL内部LUT只可以读,只能实现的查找表逻辑。SLICEM内部的LUT可以读也可以写,可以实现查找表逻辑,分布式RAM,移位寄存器功能。分布式RAM写是异步的,读是同步的,写是时序逻辑,在有效时钟沿且Write Enable为1时,数据才会被输入。Read和时钟无关,主要地址有效,数据就会在当前时钟输出。如果想要同步输出,需要在输出端加Register。
  Xilinx FPGA内部SLICEL和SLICEM之比约为2:1。

4. CLB:Configurable Logic Block

  CLB是主要的逻辑资源,用于实现时序和逻辑电路。一个CLB包含两个Slice,两个Slice之间没有直接相连的关系。

5. MUX:Multiplexer

  多路选择器或者多路复用器,MXU也是一种基本的逻辑单元,每个Slice中有3个MUX(二选一MUX),F7AMUX,F7BMUX,F8MUX。
  F7AMUX和F7BMUX的输入只能是LUT的O6,F8MUX输入只能是F7AMUX和F7BMUX。

图3

图4

6. SRL:Shift Register

  移位寄存器,SliceM可以在不使用触发器的条件下配置为32为移位寄存器(只能左移),可以级联,一个SliceM的4个LUT6级联可以实现128个时钟周期的延时。
  SRL可以使用原语生成,资源消耗最少。SRL也可以自己写代码实现,SRL可以不需要复位,有复位会消耗大量的资源。

图6

7. RAM:Random Access Memory

1.1 Block RAM

  BRAM由一定数量固定大小的存储块构成的,使用BRAM不占用额外的逻辑资源,且速度快。但是使用BRAM消耗的资源是其块大小的整数倍。如Xilinx7系列FPGA结构中每个BRAM有36Kbit的容量,既可以作为一个36Kbit的存储器使用,也可以拆分为两个独立的18Kbit存储器使用。反过来相邻两个BRAM可以结合起来实现72Kbit存储器。每个Block RAM都有两套访问存储器所需的地址总线、数据总线及控制信号等信号,因此其既可以作为单端口存储器,也可以作为双端口存储器。
需要注意的时访问BRAM需要和时钟同步,异步访问是不支持的。

1.2 Distributed RAM

  只有SLICEM里的查找表才可以用做DRAM,利用查找表为电路实现存储器,既可以实现芯片内部存储,又能提高资源利用率。DRAM的特点是可以实现BRAM不能实现的异步访问。不过使用分布式RAM实现大规模的存储器会占用大量的LUT,可用来实现逻辑的查找表就会减少。因此建议仅在需要小规模存储器时,使用这种分布式RAM。

1.3 使用建议

  DRAM使用的是没有综合的LUT单元,而BRAM是块RAM,它的大小和位置是固定的。即使你只使用了一点点BRAM,综合后同样会消耗一整块RAM。 BRAM是一列一列分布的,这样可能造成用户逻辑模块和BRAM直接的距离较长,延时较长,最终导致性能下降。如果使用到多个BRAM最好合理规划一下布局。较大的存储应用,建议用BRAM。零星的小应用,可以用DRAM。但这只是个一般原则,具体的使用得看整个设计中资源的冗余度和性能要求。
  分布式RAM提供了对非常小的数组使用存储元素和对较大数组使用BRAM之间的权衡。建议尽可能地使用RTL方式推断内存,以提供最大的灵活性。分布式RAM也可以通过原语实例化或使用IP来生成。一般来说,分布式RAM应该用于所有深度为64位或更少的情况,除非设备缺少SLICEM或逻辑资源。因为分布式RAM在资源、性能和功能方面更高效。对于大于64位但小于或等于128位的深度,使用最佳资源的决定取决于以下因素:
  BRAM的可用性:如果不可用,就使用分布式RAM。
  延迟的要求:如果需要异步读功能,则必须使用分布式RAM。
  数据宽度:宽度大于16位应该使用块RAM,如果可以的话。
  必要的性能要求:寄存的分布式RAM通常比BRAM有更短的Tco时间和更少的布局限制。
  BRAM一定需要工作时钟,DRAM可以有时钟也可以没有时钟。

8. CARRY4

  进位链,一种超前进位加法器。

9. 未完待续


  • 54
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值