Xilinx FPGA 板上结构知识杂记

一点xilinx fpga 板上结构的知识点,记录下来。主要参考《基于FPGA的数字信号处理》一书第八章。

LUT和Slice

  • zynq-7000中使用的查找表(Look Up Table,LUT)是6位的,其中包含一个5位的LUT。(6位需要的SRAM空间是2^6=64bit,5位是32bit。这应该也是为什么需要一个LUT5来构成LUT6了。)
  • LUT可以作为RAM和ROM,逻辑输入作为地址线,内存作为ROM或者RAM,见How does a LUT work, why is it used?。其中SLICEL(slice logic)只能作为ROM,而SLICEM(slice memory)可以作为ROM和分布式的RAM。
LUT功能 SLICEL SLICEM
逻辑函数发生器
ROM
分布式RAM
移位寄存器
  • 作为RAM也可以有多种类型,各种需要不同数量的LUT。
  • SLICEM中1个LUT6可配置为1个32bit的移位寄存器,逻辑输入端口作为时钟周期延时数,所以在Xilinx FPGA中实现FIFO的功能,可采用Block RAM的方式,也可采用LUT的方式。
  • 一个LUT6可实现4选1的MUX (数据4位,地址2位)。
  • 一个F7MUX和相邻的两个LUT6可实现一个8选1的MUX。因此,一个SLICE可实现2个8选1的MUX。
  • 4个LUT6、F7AMUX、F7BMUX和F8MUX可实现一个16选1的MUX。因此,一个SLICE可实现一个16选1的MUX

DSP:基本功能是做乘法运算

  • zynq中的DSP(Digital Signal Processing)部分是由DSP48E1组成的,组成基本结构如图:
  • 由五部分构成:
    • 对外端口
    • 预加器(pre-adder)
    • 乘法器(MULT)
    • 逻辑运算单元(ALU)
    • 模式检测电路
  • 对外端口有:
    • 操作数输入输出端口
    • 模式配置端口
    • 级联端口
  • 简化结构图为:
  • 单指令多数据模式即SIMD ( Single Instruction, Multiple Data)。它使得48bit的ALU可配置为4个 12bit的ALU (执行加法、减法或位逻辑运算)或者2个24bit的ALU。
  • 采用VHDL或Verilog代码描述时,乘法、乘加/乘减和乘累加运算会被自动映射为 DSP48E1,而加法、减法和累加运算默认情况下釆用常规逻辑资源实现。若也希望它们被映 射为DSP48E1,则需要通过综合属性use_dsp48对其进行约束。
  • 应用:
    • 48bit累加运算(比加法器多一个寄存器用来存取前面加过的数据,寄存器是需要时钟驱动的。)
    • 2输入48bit数据相加之后累加
    • 96bit加法、减法运算(需要级联)
    • 96bit累加运算(需要级联)
    • 乘累加运算(两个输入数据相乘并对乘积结果累加):
    • 复数乘法运算

BRAM (Block RAM)

  • 块RAM (根据地址写入和输出)
  • Block RAM (BRAM)在FPGA设计中扮演着一个重要的角色即数据存储或缓存
  • zynq中每个BRAM达到了 36Kb,由两个18Kb BRAM拼接而成.
  • BRAM在不牺牲很大带宽的前提下,提供了更大的储存密度。带宽的牺牲主要在于每个周期BRAM只有1-2个入口可以被接通(对应单端口和双端口)。
  • 利用BRAM实现逻辑运算功能本质上而言是将BRAM配置为ROM,它就像一个大的 查找表(LUT)。
  • 对一些固定的数据进行存储,这就需要用到 ROM,可存在BRAM里。

单端口RAM、伪双端口RAM,双端口RAM和FIFO

  • 单端口RAM(Single-Port RAM)
    • 输入只有一组数据线一组地址线
    • 只有一个时钟
    • 读写共用地址线
    • 所以一个时钟周期只能读或者只能写。
  • 伪双端口RAM(Simple Dual-Port RAM)
    • 输入有一组数据线两组地址线
    • 两个时钟
    • 一个端口只读,另一个端口只写,但写入和读取的时钟可以不同,且位宽比可以不是1:1
  • 双端口RAM(True Dual-Port RAM)
    • 输入有两组地址线两组数据线
    • 两个时钟
    • 两个端口都有读写的功能。
  • FIFO (First-in, first-out)
    • 一个端口只读,另一个端口只写。
    • 先入先出,没有地址线
    • 上述三种RAM都可以寻址,FIFO不能寻址