大部分的FPGA设计是纯数字的,通常也是同步的。但是偶尔也需要特殊的异步电路:一个按键去抖器,输入斯密特触发器,低频振荡器、倍频器、输出电压增压器或真正的异步时钟多路选择器。如果没有适当地实现,这些看来普通的电路会引起不小的麻烦。这里有六个验证了的设计在特定的条件下可以方便使用。
1. SPDT开关消抖器
将一个开关与高速的CMOS逻辑连接并非易事。任何机械的开关在闭合时(甚至打开时)都会有抖动,这种抖动可能会持续很多毫秒。最安全的接法是将一个双掷开关接在CMOS锁存器的置位和复位端。下面的电路在一个被用作锁存器的I/O中使用了反馈,这样就只需要一个管脚。
用低驱动强度配置输出以最小化相对于电流尖峰的短接变化。
2. 可调施密特触发器(Schmitt Trigger)
这个电路提供了可调的输入迟滞。爬升和下降的输入电压差的阈值等于供电电压乘以两个电阻之比。
3. 稳定的RC振荡器可靠启动和运行
这个RC振荡器是一个一阶的,对Vcc,输入阈值和温度的变化不敏感。这个振荡器在外界环境的任何组合下都可启动和运行-不能停止。内部锁存器防止当输入缓慢通过输入阈值时产生快的双脉冲。唯一的缺点是需要三个专门的器件管脚。
This circuit was tested with R = 470 kilohm and C = 0.01 microfarad (10,000 pF). Over a wide temperature range of -40 to +100 degrees C, the frequency varied between 93.9 and 108.1 Hz, with a duty cycle between 48.1 % and 48.7 % (!). Some of the frequency variation may be due to the temperature coefficient of the external components.
These experimental results suggest that f = 0.47 / RC
4. 时钟频率倍频
如果所产生的2f时钟能够容忍由于不完备的输入占空比所导致的周期间的抖动,则输入信号在频率上可以被加倍。下面的电路相应于输入的每个变化产生一个输出脉冲。
输出的上升沿相对于输入变化被延时一个TILO时间。输出的高电平的时间是时钟到Q端的延时加上两个TILO延时,在高速的器件中大约是2 ns。这个输出脉冲可以可靠地作为同一硅片的其它触发器的时钟。(在低温和高VCC电压下,脉冲将会更短,但是触发器的响应在这些条件下也更快。)
任何防止触发器翻转的控制输入信号都会使输出频率变为fout = fin。
这个异步电路是所有真正的数字电路的设计人员所不赞成的。这只能被用作最后采取的工具。注意,如果输入频率大于25MHz,在所有的Virtex或Spartan-II器件中的DLL或DCM都免费提供倍频。下面的倍频器电路没有最小频率的限制。
5. 用3.3V输出驱动一个5V的信号
当一个CMOS电平5V的输入被驱动时,来自3.3V器件的输出高电压是勉强够格的。如果 3.3V的输出是5V容忍的,一个上拉到5V的上拉电阻能够将处于三态条件下的输出总是拉到5V。问题是长达数十或数百纳秒的上升时间,这是由于容性负载所导致的。 这个电路通过使上拉在输出电压超过阈值电压1.6V时才起作用来大大减少上升时间。减慢内部的输入信号和两输入与门会更加加快上升时间。(要了解更多信息,参见 这里。)
该电路也可用于加速2.5V和3.3V器件之间的接口。
6. 两个不相关时钟间的异步切换
两个不相关的时钟频率之间的异步切换会产生runt脉冲和毛刺使得系统不可靠。下面所示的电路揭示了这些问题的一个解决办法。
当选择(SELECT)输入稳定的时候(或者为高电平或者为低电平),这两个控制触发器处于相反的状态,两个时钟输入中的一个驱动时钟输出。
当选择(SELECT)输入变化时,这个影响要等到原来的选择的时钟源的下一个下降沿复位它的控制触发器之后才会有。输出时钟信号然后会保持低电平直到新选择时钟的下一个下降沿置位它的控制触发器,使得新选择的时钟来驱动输出时钟。
任何时钟切换都开始于原来选择的时钟变低时,输出时钟然后会保持低电平直到新选择的时钟先变低然后再变高。再也不会出现runt脉冲或输出毛刺。
如果选择(SELECT)输入的时序导致控制触发器进入亚稳态,这并不会有影响,因为输出时钟被输入时钟驱动为低电平(而不管控制触发器的状态)。亚稳态必须在时钟的低电平期间内得以恢复。现代的触发器会在少于2ns时间内从亚稳态中恢复(参见2002年10月的技术报告" Virtex-II ProTM 触发器的亚稳态时延和两次失效之间的平均时间")。
这个电路假定是上升沿触发的,它要求两个时钟都要自由运行。