前言
FPGA的IO口是芯片的重要组成部分之一,用于芯片与外围器件进行通信或控制外部电路。FPGA是可编程逻辑器件,只有程序加载后即进入“用户模式”后,FPGA的IO口才会按照程序设定进行操作,那么,在进入用户模式前,IO的状态也是需要了解的。
一、IO口的默认状态
FPGA的IO口默认状态是指刚上电或复位时,注意不要与芯片引脚配置时的上拉,下拉概念混淆,因为引脚配置也是程序的一部分,只有在用户模式才起作用。
FPGA的IO口默认状态是输入状态,即认为是input,为高阻态,此时IO口不会对外部设备产生任何影响。
二、实际芯片的IO状态
可以看一下芯片手册中如何说明上电过程到程序加载完成之前的IO口状态。
上图意思是芯片内部有控制上电复位的电路,当电压>1.06V时,上电复位电路开始工作,上电复位电路可以保证外部IO是高阻态。
我们知道,FPGA和CPLD的IO包括专用IO和普通IO,那么不同类型的IO上电时的状态也略有区别。
上面文档意思是:
普通IO的上电默认状态是三态+弱下拉;
PROGRAMN和JTAG这些特殊引脚是三态+弱上拉的。
因为PROGRAMN和JTAG是对上电配置有影响的引脚,如果上电配置程序的过程中有低电平输入会影响程序加载过程,有可能会导致程序加载失败。因此特殊引脚除了上电默认状态与普通IO不一样之外,在外部也应该按照官方推荐的外围电路进行设置
总结
芯片上电IO为高阻态,不对外部电路产生影响,电压Vcc和Vccio达到Vproup后PRO电路失效,外部IO不再受PRO电路控制,进入用户模式后,IO受控于程序。
需要注意的是本文是参照lattice的芯片手册,不同芯片厂家对上电过程中IO口状态设置是不同的,目前已知Altera, lattice,紫光的芯片是三态加弱下拉,而高云是三态+弱上拉。具体需要查询芯片手册。