【【深入浅出FPGA内部资源CLB的解析】】

avatar
作者
猴君
阅读量:0

深入浅出FPGA内部资源CLB的解析

FPGA的基本组成单元: CLB资源等

详细介绍一下CLB可分为CLBLL和CLBLM两类, 这是单纯的以Xilinx旗下的FPGA的某一款为例,单纯的只是介绍个概念性的东西。SliceL和SliceM内部都包含4个6输入查找表(LUT6)、3个数据选择器(MUX)、1个进位链(Carry Chain)和8个触发器(Flip-Flop)。
SLICEM(M:Memory):其内部的LUT可以读也可以写,可以实现移位寄存器和64bit的DRAM等存储功能,还可以实现基本的查找表逻辑。SLICEL(L:Logic): 其内部的LUT只可以读,只能实现基本的查找表逻辑。

一.LUT的介绍

对于LUT而言,LUT 可以看作是一个小型的、单口的 RAM,其中地址线是输入信号,存储单元的内容是输出信号。例如,一个 4 输入的 LUT,可以被看作是一个有 16 个地址的 RAM,每个地址存储一个输出值。
假设有一个 4 输入的 LUT 实现一个逻辑函数 𝑓(𝑎,𝑏,𝑐,𝑑)。这意味着 LUT 有 16 个地址,每个地址对应一个 4 位输入的组合(𝑎,𝑏,𝑐,𝑑 作为地址线),每个地址存储一个输出值(0 或 1)。配置 LUT 就是初始化这 16 个存储单元的内容。

输入: a b c d输出: f(a, b, c, d)
地址 0: 0 0 0 0存储值: 0
地址 1: 0 0 0 1存储值: 1
地址 2: 0 0 1 0存储值: 1
地址 3: 0 0 1 1存储值: 0
地址 15: 1 1 1 1存储值: 1
LUT的组成问题
xilinx公司的7系类FPGA中使用的是6-LUT,每个LUT有六个独立的输入(A1-A6),两个独立的输出(O5-O6)。一个Slice中的四个LUT分别以A,B,C,D编号。从组成结构来说,一个6-LUT由两个5-LUT组成和一个数据选择器组成。

二.MUX的介绍

使用 LUT 实现 MUX
4:1 MUX 实现:
一个 4:1 MUX 有 4 个数据输入(D0, D1, D2, D3),2 个选择信号(S0, S1),以及 1 个输出(Y)。
一个 LUT6 有 6 个输入,因此可以直接实现一个 4:1 MUX:
4 个数据输入连到 LUT 的前 4 个输入端。
2 个选择信号连到 LUT 的后 2 个输入端。
LUT 的内容根据选择信号的不同组合,输出相应的数据输入
当选择信号大于 4 时(例如 MUX8)
8:1 MUX 实现:

  • 一个 8:1 MUX 有 8 个数据输入(D0, D1, D2, D3, D4, D5, D6, D7),3 个选择信号(S0, S1, S2),以及 1 个输出(Y)。
  • 因为一个 LUT6 只有 6 个输入,无法直接实现 8:1 MUX,需要使用两个 4:1 MUX 和一个 2:1 MUX 进行实现。

假设我们要在一个 Slice 中实现一个 16:1 MUX:

  • 第一步:配置四个 LUT6 实现 4 个 4:1 MUX。
  • 第二步:使用 F7AMUX 和 F7BMUX 将这四个 4:1 MUX 组合成两个 8:1 MUX。
  • 第三步:使用 F8MUX 将两个 8:1 MUX 组合成一个 16:1 MUX。

三.进位逻辑链

只要记住是做运算的就行了

四.FF触发器

一个CLB由2个slice构成,其中每个slice就有8个存储单元。这8个存储单元还有所不同,其中的4个可以被配置成触发器(Flip-Flop,简写为 FF)或锁存器(Latch),其他4个则只能被配置成触发器(FF)。当配置为latch时,CLK为Low时latch是“透明”的,也就是我们之前提到的处于使能状态,相当于是缓冲器。值得注意的是,当那4个可以被配置成latch的存储单元被配置成latch时,剩下的4个(只能被配置成FF的)存储单元将不能被使用。

触发器(Flip-Flop)和寄存器(Register)在数字电路设计中是两个相关但不同的概念。虽然触发器和寄存器都用于存储数据,但它们的用途和结构有一些显著的区别。下面是对这两个概念的详细解释:

触发器(Flip-Flop)

特点:

  1. 基本存储单元:触发器是最基本的时序存储单元,每个触发器可以存储1位数据。
  2. 边沿触发:触发器通常是边沿触发的(上升沿或下降沿),这意味着它们在时钟信号的边沿变化时更新其状态。
  3. 类型:
    D 触发器(D Flip-Flop):存储数据输入的值。
    T 触发器(T Flip-Flop):在时钟边沿时翻转输出状态。
    JK 触发器(JK Flip-Flop):可以进行设置、清除和翻转操作。
    SR 触发器(SR Flip-Flop):可以进行设置和清除操作。

示例(D 触发器的 Verilog 代码):

module D_flip_flop (     input wire clk,    // 时钟信号     input wire d,      // 数据输入     output reg q       // 数据输出 );     always @(posedge clk) begin         q <= d;        // 在时钟上升沿采样输入并更新输出     end endmodule 

寄存器(Register)

特点:

  1. 多位存储单元:寄存器是由多个触发器组成的,可以存储多位数据(例如8位、16位、32位等)。
  2. 同步存储:寄存器中的所有触发器共享同一个时钟信号,因此寄存器在时钟边沿时同步更新其所有位的数据。
  3. 用途广泛:寄存器广泛用于存储数据、地址、控制信号等,可以作为缓存、计数器、移位寄存器等。

示例(8位寄存器的 Verilog 代码):

module Register (     input wire clk,    // 时钟信号     input wire [7:0] d, // 8位数据输入     output reg [7:0] q  // 8位数据输出 );     always @(posedge clk) begin         q <= d;        // 在时钟上升沿同步更新所有位的数据     end endmodule 

主要区别:

  1. 存储位数:
    触发器:单个触发器存储1位数据。
    寄存器:寄存器可以存储多位数据,由多个触发器组成。

  2. 结构复杂度:
    触发器:简单的存储单元。
    寄存器:复杂的存储单元,由多个触发器组成,常用于处理多位数据。

  3. 用途:
    触发器:用于实现基本的时序逻辑和单个位的存储。
    寄存器:用于实现多位数据存储、数据缓存、计数器、移位寄存器等功能。

触发器和缓冲器(Buffer)

缓冲器(Buffer)在数字电路中是一个简单的电路元件,用于隔离或驱动信号。缓冲器不具有存储功能,只是简单地传输信号,并可以增强信号强度。缓冲器和触发器是不同的概念。

缓冲器的示例(Verilog 代码):

module Buffer (     input wire in,     // 输入信号     output wire out    // 输出信号 );     assign out = in;   // 直接传输输入信号到输出 endmodule 

总结:

触发器(Flip-Flop) :基本的时序存储单元,用于存储1位数据。
寄存器(Register) :由多个触发器组成的多位存储单元,用于存储多位数据。
缓冲器(Buffer) :用于隔离或驱动信号,不具有存储功能。

理解这些基本概念和区别,有助于在数字电路设计中选择合适的元件,从而实现所需的功能。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!