基于反馈约束的SRAM接口时序分析方法

2020-02-27 12:34左丽丽刘国斌吴维林
计算机测量与控制 2020年1期
关键词:时序延时端口

左丽丽,刘国斌,吴维林,陈 云

(上海航天软件测评中心,上海 201109)

0 引言

随着军工产品向着高集成度、小型化、高速和高可靠性方向发展,FPGA和CPLD等可编程逻辑器件在军工产品中的应用数量成爆发式增长[1]。相对于传统的逻辑器件,FPGA能够很大程度缩短实验时间[2],随着设计规模的增大和设计复杂度的提高,许多原本应用于专用集成电路(ASIC)的验证方法如STA(static timing analysis, 静态时序分析)方法也逐渐应用到 FPGA的设计验证中。静态时序分析不需要测试向量,即使没有仿真条件也能快速地分析电路中所有时序路径是否满足约束要求[3]。

本文使用静态时序分析工具Prime Time,针对某FPGA设计中SRAM的读写接口设计进行时序验证。采用衍生时钟约束,输入、输出延时约束,多周期路径约束相结合的方式,将FPGA的输入输出信号关联起成一个回路,成功的对FPGA与SRAM之间的交互进行环路分析。根据分析结果,快速准确发现了接口设计的缺陷和薄弱环节,高效实现设计的优化。

1 SDRAM接口设计概况

某图像处理FPGA在进行设计时采用3片SRAM接口进行图像数据的预存。硬件接口图如图1所示。

图1 FPGA设计硬件接口框图

2片SRAM与FPGA的信号连接关系如表1所示。

表1 SRAM与FPGA对外接口信号表

设计中采用的主处理时钟频率为70 M,在对SRAM进行读写控制时,需满足芯片读写时序要求,根据器件手册SRAM读数据时序及时序参数如图2,SRAM写数据时序及时序参数如图3。

图2 读SRAM数据时序及时序参数图

图3 写SRAM数据时序及时序参数图

由图2~3可知,SRAM读写操作由多个信号同时控制,包括CS0#、CS1#、WE#、OE#、Address和Din/Dout,且相互之间需满足一定的时序关系才能保证SRAM的正常工作。为了便于控制,设计中将CS0#、CS1#置为常有效,通过WE#和OE#控制读写逻辑的产生。

2 传统的接口验证方法

FPGA的验证工作,在很多方面都表现出了较高的复杂性和较强的技术性[4]。按照传统的验证流程,依次进行前仿真验证、静态时序分析、后仿真验证。

2.1 前仿真验证

考虑各时序参数的要求,在进行接口设计时考虑各信号的相关性,尽量避免同时跳变,写时序下地址和数据的持续时间较长,而WE#在地址和数据稳定时有效,为各时序参数预留充分的余量,读时序下采用地址驱动SRAM数据输出,FPGA在下个周期读取数据, 前仿真结果如图5。

图4 SRAM写时序前仿真结果图

图5 SRAM读时序前仿真结果图

前仿真情况下,SRAM读写时序参数测试结果如表2所示。

表2 SRAM时序参数

功能前仿真结果表明读写时序均满足要求,且各时序参数均存在一定的余量,因此对设计进一步开展静态时序分析。

2.2 传统的静态时序分析方法

从信号接口表可以看出,与SRAM的接口中除了数据线之外,均为FPGA的输出信号,因此在静态时序分析时,由于输入数据sram*_dat与本地的70 M时钟并无固定的相位关系,按照常规处理方式,仅进行了output delay的约束,静态时序分析通过后进一步通过布局布线后的仿真验证接口处理功能的正确性。

2.3 后仿真验证

在后仿真验证SRAM接口时,进行了3种工况的布局布线后仿真。写时序的产生完全由FPGA输出控制,且写时序在静态时序分析时已添加了时序约束,后仿真的结果表明静态时序分析的结果与后仿真的结果一致且均满足时序要求。

但读时序的验证则遇到了问题,写时序的产生完全取决于FPGA,数据线和控制线均由FPGA输出产生,控制相对简单。而读时序动作的完成需要FPGA和SRAM配合完成,读时序的整个过程其实可以划分为分为3个子过程:1)FPGA输出读时序控制信号CS0#、CS1#、WE#、OE#和Address;2)SRAM在以上信号的控制下输出对应的数据;3)FPGA读取SRAM输出的数据并在内部进行取数。在模拟SRAM读时序接口时,由图2可知,读时序下时序参数例如tAA为最大值、tOH为最小值,均非典型值,因此若要考虑覆盖性,则需要进行仿真的模式非常之多:最大工况下tAA取最大值、最大工况下tAA取最小值、最大工况下tAA取典型值、最小工况下tAA取最大值、最小工况下tAA取最小值等等。

以上的仿真方案存在如下问题:

1)tAA值的选取直接影响了仿真效果;

2)后仿耗时巨大,且存在多种工况多种模式,在整个FPGA设计规模较大的情况下,此种验证方式严重降低了验证效率;

3)一旦发现接口时序不满足,由于为后仿真网表,代码中的信号在布线后的名称被改变,追溯和定位问题困难,即便发现问题后进行修改,很可能造成参数A在某工况下满足要求了,而参数B又出错了。

基于以上的问题,到了后仿真阶段再进行接口时序的验证,不但效率低下,而且设计方案变更困难。测试投入和成本较高,不利于型号的快速研制[5],因此项目组决定重新使用静态时序分析的方式对SRAM接口进行验证

3 基于反馈约束的静态时序分析方法

静态时序分析的验证方法,它可以简单的定义为:设计者提出一些特定的时序要求,或者说是添加特定的时序约束,套用特定的时序模型,针对特定的电路进行分析。时序分析的目的就是确保在FPGA芯片的3种工况下,整个设计的接口设计满足上级和下级系统接口时序需求[6]。利用分析结果给出的路径延迟可以反向的进行设计改善,指导综合和布局布线工具,从而实现优化设计。Prime Time是Synopsys公司的一款功能强大的全芯片和门级静态时序分析工具,也是业界最流行的工具,常被用来分析大规模、同步、数字ASIC。

3.1 静态时序路径

STA的工作原理是提取数字电路的所有时序路径,计算信号在时序路径上的传播延迟,分析其中最大路径延迟和最小路径延迟[7]。静态时序分析时将设计分成4种时序路径,每条路径包含一个起点和终点,时序路径的起点只能是设计的输入端口或者内部寄存器的时钟输入端,终点只能是内部寄存器的数据输入端或者设计的基本输出端口。因此STA的4种时序路径包括:

1)从输入端口到寄存器的数据D端;

2)从寄存器的时钟CLK端到寄存器的数据D端;

3)从寄存器的时钟CLK端到输出端口;

4)从输入端口到输出端口。

静态时序分析主要是通过对最大路径延迟和最小路径延迟的分析,检查建立时间、保持时间、移除时间、恢复时间等是否满足要求。

结合本项目的实际情况,SRAM接口的静态时序路径包含以上4种路径中的2种:即从输入端口到寄存器的数据D端的路径和从触发器的时钟CLK端到输出端口的路径,这两种路径在没有添加相关约束情况下并不会自动分析,因此即使input delay为0,也需要进行约束,若不约束,静态时序分析工具并不会按照默认0进行计算,而是直接忽略。添加合理的约束是决定静态时序分析质量的决胜因素。

3.2 静态时序约束

FPGA时序约束的工作就是模拟FPGA的实际工作环境,包括定义FPGA的时钟频率,设置数据端口的输入输出延时,设置芯片电路内部的伪路径等[8]。时序约束的作用主要是指导FPGA软件按照一定的原则布局布线,以控制逻辑路径端点间的布线延时。同时,时序约束还为静态时序分析器提供时序分析的标准和依据[9]。

数据的到达时间:输入数据在有效时钟沿后到达所需要的时间。通常由三部分组成:时钟到达寄存器时间,寄存器输出延时和数据传输延时。

数据要求时间:在时钟锁存的建立时间和保持时间之间数据必须保持稳定,从源时钟起点到达这种稳定状态需要的时间即为数据需求时间,默认的参考值是一个时钟周期。如果数据能够在一个要求时间内到达终点,那么这条路径符合设计规则。SLACK=要求时间-到达时间

其中,要求时间为约束时长,到达时间为添加延时候的实际到达时刻,SLACK为时序余量,正值表示满足时序,负值表示不满足时序,静态时序分析把上公式作为依据,分析设计中的所有时序路径。如果得到的静态时序分析报告中SLACK为负值,那么此时序路径存在时序问题,是一条影响整个电路工作性能的关键路径。在逻辑综合、布局布线等阶段进行静态时序分析,就能及时发现并修改关键路径上存在的时序问题,达到修正错误,优化设计的目的。

因此,正确且全面的约束是时序设计的重要环节,约束过少或过于放松实际上即是对设计的放松,也不能发挥静态时序分析应有的作用。

3.2.1 设置输入端口延时

输入端口延时的约束可以优化从输入端口到第一级寄存器之间的路径延迟,保证系统时钟采到的外部信号可靠、稳定。FPGA端口需要跟不同的外部器件连接,通过设置输入延时来模拟端口信号在片外路径的传播情况,可使静态时序分析结果更加符合实际。设置输入端口延时的语法如下:

set_input_delay[-clock clock_name]

[-clock_fall]

[-level_sensitive]

[-rise]

[-fall]

[-max]

[-min]

[-add_delay]

[-network_latency_included]

[-source_latency_included]

delay_value

port_pin_list

由上可知,输入端口延时约束的两大要素分别为:延时值、相关的时钟。简单的解释就是外部输入相对某时钟的延时时间,此处外部输入数据必须和时钟有固定或较固定的相位关系。根据图2所示,SRAM输入到FPGA的数据与地址、片选、读使能均有较固定相位关系,但设计中采用片选、读使能接固定值、读地址驱动数据输出的方式产生读数据,因此可约束输入数据相对读地址的延时值。由图可知,SRAM数据相对于读地址的延时最大值为tAA-12 ns,最小值为tOH-3ns,根据此信息进入如下约束,两组SRAM的约束相同:

set_input_delay 12 -max -clock sram1_adclk [get_ports sram1_dat]

set_input_delay 3 -min -clock sram1_adclk [get_ports sram1_dat]

3.2.2 时钟的创建

对于时钟的约束有两种,create_clock和create_generated_clock。create_clock命令用于创建一个时钟,包括时钟名称、源、周期和波形。create_generated_clock用于创建一个衍生时钟。

在3.2.1节中提到,设计中采用读使能驱动的方式产生读数据,因此可约束输入数据相对读使能的延时值。但根据set_input_delay的语法要求,约束的输入延时只能是相对于时钟的,而设计中的读使能信号并非时钟,此时就用到了虚拟时钟,此处可以使用衍生时钟的约束方式来实现,设置衍生时钟约束的语法如下:

create_generated_clock [-name clock_name]

-source master_pin

[-edges edge_list]

[-divide_by factor]

[-multiply_by factor]

[-duty_cycle percent]

[-invert]

[-edge_shift shift_list]

[-add]

[-master_clock clock]

source_objects

设计中FPGA和SRAM的数据流交互实际上均与70 M时钟clk_70 M相关,在70 M时钟下产生SRAM的地址信号SRAM1_ADD,SRAM输出数据到FPGA后,FPGA再使用70 M的时钟读取SRAM数据,以SRAM1为例,数据的交互如图6所示。

图6 SRAM1与FPGA数据交互

基于以上的信息,首先将70 M时钟约束为时钟,再将SRAM1_ADD约束为70 M时钟的衍生时钟,约束方法如下:

create_clock -period 14.286 clkin -name CLK_fpga70 -waveform [list 0 [expr 7.143]]

create_generated_clock -name sram1_adclk -source [get_ports clkin] -divide_by 1 [get_ports sram1_add[5]]

3.2.3 定义多周期路径

默认情况下静态时序分析工具基于单周期进行时序的检查,set_multicycle_path可以将普通的单周期电路扩展为多周期,用在同源但不同周期或者成倍频关系的时钟域之间,设置多周期约束的语法如下:

set_multicycle_path [-setup]

[-hold]

[-rise]

[-fall]

[-start]

[-end]

[-from from_list]

[-to to_list]

[-through through_list]

path_multiplier

在一定程度上讲多周期约束实际上是对时序检查的放松,因此一定要确定设计中确实采用了多周期的设计方法,才能进行多周期的约束。

set_multicycle_path -to [get_ports sram1_dat] -setup 2 -start

set_multicycle_path -to [get_ports sram1_dat] -hold 1 -start

3.3 静态时序分析

经过以上约束后,运行静态时序分析软件,发现端口SRAM1_DAT在读操作情况下建立时间不满足要求,以其中的一条路径为例进行分析,结果如图7所示。

图7 SRAM1读时序接口静态时序分析结果

由图7可知,整个路径的起点为sram1_adclk,即输出到SRAM的地址信号,在此条路径计算时首先添加了SRAM地址线上的输出延时信息“clock network delay”,之后添加了约束的输入延时值“input external delay”,之后再添加FPGA内部的延时信息,与图8中的数据流吻合,结合到图6中,各延时数据分布如下:

图8 静态时序分析中的延时与数据路径对应关系

进一步对以上的路径在后仿真时进行验证,在后仿真时将以上的数据路径分别找出,发现延时数据与静态时序分析的数据值吻合,进一步证明该种约束方案快速且有效。

4 设计改进

由于静态时序分析时清楚的列出数据的路径及每一级的延时信息,这就方便设计人员分析导致问题发生的关键原因,从而进一步调整方案,从上述的分析结果看,造成该问题的主要原因是由于SRAM的地址存取时间tAA、保持时间tOH在3~12 ns的范围内,该范围过大。一般情况下tAA参与建立时间余量的计算,tOH参与保持时间余量的计算,在调整设计后很难达到建立时间和保持时间的平衡,建立时间满足了,保持时间又出错了,或者最大工况下满足了,最小工况又出错了。

基于以上的原因,将设计方案进行调整,由地址驱动改为读使能驱动控制读时序,由图2可知,读使能驱动情况下的延时值在0~6 ns之间,处于更加可控的延时范围内,最终正确实现了FPGA对SRAM的读写控制。

静态时序约束的方式简便快捷,但最重要的时必须保证约束内容的正确性,约束的内容越准确,则分析的结果越趋近于实际值,例如:

1)以上约束时添加的数值实际上均为常温常压下的数据,而在实际使用中考虑器件在高低温条件下的延时可能变大,对SRAM器件资料进行进一步的解读,在高温或低温下大部分的时序参数值会增大或减小10%,在进行约束时也需要考虑FPGA产品的实际使用环境,从而考核出FPGA设计真正的余量;

2)3.2.2节中将地址约束为衍生时钟,而实际上地址为多bit信号,可以通过set_max_delay 的约束方式找出延时最大和延时最小的地址线。

5 结论

本文以SRAM读、写接口设计的时序验证为例,采用Prime Time对读写接口进行时序分析,介绍了将输入输出关联的特殊约束方式,将传统的单向的时序检查变为数据环路控制的时序检查,有效的提高设计及验证效率,该种方式同样可推广应用于ROM、MRAM等类似接口芯片。

猜你喜欢
时序延时端口
顾及多种弛豫模型的GNSS坐标时序分析软件GTSA
温度对圆柱壳结构应力及端口变形影响研究
华为交换机端口Hybrid 模式的应用
课后延时服务
清明
基于GEE平台与Sentinel-NDVI时序数据江汉平原种植模式提取
一种有源二端口网络参数计算方法
课后延时中如何优化不同年级学生活动效果
一种端口故障的解决方案
你不能把整个春天都搬到冬天来