数字 VLSI 的设计注意事项

2021-10-12 12:21:57 浏览数 (1)

VLSI SoC 中的设计程序非常复杂。设计人员应该考虑所有可能的状态和输入,并以这样一种方式设计芯片,使其每次都能在每种状态和每种可能的输入下工作。在本文中,我们将讨论设计数字 VLSI 电路时的亚稳态、建立时间和保持时间。

1 关键路径、吞吐量和延迟

关键路径是电路中最长的路径,限制了时钟速度。在描述数字电路时,还有两个重要因素:延迟和吞吐量。延迟是输入变化产生输出变化所需的时间;延迟可以表示为时间长度,或者,在同步电路中,表示为一定数量的时钟周期。吞吐量是指可以处理数据的速率。

2 触发器和组合逻辑

数字电路可以由时序逻辑和组合逻辑组成。顺序逻辑是指其输出取决于先前状态的电路。换句话说,它涉及存储先前状态并允许基于这些先前状态和当前输入信号做出决定的存储器。在数字领域,触发器是用于存储先前逻辑状态的标准设备。在 Verilog 中,我们可以使用 reg 命令来定义触发器: reg[7:0] 状态; 上面一行定义了一个 8 位触发器。触发器对时钟转换而不是时钟逻辑状态敏感,是同步设计的最基本元素。 组合逻辑是指仅根据当前输入信号计算输出的电路。

图 1 中实现了一个简单的组合逻辑电路。每个逻辑器件都有一个传播延迟。传播延迟是输入变化和相应输出变化之间的时间差。这种延迟会导致意外行为,例如当一个门接受来自具有不同门数的路径的两个输入时(因此总传播延迟不相等)。

假设我们处于 (1,1,1) 输入状态并且输出稳定在 1。如果 b 从 1 变为 0,则下与门的输出将先于上与门的输出转变,从而导致暂时输出逻辑低。这种逻辑低状态是无效的,因为 (1,0,1) 输入模式应该产生逻辑高输出。这种短暂的无效输出状态称为危险。

更具体地说,这种故障称为静电危害。当输入变化导致不止一个输出故障时,就会发生动态危险。通常,动态危险发生在具有多个门和逻辑路径的复杂电路中。

在同步设计中,我们必须确保毛刺不会导致无效的输出状态。如上所述,为了存储先前的状态,设计人员通常使用具有边缘敏感度的触发器。在数字超大规模集成电路设计中使用触发器时,我们必须考虑以下几点:

建立时间:在时钟转换之前,触发器的输入应该稳定一段时间(建立时间);否则,触发器将以不稳定的方式运行,称为亚稳态。 保持时间:在时钟转换后,触发器的输入应保持稳定一段时间(保持时间)。 下图提供了建立时间和保持时间的直观描述:

3设置时间

为 FPGA 或 ASIC 目的设计的数字电路需要组合逻辑进行计算。我们通常用逻辑门构建乘法器、减法器、加法器等。为了存储这些组合逻辑电路的输入和输出值,我们使用触发器。触发器位于所有关键路径的开头和结尾,如图 3 所示。 为避免在组合路径末端使用触发器时违反建立时间,输出必须在时钟沿之前稳定。因此,组合路径的总传播延迟不得导致输出转换,从而导致时钟信号和数据信号之间的关系导致建立时间违规。

4流水线

在 VLSI 设计中,由于广泛的组合电路,我们可能会面临很长的关键路径。在这种情况下,我们的时钟速度将降低,以确保与关键路径相关的延迟不会导致设置时间违规。流水线是一种将组合路径分成多个部分并在每个部分路径的末尾包含一个寄存器的技术。通过这种方式,我们将关键路径划分为多个小路径,这使我们能够提高时钟速度,从而提高电路的吞吐量。 例如,在图 4 中,我们有一条限制时钟频率的长关键路径。然而,分割和流水线路径(见图 5)包含更短的组合路径,这意味着我们可以提高时钟速度。但是,作为权衡,路径的延迟会增加。

5保持时间

触发器的输入应该在等于或大于保持时间的时间内保持稳定。例如,在图 6 中,假设 FF1 和 FF2 之间的组合路径延迟为 0.7ns,触发器建立时间为 2ns,其保持时间为 1ns。如果我们假设触发器的传播延迟为零,则在一个时钟沿之后,FF1 的输出将立即改变,0.7ns 后信号通过组合逻辑到达 FF2 输入。但是,FF2 的输入应该在时钟边沿后至少稳定 1ns。因此,发生保持时间违规。

即使在器件制造完成之后,也可以通过降低时钟频率来解决设置时间违规问题;但是,如果在制造过程之后发现保持时间违规,则无法纠正。重要的是设计我们的电路,以便不会发生保持时间违规;连接到触发器输入的组合电路应具有与保持时间要求兼容的传播延迟。 避免保持时间违规的一种技术是通过添加缓冲区来增加快速路径的延迟。如今,CAD 工具可以通过识别可能遇到保持时间或设置时间违规的设计部分来提供帮助。此外,CAD 工具可以在合成、放置和布线特定设计时考虑时序要求。

6时钟交叉

在大多数现代设计中,使用多个时钟频率。ADC 或 DAC 的时钟可能与 FPGA 时钟不同步,但必须将 ADC 或 DAC 信号引入 FPGA 时钟域。当我们使用多个时钟域时,我们需要小心避免可能导致亚稳态的情况。 我们需要实现不同时钟域之间的同步。这可以通过使用一个简单的 FIFO 来完成,该 FIFO 具有用于输入的时钟和用于输出的单独时钟。我们也可以使用基本的移位寄存器代替 FIFO。以下 Verilog 代码可用于提供不同时钟域之间的同步。

代码语言:javascript复制
input CLKA,CLKB;
Input signalinCLKA;
Output signalinCLKB;
Reg[1:0] shift_register;
always@(posedge CLKB)
begin
	shift_register[0]<=signalinCLKA;
	shift_register[1]<=shift_register[0];
end
assign signalinCLKB=signalinCLKA;

我们还可以采用异步设计技术来解决与多个时钟域相关的问题,但我们将在以后的文章中讨论。我们还将等到下一篇文章涵盖其他重要主题,例如: 时钟偏差,通过时钟分布树处理时钟偏差 与在 FPGA 中使用门控时钟相关的问题 具有负保持时间的触发器

7结论

在本文中,我们讨论了保持时间违规以及如何通过向快速逻辑路径添加延迟来避免它们。我们还解释了建立时间违规,并讨论了流水线作为避免包含长关键路径的电路中的时序问题的一种方法。最后,我们介绍了多个时钟域的概念,并研究了一种简单的 Verilog 时钟同步方法。

0 人点赞