1. 何为Tco
在FPGA中,Tco有两种:
(1) 触发器Tco
(2) 管脚输出Tco
触发器Tco由FPGA的器件速度等级,工艺决定。一般在几百ps左右。管脚输出Tco是指从输出触发器信号从管脚输出的延迟。本文指讨论管脚Tco。
2. Tco的作用
在FPGA和外部芯片由同步通信时,Tco是保证系统能够工作与设定频率的重要因素。假设当前A芯片输出信号到B芯片。为了能够使A芯片的数据达到B芯片,并且满足B芯片的setup/hold时间要求。必须保证 ,
A芯片的 Tco + B 芯片的 Tsu < T
3. Tco的组成
Tco的延迟有三部分组成:
输出触发器的触发器Tco
输出触发器输出管脚到IOE的走线延迟
IOE内部延迟
在这3个延迟中,触发器内部Tco非常小,只有几百个ps,相对于其他两个延迟,可以忽略不计。
4. Tco的优化
为了优化Tco , quartus 提供了一个优化选项,就是“ Fast Output Register “ 。 意思是使用IOE中的输出寄存器直接用于逻辑寄存器。这样可以减少输出寄存器到pad的走线距离,达到优化Tco的目的。
另外,quartus的Tco的计算方法和前面有所不同, quartus的Tco的计算如下所示:
输入时钟管脚和输出触发器时钟之间的skew
触发器内部Tco
触发器-> IOE -> pad延迟
可以看出,3小节提到的计算方法是以输出触发器的时钟为参考的延迟。 而quartus计算的方法是以时钟输入管脚为参考。
Quartus的分析如下所示:
Info: Slack time is 15 ps for clock "Clk[0]" between source register "out[3]~reg0" and destination pin "out[3]"
Info: + tco requirement for source register and destination pin is 5.000 ns
Info: - tco from clock to output pin is 4.985 ns
Info: + Longest clock path from clock "Clk[0]" to source register is 2.401 ns
Info: 1: + IC(0.000 ns) + CELL(1.469 ns) = 1.469 ns; Loc. = PIN_29; Fanout = 4; CLK Node = 'Clk[0]'
Info: 2: + IC(0.723 ns) + CELL(0.209 ns) = 2.401 ns; Loc. = IOC_X0_Y1_N0; Fanout = 1; REG Node = 'out[3]~reg0'
Info: Total cell delay = 1.678 ns ( 69.89 % )
Info: Total interconnect delay = 0.723 ns ( 30.11 % )
Info: + Micro clock to output delay of source is 0.664 ns
Info: + Longest register to pin delay is 1.920 ns
Info: 1: + IC(0.000 ns) + CELL(0.000 ns) = 0.000 ns; Loc. = IOC_X0_Y1_N0; Fanout = 1; REG Node = 'out[3]~reg0'
Info: 2: + IC(0.000 ns) + CELL(1.920 ns) = 1.920 ns; Loc. = PIN_59; Fanout = 0; PIN Node = 'out[3]'
Info: Total cell delay = 1.920 ns ( 100.00 % )
5. Tco使用分析
为了分析Tco写了如下一个例子来进行分析。
module cnt1(Clk,Reset_,in , out);
input [0:0] Clk;
input [0:0] Reset_;
input [3:0] in;
output [3:0] out;
reg [3:0] out;
always @(posedge Clk)
begin
if (!Reset_)
out<=0;
else
out<=in;
end
endmodule
该例子非常简单,仅仅是将输入数据打一拍输出。
Step1:
选用器件 EP1C6Q240C8 . Fmax = 80M. 没有使用任何约束和优化选项。
我们获得的结果Tco是:
Slack Required tco Actual tco From To From Clock
N/A None 6.838 ns out[0]~reg0 out[0] Clk[0]
N/A None 6.735 ns out[3]~reg0 out[3] Clk[0]
N/A None 6.734 ns out[2]~reg0 out[2] Clk[0]
N/A None 6.396 ns out[1]~reg0 out[1] Clk[0]
Step2:
选用器件 EP1C6Q240C6 . Fmax = 80M.没有使用任何约束和优化选项。
我们获得的结果Tco是:
Slack Required tco Actual tco From To From Clock
N/A None 5.254 ns out[0]~reg0 out[0] Clk[0]
N/A None 5.177 ns out[3]~reg0 out[3] Clk[0]
N/A None 5.175 ns out[2]~reg0 out[2] Clk[0]
N/A None 4.916 ns out[1]~reg0 out[1] Clk[0]
小结:
通过对比step1 和 step2 可以看出,选用的器件不同,Tco有着较大的差别。
Step3:
选用器件 EP1C6Q240C6 . Fmax = 80M. Tco约束 5ns . 没有优化选项。
我们获得的结果Tco是:
Slack Required tco Actual tco From To From Clock
N/A 5ns 4.985 ns out[0]~reg0 out[0] Clk[0]
N/A 5ns 4.985 ns out[3]~reg0 out[3] Clk[0]
N/A 5ns 4.985 ns out[2]~reg0 out[2] Clk[0]
N/A 5ns 4.985 ns out[1]~reg0 out[1] Clk[0]
Step4:
选用器件 EP1C6Q240C6 . Fmax = 80M. Tco约束 5ns,使能 “ Fast Output Register” .
我们获得的结果Tco是:
Slack Required tco Actual tco From To From Clock
N/A None 4.985 ns out[0]~reg0 out[0] Clk[0]
N/A None 4.985 ns out[3]~reg0 out[3] Clk[0]
N/A None 4.985 ns out[2]~reg0 out[2] Clk[0]
N/A None 4.985 ns out[1]~reg0 out[1] Clk[0]
Step4:
选用器件 EP1C6Q240C6 . Fmax = 80M. 没有约束,使能 “ Fast Output Register” .
我们获得的结果Tco是:
Slack Required tco Actual tco From To From Clock
N/A 5ns 4.985 ns out[0]~reg0 out[0] Clk[0]
N/A 5ns 4.985 ns out[3]~reg0 out[3] Clk[0]
N/A 5ns 4.985 ns out[2]~reg0 out[2] Clk[0]
N/A 5ns 4.985 ns out[1]~reg0 out[1] Clk[0]
小结:
从step3 , 4 , 5 和step1 , 2看出, 加上约束或者使能“ Fast Output Register” .使得Tco得到了很大的改善。
6. 结论
本文通过分析Tco的作用,组成,并且通过实际例子对比,获得使用约束,或者“ Fast Output Register”能较好的改善Tco的方法.
1楼
0
0
回复