时序分析12-I/O时序分析与约束实例2

下面我们来进行约束SDRAM
对于输出延迟,不管时钟和数据相同还是时钟和数据相反的情况
output delay max = Tdata(pcb) - skew(ext) + Tsu
output delay min = Tdata(pcb) - skew(ext) - Th
对于输入延迟,不管时钟和数据方向相同的情况还是时钟和数据方向相反的情况
input delay max = Tdata(pcb) - skew(ext) + Tco(max)
input delay min = Tdata(pcb) - skew(ext) + Tco(min)

FPGA往SDRAM里面写数据,就是控制最大输出延迟和最小输出延迟,此时数据和时钟方向相同

在这里插入图片描述
最大输出延迟output delay max = Tdata(pcb) -Tclk2(ext) + Tsu
最小输出延迟output delay min = Tdata(pcb) - Tclk2(ext) - Th
另外,数据和时钟线等长,那么 Tdata(pcb) == Tclk2(ext)
所以
最大输出延迟output delay max = Tsu
最小输出延迟output delay min = -Th

查看SDRAM的数据手册
数据手册

在这里插入图片描述

可以看到这些控制命令的输入时间中,tcms为上升沿到来之前的时间,即建立时间Tsu,tcmh为上升沿到来之后的时间,即保持时间Th
在这里插入图片描述
数据手册中显示tcms=1.5ns,tcmh=0.8ns
所以
最大输出延迟output delay max = Tsu = 1.5ns
最小输出延迟output delay min = -Th = -0.8ns

FPGA从SDRAM里面取数据,就是控制最大输入延迟和最小输入延迟,此时数据和时钟方向相反,
在这里插入图片描述
最大输入延迟input delay max = Tco(max) + Tdata(pcb) + Tclk1(ext)
最小输入延迟input delay min = Tco(min) + Tdata(pcb) + Tclk1(ext)
数据和时钟线等长,那么 Tdata(pcb) == Tclk1(ext)
所以
最大输入延迟input delay max = Tco(max) + 2Tdata(pcb)
最小输入延迟input delay min = Tco(min) + 2
Tdata(pcb)
Tdata(pcb)是可以通过PCB走线长度计算出来(5555mil/ns)
根据自己的硬件设备,sdram到fpga的距离计算Tdata(pcb),我们这里采用AC620开发板,Tdata(pcb)约为0.5ns
下面查看数据手册找出Tco
在这里插入图片描述
查看Read Timing,看到上升沿到数据有效的时间为Tac,这个时间就是Tco,
在这里插入图片描述
可以看到Tac最大为6ns,即Tco=6ns,没有给出最小值
所以
最大输入延迟input delay max = Tco(max) + 2*Tdata(pcb) = 6 + 2 0.5 = 7ns
最小输入延迟input delay min = Tco(min) + 2
Tdata(pcb) < 7ns

总结
最大输出延迟output delay max = Tsu = 1.5ns
最小输出延迟output delay min = -Th = -0.8ns
最大输入延迟input delay max = Tco(max) + 2*Tdata(pcb) = 6 + 2 0.5 = 7ns
最小输入延迟input delay min = Tco(min) + 2
Tdata(pcb) < 7ns

下面进行软件实际操作约束
打开TimeQuest软件
因为SDRAM的时钟是由FPGA的PLL生成的,所以首先是生成时钟进行绑定
在这里插入图片描述
在这里插入图片描述

从代码中可以看到sdram的是c1时钟
在这里插入图片描述

在这里插入图片描述
目标时钟
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

接着约束output delay
先是最大输出延迟
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后最小输出延迟
在这里插入图片描述

最大输入延迟
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
最小输入延迟低于7ns就好,我们设定5ns
在这里插入图片描述
设置完后,生成SDC文件,在Quartus软件中重新全编译
在这里插入图片描述
重编译后,打开TimeQuest查看报告
首先看失败的路径
在这里插入图片描述
可以看到,节点从外部的sdram_dp到内部4端口控制器,Launch Clock是clk_sdram,Latch Clock是clk[0],Relationship = 2.5ns,即400M,但是这两个时钟是100M,所在问题存在这里,Relationship存在错误
我们查看路径的波形图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
怎么会是2.5ns呢,我们查看这两个的时钟,Launch Clock是clk_sdram,而clk_sdram是绑定clk[1],Latch Clock是clk[0],可以看到,clk[1] 与 clk[0]这两个时钟是存在90度的相位差,clk[1]比clk[0]提前了2.5ns,
在这里插入图片描述

问题是Launch Clock与Latch Clock差2.5ns,Launch Clock到来,开始发数据,2.5ns后,Latch Clock到来,开始接收数据,然而这个2.5ns的时间过短,Tco的时间都要7ns,也就是说Launch Clock到来,数据还没有稳定到达输出端,Latch Clock就来了,开始接收数据了,这是肯定取不到数据的,所以这就有问题,应该在 Latch Clock下一个上升沿的地方进行取数据,那么Relationship = 2.5+10=12.5ns

在这里插入图片描述
我们需要告知软件Relationship=12.5ns
在这里插入图片描述

这里面有两个选项,是Set Multicycle(between nodes),Set Multicycle(between clock),一个是设置节点之间,一个是设置时钟之间,从报错的信息来看,单设定节点,需要设置很多次,而所有的报错的路径的时钟都相同,所以我们统一设置时钟就可以了
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这里面Value是指从Launch Clock出发,经过第几个上升沿的Latch Clock来计算Relationship,Latch Clock显然是2

在这里插入图片描述

设定后,再去查看,发现没有错误了,我们查看设定的路径信息
在这里插入图片描述

可以看到此时的Relationship=12.5ns
在这里插入图片描述
至此设定完毕,保存到SDC,再重新编译查看报告,此时,没有任何错误了
在这里插入图片描述

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值