FPGA和单片机一样,是一颗芯片,既然是芯片,就有一些内部资源。 Altera的FPGA最基本的资源是LE,通过查看Cyclone系列FPGA手册可以看到,一个LE主要包括了一个四输入查找表,也就是LUT,LUT本质上就是一个RAM。目前Cyclone系列使用4输入的LUT,所以每一个LUT可以看成一个有4位地址线的16x1的RAM。当用户用程序描述了一个逻辑电路以后,FPGA开发工具会自动计算逻辑电路的所有可能的结果,并把结果事先写入RAM,这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。除了一个四输入查找表以外,还有一个可编程寄存器,至于为什么说可编程,是因为可以通过程序来配置为异步或者同步触发器,具体的结构可以看Cyclone系列的芯片手册。我们通常看Altera的FPGA资源大小,就是看他有多少个LE。
Cyclone系列芯片里面16个LE组成一个LAB,而每个LAB都有LAB控制信号,按照顺序排列在FPGA内部,每个LAB内部之间的LE数据通信通过Register chain传输,每个LAB之间的通过行或者列互联信号通信,相连的LAB,或者LAB周围的RAM,乘法器,PLL都可以通过互联线号驱动其周围的LAB。
Cyclone系列的FPGA有内部的RAM,起初Cyclone和CycloneII系列的RAM采用的M4K,也就是说一个RAM块有4K个位,如果包括校验位,那么有4608位,可以配置为不同模式不同位宽的RAM或者ROM,而CycloneIII和CycloneIV系列的FPGA的RAM采用M9K,也就是每一块有9K数据,其实只有8192位,加上校验位的话为9216位,所以,一个M9K可以配置的RAM最大数据宽度为8192,当然,不管M4K还是M9K,都可以配置为不同模式的RAM或者ROM。这里的ROM数据,实际上是最后写到编译后的文件SOF文件或者POF文件里面去的,如果只是要修改ROM数据,可以通过指令直接修改SOF文件或者POF文件。而不需要再重新编译。
Cyclone系列FPGA还有硬件乘法器,18*18的乘法器,可以配置为2个9*9的乘法器 ,当数据宽度大于18时候,采用多个乘法器合并实现,我们在VHDL或者Verilog里面的乘号,Alte ra的在FPGA软件综合自动采用乘法器替代。
除此之外,Cyclone系列FPGA还有内部PLL,在CycloneIV之前的Cyclone系列的PLL,基本上都是通用的PLL,也就是说,可以对时钟进行倍频、分频或者移相,也可以将PLL时钟输出到专用的PLL输出管脚上,通常SDRAM的时钟都是由这些专用时钟驱动,但是注意,输入时钟是有范围的,具体可以见手册。而CycloneIV的GX系列FPGA内部集成收发器,每个收发器都有专用的PLL。从CycloneIII开始内部的PLL支持实时动态重配,具体的动态重配方法可以通过Altera的ALTPLL_RECONFIG核来实现。
值得注意的是,FPGA时钟是至关重要的,时钟的好坏直接关系到系统的稳定,可以打个比方,电源如一个系统的血液,时钟就是一个心脏。所以,无论是Altera还是Xilinx,都会在FPGA设计上面重点提到全局时钟等概念。
除了以上资源外,还有就是IO口资源,FPGA的IO口资源相当丰富,FPGA的IO可以根据REF电平不同接收或输出不同的电平标准的信号,如3.3V LVTTL,如2.5V的LVDS,LVPECL或者SSTL-2等,并且可以通过程序来设置驱动电流强弱,片内OTC,差分匹配,DDR输出等,CyclonreIII以及CycloneIV还支持片内上拉电阻,输入输出延时等。CycloneIV GX系列还带有高速收发器,PCIe硬核等。
另外,CycloneIII后的系列增加了一个在线重配模块SEU,这样,可以在线将配置程序少烧写到FPGA的配置芯片剩余的地方,FPGA自动通过该模块判断是否是可用程序以,如果是,FPGA可以用该模块将旧程序替换为新程序自己升级自己。类似于ARM德IAP。
以上就是Cyclone系列FPGA的一些基本资源,对于Stratix系列的FPGA,内部的资源相对于Cyclone系列的要更加丰富,功能更加强大,比如,逻辑资源不再是LE,二是ALM,不再是乘法器,而是DSP模块等,具体可以参看具体的芯片手册。
Cyclone系列芯片里面16个LE组成一个LAB,而每个LAB都有LAB控制信号,按照顺序排列在FPGA内部,每个LAB内部之间的LE数据通信通过Register chain传输,每个LAB之间的通过行或者列互联信号通信,相连的LAB,或者LAB周围的RAM,乘法器,PLL都可以通过互联线号驱动其周围的LAB。
Cyclone系列的FPGA有内部的RAM,起初Cyclone和CycloneII系列的RAM采用的M4K,也就是说一个RAM块有4K个位,如果包括校验位,那么有4608位,可以配置为不同模式不同位宽的RAM或者ROM,而CycloneIII和CycloneIV系列的FPGA的RAM采用M9K,也就是每一块有9K数据,其实只有8192位,加上校验位的话为9216位,所以,一个M9K可以配置的RAM最大数据宽度为8192,当然,不管M4K还是M9K,都可以配置为不同模式的RAM或者ROM。这里的ROM数据,实际上是最后写到编译后的文件SOF文件或者POF文件里面去的,如果只是要修改ROM数据,可以通过指令直接修改SOF文件或者POF文件。而不需要再重新编译。
Cyclone系列FPGA还有硬件乘法器,18*18的乘法器,可以配置为2个9*9的乘法器 ,当数据宽度大于18时候,采用多个乘法器合并实现,我们在VHDL或者Verilog里面的乘号,Alte ra的在FPGA软件综合自动采用乘法器替代。
除此之外,Cyclone系列FPGA还有内部PLL,在CycloneIV之前的Cyclone系列的PLL,基本上都是通用的PLL,也就是说,可以对时钟进行倍频、分频或者移相,也可以将PLL时钟输出到专用的PLL输出管脚上,通常SDRAM的时钟都是由这些专用时钟驱动,但是注意,输入时钟是有范围的,具体可以见手册。而CycloneIV的GX系列FPGA内部集成收发器,每个收发器都有专用的PLL。从CycloneIII开始内部的PLL支持实时动态重配,具体的动态重配方法可以通过Altera的ALTPLL_RECONFIG核来实现。
值得注意的是,FPGA时钟是至关重要的,时钟的好坏直接关系到系统的稳定,可以打个比方,电源如一个系统的血液,时钟就是一个心脏。所以,无论是Altera还是Xilinx,都会在FPGA设计上面重点提到全局时钟等概念。
除了以上资源外,还有就是IO口资源,FPGA的IO口资源相当丰富,FPGA的IO可以根据REF电平不同接收或输出不同的电平标准的信号,如3.3V LVTTL,如2.5V的LVDS,LVPECL或者SSTL-2等,并且可以通过程序来设置驱动电流强弱,片内OTC,差分匹配,DDR输出等,CyclonreIII以及CycloneIV还支持片内上拉电阻,输入输出延时等。CycloneIV GX系列还带有高速收发器,PCIe硬核等。
另外,CycloneIII后的系列增加了一个在线重配模块SEU,这样,可以在线将配置程序少烧写到FPGA的配置芯片剩余的地方,FPGA自动通过该模块判断是否是可用程序以,如果是,FPGA可以用该模块将旧程序替换为新程序自己升级自己。类似于ARM德IAP。
以上就是Cyclone系列FPGA的一些基本资源,对于Stratix系列的FPGA,内部的资源相对于Cyclone系列的要更加丰富,功能更加强大,比如,逻辑资源不再是LE,二是ALM,不再是乘法器,而是DSP模块等,具体可以参看具体的芯片手册。