Xilinx Slice 详细介绍
概述
Xilinx Slice 是 Xilinx FPGA(现场可编程门阵列)可配置逻辑块(CLB,Configurable Logic Block)的核心组成部分,是 FPGA 实现逻辑功能的基本单元。每个 Slice 包含一组查找表(LUT)、触发器(Flip-Flop, FF)、进位逻辑和多路复用器,用于实现组合逻辑、时序逻辑和算术运算。Slice 的设计和功能因 Xilinx FPGA 架构而异,例如 7 系列、UltraScale 和 Versal 系列的 Slice 结构有所不同,但其核心作用是提供灵活的逻辑资源以支持用户设计的实现。
本文基于 Xilinx 官方文档(如 UG474、7 系列 FPGA CLB 用户指南,UG574、UltraScale 架构 CLB 用户指南,以及相关 Versal 文档),结合社区资源,详细介绍 Slice 的功能、架构、配置、使用场景和注意事项,以中文内容呈现。需要注意的是,Xilinx Slice 并非独立的 LogiCORE IP 核,而是 FPGA 硬件架构的原生组件,因此本文将聚焦其硬件特性而非 IP 配置。
Slice 架构与功能
Xilinx FPGA 的 CLB 通常包含多个 Slice(例如,7 系列的 CLB 包含 2 个 Slice,UltraScale 的 CLB 包含 4 个 Slice)。Slice 的内部结构因架构而异,但一般包括以下核心组件:
1. 查找表(LUT)
- 功能:LUT 是 Slice 的主要逻辑单元,用于实现组合逻辑。每个 LUT 是一个小型存储器,可以根据输入地址输出预定义的逻辑值。
- 特性:
- 7 系列:每个 Slice 包含 4 个 6 输入 LUT(6-LUT),每个 LUT 可实现任意 6 输入 1 输出的逻辑函数,或两个 5 输入函数(共享输入)。
- UltraScale/UltraScale+:同样包含 4 个 6-LUT,但支持更高效的逻辑打包(packing)和时序优化。
- Versal:引入 8 输入 LUT(8-LUT)选项,增强逻辑密度。
- 模式:
- 逻辑模式:实现布尔逻辑(如 AND、OR、XOR)。
- 分布式 RAM 模式:将 LUT 配置为小型存储器(如 64 位单端口 RAM 或 32 位双端口 RAM)。
- 移位寄存器模式:将 LUT 配置为 32 位移位寄存器(SRL32),用于数据延迟。
- 资源:一个 6-LUT 占用约 64 位配置存储,每个 Slice 的 4 个 LUT 提供强大的逻辑能力。
2. 触发器(Flip-Flop, FF)
- 功能:FF 用于存储逻辑状态,支持时序逻辑和流水线设计。
- 特性:
- 7 系列:每个 Slice 包含 8 个 FF(每个 LUT 对应 2 个 FF),支持 D 触发器功能。
- UltraScale:同样 8 个 FF,但支持更灵活的时钟使能(CE)和复位(SR)配置。
- Versal:FF 数量和功能进一步增强,支持低功耗模式。
- 控制信号:
- CLK:时钟输入,支持单时钟或反相时钟。
- CE:时钟使能,控制 FF 是否更新。
- SR:同步或异步复位/置位,支持高电平或低电平触发。
- 模式:
- 寄存器模式:作为标准 D 触发器存储数据。
- 锁存器模式:部分器件支持将 FF 配置为透明锁存器(较少使用)。
- 灵活性:FF 可独立于 LUT 使用,允许直接存储输入信号。
3. 进位逻辑(Carry Logic)
- 功能:支持快速算术运算(如加法、减法、比较),通过专用进位链提高性能。
- 特性:
- 7 系列:每个 Slice 包含一个 4 位进位链(CARRY4),连接 4 个 LUT 的进位路径。
- UltraScale:使用改进的 CARRY8 模块,支持 8 位进位链,减少 CLB 间延迟。
- Versal:进一步优化进位逻辑,支持更高效的算术运算。
- 应用:
- 实现快速加法器、减法器和计数器。
- 支持比较器(等于、大于、小于)逻辑。
- 信号:
- CIN:进位输入,从上一 Slice 或外部提供。
- COUT:进位输出,传递到下一 Slice。
- S:选择信号,控制加法或减法。
4. 多路复用器(Muxes)
- 功能:提供额外的逻辑连接和信号选择功能。
- 特性:
- 7 系列:包含 F7 和 F8 多路复用器,用于组合多个 LUT 输出。
- F7 Mux:组合两个 LUT 输出(7 输入 1 输出)。
- F8 Mux:组合两个 F7 Mux 输出(8 输入 1 输出)。
- UltraScale:增强多路复用器,支持更复杂的逻辑组合。
- Versal:引入更灵活的互连结构,减少逻辑层级。
- 7 系列:包含 F7 和 F8 多路复用器,用于组合多个 LUT 输出。
- 应用:实现宽输入逻辑函数,减少 LUT 使用。
5. 其他特性
- 分布式 RAM 和移位寄存器:
- LUT 可配置为分布式 RAM(如 64x1 单端口 RAM)或移位寄存器(SRL16/SRL32)。
- 适合小型存储或数据延迟应用。
- 时钟管理:
- Slice 支持本地时钟布线,连接到全局时钟网络(BUFG)或区域时钟缓冲器。
- 支持时钟使能和反相时钟选项。
- 功耗优化:
- UltraScale 和 Versal 提供低功耗模式,动态关闭未使用的 FF 或 LUT。
Slice 类型
不同 Xilinx FPGA 架构的 Slice 类型略有差异,主要包括:
-
7 系列 FPGA:
- Slice_L:逻辑 Slice,仅支持逻辑和存储功能(无进位逻辑)。
- Slice_M:内存 Slice,支持分布式 RAM 和移位寄存器功能。
- 每个 CLB 包含 2 个 Slice(通常 1 个 Slice_L 和 1 个 Slice_M)。
- 每个 Slice 包含 4 个 6-LUT、8 个 FF 和 1 个 CARRY4。
-
UltraScale/UltraScale+:
- 统一 Slice 类型,取消 Slice_L/Slice_M 区分。
- 每个 CLB 包含 4 个 Slice,每个 Slice 包含 4 个 6-LUT、8 个 FF 和 1 个 CARRY8。
- 增强的互连和时序优化,支持更高逻辑密度。
-
Versal:
- 引入增强型 CLB,支持 8-LUT 和更灵活的 FF 配置。
- 每个 Slice 支持更多存储模式(如 128x1 RAM)和动态功耗管理。
- 进位逻辑和多路复用器进一步优化,支持复杂运算。
配置与使用
Slice 不是独立的 IP 核,而是通过 HDL(Verilog/VHDL)或 Vivado 的综合工具直接使用。以下是 Slice 的配置和使用方式:
- HDL 设计:
- 用户通过 Verilog 或 VHDL 描述逻辑功能,Vivado 综合工具自动映射到 Slice 资源。
- 示例:实现一个 4 位加法器,利用 CARRY4 进位链:
module adder_example (
input wire [3:0] a, // 输入 A
input wire [3:0] b, // 输入 B
input wire cin, // 进位输入
output wire [3:0] sum, // 和输出
output wire cout // 进位输出
);
wire [3:0] carry;
CARRY4 carry_inst (
.CO({cout, carry[2:0]}), // 进位输出
.CI(cin), // 进位输入
.CYINIT(1'b0), // 初始化进位
.DI(a), // 输入 A
.S(a ^ b), // 异或结果
.O(sum) // 和输出
);
endmodule
FPGA设计工具推荐
-
SZ901:
SZ901 是一款基于XVC协议的FPGA网络下载器。- 最高支持53M
- 支持4路JTAG独立使用
- 支持端口合并
- 支持国产FLASH烧写
- 下载器无限扩展
- 配备专属程序固化软件,一键烧写,能大大减小程序固化时间!
-
SZ501(PRO_A7):
- SZ501 是一款适合初学者FPGA开发板,包含低速高速接口!
- 双网口(RGMII)
- 双SFP+
- DDR
- UART
- IIC