为 FPGA 设计添加复位功能的注意事项

时间:2023-05-18

本文将探讨在 FPGA 设计中添加复位输入的一些后果。

本文将回顾使用复位输入对给定功能进行编码的一些基本注意事项。设计人员可能会忽略使用复位输入的后果,但不正确的复位策略很容易造成重罚。复位功能会对 FPGA 设计的速度、面积和功耗产生不利影响。

在继续我们的讨论之前,有必要强调一个基本原则:FPGA 是可编程设备,但这并不意味着我们可以对FPGA 中的每个功能进行编程。这一基本原则将在本文的其余部分进一步阐明。

在添加复位输入之前仔细阅读详细信息

图 1 显示了 Xilinx 7 系列 FPGA 中可用的 D 型触发器 (DFF)。

 

图 1. Xilinx 7 系列 FPGA 的 FDRE D 型触发器。图片由赛灵思提供。

 

这种具有同步复位 (R) 和时钟启用 (CE) 输入的特定 DFF在 Xilinx 库指南中称为 FDRE ( F触发器,D型,同步复位,时钟启用)。该元素的逻辑表如图 2 所示。

 

图 2. Xilinx 7 系列 FPGA 的 FDRE D 型触发器的逻辑表。图片由赛灵思提供。

其中,R、CE、D、C为DFF的输入端,分别代表复位、时钟使能、数据输入和时钟。X代表“don't-care”,↑代表时钟上升沿。复位是同步的,因为它只能在时钟的上升沿复位输出。

这个 DFF 是一个设计元素,可以用作更大设计的构建块。我们可以用它来注册一个想要的信号。而且,我们可以根据需要自由使用 FDRE 的复位和时钟使能输入。

我们可以选择是否要使用构建块的可用功能。但是,我们不能向给定的构建块添加不受支持的功能。例如,考虑上面讨论的 FDRE 元素。此设计元素仅支持同步复位。如果我们同时需要异步和同步复位,我们将无法使用 FDRE 触发器。在这种情况下,综合工具将不得不使用其他资源,或者它甚至可能求助于使用可用构建块的组合来实现所需的设计。如您所见,FPGA 的低级特性是固定的,但是一旦配置了这些设计元素,我们就可以按照我们想要的方式将它们连接在一起并构建更大的设计。

作为 FPGA 粒度如何影响实现的一个更微妙的例子,请注意,根据上面的逻辑表,FDRE 的复位 (R) 输入相对于时钟使能 (CE) 输入具有更高的优先级(注意表的行表示当 R 为 1 时,CE 无关)。现在,假设我们的 HDL 代码使用具有复位和时钟使能输入的 DFF。而且,HDL 描述赋予 CE 输入更高的优先级,而不是 R 输入。同样在这种情况下,综合工具将不得不使用 FDRE 以外的资源,或者它必须使用可用构建块的组合来实现所需的功能。有关此示例的更多详细信息,请参阅Xilinx 白皮书。

上面的讨论表明,要获得高效的设计,我们必须仔细研究 FPGA 设计元素的细节,就像我们在使用分立元件之前研究其数据表一样。在本文的其余部分,您将看到此原则的一些其他示例。

移位寄存器查找表 (SRL16)

Xilinx 综合工具可以实现基于 LUT 的移位寄存器,比简单地级联一些 DFF 得到的结构更紧凑、更快。这些称为 SRL 的高效移位寄存器不支持复位输入。这就是为什么,如果您的移位寄存器真的不需要复位,您应该避免它,以便允许综合工具为移位寄存器推断一个有效的基于 SRL 的实现。如果您的代码描述了一个具有复位功能的移位寄存器,XST 将使用 DFF 实现设计,或者它将使用一些围绕 SRL 的额外逻辑来实现复位功能。SRL 可以从简单的串联运算符中推断出来(请参阅XST 用户指南第 154 页)。

块 RAM

与 SRL 的情况类似,我们无法使用显式重置来重置块 RAM 的内容。这就是为什么在将设计映射到块 RAM 时,我们不应该使用复位。您可以在此处找到更多详细信息。

乘数

与不支持复位的 SRL 或块 RAM 不同,某些模块(例如乘法器)对复位类型有限制。这些模块仅支持同步复位。对于给定的乘法器,用同步策略替换异步复位可以将操作频率提高两倍或更多。

总而言之,不正确的复位策略会阻止综合工具有效利用 FPGA 中可用的优化模块。这会对设计的面积、功率和速度产生不利影响。现在,让我们看一些示例,其中综合软件使用 DFF 的复位端口来执行一些优化。

使用设置/重置输入来优化实施

通常建议尽可能避免使用设置和重置输入。这有助于综合工具应用优化,其中检查 DFF 的设置/重置输入以简化实现。为了进一步阐明,假设我们要实现图 3 中所示的原理图。

 

图 3.可以通过综合软件优化的特定情况。图片由Advanced FPGA Design提供。

 

在图 3 中,当“信号 A”为逻辑高电平时,无论组合电路“梳状逻辑”的输出是什么,DFF 输出都将在时钟边沿变为高电平。这就是为什么如图 4 所示,综合软件可以消除或门并将“信号 A”应用于 DFF 的同步设置输入。现在,当“信号 A”为逻辑高电平时,DFF 将在时钟边沿设置为高电平。否则,输出将由组合电路“Comb Logic”决定。新设计提供了所需的功能,但现在取消了或门,设计的速度和面积都得到了改善。

 

图 4。图 3 中电路的优化形式。图片由Advanced FPGA Design提供。

有趣的是,有时,综合工具可能决定对上述优化进行反向操作,并实现图 4 的原理图,如图 3 所示!这是因为在 7 系列中,slice 中的所有 DFF 共享相同的 CK、SR(置位/复位)和 CE 信号。这意味着其 SR 输入连接到“信号 A”的 DFF 不能位于具有其 SR 输入连接到除“信号 A”以外的信号的 DFF 的同一切片中。如果控制信号,即 CK、SR 和 CE 不相同,则 DFF 必须放置在不同的片中。在使用许多低扇出复位信号的设计中,这会导致切片利用率低下。事实上,每个低扇出复位信号都会使用一个 slice 的几个 DFF,而该 slice 的剩余 DFF 将被浪费。在这种情况下,综合工具可以实现图 4 的原理图,如图 3 所示。此过程将导致 DFF 不使用其复位输入。因此,这些 DFF 可以共享相同的控制信号,并且可以放置在同一片中。因此,设备利用率将得到提高。

在图 3 和图 4 中,我们看到后跟 DFF 的或门可以替换为使用其设置输入的 DFF。同样,我们可以用使用其复位输入的 DFF 替换后跟 DFF 的与门(参见下面的图 5)。

 

图 5.图片由Xilinx提供。

 

在图 5 中,SRVAL 属性指定断言 SR 输入后 DFF 的输出值。因此,对于左侧中间的 DFF,SR 输入被指定为设置端口。但是,对于左侧下方的DFF,SR输入实际上是复位输入。上层 DFF 不使用复位输入。

左边的三个DFF不能放在同一个slice中,因为它们的控制信号不同。然而,通过上面讨论的转换,我们获得了三个具有相同控制信号集的 DFF。因此,我们可以将三个 DFF 放在同一个切片中。请注意,上述转换对异步置位/复位信号无效。这就是为什么我们通常建议使用同步设置/重置信号而不是异步信号。

上一篇:I2C 总线:何时使用 I2C 缓冲器
下一篇:如何将现有的智能家居设备连接到 Matter

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料