altera fpga大小如何衡量_FPGA基础培训系列-时序约束指南

本文介绍了FPGA时序约束的重要性,通过实例展示了 Altera FPGA 中时钟路径的延时分析,包括时钟源同步系统、时钟约束窗口和数据路径延时的影响。强调了正确设置时序约束以确保建立和保持时间的重要性,并讨论了不同模式下PLL的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多图

6b7c0310a80796eb881ae1a7c7158593.png

27eaf89c7a735a21d69773db18557598.png

4810dbad8216f0367b3400723174aa66.png

cf16cd42f872c4235588b3ffdb6c8f5e.png

8d069430a160e323b7152a5453623ef6.png

492082208f2b2be8475ba01f47225267.png

3b939cfe1ee62eec4792f970ac3c8796.png

ccea9d336e55229420bf225f0bf5e338.png

b3c80d99dd2c3cc84e99b793bd6b6957.png

11f19316df2b91dacd410b34f764b32a.png

85226e8eb410947896193614b678c38b.png

c6455b8877f5a870d7748b8ae6baede8.png
不同的温度模型下,不一样不同的电压、电流、时钟下,也不一样

a88de6e9cece9d77d0a1d7f6e79db0ad.png
xilinx的tco数据,我简直不敢相信

f5317f525ad1ac61a0081042680152ea.png
所以又加了一个pll下的,数据好了很多,但是输入窗口变差了

24a2bbc37c4a89e8d81bf73f569afb1c.png

9f538d072741a4eeab75cc5508c5fff5.png

2509bc483cc4fa69070c138440a3dc59.png
以编译软件的视角来看

82e2777fbea550f64158e76dd48185d7.png
以编译软件的视角来看,虽然身处整块板卡,但是实际上,是看不到整体时钟框图的

041a2143f47e478a3638af4a2661b85d.png
以编译软件的视角来看,只能看到fpga管脚处的时序信息

396ef1982e5e7865272cd78b2e4204f9.png

c65d47df03f49e4f5cda82ef6a218248.png

4b251f7fd62f6f82b04c20b1bccaf339.png

c3c34a4ca8fd415f93d73b73f91a137a.png

A,B相邻的两村,有一年夏天大旱,两村的村支书带领抗旱

AB村相传下来,大旱之后必有大涝

A村村支书在冬天带领大家修水利,B村村支书认为a脑子坏了

结果:第二年夏天,发洪水

A村,提前修水利,啥事都没有,平安度过

B村,决堤,村支书冲在一线带领大家抗洪,事迹突出,被提拔为乡长

492b71638d83e93e94daee8e7390b6b4.png

71f009e780f0f137f72573dc6e97e724.png

635d93f3d5fc8600dd357a2fb9ad497f.png

13d026fa9231bc5b993f3688e5c12877.png

15ff44c9615c7aeba32681aaf57f5fca.png

9a10a976ed05171d9a8a2639c15fe15e.png

xx_clk_160m :左数第一个LMK00301的输入时钟

LMK00301_clk_160m :左数第一个LMK00301的输出时钟,单片的时钟skew为50ps,按0.1计算

pcb_clk_160m :上下两端路径的pcb之和。时钟线路等长,数据路径为正负0.5。即从第二片LMK00301到Max的pcb走线,比从fpga到Max的pcb走线,可能短0.5ns,也可能长0.5ns

LMK00301_clk_160m1 :左数第二个LMK00301的输出时钟,由多片组成,路径延时,最大0.2ns,最小0.6ns

divider1:评估最恶劣情况下的保持时间,即到达Max的时钟,比到达fpga的时钟晚

此时,假设pcb走线长0.5ns,第二个lmk00301延时最大为0.6ns,第一个lmk00301输出差0.1ns,则clk_max比clk_tr晚1.2ns

divider2:评估最恶劣情况下的建立时间,即到达Max的时钟,比到达fpga的时钟早

此时,假设pcb走线长-0.5ns,第二个lmk00301延时最大为0.2ns,第一个lmk00301输出差-0.1ns,则clk_max比clk_tr早0.4ns

结论:fpga输出的数据,必须在时钟上升沿之前2.4ns准备好,在时钟上升沿之后再保持2.7ns

dcee25550e8ee4a41c18db5389e85370.png

2d547460390b64a81dbf1fd7304c06d6.png

同一个建立保持小系统,尽可能时钟是同一个:

比如p24的例子。fpga和外部芯片的时钟路径,中间就有一个buffer

同一个芯片的不同窗口,是否重合:

比如fpga外部有多个芯片,每个芯片的窗口都不重合

fpga内部走线绕线造成的延时是有限的,不是任意窗口都行的

4f2b2b3a408d15daba6d9222c48feb79.png

63453d28489ae9fa3f796b0a29f06445.png

67bbb9796365737bb106444e455a055d.png

98b6773413d68d74ba8ff21c2ab095ec.png

7d7c6b0f7d9e8aa3539bb13157965739.png

Data路径的延时,会导致整体数据窗口右移,因此表达式需要加上该延时

Data路径的最大延时,对建立时间的要求最苛刻

Data路径的最小延时,对保持时间的要求最苛刻

a7da1780994cf57f85391b52d7fdd3af.png

1.Data太多,加buf费钱

2.Fpga管脚够,完全可以自己出,不需要复制

3.Data要求低,不需要中继

时钟信号要求高,所以需要中继

时钟出的路数,往往不够用,所以需要buf复制

谁说data没有buf,发射信号就有buf

但是有buf之后,外部ic就变成了buf,fpga跟外部ic之间,还是没有buf

d6b8d9323c8031b62c5d1c48623e8492.png

clk路径的延时,等同于整体数据窗口右移,因此表达式需要减掉该延时

clk路径的最小延时,对建立时间的要求最苛刻

clk路径的最大延时,对保持时间的要求最苛刻

493d3b0f25c288870c5e1fe40484ca93.png

Clk buf在fpga路径上怎么办:取反,放到wbic路径上

Clk到外部ic的延迟也是一个范围怎么办:范围放到clk_buf的值里面

Pcb只能给等长信息,不能给出具体值怎么办:抵消掉,反正后面的公式也是要抵消的

37597b4a522a6409bccfc2b7727570cf.png

2cdeecd8d123fe06b72466070f903fbf.png

bb399a35147090ee0c0ecb730b724b9e.png

5de93da2c833b5826faa5db1f982ae77.png

对单根线而言,建立时间窗口在0.8左右,对总线而言,建立时间窗口大概是1.5

所以,为什么并行总线被高速串行总线取代了

5e3358cdd644e19b5fef140554a49a34.png

deb17f00ab8f815e278715b5f97a0ca8.png
可见,xilinx的一致性很好,输出窗口很大,但是输入要差一些

1ed8f27e38c838e4110eade6074a75b3.png

9be5e1ed94443d24a4801810b434c9b5.png

3acef7db56609752085a0858c9ab755d.png

79421cf1f35d090ceb8ffad457dd36c6.png

707c239d9b8b63a28fa6a33692f7c576.png

请计算一下,逻辑时序约束应该如何做

set clk_path_max 2

set clk_path_min 1

set data_path_max 2

set data_path_min 2

set wbic_setup 1

set wbic_hold 1

set output_delay_max [expr $data_path_max - $clk_path_min + $wbic_setup]

set output_delay_min [expr $data_path_min - $clk_path_max - $wbic_hold]

69d42cb976b467db01bfec1b505e0bf0.png

clk_fpga_100M:系统时钟100M

data_fpga_xdc:逻辑时序约束值(数据有效窗口[-2,1])

data_fpga_report:逻辑工程报告结果(数据有效窗口[-4,2]),即:逻辑实际跑出来的结果,建立时间有2ns裕量,保持时间有1ns裕量

data_fpga_test:实际在板卡上测试到的fpga输出数据的跳变时刻。在固定的条件下,是一个定值

data_wbic_test:数据到达外部ic芯片,在板卡上的测试值

clk_wbic_test:外部ic芯片的输入时钟,在板卡上的测试值

从图中可以看到,ic芯片的要求窗口,本来只有2ns,由于时钟buff的延时不确定性,给到逻辑的约束窗口变成了3ns

而逻辑实际做到的窗口为6ns

而板卡实测到的窗口,为10ns

整体上看,有窗口扩大化的趋势

所以,之前测量10ns窗口,来跟2ns窗口做比较,做为接收准则,是不够的

657592c91b54bd9bc60a65dd5ecf4bf6.png

逻辑给出特定逻辑版本的相关管脚的tco值,

板卡工程师给出后续的值,并计算出数据和时钟的理论窗口

硬件测试工程师实测,并填入实测值一栏

如何判断测试结果正确?

1.时钟路径,是不是只测试最终结果即可(建议每条pcb路径都测一下,因为buf延时不确定性会掩盖掉一部分错误。比如插座的延时)

2.最好是画个图,凭经验再次判断一下

82b6d5c214163417a1a3acd0c02a394d.png

2e040f79f87a08427db9f3195b85c5e8.png

f42d853010a949f574ddfca7a5b3eabc.png

df1006616132e9659cfb6c9c6990a176.png

bc41d3bb0b01d9c75d4dc326f0555ed5.png

612bd0440276123421fd692d80415ff0.png

6516129350f784aa79555fa937a3194d.png

552fca732066204f46b700362377955e.png
改变文件后,可以再次运行timequest,可以直接看结果,不用重新编译

dedc999225170b1598127a5bc035e731.png

db2452c54af5509fd3302aa34abfa6ed.png
需要完成布线后,再启动

e6e81cbd192d5afd3c7042d6a89594e8.png
3种时序模型是分开的,默认是slow 85c模型

1e09c414f2a95ad79628da4760d53cd8.png
修改时序文件后,可以重新打开综合工程,看到新的结果,不需要重新综合但是好像布线工程不行。

8bf29887f33b4f6911b8ccead196817c.png
打开综合工程后,可以选择Edit Timing Constraints:进行时序约束Report Timing Summary:报告时序结果

095aebfcf07fdba00b8474eeca8900f5.png
在此界面下,可以进行各种时序约束

171c2ba7c8ad3d05914acb1ea78846c9.png
可以查看时序结果包括时钟内和时钟之间的结果

c887ffcd7066cf597e7dfa57275ee3c0.png

476d6035bc570c77520d2e25a9f7940d.png

数据到达时间的示意和计算方法

Tclk1:时钟从管脚到达第一个寄存器的演示

Tco:第一个寄存器的输出延时tco

Tdata:数据从第一个寄存器,到达第二个寄存器的延时

a83dd617014dde33296a1b723aa371ce.png

09aa4d70054b42abd4269d26af2fe85a.png

22c6a1dc39da62ba715d4a3ef580fdf8.png

578906e3e59745a632d225d1677c86c2.png

05f7c5499cc77cea9ce96ac4f3862720.png

fe10d2709641ab01af82cf4232f029b5.png

c79551a59b50595aaafbc871740ced33.png

3cde6ae99ffa17098611773dc5069b0d.png

9dbd16bddbfaacb06168009e9f85ad9a.png

d766f6cd9217f5716eb7e2008cf0ece9.png

6c53ef9f4a5f66a724f121c91098e42b.png

b87af4f74e258c5819e45a20e07626d1.png

37b33772c9de412ada5607a06c3d5d0b.png
对于占空比不为50%,以及相位不从0开始的,可以通过rising和faling来修改

2848cf8857b7ae5fa032845c0c27aef9.png

0a82f635587d4ade7395b513c051a7e7.png
生成完之后,可以在窗口看到已生成的时钟

72b8a174bc1b350b32821a124d8d474d.png

8f8ec1471374450b19276bb0c289202f.png
altera生成pll后,打开timequest,关闭时,会自动保存一个文件,可以看到pll的相关时钟已经生成好了

f7008c5a840a2a41fb495b1782fb6918.png
但是altera的默认pll时钟,名字太长,不利于后续约束可以将altera的脚本,直接修改为我们需要的

63c83a1ed005f17f167f978006806a4b.png
修改之后的时钟如图

eb3198390be571ba3ce879e326f08a1f.png

6d0a90284a9e822a98fe505b18e50474.png

6f7c4dbeefcd38fcfa187c0de2564854.png
可以看到,在xilinx的工程中生成pll之后,会自动添加pll的xdc约束文件,生成了输入时钟(pll时钟也同样生成了,但是生成的原始脚本,是看不到的,所以不能用altera的方法直接借用)

0409b6947666ed8e577a07035a52cc62.png
可以看到,xilinx会自动给pll输出时钟起名字,名字较短,但是还是没有用户意义所以,我们再次来改名字

38bfeeb9846386c947b2ddc645e1c892.png
直接生成一个派生时钟

38a4d127f1c9a85573cc39a065996afc.png
可以看到,在xilinx的默认pll时钟下,生成了新的用户指定的时钟名字在intra-clock里面,时序结果是放在用户指定名字的时钟下的inter-clock里面,也是如此

fc791534cf190190eced2b5fb6a2c712.png

9e033d927677a6ee92cbf0023be2dae7.png
altera的 Report Clock Transfers里面,可以看到不同的clk之间,是否存在跨时钟的信号当仅约束了输入时钟和pll时钟时,看到的关系如图

c415b407a540224916de8f39391ff9dc.png
约束了输入输出延时后,看到的关系如图时钟之间的关系增加了

c37ea885292a6b2a3204d3d5f838d7b6.png
根据当前的group情况,请列一下clock transfer情况

4922394cb8411f820652bd9e11721aee.png

59c2281fc62fbc573f7750908c25a79b.png
xilinx有cleck interaction,用矩阵形式展示各个clock之间的关系

63d57eb2eed6a2fe9f41aa573b9870f9.png

a0be9822e6a3e8d3f5d97f3389db2daf.png

914d1f05f4d5510b4373f2af3cfb9d73.png

2d8f24ee44184d99507a75f7daaa67aa.png

0be8abe427a2532e65bd090ac5e3434f.png

Used falling clock edge:相对于时钟的下降沿约束(即数据是时钟的下降沿发出的)

Input delay options

Minimum:输入最小延时,即input_delay min

Maxmum

Rise:相对于数据的上升沿约束(有些信号,上升沿和下降沿的延时不一致,或者说,信号上升和下降的速度是不一样的)

Fall

Delay value

Add delay:如果该信号上已经有其他约束了,该约束是进行附加,而不是替代

Targets:目标信号

21628fd59b6b5bbb77c05d84b3e1cbe7.png
输出延时

eaa78607b202b94bbe5a60cbfa5b1fb4.png

输出源同步,相对的时钟,是fpga管脚

之前所有的约束,都是相对于输入的100M来约束的,即使内部使用200m采样(注意时序约束的实质,是告知,肯定是相对于管脚进行告知)

可以看到,源同步系统,开的窗口要大一些,为什么?

你抖我抖一起抖

fa67030d5a91ec99224836e09a2f7609.png

798a57c227d76534dd2821b5f8c64c4e.png

注意2个窗口,分别是 数据到达窗口、数据要求窗口,跟之前的讲解是一样的

3ns:input delay

0.782:信号进管脚的延时

2.852:管脚到达寄存器的走线延时

0.139:穿越le内部的查找表的延时(虽然没用这个查找表,但走线还是走了,虽然可以不走的。所以,布线软件的智商和内部算法啊)

0.115:到达寄存器

2.347:时钟从管脚到pll

-7.926:pll补偿

2.378:从pll到达全局时钟

1.622:从全局时钟到达寄存器(可见,信号上全局,消耗的时间也是很长的,所以下次面试问到为什么信号要上全局,不要再回答:上全局延时小了)

0.618:到达寄存器

f9d710522f7e8f26fac1e870a9a6bf3c.png

注意上图中的2个时刻

clk的latch time时刻为10ns,时钟到达寄存器的时刻为9.855,基本一致,与altera的说明比较一致

743e571b81e6f95ea43a031b4ce1c163.png

pll的4种模式,每种模式都是怎样的,分别用于什么场合。进阶问题,这几种模式,都是怎么通过反馈实现的

普通模式:AB两点同相。时钟输入无延时,数据有延时,会吃掉建立时间,但是建立时间一般比较多(tco一般不大),符合一般情况

源同步 :AB两点的延时,等于FG两点的延时,一般用于源同步系统,有随路时钟,可以把管脚上的时钟和数据的关系,复制到reg处

零延时 :AC同相,可以输出一个无延时的外部时钟

外部反馈:pcb保证CD延时与CE延时一致。pll通过调相实现AD同相,从而达到AE同相,使fpga和外部芯片输入时钟同相

无补偿 :pll本身无延时,AB两点延时等于时钟输入延时+时钟网络延时,此时路径上没有延时单元,所以抖动性能最好

a45f8da7191a6f63e5cfabae608432e0.png

969ef9f3e75b5b9c71badebd12dfd060.png

4dab2445d05f796512e73b335131e793.png

be1fe52d7d2e03733bd51f504bc70440.png

730ba652f49b01a76cc7ecbb069fd10d.png

e364ca60add74c7b3902fd53574aa2cd.png
xilinx的io约束,规则基本一致,不再详述默认max和min是关闭的,必须要打开

51182d33807d4aa108936a3bb1b412d2.png

输入约束

非图形化界面,要差一些。

但是走线延时,看得很清楚

注意看,输入时钟是5ns,到达寄存器时间,是3.459ns,提前了1.5ns

2b427687df3ef49f11fc93970b7e8b78.png

源同步输出约束

可以看到输出源同步时钟,专门加了一个窗口

6af83d3847e770e61efb60bb8e53d227.png
xilinx的文档表示,到达寄存器的时钟相位,应该比输入时钟相位延时一个bufg的时间

61b19c334a5c6e58a47426ed1ec576b4.png

b899a014ccc6dc98457327ed9e0387cd.png

可以看到,altera和xilinx的输入延时不确定窗口,都是2ns,但是位置不一样。

xilinx的时钟,经过pll之后,前移了,导致输入有效窗口,也要跟着前移

后面的约束,迭代了多次,不太容易稳定

稳定下来后,其他都一致,但是源同步输出,窗口要小于altera的

我印象中,xilinx的k7,io特性应该很不错的,但是不知道为什么这样

3313063a12593d40e3865531945957d6.png

011ddaabdfa28f1bce430d8467bf8c80.png

54e090756b6182c8c48c19e2628cc584.png

4c20566660a3888e891d6fc87483ef22.png

76398337034525b7465df41cf14713fb.png

多周期不再详述,记忆语法是很困难,且容易出错的

相信经过之前的培训,应该已经懂如何根据时序报告,来检查自己的约束是否正确。

所以,多周期约束,可以自己试验一下,看看结果,再迭代一下

b38ac8df13a0f5715e2a87c9e6e21c0f.png

a9e5cc42f7ca7b60a854b58b6b61470f.png

b9a240badd208081accde578ffefc45b.png

28fc11e940373a7dec33bf1c0971d95a.png

d09a9ff1ecf1876ed07e1112634a8258.png

94e599a8ba483f700142adc1c0f8f33d.png
1.altera和xilinx的工程各一个,自行约束2.实际项目例子一个,包括自己搭工程,从datasheet里面提取信息

bea30b097858c8813ec2a77231173591.png

e2c15a0324b7e109d71e77533af01238.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值