FPGA(Field-Programmable Gate Array),即现场可编程门阵列,这是我们在很多地方都看见的解释FPGA的名词,但是到底是现场可编程门阵列呢?何时能用到现场可编程呢?今天我们看看怎么实现FPGA的现场可编程。
先假设一种应用场合:在某个场合中FPGA内部硬件电路需要根据外部条件实时更改,有几十种甚至上百种FPGA模型选择。每种模型使用LE都达到上万个,这时候我们不可能直接把所有电路做在一个工程中,这样使用的FPGA芯片容量太庞大,非常昂贵,而且电路胶合控制太复杂,这时候我们可以对每种FPGA模型进行分别生成配置文件,当根据实时状态现场更新FPGA电路。这样就可以采用小容量的FPGA实现,但是怎么实现现在可编程呢?这时候ALTERA FPGA的PS模式下载和FPP模式下载就有用了。
现在以cycloneIII器件来分析怎么使用PS模式更新FPGA代码。 首先FPGA下载配置模式应该要选择PS模式,从数据手册查到,连接MSEL[3..0]全部到地。即为选择PS模式下载,并且支持3.3/3.0/2.5的编程电压。
如下图所示,为ALTERA官方提供的PS模式下载示意电路:
由图上可以看出PS模式下载编程文件,只需要5个编程口,分别是: 1.CONF_DONE:编程数据完成指示脚; 2.nSTATUS: 编程状态指示; 3.DATA[0]: 编程数据; 4.nCONFIG: 编程模式进入脚; 5.DCLK: 编程时钟脚;(注意:cycloneIII DCLK编程时钟最高为133Mhz,而cycloneIII LS最高编程时钟为100Mhz) 编程时序如下:
从上图可以看出整个编程时序非常简单,直接输入数据即可,但是细心的人发现了这里还有个INIT_DONE管脚,当配置文件全部导入FPGA后,FPGA内部编程控制模块还需要使用编程数据对整个FPGA芯片电路进行修改,因此需要一段时间,如编程时序上的Tcd2um,即为编程模式转到用户模式下的延时时长,INIT_DONE即为指示编程完成的管脚。由于Tcd2um在每个器件都是有个时间范围的,只需要我们在编写控制时序时延时超过这个值即可,所以也可以省略掉INIT_DONE管脚使用。
如下图所示即为cycloneIII在配置完成后进入用户状态下的时间长短。
可以看出时长在300~650us,因此设置自己控制时序时长在700us即可进行用户操作。但是某些场合对时间要求非常高,不想白白等待700us,这个时候INIT_DONE即可作为判断信号,指示初始化完成。 查阅数据手册得知,INIT_DONE在cycloneIII系列芯片中处于BANK6,并且和IO口处于共用状态,怎么使用呢?
在Quartues->Assignment->Setting->....如下图所示,选取上INIT_DONE IO作为编程指示IO即可在编程过程中得到需要的指示信号。
以上步骤我们已经详细讲解了怎么使用PS对FPGA现场重配置。配置文件到底是什么呢?SOF?POF?都不是,配置文件为最原始的RBF二进制文件。 采用Quartues文件转换把SOF转换成RBF即可。 上面可以看出龙卷风未对FPP模式进行讨论,但是可以参考ALTERA硬件手册,给出如下时序图:
细心的读者发现了,起始FPP下载模式和PS下载模式完全一样,指示PS数据位为1位、FPP模式数据位为8位,仅此而已。
|