FPGA之道(79)静态时序分析(五)外部接口的相关时序分析

前言

本文摘自于:《FPGA之道》。

外部接口相关时序分析

外部接口的情况纷繁复杂,因此外部接口的时序分析往往需要根据具体情况来具体对待,并且外部接口在默认的情况下是不具有完整逻辑锥结构的,因此,通常相关的时序分析工作均需要人工干预完成(搭建逻辑锥)。例如同步输入或输出接口就可以通过虚拟寄存器的方法来补全逻辑锥,从而进行时序分析,因此本章节就来讨论一些常见的外部接口相关的时序分析应对情况。

功能仿真对接口分析的帮助

针对于接口的一些时序要求,有时候往往是单靠时序工具所分析不了的,因为基于逻辑锥的分析思路丝毫不关心功能,当碰到诸如“在接收到A端口的高脉冲后,经过至少T0时间后,在B端口输出持续时间至少为T1的高脉冲,并在该脉冲结束后的T2时间之内,从C端口输出以不小于T2时间为间隔的3个高脉冲信号,并在其中最后一个脉冲信号结束后的T3时间之后、T4时间之前,从B端口再次输出一个持续时间至少为T1的高脉冲……”这样的接口时序需求时,时序分析工具往往都无能为力。事实上,类似这样的接口时序需求往往不在少数,因为复杂一点的接口往往都跟功能具有很强的相关性,例如,下图就是一个关于EEPORM芯片的编程时序:
在这里插入图片描述
每当这个时候,功能仿真的结果往往就成为了时序分析时非常好的帮手,因为功能仿真给出的波形结果就是不考虑各项时间延迟的理想情况,此时,我们再辅以通过时序分析工具所得出的一些时间延迟参数,就可以调整得到考虑实际延迟情况的波形结果,然后据此便可得出时序是否得到满足的结论。
例如,某输出接口的时序需求为A端口、B端口先后发出一个高脉冲,两个脉冲的间隔不得大于200ns,脉冲高电平持续时间不得小于20ns。那么,若A、B端口的输出实际上都是由频率为100MHz的clk信号驱动的,并且其相关的功能仿真波形如下所示:
在这里插入图片描述
可见,在理想情况下,A、B端口输出的高脉冲持续时间均为30ns,A、B高脉冲之间的间隔为100ns。由于延迟并不会造成单根数据线上波形形状的畸变,所以A、B端口上高脉冲的持续时间肯定满足要求,接下来就需要考虑实际延迟对A、B端口发出高脉冲的间隔的影响了。假设,clk信号到达产生A、B端口信号触发器的skew分别为2ns、3ns,对应触发器的输出到A、B端口的时间延迟分别为7ns、9ns。那么,若以clk为基准,clk任一个时钟上升沿为参考,A端口的输出要比其在功能仿真波形上实际晚9ns(2+7),B端口则要晚12ns(3+9),则A、B两个端口发出高脉冲的间隔实际应为103ns(100-9+12),也满足需求。

纯输入接口

纯输入接口关心的是你能否正确接收别人的输出。

纯时钟输入接口

纯时钟输入接口指的是仅将外部时钟信号导入FPGA芯片的接口,即外部电路或芯片输出时钟信号,而FPGA芯片接收该时钟信号。虽然我们对于输入的时钟也应该有各项时间指标要求,但这往往都是对外部时钟源的要求,不是FPGA芯片本身能够控制的,所以我们不会针对纯时钟输入接口进行时序分析。不过,这类接口往往是FPGA内部逻辑进行时序分析的基础,所以通常需要将其本身的各项时间指标尽量精准的告诉时序分析工具。

纯同步输入接口

纯同步输入接口,指的就是外部设备在输出数据的同时也输出用于采集该数据的时钟信号。那么对于FPGA来说,处理该类输入接口的方法通常是采用输入的时钟去采集相应的输入数据即可,如下图所示:
在这里插入图片描述
对于目前的时序分析工具来说,我们往往只需要指明数据端口处每个采样点的稳定周期及其与时钟端口处时钟信号的相对位置(通常相对于某个边沿来指定,例如D稳定周期100ns,开始稳定时刻提前clk上升沿60ns),时序分析工具便可以自动完成时序分析。到此为止,纯同步输入接口的时序分析就完成了,但是这里有两点需要特别注意:
第一点,对纯同步输入接口进行时序分析看似容易,但其背后所隐藏的道理却不简单。首先,该怎么虚拟寄存器就是一个难题。为什么这么说呢?因为要想让逻辑锥覆盖到所有的输入路径,必须虚拟一组生成寄存器,对应的电路原理图应该类似如下:
在这里插入图片描述
对于实际电路来说,当D的位宽较大时,由于不同寄存器的输出有先有后,虽然D的每一个比特的稳定周期应该等于时钟周期,但整个数据D的稳定周期往往是小于时钟周期的。例如,对于一个位宽为3比特的数据D来说,如果在某一个时钟上升沿,其输出应该从0(“000”)变为7(“111”),然后下一个时钟上升沿再变回到0,那么其实对于每一个比特来说,均应该会有一个周期的时间稳定在电平1,不过由于时钟skew以及路径延迟的原因,就会导致最终输出的D如下图所示:
在这里插入图片描述
可见,D数据中各个比特的最大、最小延迟相差多少,D数据的稳定时间就会比一个时钟周期减少多少,而且稳定开始取决于最大延迟路径,稳定结束取决于最小延迟路径。
鉴于此,外部芯片手册中所提供的该接口中数据D的稳定周期往往也是要小于时钟clk的周期的。因此,如果使用虚拟寄存器的方法,即便我们一切从简,令这些虚拟寄存器的时钟skew全部为0,那么为了能够真实还原输入端口处D和clk之间的关系,我们必须反推出一个最大tco和一个最小tco来。
现在问题来了!最大tco、最小tco好求,但该怎么为所有的虚拟寄存器分配tco值呢?要知道,D数据中的每一位所对应的FPGA内部触发器的时钟skew、路径延迟都是不一样的,所以不同的分配原则绝对会造成不同的时序分析结果。例如,仍参考上图,就算采集D[0]~D[3]的触发器的skew均为0,如果D[1]的路径延迟最大、D[0]的路径延迟最小,则对于内部采样寄存器组来说,D稳定的周期更短了,相对于clk的建立、保持时间也更小了;但如果我们令D[1]的tco最小、D[0]的tco最大,则相对于内部采样寄存器组来说D稳定的周期及相对于clk的建立、保持时间很可能会得到改善(当然,也可能更差,因为物极必反嘛)。由此可见,如果我们只知道D与clk的关系,并不能得出虚拟寄存器组tco的唯一解,而不同的tco解集所对应的时序分析结果又不尽相同,那到底该怎么办呢?
考虑到建立时间余量只关心D的最大延迟、保持时间余量只关心D的最小延迟,所以我们可以先令所有虚拟寄存器的tco均为最大tco,然后进行时序分析,并忽视时序报告中关于保持时间的结论;然后再令所有虚拟寄存器的tco均为最小tco,然后再次进行时序分析,并忽视时序报告中关于建立时间的结论。最后,结合这两次时序分析中的有效结果,便可得到关于该同步输入接口最终的时序分析结果。
不过仔细想想就会发现,上述两次逻辑锥在求解时,虽然每次虚拟寄存器组的tco取值不同,但所有虚拟寄存器的tco都是一致的。既然这样,tco完全成为了一个群延迟参数,并且对于每条路径来说,它只不过是累加时的一个初值而已。既然如此,我们完全没有必要求解两次逻辑锥,只需要令所有寄存器的tco也均为0,进行一次求解,然后对分析结果进行简单的tco修正即可。例如,此时时序分析工具给出FPGA内部寄存器在采样时,D相对于clk信号的建立时间为100ns、保持时间为-5ns,若反推出的最大、最小tco分别为30ns、20ns,则内部寄存器在采样时D相对于clk信号的实际建立时间为70ns(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李锐博恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值