RTL设计风格及Verilog编码规范(二)异步时钟处理-FPGA常见问题社区-FPGA CPLD-ChipDebug

RTL设计风格及Verilog编码规范(二)异步时钟处理

一、时钟

1.1 为时钟生成电路建立单独模块

 

1、对于时钟生成电路,建议使用一个单独的模块管理(复位同样建议这样做)

2、不要对时钟执行逻辑综合

 

尽可能将门控时钟以及多时钟系统等向内部子系统提供时钟的电路放入同一模块层次。

 

建立一个时钟生成模块去提供时钟有以下几个优势:

1、更容易管理时钟分配

如果在每个模块/层次创建时钟块,可能会生成冗余电路。通过建立一个单独的模块管理时钟不再需要去考虑每个层次的时钟生成状况,同时也更容易使用时钟树功能。

2、每个层次模块的时钟约束更方便

在电路模块内部的时钟电路上应用时钟约束很困难,仅从外部单独时钟模块去定义时钟约束有利于约束。

3、更容易在测试设计时对时钟进行控制(比如可测试性设计DFT)

对于扫描设计(DFT的一种设计方法),需要在扫描操作期间使能外部引脚的时钟信号,单独的时钟模块有利于扫描设计。

 

二、处理异步电路

1、禁止在异步时钟域之间放置组合逻辑

2、不要在第一级的FF和下一个同步FF之间放置组合逻辑

3、禁止在异步时钟域传输数据后的第一个FF生成反馈电路

4、应该采取正确的策略去应对容易受噪声影响的外部输入电路的信号

 

在异步时钟域之间谈论亚稳态是一个严肃的话题,为了深入了解亚稳态问题,必须先知道FF的操作原则和运行机理。

 

FFs操作原则:

FFs有指定的建立时间和保持时间,即在异步数据传输时,时钟上升沿来临前和到达后,数据需要保持不变的时间(建立和保持时间),一旦违反这个时间,亚稳态就可能发生。

 

为了进一步了解运行机理,参看下图DFF的内部电路

图片[1]-RTL设计风格及Verilog编码规范(二)异步时钟处理-FPGA常见问题社区-FPGA CPLD-ChipDebug

图2-1DFF的内部结构

让我们假设左侧循环 (2) 中的左侧稳定在“0”,右侧稳定在“1”。鉴于此,让我们假设 (1) 处的开关已打开。实际上,在 CLK 信号为低电平期间,左侧开关是打开的。回路中的反相器只能驱动非常低的电流。当“1”信号到达 D 输入时,反相器循环的值将被简单地反转。

图片[2]-RTL设计风格及Verilog编码规范(二)异步时钟处理-FPGA常见问题社区-FPGA CPLD-ChipDebug

图2-2 DFF操作

接下来让我们考虑图2-2中当 CLK 信号从低到高(即在上升沿)转换时会发生什么。此时,左侧开关(1)闭合,右侧开关(3)打开。左侧循环 (2) 保持其在关闭开关之前的值,并将该值复制到右侧循环 (4) 中。因此,FF 的输出将根据 D 输入的值而变化,因为它就在 CLK 信号的上升沿之前存在。

 

反过来,接下来让我们考虑当 CLK 信号从高到从高到低(即在下降时(即在下降沿)时会发生什么。此时,右侧开关 (3) 闭合并继续保持其先前值。因此,FF 的输出不会改变。左侧开关 (1) 打开 ,并且,为了准备接收下一个 CLK 信号的上升沿,D 输入值被不断复制到左手循环 (2) 中。

 

在实际的 LSI 中,FF 的功能如上所述。“锁存器”(或“D 锁存器”)单元不具有 FF 结构的右侧循环。因此,锁存器需要的面积比 FF 小。

 

亚稳态:

如果在此结构中,在 CLK 信号从低变为高(上升沿)之前,D 输入的值立即从“0”变为“1”,则左侧 MOS开关 (1) 在 D 输入正在更改的“1”,因此“1”值仅在瞬间发送到左侧循环 (2)。如果此瞬时“1”出现的时间段短于回路 (2) 的延迟时间,则回路 (2) 将开始振荡。(2) 的振荡直接传播到右侧回路 (4),振荡值从 FF 输出。传播出去的值会造成电路工作异常。

图片[3]-RTL设计风格及Verilog编码规范(二)异步时钟处理-FPGA常见问题社区-FPGA CPLD-ChipDebug

图2-3 亚稳态

 

亚稳态对策:

 

图片[4]-RTL设计风格及Verilog编码规范(二)异步时钟处理-FPGA常见问题社区-FPGA CPLD-ChipDebug

图2-4 亚稳态处理策略

简单处理亚稳态的方法如图2-4(a)所示,也就是常说的“打两拍”,从刚才的角度讲这个原理就是,等待迟早会让亚稳态结束,当然更多级别的DFF会让亚稳态的概率进一步降低,但一般2级DFF就足够了,后续增加更多级别DFF,效果也不会明显,有个理论计算公式讨论这个问题,感兴趣可以搜搜。在CLK1和CLK2两个时钟域过度区域放2个FF,2个不同时钟域的DFF间不要放逻辑(如图2-4),CLK2时钟域的2个DFF间也不要放逻辑。

假如CLK1和CLK2工作在比较低的频率(2-4(b)),而且CLK2的2个触发器间必须要放逻辑,那么可以放置一些简单的逻辑,但禁止存在反馈电路。当然,在优选的情况下,还是尽量避免这种情况出现。

 

 

 

请登录后发表评论

    没有回复内容