最近的项目纠结于负载电容(load capacitor)的问题。大家都认为FPGA IO的8pf寄生电容过大了,从而导致IO上的信号无法运行在我们预期的频率上。

抛开其他的不讲,我倒是对这个8pf的负载电容觉得很蹊跷。多大的负载电容就算大了?这得仔细想想了。

在数字电路中,信号从发送端传递到接受端可以视为一个充放电的过程。我们假设一种最典型的场景,即发送端是推拉发送电路而接收端是个高阻输入电路,并且接收端有寄生的电容。那么,发送端驱动高电平的时候将对接收端的电容进行充电过程,而发送端驱动低电平的时候就是让接收端的电容进行放电过程。

充放电过程可以有两种方式来实现:
1.恒流充电,即驱动器使用恒定的电流来对电容进行充放电,驱动器相当于恒流源。
2.恒压充电,即驱动器使用恒定的电压来对电容进行充放电,驱动器相当于恒压源。

那么两种情况下充放电的时间t是多少呢,这才是我们关心的。
对于情况1,t比较好计算 t=CV/I = Q/I其中C是电容的容量,V是充电目标电压,I是充电电流,Q是充电结束需要的总电荷量。
对于情况2,t的计算相对复杂,如下:因为 I=C*dV/dt; I = (V0-V)/R; 所以(V0-V)/R=C*dV/dt; 所以 RC*dV/dt + V = V0; 解这个微分方程得 V = V0(1-exp(-t/RC) 而