2.8 可靠性设计检查单
本节列出了在设计中常犯的错误列表,这些错误常使设计不可靠或速度较慢。为了提高设计的性能和可靠性,必须确定设计通过以下所有的检查。
(1)为时钟信号选用全局时钟缓冲器(BUFG):不选用全局时钟缓冲器的时钟将会引入偏差。
(2)只用一个时钟沿来寄存数据:使用时钟的两个沿是不可靠的,因为时钟的某个沿或两个沿会“漂移”,如果时钟有漂移,而且只使用了时钟的一个沿,就降低了时钟沿漂移的风险。这个问题可以这样来解决,就是允许CLKDLL自动纠正时钟达50%的占空比,否则强烈建议只使用一个时钟沿。
(3)除了使用CLKDLL或DCM产生的时钟外,不要在内部产生时钟:这包括产生门控时钟和分频时钟。作为替代,可以建立时钟使能或使用CLKDLL或DCM产生不同的时钟信号。对一个纯同步设计,建议在任何可能的情况下只使用一个时钟。
(4)不要在内部产生异步的控制信号,如复位信号或置位信号:内部产生的异步控制信号会产生毛刺。作为替代,可以产生一个同步的复位/置位信号,这个信号的译码要比需要作用的时刻提前一个时钟周期。
(5)不要使用没有相位关系的多个时钟:也许并不总能避免这个问题,在这种情况下,必须确保已使用了适当的同步电路来跨时钟域设计,并且对跨时钟域的路径进行了适当的约束。
(6)不要使用内部锁存器:内部锁存器会混淆时序而且常常会引入另外的时钟信号。内部锁存器在透明(门打开)时可以被看成是组合逻辑,但在门被锁存时,可以被看成是同步元件,这将会混淆时序分析。内部锁存器常常会引入门控时钟,门控时钟会产生毛刺,使设计变得不可靠。
(7)逻辑级的时延不要超过时序预算的50%:每个路径逻辑级时延可以在逻辑级时序报告或布局后的时序报告中找到,详细分析了每个路径之后,时序分析器将会生成每个路径时延的统计量,检查所有路径的逻辑级时延,是否超过了时序预算的50%。
(8)IOB寄存器检查:IOB寄存器提供了最快的时钟到输出和输入到时钟的时延。对于输入寄存器,在引脚到寄存器间不能有组合逻辑存在;对于输出寄存器,在寄存器和引脚之间也不能有组合逻辑存在。对于三态输出,在IOB中的所有寄存器必须使用同一个时钟信号和复位信号,而且IOB三态寄存器必须低电平有效才能放到IOB中(三态缓冲器低电平有效,所以在寄存器和三态缓冲器之间不需要反相器)。可以在综合工具或在用户的约束文件(UCF)中设定使用IOB寄存器,语法为INST <io register name>IOB=TRUE,或设置ISE的全局实现选项,为输入、输出选择IOB寄存器。
(9)对于关键的输出选择快速转换速率:可以为LVCMOS和LVTTL电平选择转换速率,快速的转换速率会降低输出时延,但会增加地平面的反弹噪声(简称地弹),所以必须在仔细考虑的基础之上选择快速转换速率。
(10)流水逻辑:如果设计允许增加延迟,对组合逻辑采用流水操作可以提高性能。在Xilinx的FPGA中有大量的寄存器,对每一个四输入函数发生器有一个对应的寄存器,在牺牲延迟的情况下,利用这些寄存器来增加数据吞吐量。
(11)为四输入的查找表结构进行代码优化:记住每个查找表可以建立一个四输入的组合逻辑函数,如果需要更大的功能,则应记住实现该功能所需要的查找表的数目。
(12)使用case语句而不是if-then-else语句:复杂的if-then-else语句通常会生成优先级译码逻辑,这将会增加这些路径上的组合时延。用来产生复杂逻辑的case语句通常会生成太多时延的并行逻辑。
(13)使有限状态机(FSM)保持在自己所在的层次中进行优化:为了允许综合工具完全优化FSM,它必须在其自己的块中优化,否则将使综合工具将FSM逻辑和它周围的逻辑一起优化。FSM不能包括任何算术逻辑、数据通路逻辑或其他与状态机不相关的组合逻辑。
(14)使用一位有效编码有限状态机(one hot FSM):一位有效编码通常会提供高可靠的状态机形式。
(15)为每一叶级(leaf-level)块提供寄存器输出:叶级块是可以推论逻辑的块,而结构级(structural-level)块仅例化较底层的块,这样就建立了层次。如果每个叶级块被锁存输出,则可使综合工具保留层次,这可使分析这些代码的静态时序变得容易。另外,对边界进行寄存器锁存可以使各个模块之间有确定的时序关系。
(16)利用适当的引脚定位约束数据流的流向:Xilinx芯片中的数据流是水平方向上的,主要原因是进位链在垂直方向上。另外,三态缓冲线在水平方向上排列,块之间也有水平方向上的直接连接。为了利用数据流,地址和数据引脚应该放在芯片的左侧或右侧,同时因为进位链是自下而上的,所以将最低位放在最下面,控制信号放在芯片的上、下部。
(17)不同的计数器使用:二进制计数器非常慢,如果二进制计数器在关键路径上,应考虑使用不同风格的计数器,如LFSR、Pre-scalar或Johnson。
(18)复制高扇出网络。
(19)利用以下4种全局约束来对设计进行全局约束:周期(对每个时钟)、偏置输入、偏置输出、引脚到引脚。