典型的系统分析和约束实例:摄像头采集,SDRAM存储,VGA显示
摄像头的input delay约束
VGA的output delay约束
SDRAM的input和output约束
参考代码
http://www.corecourse.cn/forum.php?mod=viewthread&tid=27930&highlight=7670
1,全编译
2,打开TimeQuest,并选中PLL的时钟右键移除
接下来修改时钟,可以看到CLK是50MHz,可以不用修改,摄像头cmos的时钟需要修改,对于OV7670摄像头:PCLK=24MHz,OV5640摄像头:PCLK=48MHz
这里选用48MHz
选中时钟,右键
修改后的时钟
生成SDC文件
然后关闭软件,回到Quartus软件添加SDC文件再重新编译
接下来设置PLL时钟
有两种方式,第一种方式,上节博文也讲过了,那就是Create Generated Clock
我们现在采用第二种方式
PLL_C0:clk_sdr_ctrl,作为SDRAM控制器的基本工作时钟100M
PLL_C1:sdram_clk,作为SDRAM存储器芯片的接口工作时钟
PLL_C2:clk_24m,最终通过Cmos_xclk这个管脚输出
PLL_C3:ClkDisp,最终通过Disp_PCLK这个管脚输出,作为ADV7123芯片的同步时钟
然后保存SDC文件,再重新编译
下面进行output delay约束
首先创建生成时钟
设置最大输出延迟
设置最小输出延迟
最大输入延迟
数据手册没有给最小输入延迟,所以可以不设置
保存到SDC文件
建立时钟中
Data arrival time = Launch edge + T0->T1 + T1->T2 + Tco + T3->T4 + T4->T5
Data arrival time = Launch edge + Tclk1(int) + Tclk1(ext) + Tco + Tdata(pcb) + Tdata(int)
Data require time = Latch edge + T0->T6 - Tsu
Data require time = Latch edge + Tclk2(int) - Tsu
Slack(su) = Data require time - Data arrival time >=0,即
Latch edge + Tclk2(int) - Tsu - (Launch edge + Tclk1(int) + Tclk1(ext) + Tco + Tdata(pcb) + Tdata(int)) >= 0
(Latch edge - Launch edge) - ( Tclk1(ext) + Tdata(pcb) + Tco) >= -Tclk2(int) + Tsu + Tclk1(int) + Tdata(int)
最大输入延迟input delay max = Tclk1(ext) + Tdata(pcb) + Tco
保持时间中
Data arrival time = Launch edge + T0->T1 + T1->T2 + Tco + T3->T4 + T4->T5
Data arrival time = Launch edge + Tclk1(int) + Tclk1(ext) + Tco + Tdata(pcb) + Tdata(int)
Data require time = Latch edge + T0->T6 + Th
Data require time = Latch edge + Tclk2(int) + Th
Slack(hold) = Data arrival time - Data require time >=0,即
Launch edge + Tclk1(int) + Tclk1(ext) + Tco + Tdata(pcb) + Tdata(int) - ( Latch edge + Tclk2(int) + Th) >=0
(Launch edge - Latch edge) + (Tclk1(ext) + Tco + Tdata(pcb) ) >= -Tclk1(int) - Tdata(int) + Tclk2(int) + Th
最小输入延迟input delay min = Tclk1(ext) + Tco + Tdata(pcb)
总结,
时钟和数据方向相同的情况
input delay max = Tco + Tdata(pcb) - Tclk2(ext)
input delay min = Tco + Tdata(pcb) - Tclk2(ext)
时钟和数据方向相反的情况
最大输入延迟input delay max = Tco + Tdata(pcb) + Tclk1(ext)
最小输入延迟input delay min = Tco + Tdata(pcb) + Tclk1(ext)
对于时钟是由外部器件提供的情况,如图
此时的时钟在外部PCB板上
T0->T1 : Tclk1(ext)
T0->T2 :Tclk2(ext)
skew(ext) = Tclk2(ext) - Tclk1(ext)
若时钟在内部
时钟和数据方向相同的情况
input delay max = Tco + Tdata(pcb) - Tclk2(ext)
input delay min = Tco + Tdata(pcb) - Tclk2(ext)
此时,Tclk1(ext) = 0,等式中加入
input delay max = Tco + Tdata(pcb) - (Tclk2(ext) - Tclk1(ext))
input delay min = Tco + Tdata(pcb) - (Tclk2(ext) - Tclk1(ext))
又因为
skew(ext) = Tclk2(ext) - Tclk1(ext)
input delay max = Tco + Tdata(pcb) - skew(ext)
input delay min = Tco + Tdata(pcb) - skew(ext)
时钟和数据方向相反的情况,
最大输入延迟input delay max = Tco + Tdata(pcb) + Tclk1(ext)
最小输入延迟input delay min = Tco + Tdata(pcb) + Tclk1(ext)
此时,Tclk2(ext) = 0
input delay max = Tco + Tdata(pcb) - (Tclk2(ext) - Tclk1(ext))
input delay min = Tco + Tdata(pcb) - (Tclk2(ext) - Tclk1(ext))
又因为
skew(ext) = Tclk2(ext) - Tclk1(ext)
input delay max = Tco + Tdata(pcb) - skew(ext)
input delay min = Tco + Tdata(pcb) - skew(ext)
总结,
时钟和数据方向相同的情况
input delay max = Tco + Tdata(pcb) - skew(ext)
input delay min = Tco + Tdata(pcb) - skew(ext)
时钟和数据方向相反的情况
input delay max = Tco + Tdata(pcb) - skew(ext)
input delay min = Tco + Tdata(pcb) - skew(ext)
即,对于输入延迟,不管时钟和数据方向相同的情况还是时钟和数据方向相反的情况
input delay max = Tco + Tdata(pcb) - skew(ext)
input delay min = Tco + Tdata(pcb) - skew(ext)
那么对于输出延迟
若时钟也在外部
T0->T1 : Tclk1(ext)
T0->T2 :Tclk2(ext)
skew(ext) = Tclk2(ext) - Tclk1(ext)
若时钟在内部
时钟和数据方向相同的情况
最大输出延迟output delay max = Tdata(pcb) -Tclk2(ext) + Tsu
最小输出延迟output delay min = Tdata(pcb) - Tclk2(ext) - Th
此时,Tclk1(ext) = 0,等式中
output delay max = Tdata(pcb) - (Tclk2(ext) - Tclk1(ext)) + Tsu
output delay min = Tdata(pcb) - (Tclk2(ext) - Tclk1(ext)) - Th
又因为
skew(ext) = Tclk2(ext) - Tclk1(ext)
output delay max = Tdata(pcb) - skew(ext) + Tsu
output delay min = Tdata(pcb) - skew(ext) - Th
同理,时钟和数据相反的情况也是如此
output delay max = Tdata(pcb) - skew(ext) + Tsu
output delay min = Tdata(pcb) - skew(ext) - Th
总结
对于输出延迟,不管时钟和数据相同还是时钟和数据相反的情况
output delay max = Tdata(pcb) - skew(ext) + Tsu
output delay min = Tdata(pcb) - skew(ext) - Th
总结
对于输出延迟,不管时钟和数据相同还是时钟和数据相反的情况
output delay max = Tdata(pcb) - skew(ext) + Tsu
output delay min = Tdata(pcb) - skew(ext) - Th
对于输入延迟,不管时钟和数据方向相同的情况还是时钟和数据方向相反的情况
input delay max = Tdata(pcb) - skew(ext) + Tco
input delay min = Tdata(pcb) - skew(ext) + Tco